Commit 4a17ca5
Changed files (10)
app
assets
javascripts
controllers
views
videos
config
spec
controllers
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