summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2014-06-16 22:41:03 -0600
committermo khan <mo@mokhan.ca>2014-06-16 22:41:03 -0600
commitf4019798d29b352c9d8c6f2e42dd210de6a02e11 (patch)
tree940c93eeca8eea0bccace42ded2d50b2c01a7155
parente5b8e39f44fec0b6a3ec9cbfecdd7e744cf2db9f (diff)
upload new photos using backbone.
-rw-r--r--app/assets/javascripts/backbone/models/photo.js.coffee2
-rw-r--r--app/assets/javascripts/backbone/routers/photos_router.js.coffee6
-rw-r--r--app/assets/javascripts/backbone/templates/photos/new.jst.ejs30
-rw-r--r--app/assets/javascripts/backbone/views/cakes/new_view.js.coffee2
-rw-r--r--app/controllers/api/v1/photos_controller.rb13
-rw-r--r--app/views/api/v1/photos/_photo.json.jbuilder12
-rw-r--r--app/views/api/v1/photos/create.json.jbuilder1
-rw-r--r--config/routes.rb2
8 files changed, 45 insertions, 23 deletions
diff --git a/app/assets/javascripts/backbone/models/photo.js.coffee b/app/assets/javascripts/backbone/models/photo.js.coffee
index c4f9bf3a..5b52d3a2 100644
--- a/app/assets/javascripts/backbone/models/photo.js.coffee
+++ b/app/assets/javascripts/backbone/models/photo.js.coffee
@@ -11,4 +11,4 @@ class Cake.Collections.PhotosCollection extends Backbone.Collection
url: '/api/v1/cakes/1/photos'
initialize: (options) ->
- console.log(options)
+ @url="/api/v1/cakes/#{options.cake_id}/photos"
diff --git a/app/assets/javascripts/backbone/routers/photos_router.js.coffee b/app/assets/javascripts/backbone/routers/photos_router.js.coffee
index 4b710a43..fd4000a3 100644
--- a/app/assets/javascripts/backbone/routers/photos_router.js.coffee
+++ b/app/assets/javascripts/backbone/routers/photos_router.js.coffee
@@ -1,15 +1,13 @@
class Cake.Routers.PhotosRouter extends Backbone.Router
- initialize: (options) ->
- @photos = new Cake.Collections.PhotosCollection()
-
routes:
- ":cake_id/photos/new" : "newPhoto"
+ "cakes/:cake_id/photos/new" : "newPhoto"
"photos/index" : "index"
"photos/:id/edit" : "edit"
"photos/:id" : "show"
"photos/.*" : "index"
newPhoto: (cake_id) ->
+ @photos = new Cake.Collections.PhotosCollection(cake_id: cake_id)
@view = new Cake.Views.Photos.NewView(collection: @photos)
$("#backbone-content").html(@view.render().el)
diff --git a/app/assets/javascripts/backbone/templates/photos/new.jst.ejs b/app/assets/javascripts/backbone/templates/photos/new.jst.ejs
index 3fec3308..2f66004e 100644
--- a/app/assets/javascripts/backbone/templates/photos/new.jst.ejs
+++ b/app/assets/javascripts/backbone/templates/photos/new.jst.ejs
@@ -1,20 +1,18 @@
-<h1>New photo</h1>
-
-<form id="new-photo" name="photo">
- <div class="field">
- <label for="thumb_url"> thumb_url:</label>
- <input type="text" name="thumb_url" id="thumb_url" value="<%= thumb_url %>" >
- </div>
-
- <div class="field">
- <label for="large_url"> large_url:</label>
- <input type="text" name="large_url" id="large_url" value="<%= large_url %>" >
- </div>
-
- <div class="actions">
- <input type="submit" value="Create Photo" />
- </div>
+<h1>Upload photo</h1>
+<form id="new-photo" name="photo" class="form-horizontal">
+ <fieldset>
+ <div class="control-group">
+ <label class="control-label" for="photo_image">Photo</label>
+ <div class="controls">
+ <input class="input-xxlarge" id="photo_image" name="image" type="file">
+ </div>
+ </div>
+ <div class="form-actions">
+ <button type="submit" class="btn btn-primary">Upload Photo</button>
+ <a href="#/" class="btn">Cancel</a>
+ </div>
+ </fieldset>
</form>
<a href="#/index">Back</a>
diff --git a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
index dcaba3db..1cfd50c5 100644
--- a/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
+++ b/app/assets/javascripts/backbone/views/cakes/new_view.js.coffee
@@ -23,7 +23,7 @@ class Cake.Views.Cakes.NewView extends Backbone.View
@collection.create(@model.toJSON(),
success: (cake) =>
@model = cake
- window.location.hash = "/#{@model.id}/photos/new"
+ window.location.hash = "/cakes/#{@model.id}/photos/new"
error: (cake, jqXHR) =>
#@model.set({errors: $.parseJSON(jqXHR.responseText)})
diff --git a/app/controllers/api/v1/photos_controller.rb b/app/controllers/api/v1/photos_controller.rb
index a9e9e639..cf8a847b 100644
--- a/app/controllers/api/v1/photos_controller.rb
+++ b/app/controllers/api/v1/photos_controller.rb
@@ -2,6 +2,19 @@ module Api
module V1
class PhotosController < ApiController
respond_to :json
+
+ def create
+ cake_id = params[:cake_id]
+ UploadPhoto.new.run(cake_id, photo_params)
+ @photo = Creation.find(cake_id).photos.last
+ respond_with(@photo)
+ end
+
+ private
+
+ def photo_params
+ params.require(:photo).permit(:image)
+ end
end
end
end
diff --git a/app/views/api/v1/photos/_photo.json.jbuilder b/app/views/api/v1/photos/_photo.json.jbuilder
new file mode 100644
index 00000000..4eb34eed
--- /dev/null
+++ b/app/views/api/v1/photos/_photo.json.jbuilder
@@ -0,0 +1,12 @@
+json.id photo.id
+json.id photo.creation_id
+json.content_type photo.content_type
+json.original_filename photo.original_filename
+json.latitude photo.latitude
+json.longitude photo.longitude
+json.sha256 photo.sha256
+json.thumb_url photo.url_for(:thumb)
+json.large_url photo.url_for(:large)
+json.original_url photo.url_for(:original)
+json.created_at photo.created_at
+json.updated_at photo.updated_at
diff --git a/app/views/api/v1/photos/create.json.jbuilder b/app/views/api/v1/photos/create.json.jbuilder
new file mode 100644
index 00000000..bec05b46
--- /dev/null
+++ b/app/views/api/v1/photos/create.json.jbuilder
@@ -0,0 +1 @@
+json.partial! 'photo', photo: @photo
diff --git a/config/routes.rb b/config/routes.rb
index 11ff0ae8..bb864448 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -47,7 +47,7 @@ Cake::Application.routes.draw do
namespace :api, :defaults => { :format => 'json' } do
namespace :v1 do
resources :cakes, :only => [:index, :show, :create, :update] do
- resources :photos, :only => [:index]
+ resources :photos, :only => [:create]
end
resources :logins, :only => [:create]
end