/api/app/controllers/spree/api/orders_controller.rb

https://github.com/joshnuss/spree-1 · Ruby · 88 lines · 71 code · 13 blank · 4 comment · 6 complexity · 6164534aa1798aad3ce5a0b06448054a MD5 · raw file

  1. module Spree
  2. module Api
  3. class OrdersController < Spree::Api::BaseController
  4. # Dynamically defines our stores checkout steps to ensure we check authorization on each step.
  5. Order.checkout_steps.keys.each do |step|
  6. define_method step do
  7. find_order
  8. authorize! :update, @order, params[:token]
  9. end
  10. end
  11. def cancel
  12. find_order
  13. authorize! :update, @order, params[:token]
  14. @order.cancel!
  15. render :show
  16. end
  17. def create
  18. authorize! :create, Order
  19. @order = Order.build_from_api(current_api_user, nested_params)
  20. respond_with(@order, :default_template => :show, :status => 201)
  21. end
  22. def empty
  23. find_order
  24. @order.line_items.destroy_all
  25. @order.update!
  26. render :text => nil, :status => 200
  27. end
  28. def index
  29. authorize! :index, Order
  30. @orders = Order.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
  31. respond_with(@orders)
  32. end
  33. def show
  34. find_order
  35. method = "before_#{@order.state}"
  36. send(method) if respond_to?(method, true)
  37. respond_with(@order)
  38. end
  39. def update
  40. find_order
  41. # Parsing line items through as an update_attributes call in the API will result in
  42. # many line items for the same variant_id being created. We must be smarter about this,
  43. # hence the use of the update_line_items method, defined within order_decorator.rb.
  44. order_params = nested_params
  45. line_items = order_params.delete("line_items_attributes")
  46. if @order.update_attributes(order_params)
  47. @order.update_line_items(line_items)
  48. @order.line_items.reload
  49. @order.update!
  50. respond_with(@order, :default_template => :show)
  51. else
  52. invalid_resource!(@order)
  53. end
  54. end
  55. private
  56. def nested_params
  57. map_nested_attributes_keys Order, params[:order] || {}
  58. end
  59. def next!(options={})
  60. if @order.valid? && @order.next
  61. render :show, :status => options[:status] || 200
  62. else
  63. render :could_not_transition, :status => 422
  64. end
  65. end
  66. def find_order
  67. @order = Order.find_by_number!(params[:id])
  68. authorize! :update, @order, params[:order_token]
  69. end
  70. def before_delivery
  71. @order.create_proposed_shipments
  72. end
  73. end
  74. end
  75. end