spree_api 4.4.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +10 -8
  3. data/app/controllers/spree/api/v2/platform/orders_controller.rb +1 -1
  4. data/app/controllers/spree/api/v2/platform/products_controller.rb +5 -1
  5. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +1 -1
  6. data/app/controllers/spree/api/v2/storefront/digitals_controller.rb +5 -1
  7. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +4 -0
  8. data/app/helpers/spree/api/v2/store_media_serializer_images_concern.rb +35 -0
  9. data/app/models/concerns/spree/webhooks/has_webhooks.rb +31 -7
  10. data/app/models/spree/api/webhooks/product_decorator.rb +21 -2
  11. data/app/models/spree/webhooks/subscriber.rb +4 -0
  12. data/app/serializers/spree/api/v2/platform/cms_section_image_one_serializer.rb +9 -0
  13. data/app/serializers/spree/api/v2/platform/cms_section_image_three_serializer.rb +9 -0
  14. data/app/serializers/spree/api/v2/platform/cms_section_image_two_serializer.rb +9 -0
  15. data/app/serializers/spree/api/v2/platform/hero_image_serializer.rb +10 -0
  16. data/app/serializers/spree/api/v2/platform/image_gallery_serializer.rb +10 -0
  17. data/app/serializers/spree/api/v2/platform/side_by_side_image_serializer.rb +10 -0
  18. data/app/serializers/spree/api/v2/platform/store_serializer.rb +1 -0
  19. data/app/serializers/spree/api/v2/platform/user_serializer.rb +1 -1
  20. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +3 -3
  21. data/app/serializers/spree/v2/storefront/order_serializer.rb +9 -0
  22. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +1 -1
  23. data/app/serializers/spree/v2/storefront/product_serializer.rb +1 -1
  24. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +3 -0
  25. data/app/serializers/spree/v2/storefront/store_serializer.rb +5 -10
  26. data/app/serializers/spree/v2/storefront/user_serializer.rb +1 -1
  27. data/app/serializers/spree/v2/storefront/variant_serializer.rb +1 -1
  28. data/app/services/spree/webhooks/subscribers/queue_requests.rb +8 -2
  29. data/config/routes.rb +1 -120
  30. data/docs/v2/platform/index.yaml +1597 -998
  31. data/docs/v2/storefront/index.yaml +357 -33
  32. data/lib/spree/api/configuration.rb +11 -0
  33. data/lib/spree/api/dependencies.rb +165 -0
  34. data/lib/spree/api/engine.rb +5 -16
  35. data/lib/spree/api/testing_support/v2/platform_contexts.rb +0 -1
  36. data/lib/spree/api.rb +0 -4
  37. data/lib/spree_api.rb +0 -1
  38. data/spree_api.gemspec +0 -2
  39. metadata +16 -177
  40. data/app/controllers/spree/api/base_controller.rb +0 -171
  41. data/app/controllers/spree/api/v1/addresses_controller.rb +0 -46
  42. data/app/controllers/spree/api/v1/checkouts_controller.rb +0 -106
  43. data/app/controllers/spree/api/v1/classifications_controller.rb +0 -21
  44. data/app/controllers/spree/api/v1/countries_controller.rb +0 -22
  45. data/app/controllers/spree/api/v1/credit_cards_controller.rb +0 -26
  46. data/app/controllers/spree/api/v1/customer_returns_controller.rb +0 -25
  47. data/app/controllers/spree/api/v1/images_controller.rb +0 -58
  48. data/app/controllers/spree/api/v1/inventory_units_controller.rb +0 -54
  49. data/app/controllers/spree/api/v1/line_items_controller.rb +0 -70
  50. data/app/controllers/spree/api/v1/option_types_controller.rb +0 -60
  51. data/app/controllers/spree/api/v1/option_values_controller.rb +0 -62
  52. data/app/controllers/spree/api/v1/orders_controller.rb +0 -160
  53. data/app/controllers/spree/api/v1/payments_controller.rb +0 -82
  54. data/app/controllers/spree/api/v1/product_properties_controller.rb +0 -73
  55. data/app/controllers/spree/api/v1/products_controller.rb +0 -131
  56. data/app/controllers/spree/api/v1/promotions_controller.rb +0 -30
  57. data/app/controllers/spree/api/v1/properties_controller.rb +0 -70
  58. data/app/controllers/spree/api/v1/reimbursements_controller.rb +0 -25
  59. data/app/controllers/spree/api/v1/return_authorizations_controller.rb +0 -70
  60. data/app/controllers/spree/api/v1/shipments_controller.rb +0 -196
  61. data/app/controllers/spree/api/v1/states_controller.rb +0 -36
  62. data/app/controllers/spree/api/v1/stock_items_controller.rb +0 -82
  63. data/app/controllers/spree/api/v1/stock_locations_controller.rb +0 -53
  64. data/app/controllers/spree/api/v1/stock_movements_controller.rb +0 -45
  65. data/app/controllers/spree/api/v1/stores_controller.rb +0 -56
  66. data/app/controllers/spree/api/v1/taxonomies_controller.rb +0 -67
  67. data/app/controllers/spree/api/v1/taxons_controller.rb +0 -100
  68. data/app/controllers/spree/api/v1/users_controller.rb +0 -97
  69. data/app/controllers/spree/api/v1/variants_controller.rb +0 -81
  70. data/app/controllers/spree/api/v1/zones_controller.rb +0 -55
  71. data/app/helpers/spree/api/api_helpers.rb +0 -190
  72. data/app/models/spree/api_configuration.rb +0 -10
  73. data/app/views/spree/api/errors/gateway_error.rabl +0 -2
  74. data/app/views/spree/api/errors/invalid_api_key.rabl +0 -2
  75. data/app/views/spree/api/errors/invalid_resource.rabl +0 -3
  76. data/app/views/spree/api/errors/must_specify_api_key.rabl +0 -2
  77. data/app/views/spree/api/errors/not_found.rabl +0 -2
  78. data/app/views/spree/api/errors/unauthorized.rabl +0 -2
  79. data/app/views/spree/api/v1/addresses/show.rabl +0 -10
  80. data/app/views/spree/api/v1/adjustments/show.rabl +0 -4
  81. data/app/views/spree/api/v1/countries/index.rabl +0 -7
  82. data/app/views/spree/api/v1/countries/show.rabl +0 -5
  83. data/app/views/spree/api/v1/credit_cards/index.rabl +0 -7
  84. data/app/views/spree/api/v1/credit_cards/show.rabl +0 -3
  85. data/app/views/spree/api/v1/customer_returns/index.rabl +0 -7
  86. data/app/views/spree/api/v1/images/index.rabl +0 -4
  87. data/app/views/spree/api/v1/images/new.rabl +0 -3
  88. data/app/views/spree/api/v1/images/show.rabl +0 -6
  89. data/app/views/spree/api/v1/inventory_units/show.rabl +0 -2
  90. data/app/views/spree/api/v1/line_items/new.rabl +0 -3
  91. data/app/views/spree/api/v1/line_items/show.rabl +0 -14
  92. data/app/views/spree/api/v1/option_types/index.rabl +0 -3
  93. data/app/views/spree/api/v1/option_types/new.rabl +0 -3
  94. data/app/views/spree/api/v1/option_types/show.rabl +0 -5
  95. data/app/views/spree/api/v1/option_values/index.rabl +0 -3
  96. data/app/views/spree/api/v1/option_values/new.rabl +0 -3
  97. data/app/views/spree/api/v1/option_values/show.rabl +0 -2
  98. data/app/views/spree/api/v1/orders/address.rabl +0 -0
  99. data/app/views/spree/api/v1/orders/canceled.rabl +0 -0
  100. data/app/views/spree/api/v1/orders/cart.rabl +0 -0
  101. data/app/views/spree/api/v1/orders/complete.rabl +0 -0
  102. data/app/views/spree/api/v1/orders/could_not_apply_coupon.rabl +0 -2
  103. data/app/views/spree/api/v1/orders/could_not_transition.rabl +0 -3
  104. data/app/views/spree/api/v1/orders/index.rabl +0 -7
  105. data/app/views/spree/api/v1/orders/insufficient_quantity.rabl +0 -2
  106. data/app/views/spree/api/v1/orders/invalid_shipping_method.rabl +0 -2
  107. data/app/views/spree/api/v1/orders/mine.rabl +0 -9
  108. data/app/views/spree/api/v1/orders/order.rabl +0 -10
  109. data/app/views/spree/api/v1/orders/payment.rabl +0 -3
  110. data/app/views/spree/api/v1/orders/show.rabl +0 -51
  111. data/app/views/spree/api/v1/payments/credit_over_limit.rabl +0 -2
  112. data/app/views/spree/api/v1/payments/index.rabl +0 -7
  113. data/app/views/spree/api/v1/payments/new.rabl +0 -5
  114. data/app/views/spree/api/v1/payments/show.rabl +0 -2
  115. data/app/views/spree/api/v1/payments/update_forbidden.rabl +0 -2
  116. data/app/views/spree/api/v1/product_properties/index.rabl +0 -7
  117. data/app/views/spree/api/v1/product_properties/new.rabl +0 -2
  118. data/app/views/spree/api/v1/product_properties/show.rabl +0 -2
  119. data/app/views/spree/api/v1/products/index.rabl +0 -9
  120. data/app/views/spree/api/v1/products/new.rabl +0 -3
  121. data/app/views/spree/api/v1/products/product.rabl +0 -1
  122. data/app/views/spree/api/v1/products/show.rabl +0 -36
  123. data/app/views/spree/api/v1/promotions/handler.rabl +0 -5
  124. data/app/views/spree/api/v1/promotions/show.rabl +0 -2
  125. data/app/views/spree/api/v1/properties/index.rabl +0 -7
  126. data/app/views/spree/api/v1/properties/new.rabl +0 -2
  127. data/app/views/spree/api/v1/properties/show.rabl +0 -2
  128. data/app/views/spree/api/v1/reimbursements/index.rabl +0 -7
  129. data/app/views/spree/api/v1/return_authorizations/index.rabl +0 -7
  130. data/app/views/spree/api/v1/return_authorizations/new.rabl +0 -3
  131. data/app/views/spree/api/v1/return_authorizations/show.rabl +0 -2
  132. data/app/views/spree/api/v1/shared/stock_location_required.rabl +0 -2
  133. data/app/views/spree/api/v1/shipments/big.rabl +0 -48
  134. data/app/views/spree/api/v1/shipments/cannot_ready_shipment.rabl +0 -2
  135. data/app/views/spree/api/v1/shipments/mine.rabl +0 -9
  136. data/app/views/spree/api/v1/shipments/show.rabl +0 -32
  137. data/app/views/spree/api/v1/shipments/small.rabl +0 -37
  138. data/app/views/spree/api/v1/shipping_rates/show.rabl +0 -2
  139. data/app/views/spree/api/v1/states/index.rabl +0 -12
  140. data/app/views/spree/api/v1/states/show.rabl +0 -2
  141. data/app/views/spree/api/v1/stock_items/index.rabl +0 -7
  142. data/app/views/spree/api/v1/stock_items/show.rabl +0 -5
  143. data/app/views/spree/api/v1/stock_locations/index.rabl +0 -7
  144. data/app/views/spree/api/v1/stock_locations/show.rabl +0 -8
  145. data/app/views/spree/api/v1/stock_movements/index.rabl +0 -7
  146. data/app/views/spree/api/v1/stock_movements/show.rabl +0 -5
  147. data/app/views/spree/api/v1/stores/index.rabl +0 -4
  148. data/app/views/spree/api/v1/stores/show.rabl +0 -2
  149. data/app/views/spree/api/v1/tags/index.rabl +0 -9
  150. data/app/views/spree/api/v1/taxonomies/index.rabl +0 -7
  151. data/app/views/spree/api/v1/taxonomies/jstree.rabl +0 -7
  152. data/app/views/spree/api/v1/taxonomies/nested.rabl +0 -11
  153. data/app/views/spree/api/v1/taxonomies/new.rabl +0 -3
  154. data/app/views/spree/api/v1/taxonomies/show.rabl +0 -15
  155. data/app/views/spree/api/v1/taxons/index.rabl +0 -10
  156. data/app/views/spree/api/v1/taxons/jstree.rabl +0 -7
  157. data/app/views/spree/api/v1/taxons/new.rabl +0 -3
  158. data/app/views/spree/api/v1/taxons/show.rabl +0 -6
  159. data/app/views/spree/api/v1/taxons/taxons.rabl +0 -5
  160. data/app/views/spree/api/v1/users/index.rabl +0 -7
  161. data/app/views/spree/api/v1/users/new.rabl +0 -3
  162. data/app/views/spree/api/v1/users/show.rabl +0 -11
  163. data/app/views/spree/api/v1/variants/big.rabl +0 -14
  164. data/app/views/spree/api/v1/variants/index.rabl +0 -9
  165. data/app/views/spree/api/v1/variants/new.rabl +0 -2
  166. data/app/views/spree/api/v1/variants/show.rabl +0 -3
  167. data/app/views/spree/api/v1/variants/small.rabl +0 -18
  168. data/app/views/spree/api/v1/zones/index.rabl +0 -7
  169. data/app/views/spree/api/v1/zones/show.rabl +0 -6
  170. data/config/initializers/rabl.rb +0 -9
  171. data/lib/spree/api/api_dependencies.rb +0 -163
  172. data/lib/spree/api/controller_setup.rb +0 -19
  173. data/lib/spree/api/responders/rabl_template.rb +0 -28
  174. data/lib/spree/api/responders.rb +0 -11
  175. data/lib/spree/api/testing_support/helpers.rb +0 -44
  176. data/lib/spree/api/testing_support/setup.rb +0 -16
