Commit cd167c4

mo khan <mo@mokhan.ca>
2014-11-11 03:29:08
add ability to edit a service.
1 parent 59dc5a5
Changed files (9)
app/assets/javascripts/controllers/service_edit.js.coffee
@@ -0,0 +1,15 @@
+App.ServiceEditController = Ember.ObjectController.extend
+  actions:
+    saveChanges: ->
+      if @get('model.isDirty')
+        @get('model').save().then => @transitionToRoute('service')
+      else
+        @transitionToRoute('service')
+
+    cancel: ->
+      @get('model').rollback()
+      @transitionToRoute('service')
+
+  showUnsavedMessage: (->
+    @get('isDirty') and !@get('isSaving')
+  ).property('isDirty', 'isSaving')
app/assets/javascripts/routes/service_edit.js.coffee
@@ -0,0 +1,3 @@
+App.ServiceEditRoute = Ember.Route.extend
+  activate: -> @controllerFor('service').set('isEditing', true)
+  deactivate: -> @controllerFor('service').set('isEditing', false)
app/assets/javascripts/templates/service/edit.hbs
@@ -0,0 +1,16 @@
+<h2><small>Edit</small> {{model.name}}</h2>
+
+<p>
+  <label for="">Name</label>
+  <br />
+  {{view Ember.TextField value=model.name}}
+</p>
+
+<input type="submit" value="Save" {{action 'saveChanges'}} />
+<a href="#"{{action 'cancel'}}>cancel</a>
+{{#if showUnsavedMessage}}
+  <p class="unsaved">unsaved changes</p>
+{{/if}}
+{{#if isSaving}}
+  <p class="saving">saving...</p>
+{{/if}}
app/assets/javascripts/templates/service.hbs
@@ -1,4 +1,5 @@
 <h3>{{name}}</h3>
+{{#link-to 'service.edit' this}}edit{{/link-to}}
 <a href="#" {{action "deleteService"}}>delete</a>
 
 {{#link-to 'service.environments' this}}environments{{/link-to}}
app/assets/javascripts/router.js.coffee
@@ -11,6 +11,7 @@ App.Router.map ()->
   @resource 'services', ->
     @route 'new'
     @resource 'service', { path: ':service_id' }, ->
+      @route 'edit'
       @route 'environments', ->
         @route 'new'
         @resource 'environment', { path: ':environment_id' }
app/controllers/services_controller.rb
@@ -4,7 +4,12 @@ class ServicesController < ApplicationController
   end
 
   def create
-    @service = Service.create!(application_params)
+    @service = Service.create!(service_params)
+  end
+
+  def update
+    @service = Service.find(params[:id])
+    @service.update!(service_params)
   end
 
   def destroy
@@ -14,7 +19,7 @@ class ServicesController < ApplicationController
 
   private
 
-  def application_params
+  def service_params
     params.require(:service).permit(:name)
   end
 end
app/views/services/update.json.jbuilder
@@ -0,0 +1,3 @@
+json.service do
+  json.partial! @service, service: @service
+end
config/routes.rb
@@ -1,7 +1,7 @@
 Erkell::Application.routes.draw do
   resources :sessions, only: [:new, :create, :destroy]
   resources :videos, only: [:index, :create, :update, :destroy]
-  resources :services, only: [:index, :create, :destroy]
+  resources :services, only: [:index, :create, :update, :destroy]
   resources :environments, only: [:index, :show, :create, :destroy]
 
   get 'dashboard', to: 'dashboard#index'
spec/controllers/services_controller_spec.rb
@@ -34,4 +34,14 @@ describe ServicesController do
       expect(Service.count).to eql(0)
     end
   end
+
+  describe "#update" do
+    let(:service) { create(:service) }
+
+    it 'updates the service' do
+      xhr :put, :update, id: service.id, service: { name: 'new name' }
+      service.reload
+      expect(service.name).to eql('new name')
+    end
+  end
 end