Commit 3cc9bca

mo khan <mo@mokhan.ca>
2014-11-10 17:09:41
add page to create a new application.
1 parent 05ba97a
Changed files (9)
app/assets/javascripts/controllers/applications_new.js.coffee
@@ -0,0 +1,10 @@
+App.ApplicationsNewController = Ember.Controller.extend
+  actions:
+    createApplication: ->
+      fields = @get('fields')
+      if App.Application.valid(fields)
+        application = @store.createRecord('application', @get('fields'))
+        application.save().then =>
+          @transitionTo('application', application)
+      else
+        @set('showError', true)
app/assets/javascripts/models/application.js.coffee
@@ -1,2 +1,6 @@
 App.Application = DS.Model.extend
   name: DS.attr('string')
+
+App.Application.reopenClass
+  valid: (fields) ->
+    fields.name
app/assets/javascripts/routes/applications_new_route.js.coffee
@@ -0,0 +1,4 @@
+App.ApplicationsNewRoute = Ember.Route.extend
+  setupController: (controller) ->
+    controller.set('fields', {})
+    controller.set('showError', false)
app/assets/javascripts/templates/applications/new.hbs
@@ -0,0 +1,14 @@
+<h1>New Application</h1>
+{{#if showError}}
+<p>Application must have a name.</p>
+{{/if}}
+<form>
+<fieldset>
+  <dl>
+    <dt><label>Name:</label></dt>
+    <dd>{{view Ember.TextField value=fields.name}}</dd>
+  </dl>
+</fieldset>
+</form>
+
+<input type="submit" value="Create" {{action 'createApplication'}} />
app/assets/javascripts/templates/videos/new.hbs
@@ -15,6 +15,7 @@
   <dl>
     <dt><label>Description:</label></dt>
     <dd>{{view Ember.TextArea value=fields.description}}</dl>
+  </dl>
 </fieldset>
 </form>
 
app/controllers/applications_controller.rb
@@ -2,4 +2,15 @@ class ApplicationsController < ApplicationController
   def index
     @applications = Application.all
   end
+
+  def create
+    Application.create!(application_params)
+    render nothing: true
+  end
+
+  private
+
+  def application_params
+    params.require(:application).permit(:name)
+  end
 end
app/views/applications/index.json.jbuilder
@@ -1,4 +1,4 @@
 json.applications @applications do |application|
   json.id application.id
-  json.title application.title
+  json.name application.name
 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 :applications, only: [:index]
+  resources :applications, only: [:index, :create]
   get 'dashboard', to: 'dashboard#index'
   root 'dashboard#index'
   # The priority is based upon order of creation: first created -> highest priority.
spec/controllers/applications_controller_spec.rb
@@ -16,4 +16,13 @@ describe ApplicationsController do
       expect(assigns(:applications)).to include(application)
     end
   end
+
+  describe "#create" do
+    it 'creates a new application' do
+      xhr :post, :create, application: { name: 'blah' }
+
+      expect(Application.count).to eql(1)
+      expect(Application.last.name).to eql('blah')
+    end
+  end
 end