app/controllers/spree/api/orders_controller.rb in spree_api-2.0.8 vs app/controllers/spree/api/orders_controller.rb in spree_api-2.0.9

- old
+ new

@@ -1,11 +1,11 @@ module Spree module Api class OrdersController < Spree::Api::BaseController respond_to :json - before_filter :authorize_read!, :except => [:index, :search, :create] + before_filter :find_and_authorize!, :except => [:index, :search, :create] def index # should probably look at turning this into a CanCan step raise CanCan::AccessDenied unless current_api_user.has_spree_role?("admin") @orders = Order.ransack(params[:q]).result.page(params[:page]).per(params[:per_page]) @@ -17,37 +17,36 @@ end def create nested_params[:line_items_attributes] = sanitize_line_items(nested_params[:line_items_attributes]) @order = Order.build_from_api(current_api_user, nested_params) - respond_with(order, :default_template => :show, :status => 201) + respond_with(@order, :default_template => :show, :status => 201) end def update - authorize! :update, Order # Parsing line items through as an update_attributes call in the API will result in # many line items for the same variant_id being created. We must be smarter about this, # hence the use of the update_line_items method, defined within order_decorator.rb. line_items_params = sanitize_line_items(nested_params.delete("line_items_attributes")) - if order.update_attributes(nested_params) - order.update_line_items(line_items_params) - order.line_items.reload - order.update! - respond_with(order, :default_template => :show) + if @order.update_attributes(nested_params) + @order.update_line_items(line_items_params) + @order.line_items.reload + @order.update! + respond_with(@order, :default_template => :show) else - invalid_resource!(order) + invalid_resource!(@order) end end def cancel - order.cancel! + @order.cancel! render :show end def empty - order.empty! - order.update! + @order.empty! + @order.update! render :text => nil, :status => 200 end private @@ -68,23 +67,25 @@ end end line_item_attributes = Hash[line_item_attributes].delete_if { |k,v| v.empty? } end - def order - @order ||= Order.find_by_number!(params[:id]) + def find_order(lock = false) + @order = Spree::Order.lock(lock).find_by_number!(params[:id]) + authorize! :update, @order, params[:order_token] end def next!(options={}) if @order.valid? && @order.next render :show, :status => options[:status] || 200 else render :could_not_transition, :status => 422 end end - def authorize_read! - authorize! :read, order + def find_and_authorize! + find_order(true) + authorize! :read, @order end end end end