Commit 4a17ca5

mo khan <mo@mokhan.ca>
2014-11-10 04:19:56
add ability to edit a video.
1 parent 66bfa27
app/assets/javascripts/controllers/video_controller.js.coffee
@@ -0,0 +1,2 @@
+App.VideoController = Ember.ObjectController.extend()
+
app/assets/javascripts/controllers/video_edit_controller.js.coffee
@@ -0,0 +1,4 @@
+App.VideoEditController = Ember.ObjectController.extend
+  actions:
+    saveChanges: ->
+      @get('model').save() if @get('model.isDirty')
app/assets/javascripts/templates/video/edit.hbs
@@ -0,0 +1,12 @@
+<h2>Edit</h2>
+
+<p>
+  <label for="">Title</label>
+  <br />
+  <input type="text" name="" id="" value="{{model.title}}" />
+</p>
+<p>
+  {{ view Ember.TextArea value=model.description }}
+</p>
+
+<input type="submit" value="Save" {{action 'saveChanges'}} />
app/assets/javascripts/templates/video.hbs
@@ -1,4 +1,5 @@
 <h3>Video {{title}}</h3>
+{{#link-to 'video.edit' this.id}}edit{{/link-to}}
 <p>{{description}}</p>
 <a href="{{uri}}">{{uri}}</a>
 {{outlet}}
app/assets/javascripts/application.js.coffee
@@ -13,7 +13,6 @@
 #= require jquery
 #= require jquery_ujs
 #= require bootstrap
-#= require jquery
 #= require handlebars
 #= require ember
 #= require ember-data
app/assets/javascripts/router.js.coffee
@@ -5,4 +5,5 @@ App.Router.map ()->
   @route "profile", { path: "/profile" }
   @route "help", { path: "/help" }
   @resource 'videos', ->
-    @resource 'video', { path: ':video_id' }
+    @resource 'video', { path: ':video_id' }, ->
+      @route 'edit'
app/controllers/videos_controller.rb
@@ -7,6 +7,11 @@ class VideosController < ApplicationController
     @video = current_user.videos.create!(video_params)
   end
 
+  def update
+    @video = current_user.videos.find(params[:id])
+    @video.update(video_params)
+  end
+
   private
 
   def video_params
app/views/videos/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.video do
+  json.partial! @video, video: @video
+end
config/routes.rb
@@ -1,6 +1,6 @@
 Mocode::Application.routes.draw do
   resources :sessions, only: [:new, :create, :destroy]
-  resources :videos, only: [:index, :create]
+  resources :videos, only: [:index, :create, :update]
   get 'dashboard', to: 'dashboard#index'
   root 'dashboard#index'
   # The priority is based upon order of creation: first created -> highest priority.
spec/controllers/videos_controller_spec.rb
@@ -32,4 +32,26 @@ describe VideosController do
       expect(json['video']['uri']).to eql("http://youtu.be/jghvdDB-t30?list=PLYuXlc3r66uFJErV5rYpZRcD8oDGtQlQc")
     end
   end
+
+  context "#update" do
+    render_views
+    let(:video) { create(:video, user: user_session.user) }
+
+    it 'updates the video' do
+      xhr :put, :update, id: video.id, video: { title: 'hello', description: 'blah', uri: 'http://youtu.be/blah' }
+      video.reload
+      expect(video.title).to eql('hello')
+      expect(video.description).to eql('blah')
+      expect(video.uri).to eql('http://youtu.be/blah')
+    end
+
+    it 'responds with the proper json' do
+      xhr :put, :update, id: video.id, video: { title: 'hello', description: 'blah', uri: 'http://youtu.be/blah' }
+      json = JSON.parse(response.body)
+      expect(json['video']['id']).to eql(video.id)
+      expect(json['video']['title']).to eql('hello')
+      expect(json['video']['description']).to eql('blah')
+      expect(json['video']['uri']).to eql("http://youtu.be/blah")
+    end
+  end
 end