Skip to content

Instantly share code, notes, and snippets.

@jjhageman
Last active September 24, 2018 01:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jjhageman/914157 to your computer and use it in GitHub Desktop.
Save jjhageman/914157 to your computer and use it in GitHub Desktop.
Controller to handle JSON API POSTs
class Api::ItemsController < ApplicationController
respond_to :json
def create
begin
puts "params: #{params}"
post_data = params[:item_post].is_a?(String) ? JSON.parse(params[:item_post]) : params[:item_post]
user_data = post_data['user'] || {}
item_data = post_data['item'] || {}
puts "post_data: #{post_data}"
puts "user_data: #{user_data}"
puts "item_data: #{item_data}"
if user_data['uid'] && user_data['provider']
@user = User.find_by_provider_and_uid(user_data['provider'], user_data['uid'])
elsif user_data['token']
@user = User.create_with_token(user_data['token'])
elsif user_data['email']
@user = User.find_by_email(user_data['email'])
end
if @user
@item = @user.items.new(item_data)
else
@item = Item.new(item_data)
@item.reply_email = user_data['email']
end
if @item.save
if post_data['item_images']
post_data['item_images'].each_value do |item_image|
@item.images.create(item_image)
end
end
respond_with(@item, :location => item_url(@item), :status => :created)
else
puts "Errors 1: #{@item.errors}"
respond_with(@item.errors)
end
rescue => e
puts "Errors 2: #{e.message}"
respond_with(e.message, :status => :unprocessable_entity)
end
end
end
require 'spec_helper'
describe Api::ItemsController do
describe "response" do
before(:each) do
@iphone_json = "{
\"item\":{
\"title\":\"Apple TV\",
\"price\":\"45.50\",
\"description\":\"Dual-Shielded High Speed HDMI Cable with Ethernet 2M are sold yesterday\",
\"zipcode\":\"94102\"
},
\"user\":{
\"email\":\"user@email.com\"
}
}"
end
context "valid item" do
it "should respond with the item" do
post :create, :item_post => @iphone_json, :format => :json
response.should be_http_ok
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment