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

https://github.com/crystalneth/spree · Ruby · 89 lines · 74 code · 14 blank · 1 comment · 3 complexity · 55a3ffb42580e2b8d304a71d327ee230 MD5 · raw file

  1. module Spree
  2. module Api
  3. module V1
  4. class OrdersController < Spree::Api::V1::BaseController
  5. before_filter :map_nested_attributes, :only => [:create, :update]
  6. before_filter :authorize_read!, :except => [:index, :search, :create]
  7. def index
  8. # should probably look at turning this into a CanCan step
  9. raise CanCan::AccessDenied unless current_api_user.has_spree_role?("admin")
  10. @orders = Order.page(params[:page]).per(params[:per_page])
  11. end
  12. def show
  13. end
  14. def search
  15. @orders = Order.ransack(params[:q]).result.page(params[:page])
  16. render :index
  17. end
  18. def create
  19. @order = Order.build_from_api(current_api_user, @nested_params)
  20. next!
  21. end
  22. def update
  23. authorize! :update, Order
  24. if order.update_attributes(@nested_params)
  25. order.update!
  26. render :show
  27. else
  28. invalid_resource!(order)
  29. end
  30. end
  31. def address
  32. order.build_ship_address(params[:shipping_address])
  33. order.build_bill_address(params[:billing_address])
  34. next!
  35. end
  36. def delivery
  37. begin
  38. ShippingMethod.find(params[:shipping_method_id])
  39. rescue ActiveRecord::RecordNotFound
  40. render :invalid_shipping_method, :status => 422
  41. else
  42. order.update_attribute(:shipping_method_id, params[:shipping_method_id])
  43. next!
  44. end
  45. end
  46. def cancel
  47. order.cancel!
  48. render :show
  49. end
  50. def empty
  51. order.line_items.destroy_all
  52. order.update!
  53. render :text => nil, :status => 200
  54. end
  55. private
  56. def map_nested_attributes
  57. @nested_params = map_nested_attributes_keys Order, params[:order]
  58. end
  59. def order
  60. @order ||= Order.find_by_number!(params[:id])
  61. end
  62. def next!
  63. if @order.valid? && @order.next
  64. render :show, :status => 200
  65. else
  66. render :could_not_transition, :status => 422
  67. end
  68. end
  69. def authorize_read!
  70. authorize! :read, order
  71. end
  72. end
  73. end
  74. end
  75. end