Commit 7757b66a
Changed files (16)
app
assets
javascripts
backbone
controllers
models
templates
tutorials
views
controllers
api
models
views
api
v1
tutorials
shared
config
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
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