@@ -1,62 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class OptionValuesController < Spree::Api::BaseController
5
- def index
6
- @option_values = if params[:ids]
7
- scope.where(id: params[:ids])
8
- else
9
- scope.ransack(params[:q]).result.distinct
10
- end
11
- respond_with(@option_values)
12
- end
13
-
14
- def show
15
- @option_value = scope.find(params[:id])
16
- respond_with(@option_value)
17
- end
18
-
19
- def new; end
20
-
21
- def create
22
- authorize! :create, Spree::OptionValue
23
- @option_value = scope.new(option_value_params)
24
- if @option_value.save
25
- render :show, status: 201
26
- else
27
- invalid_resource!(@option_value)
28
- end
29
- end
30
-
31
- def update
32
- @option_value = scope.accessible_by(current_ability, :update).find(params[:id])
33
- if @option_value.update(option_value_params)
34
- render :show
35
- else
36
- invalid_resource!(@option_value)
37
- end
38
- end
39
-
40
- def destroy
41
- @option_value = scope.accessible_by(current_ability, :destroy).find(params[:id])
42
- @option_value.destroy
43
- render plain: nil, status: 204
44
- end
45
-
46
- private
47
-
48
- def scope
49
- @scope ||= if params[:option_type_id]
50
- Spree::OptionType.find(params[:option_type_id]).option_values.accessible_by(current_ability, :show)
51
- else
52
- Spree::OptionValue.accessible_by(current_ability, :show).load
53
- end
54
- end
55
-
56
- def option_value_params
57
- params.require(:option_value).permit(permitted_option_value_attributes)
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,160 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class OrdersController < Spree::Api::BaseController
5
- skip_before_action :authenticate_user, only: :apply_coupon_code
6
-
7
- before_action :find_order, except: [:create, :mine, :current, :index, :update, :remove_coupon_code]
8
-
9
- # Dynamically defines our stores checkout steps to ensure we check authorization on each step.
10
- Order.checkout_steps.keys.each do |step|
11
- define_method step do
12
- find_order
13
- authorize! :update, @order, params[:token]
14
- end
15
- end
16
-
17
- def cancel
18
- authorize! :update, @order, params[:token]
19
- @order.canceled_by(current_api_user)
20
- respond_with(@order, default_template: :show)
21
- end
22
-
23
- def approve
24
- authorize! :approve, @order, params[:token]
25
- @order.approved_by(current_api_user)
26
- respond_with(@order, default_template: :show)
27
- end
28
-
29
- def create
30
- authorize! :create, Spree::Order
31
- if can?(:admin, Spree::Order)
32
- order_user = if @current_user_roles.include?('admin') && order_params[:user_id]
33
- Spree.user_class.find(order_params[:user_id])
34
- else
35
- current_api_user
36
- end
37
-
38
- import_params = if @current_user_roles.include?('admin')
39
- params[:order].present? ? params[:order].permit! : {}
40
- else
41
- order_params
42
- end
43
-
44
- @order = Spree::Core::Importer::Order.import(order_user, import_params)
45
-
46
- respond_with(@order, default_template: :show, status: 201)
47
- else
48
- @order = Spree::Order.create!(user: current_api_user, store: current_store)
49
- if Cart::Update.call(order: @order, params: order_params).success?
50
- respond_with(@order, default_template: :show, status: 201)
51
- else
52
- invalid_resource!(@order)
53
- end
54
- end
55
- end
56
-
57
- def empty
58
- authorize! :update, @order, order_token
59
- cart_empty_service.call(order: @order)
60
- render plain: nil, status: 204
61
- end
62
-
63
- def index
64
- authorize! :index, Order
65
- @orders = Order.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
66
- respond_with(@orders)
67
- end
68
-
69
- def show
70
- authorize! :show, @order, order_token
71
- respond_with(@order)
72
- end
73
-
74
- def update
75
- find_order(true)
76
- authorize! :update, @order, order_token
77
-
78
- if Cart::Update.call(order: @order, params: order_params).success?
79
- user_id = params[:order][:user_id]
80
- if current_api_user.has_spree_role?('admin') && user_id
81
- @order.associate_user!(Spree.user_class.find(user_id))
82
- end
83
- respond_with(@order, default_template: :show)
84
- else
85
- invalid_resource!(@order)
86
- end
87
- end
88
-
89
- def current
90
- @order = find_current_order
91
- if @order
92
- respond_with(@order, default_template: :show, locals: { root_object: @order })
93
- else
94
- head :no_content
95
- end
96
- end
97
-
98
- def mine
99
- if current_api_user.persisted?
100
- @orders = current_api_user.orders.reverse_chronological.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
101
- else
102
- render 'spree/api/errors/unauthorized', status: :unauthorized
103
- end
104
- end
105
-
106
- def apply_coupon_code
107
- find_order
108
- authorize! :update, @order, order_token
109
- @order.coupon_code = params[:coupon_code]
110
- @handler = PromotionHandler::Coupon.new(@order).apply
111
- status = @handler.successful? ? 200 : 422
112
- render 'spree/api/v1/promotions/handler', status: status
113
- end
114
-
115
- def remove_coupon_code
116
- find_order(true)
117
- authorize! :update, @order, order_token
118
- @handler = Spree::PromotionHandler::Coupon.new(@order).remove(params[:coupon_code])
119
- status = @handler.successful? ? 200 : 404
120
- render 'spree/api/v1/promotions/handler', status: status
121
- end
122
-
123
- private
124
-
125
- def order_params
126
- if params[:order]
127
- normalize_params
128
- params.require(:order).permit(permitted_order_attributes)
129
- else
130
- {}
131
- end
132
- end
133
-
134
- def normalize_params
135
- params[:order][:payments_attributes] = params[:order].delete(:payments) if params[:order][:payments]
136
- params[:order][:shipments_attributes] = params[:order].delete(:shipments) if params[:order][:shipments]
137
- params[:order][:line_items_attributes] = params[:order].delete(:line_items) if params[:order][:line_items]
138
- params[:order][:ship_address_attributes] = params[:order].delete(:ship_address) if params[:order][:ship_address]
139
- params[:order][:bill_address_attributes] = params[:order].delete(:bill_address) if params[:order][:bill_address]
140
- end
141
-
142
- def find_order(lock = false)
143
- @order = Spree::Order.lock(lock).find_by!(number: params[:id])
144
- end
145
-
146
- def find_current_order
147
- current_api_user ? current_api_user.orders.incomplete.order(:created_at).last : nil
148
- end
149
-
150
- def order_id
151
- super || params[:id]
152
- end
153
-
154
- def cart_empty_service
155
- Spree::Dependencies.cart_empty_service.constantize
156
- end
157
- end
158
- end
159
- end
160
- end
@@ -1,82 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PaymentsController < Spree::Api::BaseController
5
- before_action :find_order
6
- before_action :find_payment, only: [:update, :show, :authorize, :purchase, :capture, :void]
7
-
8
- def index
9
- @payments = @order.payments.ransack(params[:q]).result.page(params[:page]).per(params[:per_page])
10
- respond_with(@payments)
11
- end
12
-
13
- def new
14
- @payment_methods = Spree::PaymentMethod.available
15
- respond_with(@payment_methods)
16
- end
17
-
18
- def create
19
- @order.validate_payments_attributes([payment_params])
20
- @payment = @order.payments.build(payment_params)
21
- if @payment.save
22
- respond_with(@payment, status: 201, default_template: :show)
23
- else
24
- invalid_resource!(@payment)
25
- end
26
- end
27
-
28
- def update
29
- authorize! params[:action], @payment
30
- if !@payment.editable?
31
- render 'update_forbidden', status: 403
32
- elsif @payment.update(payment_params)
33
- respond_with(@payment, default_template: :show)
34
- else
35
- invalid_resource!(@payment)
36
- end
37
- end
38
-
39
- def show
40
- respond_with(@payment)
41
- end
42
-
43
- def authorize
44
- perform_payment_action(:authorize)
45
- end
46
-
47
- def capture
48
- perform_payment_action(:capture)
49
- end
50
-
51
- def purchase
52
- perform_payment_action(:purchase)
53
- end
54
-
55
- def void
56
- perform_payment_action(:void_transaction)
57
- end
58
-
59
- private
60
-
61
- def find_order
62
- @order = Spree::Order.find_by!(number: order_id)
63
- authorize! :show, @order, order_token
64
- end
65
-
66
- def find_payment
67
- @payment = @order.payments.find_by!(number: params[:id])
68
- end
69
-
70
- def perform_payment_action(action, *args)
71
- authorize! action, Payment
72
- @payment.send("#{action}!", *args)
73
- respond_with(@payment, default_template: :show)
74
- end
75
-
76
- def payment_params
77
- params.require(:payment).permit(permitted_payment_attributes)
78
- end
79
- end
80
- end
81
- end
82
- end
@@ -1,73 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ProductPropertiesController < Spree::Api::BaseController
5
- before_action :find_product, :authorize_product!
6
- before_action :product_property, only: [:show, :update, :destroy]
7
-
8
- def index
9
- @product_properties = @product.product_properties.accessible_by(current_ability).
10
- ransack(params[:q]).result.
11
- page(params[:page]).per(params[:per_page])
12
- respond_with(@product_properties)
13
- end
14
-
15
- def show
16
- respond_with(@product_property)
17
- end
18
-
19
- def new; end
20
-
21
- def create
22
- authorize! :create, ProductProperty
23
- @product_property = @product.product_properties.new(product_property_params)
24
- if @product_property.save
25
- respond_with(@product_property, status: 201, default_template: :show)
26
- else
27
- invalid_resource!(@product_property)
28
- end
29
- end
30
-
31
- def update
32
- authorize! :update, @product_property
33
-
34
- if @product_property.update(product_property_params)
35
- respond_with(@product_property, status: 200, default_template: :show)
36
- else
37
- invalid_resource!(@product_property)
38
- end
39
- end
40
-
41
- def destroy
42
- authorize! :destroy, @product_property
43
- @product_property.destroy
44
- respond_with(@product_property, status: 204)
45
- end
46
-
47
- private
48
-
49
- def find_product
50
- super(params[:product_id])
51
- end
52
-
53
- def authorize_product!
54
- authorize! :show, @product
55
- end
56
-
57
- def product_property
58
- if @product
59
- @product_property ||= @product.product_properties.find_by(id: params[:id])
60
- @product_property ||= @product.product_properties.includes(:property).where(spree_properties: { name: params[:id] }).first
61
- raise ActiveRecord::RecordNotFound unless @product_property
62
-
63
- authorize! :show, @product_property
64
- end
65
- end
66
-
67
- def product_property_params
68
- params.require(:product_property).permit(permitted_product_properties_attributes)
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,131 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ProductsController < Spree::Api::BaseController
5
- before_action :find_product, only: [:update, :show, :destroy]
6
-
7
- def index
8
- @products = if params[:ids]
9
- product_scope.where(id: params[:ids].split(',').flatten)
10
- else
11
- product_scope.ransack(params[:q]).result
12
- end
13
-
14
- @products = @products.distinct.page(params[:page]).per(params[:per_page])
15
- expires_in 15.minutes, public: true
16
- headers['Surrogate-Control'] = "max-age=#{15.minutes}"
17
- respond_with(@products)
18
- end
19
-
20
- def show
21
- expires_in 15.minutes, public: true
22
- headers['Surrogate-Control'] = "max-age=#{15.minutes}"
23
- headers['Surrogate-Key'] = 'product_id=1'
24
- respond_with(@product)
25
- end
26
-
27
- # Takes besides the products attributes either an array of variants or
28
- # an array of option types.
29
- #
30
- # By submitting an array of variants the option types will be created
31
- # using the *name* key in options hash. e.g
32
- #
33
- # product: {
34
- # ...
35
- # variants: {
36
- # price: 19.99,
37
- # sku: "hey_you",
38
- # options: [
39
- # { name: "size", value: "small" },
40
- # { name: "color", value: "black" }
41
- # ]
42
- # }
43
- # }
44
- #
45
- # Or just pass in the option types hash:
46
- #
47
- # product: {
48
- # ...
49
- # option_types: ['size', 'color']
50
- # }
51
- #
52
- # By passing the shipping category name you can fetch or create that
53
- # shipping category on the fly. e.g.
54
- #
55
- # product: {
56
- # ...
57
- # shipping_category: "Free Shipping Items"
58
- # }
59
- #
60
- def new; end
61
-
62
- def create
63
- authorize! :create, Product
64
- params[:product][:available_on] ||= Time.current
65
- set_up_shipping_category
66
-
67
- options = { store: current_store, variants_attrs: variants_params, options_attrs: option_types_params }
68
- @product = Core::Importer::Product.new(nil, product_params, options).create
69
-
70
- if @product.persisted?
71
- respond_with(@product, status: 201, default_template: :show)
72
- else
73
- invalid_resource!(@product)
74
- end
75
- end
76
-
77
- def update
78
- authorize! :update, @product
79
-
80
- options = { store: current_store, variants_attrs: variants_params, options_attrs: option_types_params }
81
- @product = Core::Importer::Product.new(@product, product_params, options).update
82
-
83
- if @product.errors.empty?
84
- respond_with(@product.reload, status: 200, default_template: :show)
85
- else
86
- invalid_resource!(@product)
87
- end
88
- end
89
-
90
- def destroy
91
- authorize! :destroy, @product
92
- @product.destroy
93
- respond_with(@product, status: 204)
94
- end
95
-
96
- private
97
-
98
- def product_params
99
- params.require(:product).permit(permitted_product_attributes)
100
- end
101
-
102
- def variants_params
103
- variants_key = if params[:product].key? :variants
104
- :variants
105
- else
106
- :variants_attributes
107
- end
108
-
109
- params.require(:product).permit(
110
- variants_key => [permitted_variant_attributes, :id]
111
- ).delete(variants_key) || []
112
- end
113
-
114
- def option_types_params
115
- params[:product].fetch(:option_types, [])
116
- end
117
-
118
- def find_product
119
- super(params[:id])
120
- end
121
-
122
- def set_up_shipping_category
123
- if shipping_category = params[:product].delete(:shipping_category)
124
- id = ShippingCategory.find_or_create_by(name: shipping_category).id
125
- params[:product][:shipping_category_id] = id
126
- end
127
- end
128
- end
129
- end
130
- end
131
- end
@@ -1,30 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PromotionsController < Spree::Api::BaseController
5
- before_action :requires_admin
6
- before_action :load_promotion
7
-
8
- def show
9
- if @promotion
10
- respond_with(@promotion, default_template: :show)
11
- else
12
- raise ActiveRecord::RecordNotFound
13
- end
14
- end
15
-
16
- private
17
-
18
- def requires_admin
19
- return if @current_user_roles.include?('admin')
20
-
21
- unauthorized and return
22
- end
23
-
24
- def load_promotion
25
- @promotion = Spree::Promotion.find_by(id: params[:id]) || Spree::Promotion.with_coupon_code(params[:id])
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,70 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class PropertiesController < Spree::Api::BaseController
5
- before_action :find_property, only: [:show, :update, :destroy]
6
-
7
- def index
8
- @properties = Spree::Property.accessible_by(current_ability)
9
-
10
- @properties = if params[:ids]
11
- @properties.where(id: params[:ids].split(',').flatten)
12
- else
13
- @properties.ransack(params[:q]).result
14
- end
15
-
16
- @properties = @properties.page(params[:page]).per(params[:per_page])
17
- respond_with(@properties)
18
- end
19
-
20
- def show
21
- respond_with(@property)
22
- end
23
-
24
- def new; end
25
-
26
- def create
27
- authorize! :create, Property
28
- @property = Spree::Property.new(property_params)
29
- if @property.save
30
- respond_with(@property, status: 201, default_template: :show)
31
- else
32
- invalid_resource!(@property)
33
- end
34
- end
35
-
36
- def update
37
- if @property
38
- authorize! :update, @property
39
- @property.update(property_params)
40
- respond_with(@property, status: 200, default_template: :show)
41
- else
42
- invalid_resource!(@property)
43
- end
44
- end
45
-
46
- def destroy
47
- if @property
48
- authorize! :destroy, @property
49
- @property.destroy
50
- respond_with(@property, status: 204)
51
- else
52
- invalid_resource!(@property)
53
- end
54
- end
55
-
56
- private
57
-
58
- def find_property
59
- @property = Spree::Property.accessible_by(current_ability, :show).find(params[:id])
60
- rescue ActiveRecord::RecordNotFound
61
- @property = Spree::Property.accessible_by(current_ability, :show).find_by!(name: params[:id])
62
- end
63
-
64
- def property_params
65
- params.require(:property).permit(permitted_property_attributes)
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,25 +0,0 @@
1
- module Spree
2
- module Api
3
- module V1
4
- class ReimbursementsController < Spree::Api::BaseController
5
- def index
6
- collection(Spree::Reimbursement)
7
- respond_with(@collection)
8
- end
9
-
10
- private
11
-
12
- def collection(resource)
13
- return @collection if @collection.present?
14
-
15
- params[:q] ||= {}
16
-
17
- @collection = resource.all
18
- # @search needs to be defined as this is passed to search_form_for
19
- @search = @collection.ransack(params[:q])
20
- @collection = @search.result.order(created_at: :desc).page(params[:page]).per(params[:per_page])
21
- end
22
- end
23
- end
24
- end
25
- end