Commit 7757b66a

mo khan <mo@mokhan.ca>
2014-07-09 04:30:18
add a my#tutorials tab.
1 parent 21f8493
app/assets/javascripts/backbone/controllers/tutorials_controller.js.coffee
@@ -0,0 +1,8 @@
+class CakeSide.Controllers.TutorialsController extends Marionette.Controller
+  views: CakeSide.Views.Tutorials
+  initialize: (options) ->
+    @content_region = CakeSide.Application.content_region
+    @tutorials = CakeSide.Application.request('TutorialsRepository')
+
+  index: ->
+    @content_region.show(new @views.IndexView(collection: @tutorials))
app/assets/javascripts/backbone/models/tutorials.js.coffee
@@ -0,0 +1,9 @@
+class CakeSide.Models.Tutorial extends Backbone.Model
+  paramRoot: 'tutorial'
+
+  defaults:
+    id: null
+
+class CakeSide.Collections.TutorialsCollection extends Backbone.Collection
+  model: CakeSide.Models.Tutorial
+  url: '/api/v1/tutorials'
app/assets/javascripts/backbone/routers/cakes_router.js.coffee
@@ -4,4 +4,3 @@ class CakeSide.Routers.CakesRouter extends Marionette.AppRouter
     "cakes/:id/edit": "edit"
     "cakes/:id": "show"
     "cakes": "index"
-
app/assets/javascripts/backbone/routers/tutorials_router.js.coffee
@@ -0,0 +1,3 @@
+class CakeSide.Routers.TutorialsRouter extends Marionette.AppRouter
+  appRoutes:
+    "tutorials": "index"
app/assets/javascripts/backbone/templates/tutorials/no_tutorials.jst.ejs
@@ -0,0 +1,1 @@
+<p>You have no tutorials. <a href="#tutorials/new">Get Started</a></p>
app/assets/javascripts/backbone/templates/tutorials/tutorial.jst.ejs
@@ -0,0 +1,7 @@
+<div class="thumbnail">
+  <a href="#tutorials/<%= id %>"><img src="<%= image_url %>" /></a>
+  <div class="caption">
+    <h3><a href="#tutorials/<%= id %>"><%= heading %></a></h3>
+    <p><%= description %></p>
+  </div>
+</div>
app/assets/javascripts/backbone/views/tutorials/index_view.js.coffee
@@ -0,0 +1,9 @@
+#= require backbone/views/tutorials/no_tutorials_view
+#= require backbone/views/tutorials/tutorial_view
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.IndexView extends Marionette.CollectionView
+  childView: CakeSide.Views.Tutorials.TutorialView
+  emptyView: CakeSide.Views.Tutorials.NoTutorialsView
+  className: 'thumbnails'
+  tagName: 'ul'
app/assets/javascripts/backbone/views/tutorials/no_tutorials_view.js.coffee
@@ -0,0 +1,5 @@
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.NoTutorialsView extends Marionette.ItemView
+  template: JST['backbone/templates/tutorials/no_tutorials']
+  tagName: 'li'
app/assets/javascripts/backbone/views/tutorials/tutorial_view.js.coffee
@@ -0,0 +1,6 @@
+CakeSide.Views.Tutorials ||= {}
+
+class CakeSide.Views.Tutorials.TutorialView extends Marionette.ItemView
+  template: JST['backbone/templates/tutorials/tutorial']
+  tagName: 'li'
+  className: 'span3'
app/assets/javascripts/backbone/cakeside.js.coffee
@@ -26,6 +26,8 @@ window.CakeSide =
         controller: new CakeSide.Controllers.CakesController()
       new CakeSide.Routers.PhotosRouter
         controller: new CakeSide.Controllers.PhotosController()
+      new CakeSide.Routers.TutorialsRouter
+        controller: new CakeSide.Controllers.TutorialsController()
 
     CakeSide.Application.on 'start', ->
       if Backbone.history
@@ -34,6 +36,8 @@ window.CakeSide =
     @cakes = new CakeSide.Collections.CakesCollection()
     @categories = new CakeSide.Collections.CategoriesCollection()
     @categories.fetch(reset: true)
+    @tutorials = new CakeSide.Collections.TutorialsCollection()
+    @tutorials.fetch(reset: true)
 
     @disqus_view = new CakeSide.Views.DisqusView
       disqus_shortname: data.disqus_shortname
@@ -52,6 +56,8 @@ window.CakeSide =
         @photos_cache[cake_id] = photos
         photos.fetch(reset: true)
         photos
+    CakeSide.Application.reqres.setHandler 'TutorialsRepository', =>
+      @tutorials
 
     @cakes.fetch(reset: true).done ->
       CakeSide.Application.start()
app/controllers/api/v1/tutorials_controller.rb
@@ -0,0 +1,11 @@
+module Api
+  module V1
+    class TutorialsController < ApiController
+      respond_to :json
+
+      def index
+        respond_with(@tutorials = current_user.tutorials)
+      end
+    end
+  end
+end
app/models/user.rb
@@ -9,8 +9,8 @@ class User < ActiveRecord::Base
   has_many :creations, :dependent => :destroy
   has_many :favorites, :dependent => :destroy
   has_many :tutorials, :dependent => :destroy
-  has_many :activities
-  has_many :comments
+  has_many :activities, dependent: :destroy
+  has_many :comments, dependent: :destroy
   has_and_belongs_to_many :interests, :join_table => 'users_interests', :autosave => true
   has_one :avatar
   acts_as_tagger
app/views/api/v1/tutorials/_tutorial.json.jbuilder
@@ -0,0 +1,7 @@
+json.id tutorial.id
+json.heading tutorial.heading
+json.description tutorial.description
+json.url tutorial.url
+json.image_url tutorial.image_url
+json.author tutorial.author
+json.author_url tutorial.author_url
app/views/api/v1/tutorials/index.json.jbuilder
@@ -0,0 +1,3 @@
+json.array! @tutorials do |tutorial|
+  json.partial! 'tutorial', tutorial: tutorial
+end
app/views/shared/_account_nav.html.erb
@@ -3,6 +3,7 @@
     <ul class="nav nav-tabs">
       <li class="<%= selected == :dashboard ? "active" : "" %>"><%= link_to "Dashboard", my_dashboard_path %></li>
       <li class="<%= selected == :creations ? "active" : "" %>"><%= link_to "Creations", my_root_path(anchor: 'cakes') %></li>
+      <li class=""><a href="#tutorials">Tutorials</a></li>
       <li class="<%= selected == :favorites ? "active" : "" %>"><%= link_to "Favorites", my_favorites_path %></li>
       <li class="<%= selected == :basic_info ? "active" : "" %>"><%= link_to "Settings", my_settings_path %></li>
       <li class="<%= selected == :password ? "active" : "" %>"><%= link_to "Password", my_passwords_path %></li>
config/routes.rb
@@ -50,6 +50,7 @@ Cake::Application.routes.draw do
         resources :photos, only: [:index, :show, :create]
       end
       resources :categories, only: [:index]
+      resources :tutorials, only: [:index]
       resources :logins, :only => [:create]
     end
   end