spree_api 6.0.0.beta3 → 6.0.0.rc1

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 (342) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -31
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  5. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +1 -1
  6. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +7 -0
  7. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +2 -2
  8. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/error_handler.rb +7 -2
  10. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  11. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  12. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  14. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +1 -5
  15. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +2 -10
  16. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  17. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +4 -8
  18. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  19. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  20. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  21. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  22. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +0 -5
  23. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +1 -1
  24. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +0 -6
  25. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +0 -4
  26. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +1 -1
  27. data/app/controllers/spree/api/v3/admin/channels_controller.rb +0 -4
  28. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +1 -2
  29. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +2 -2
  30. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +0 -4
  31. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  32. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +0 -4
  33. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +1 -9
  34. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +0 -4
  35. data/app/controllers/spree/api/v3/admin/companies_controller.rb +0 -4
  36. data/app/controllers/spree/api/v3/admin/countries_controller.rb +1 -1
  37. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  38. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +9 -1
  39. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +0 -4
  40. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +0 -4
  41. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +0 -4
  42. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  43. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +0 -4
  44. data/app/controllers/spree/api/v3/admin/customers_controller.rb +2 -2
  45. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +1 -1
  46. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +3 -5
  47. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +1 -6
  48. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +40 -0
  49. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +30 -0
  50. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +30 -0
  51. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +34 -0
  52. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  53. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  54. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +40 -0
  55. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  56. data/app/controllers/spree/api/v3/admin/imports_controller.rb +1 -2
  57. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +0 -7
  58. data/app/controllers/spree/api/v3/admin/me_controller.rb +1 -1
  59. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +5 -5
  60. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +0 -4
  61. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +1 -5
  62. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +1 -1
  63. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +1 -1
  64. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +18 -16
  65. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +3 -3
  66. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +2 -10
  67. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +2 -14
  68. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +1 -5
  69. data/app/controllers/spree/api/v3/admin/orders_controller.rb +3 -3
  70. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +9 -7
  71. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +6 -53
  72. data/app/controllers/spree/api/v3/admin/prices_controller.rb +0 -4
  73. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +2 -6
  74. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +0 -4
  75. data/app/controllers/spree/api/v3/admin/products_controller.rb +1 -1
  76. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +0 -4
  77. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +0 -4
  78. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +1 -1
  79. data/app/controllers/spree/api/v3/admin/resource_controller.rb +1 -1
  80. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +1 -9
  81. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +2 -10
  82. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  83. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  84. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  85. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +2 -10
  86. data/app/controllers/spree/api/v3/admin/setup_controller.rb +8 -12
  87. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +1 -1
  88. data/app/controllers/spree/api/v3/admin/store_controller.rb +6 -1
  89. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  90. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +17 -12
  91. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  92. data/app/controllers/spree/api/v3/base_controller.rb +10 -0
  93. data/app/controllers/spree/api/v3/resource_controller.rb +44 -1
  94. data/app/controllers/spree/api/v3/seller/auth_controller.rb +2 -2
  95. data/app/controllers/spree/api/v3/seller/countries_controller.rb +1 -1
  96. data/app/controllers/spree/api/v3/seller/exports_controller.rb +3 -3
  97. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +3 -3
  98. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  99. data/app/controllers/spree/api/v3/seller/me_controller.rb +1 -1
  100. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +1 -1
  101. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +10 -11
  102. data/app/controllers/spree/api/v3/seller/products_controller.rb +2 -1
  103. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +1 -1
  104. data/app/controllers/spree/api/v3/seller/team_controller.rb +1 -1
  105. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +1 -1
  106. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +3 -11
  107. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +5 -3
  108. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +6 -2
  109. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +1 -1
  110. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +5 -3
  111. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +2 -2
  112. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -0
  113. data/app/controllers/spree/api/v3/store/carts_controller.rb +9 -6
  114. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +0 -4
  115. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  116. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +1 -1
  117. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +0 -4
  118. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  119. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +0 -5
  120. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  121. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  122. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  123. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +8 -6
  124. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +0 -4
  125. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  126. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  127. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  128. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +5 -14
  129. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +1 -5
  130. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +1 -5
  131. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +0 -4
  132. data/app/serializers/spree/api/v3/admin/address_serializer.rb +5 -7
  133. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  134. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  135. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +1 -7
  136. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  137. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  138. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +5 -6
  139. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  140. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -3
  141. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  142. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  143. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  144. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +2 -10
  145. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  146. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +8 -22
  147. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  148. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  149. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  150. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  151. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  152. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  153. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  154. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  155. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  156. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +1 -3
  157. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  158. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  159. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -7
  160. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +1 -7
  161. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +2 -6
  162. data/app/serializers/spree/api/v3/admin/market_serializer.rb +4 -2
  163. data/app/serializers/spree/api/v3/admin/media_serializer.rb +1 -3
  164. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  165. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +3 -9
  166. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
  167. data/app/serializers/spree/api/v3/admin/order_serializer.rb +5 -15
  168. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  169. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -1
  170. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +2 -7
  171. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  172. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +1 -3
  173. data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -10
  174. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  175. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  176. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +1 -3
  177. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -3
  178. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +2 -15
  179. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +2 -15
  180. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  181. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +4 -1
  182. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +1 -0
  183. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  184. data/app/serializers/spree/api/v3/admin/return_serializer.rb +3 -11
  185. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  186. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +4 -2
  187. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  188. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  189. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +5 -15
  190. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +4 -2
  191. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +6 -19
  192. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  193. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +1 -3
  194. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +1 -3
  195. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  196. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  197. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  198. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  199. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +1 -3
  200. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +4 -18
  201. data/app/serializers/spree/api/v3/admin/store_serializer.rb +24 -6
  202. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -3
  203. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -9
  204. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  205. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +5 -1
  206. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +1 -7
  207. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +6 -7
  208. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  209. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  210. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  211. data/app/serializers/spree/api/v3/base_serializer.rb +20 -0
  212. data/app/serializers/spree/api/v3/cart_serializer.rb +17 -45
  213. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  214. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +11 -26
  215. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -15
  216. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  217. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  218. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  219. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +3 -23
  220. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  221. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  222. data/app/serializers/spree/api/v3/discount_serializer.rb +1 -12
  223. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +9 -27
  224. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -15
  225. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  226. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  227. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  228. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +1 -3
  229. data/app/serializers/spree/api/v3/gift_card_serializer.rb +5 -17
  230. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  231. data/app/serializers/spree/api/v3/import_serializer.rb +3 -14
  232. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  233. data/app/serializers/spree/api/v3/line_item_serializer.rb +6 -20
  234. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  235. data/app/serializers/spree/api/v3/media_serializer.rb +1 -3
  236. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  237. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  238. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  239. data/app/serializers/spree/api/v3/order_group_serializer.rb +2 -23
  240. data/app/serializers/spree/api/v3/order_serializer.rb +12 -38
  241. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  242. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  243. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  244. data/app/serializers/spree/api/v3/payment_session_serializer.rb +3 -9
  245. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  246. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  247. data/app/serializers/spree/api/v3/price_history_serializer.rb +1 -3
  248. data/app/serializers/spree/api/v3/price_serializer.rb +1 -3
  249. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  250. data/app/serializers/spree/api/v3/product_serializer.rb +7 -21
  251. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  252. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  253. data/app/serializers/spree/api/v3/refund_serializer.rb +3 -11
  254. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +12 -19
  255. data/app/serializers/spree/api/v3/return_serializer.rb +6 -15
  256. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  257. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +1 -7
  258. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +1 -7
  259. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  260. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  261. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  263. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  264. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  265. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +7 -13
  266. data/app/serializers/spree/api/v3/seller/order_serializer.rb +4 -25
  267. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +4 -2
  268. data/app/serializers/spree/api/v3/seller/product_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  270. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +2 -6
  271. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  272. data/app/serializers/spree/api/v3/seller/return_serializer.rb +3 -15
  273. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +4 -2
  274. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  275. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  276. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  277. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  279. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  280. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -11
  281. data/app/serializers/spree/api/v3/store_credit_serializer.rb +2 -24
  282. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  283. data/app/serializers/spree/api/v3/tax_line_serializer.rb +10 -20
  284. data/app/serializers/spree/api/v3/variant_serializer.rb +7 -21
  285. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  286. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  287. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  288. data/config/initializers/pagy.rb +1 -1
  289. data/config/initializers/typelizer.rb +6 -8
  290. data/config/locales/ar.yml +15 -0
  291. data/config/locales/be.yml +15 -0
  292. data/config/locales/bg.yml +15 -0
  293. data/config/locales/ca.yml +15 -0
  294. data/config/locales/cs.yml +15 -0
  295. data/config/locales/da.yml +15 -0
  296. data/config/locales/de-CH.yml +11 -0
  297. data/config/locales/de.yml +15 -0
  298. data/config/locales/el.yml +15 -0
  299. data/config/locales/en.yml +5 -40
  300. data/config/locales/es-CL.yml +10 -0
  301. data/config/locales/es-EC.yml +11 -0
  302. data/config/locales/es-MX.yml +12 -0
  303. data/config/locales/es.yml +15 -0
  304. data/config/locales/et.yml +15 -0
  305. data/config/locales/fa.yml +15 -0
  306. data/config/locales/fi.yml +15 -0
  307. data/config/locales/fr.yml +15 -0
  308. data/config/locales/hu.yml +15 -0
  309. data/config/locales/id.yml +15 -0
  310. data/config/locales/it.yml +15 -0
  311. data/config/locales/ja.yml +15 -0
  312. data/config/locales/km.yml +15 -0
  313. data/config/locales/ko.yml +15 -0
  314. data/config/locales/ku.yml +15 -0
  315. data/config/locales/lt.yml +15 -0
  316. data/config/locales/lv.yml +15 -0
  317. data/config/locales/nb.yml +15 -0
  318. data/config/locales/ne.yml +15 -0
  319. data/config/locales/nl.yml +15 -0
  320. data/config/locales/pl.yml +15 -0
  321. data/config/locales/pt-BR.yml +13 -0
  322. data/config/locales/pt.yml +15 -0
  323. data/config/locales/ro.yml +15 -0
  324. data/config/locales/ru.yml +15 -0
  325. data/config/locales/sk.yml +15 -0
  326. data/config/locales/sl-SI.yml +15 -0
  327. data/config/locales/sv.yml +15 -0
  328. data/config/locales/th.yml +15 -0
  329. data/config/locales/tr.yml +15 -0
  330. data/config/locales/uk.yml +15 -0
  331. data/config/locales/vi.yml +15 -0
  332. data/config/locales/zh-CN.yml +15 -0
  333. data/config/locales/zh-TW.yml +15 -0
  334. data/config/routes.rb +49 -99
  335. data/lib/spree/api/dependencies.rb +53 -274
  336. data/lib/spree/api/openapi/schema_helper.rb +1 -1
  337. data/lib/spree/api/typelizer_generation.rb +35 -0
  338. data/lib/spree/api/webhook_event_types.rb +140 -0
  339. data/lib/spree/api.rb +0 -2
  340. metadata +71 -36
  341. data/config/i18n-tasks.yml +0 -40
  342. data/config/initializers/alba.rb +0 -5
@@ -0,0 +1,40 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ module EmailTemplates
6
+ class TestEmailsController < Admin::BaseController
7
+ include Spree::Api::V3::Admin::EmailTemplateLookup
8
+
9
+ before_action :authorize_sample_data!
10
+
11
+ # POST /api/v3/admin/email_templates/:email_template_id/test_email
12
+ #
13
+ # Sends the template, rendered as the preview renders it, to the
14
+ # signed-in admin. Never to another address: the sample data comes
15
+ # from a real customer's records.
16
+ def create
17
+ authorize! :update, Spree::EmailTemplate
18
+ return render_no_recipient unless current_user
19
+
20
+ build_preview.call
21
+ Spree::EmailTemplateMailer.test_email(current_store, current_user.email, email_template.key, **preview_arguments).deliver_later
22
+
23
+ render json: { sent_to: current_user.email }, status: :accepted
24
+ end
25
+
26
+ private
27
+
28
+ def render_no_recipient
29
+ render_error(
30
+ code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:invalid_request],
31
+ message: I18n.t('spree.email_templates.test_email_needs_admin'),
32
+ status: :unprocessable_content
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # The customer email templates, layout and shared partials merchants
6
+ # may edit, addressed by their key with dots
7
+ # (`spree.order_mailer.confirm_email`). `language` picks the version:
8
+ # a language code, or `any` (the default) for every language.
9
+ class EmailTemplatesController < Admin::BaseController
10
+ include Spree::Api::V3::Admin::EmailTemplateLookup
11
+
12
+ skip_before_action :load_email_template, only: :index
13
+
14
+ # GET /api/v3/admin/email_templates
15
+ def index
16
+ authorize! :read, Spree::EmailTemplate
17
+
18
+ entries = Spree::EmailTemplates::Entry.all(current_store, locale: language)
19
+ render json: { data: serialize_collection(entries), meta: {} }
20
+ end
21
+
22
+ # GET /api/v3/admin/email_templates/:id
23
+ def show
24
+ authorize! :read, Spree::EmailTemplate
25
+
26
+ render json: serialize_email_template
27
+ end
28
+
29
+ # DELETE /api/v3/admin/email_templates/:id
30
+ #
31
+ # Goes back to Spree's default for this language. The store's version
32
+ # and its history are kept, so a revision can still be restored.
33
+ def destroy
34
+ authorize! :update, Spree::EmailTemplate
35
+
36
+ result = Spree.email_template_revert_workflow.call(
37
+ store: current_store, key: email_template.key, locale: language, actor: current_actor,
38
+ lock_version: params[:lock_version].presence
39
+ )
40
+ render_email_template_result(result)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -312,8 +312,7 @@ module Spree
312
312
 
313
313
  render_error(
314
314
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
315
- message: Spree.t(:cannot_modify_seller_import, scope: 'api',
316
- default: "This import belongs to a seller. It can be viewed here, but only the seller can retry or delete it."),
315
+ message: I18n.t('spree.api.cannot_modify_seller_import'),
317
316
  status: :unprocessable_content
318
317
  )
319
318
  true
@@ -34,13 +34,6 @@ module Spree
34
34
  render json: serialize_resource(@resource)
35
35
  end
36
36
 
37
- # Invitations are immutable post-create — UI calls `resend` for
38
- # token rotation, `destroy` to revoke. Clearing the action set
39
- # keeps the surface honest if a client ever fires PATCH directly.
40
- def update
41
- head :method_not_allowed
42
- end
43
-
44
37
  protected
45
38
 
46
39
  def model_class
@@ -53,7 +53,7 @@ module Spree
53
53
 
54
54
  render_error(
55
55
  code: ERROR_CODES[:record_not_found],
56
- message: Spree.t(:me_no_current_user),
56
+ message: I18n.t('spree.me_no_current_user'),
57
57
  status: :not_found
58
58
  )
59
59
  end
@@ -39,8 +39,8 @@ module Spree
39
39
  unless detach_requested?
40
40
  return render_error(
41
41
  code: ERROR_CODES[:resource_invalid],
42
- message: Spree.t(
43
- 'api.errors.media_in_use',
42
+ message: I18n.t(
43
+ 'spree.api.errors.media_in_use',
44
44
  places: references.filter_map(&:name).uniq.first(5).to_sentence
45
45
  ),
46
46
  status: :unprocessable_content,
@@ -55,7 +55,7 @@ module Spree
55
55
  # render_service_error would produce an empty message.
56
56
  render_error(
57
57
  code: ERROR_CODES[:processing_error],
58
- message: Spree.t('api.errors.media_not_deleted'),
58
+ message: I18n.t('spree.api.errors.media_not_deleted'),
59
59
  status: :unprocessable_content
60
60
  )
61
61
  end
@@ -79,7 +79,7 @@ module Spree
79
79
  {
80
80
  kind: reference.kind,
81
81
  name: reference.name,
82
- owner_type: reference.owner_type,
82
+ owner_type: Spree::Base.polymorphic_api_type(reference.owner_type),
83
83
  owner_id: reference.owner_id,
84
84
  field: reference.field
85
85
  }
@@ -145,7 +145,7 @@ module Spree
145
145
  def create_from_url
146
146
  render_error(
147
147
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:resource_invalid],
148
- message: Spree.t('api.errors.media_url_import_requires_product'),
148
+ message: I18n.t('spree.api.errors.media_url_import_requires_product'),
149
149
  status: :unprocessable_content
150
150
  )
151
151
  end
@@ -49,10 +49,6 @@ module Spree
49
49
  .find_by_prefix_id!(params[:channel_id])
50
50
  end
51
51
 
52
- def parent_association
53
- :order_routing_rules
54
- end
55
-
56
52
  private
57
53
 
58
54
  def build_subclassed_resource(klass, attrs)
@@ -27,11 +27,7 @@ module Spree
27
27
  notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
28
28
  )
29
29
 
30
- if result.success?
31
- render json: serialize_resource(result.value)
32
- else
33
- render_result_error(result)
34
- end
30
+ render_result(result)
35
31
  end
36
32
  end
37
33
 
@@ -70,7 +70,7 @@ module Spree
70
70
  def render_completed_order_error
71
71
  render_error(
72
72
  code: ERROR_CODES[:discount_not_editable],
73
- message: Spree.t('errors.messages.coupon_code_frozen_after_completion'),
73
+ message: I18n.t('spree.errors.messages.coupon_code_frozen_after_completion'),
74
74
  status: :unprocessable_content
75
75
  )
76
76
  end
@@ -87,7 +87,7 @@ module Spree
87
87
  def render_promotion_row_error
88
88
  render_error(
89
89
  code: ERROR_CODES[:discount_not_editable],
90
- message: Spree.t('errors.messages.promotion_discount_not_editable'),
90
+ message: I18n.t('spree.errors.messages.promotion_discount_not_editable'),
91
91
  status: :unprocessable_entity
92
92
  )
93
93
  end
@@ -21,17 +21,21 @@ module Spree
21
21
  # Manually registers a fulfillment on a completed order (external
22
22
  # carrier / 3PL sync), bypassing order routing. Moves the requested
23
23
  # line item quantities out of their routed fulfillments; when
24
- # `items` is omitted, everything not yet shipped is moved. An
25
- # explicit `cost` persists only with `status: 'shipped'` — pending
26
- # fulfillments are re-priced by the rate engine.
24
+ # `items` is omitted, everything not yet shipped is moved. Exchange
25
+ # and claim replacements are moved only out of a named
26
+ # `source_fulfillment_id`, which is how a canceled replacement is
27
+ # sent again. An explicit `cost` persists only with
28
+ # `status: 'shipped'` — pending fulfillments are re-priced by the
29
+ # rate engine.
27
30
  def create
28
- authorize!(:create, Spree::Shipment)
31
+ authorize!(:create, Spree::Fulfillment)
29
32
 
30
33
  with_order_lock do
31
34
  result = Spree.fulfillment_create_workflow.call(
32
35
  order: @order,
33
36
  stock_location: stock_location_for_create,
34
37
  items: items_for_create,
38
+ source_fulfillment: source_fulfillment_for_create,
35
39
  tracking: create_params[:tracking],
36
40
  delivery_method: delivery_method_for_create,
37
41
  cost: create_params[:cost],
@@ -39,11 +43,7 @@ module Spree
39
43
  metadata: create_params[:metadata]&.to_h
40
44
  )
41
45
 
42
- if result.success?
43
- render json: serialize_resource(result.value), status: :created
44
- else
45
- render_result_error(result)
46
- end
46
+ render_result(result, status: :created)
47
47
  end
48
48
  end
49
49
 
@@ -59,11 +59,7 @@ module Spree
59
59
  notify_customer: notify_customer?(mark_delivered_params[:notify_customer])
60
60
  )
61
61
 
62
- if result.success?
63
- render json: serialize_resource(result.value)
64
- else
65
- render_result_error(result)
66
- end
62
+ render_result(result)
67
63
  end
68
64
  end
69
65
 
@@ -105,7 +101,7 @@ module Spree
105
101
  end
106
102
 
107
103
  def create_params
108
- @create_params ||= params.permit(:stock_location_id, :tracking, :delivery_method_id, :cost, :status, metadata: {}, items: [:item_id, :quantity])
104
+ @create_params ||= params.permit(:stock_location_id, :source_fulfillment_id, :tracking, :delivery_method_id, :cost, :status, metadata: {}, items: [:item_id, :quantity])
109
105
  end
110
106
 
111
107
  def mark_delivered_params
@@ -123,7 +119,13 @@ module Spree
123
119
  def delivery_method_for_create
124
120
  return if create_params[:delivery_method_id].blank?
125
121
 
126
- Spree::ShippingMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
122
+ Spree::DeliveryMethod.accessible_by(current_ability, :show).find_by_prefix_id!(create_params[:delivery_method_id])
123
+ end
124
+
125
+ def source_fulfillment_for_create
126
+ return if create_params[:source_fulfillment_id].blank?
127
+
128
+ @order.fulfillments.find_by_prefix_id!(create_params[:source_fulfillment_id])
127
129
  end
128
130
 
129
131
  def items_for_create
@@ -53,17 +53,17 @@ module Spree
53
53
  gift_card = current_store.gift_cards.find_by(code: params[:code]&.downcase)
54
54
 
55
55
  if gift_card.nil?
56
- render_error(code: ERROR_CODES[:gift_card_not_found], message: Spree.t(:gift_card_not_found), status: :not_found)
56
+ render_error(code: ERROR_CODES[:gift_card_not_found], message: I18n.t('spree.gift_card_not_found'), status: :not_found)
57
57
  return
58
58
  end
59
59
 
60
60
  if gift_card.expired?
61
- render_error(code: ERROR_CODES[:gift_card_expired], message: Spree.t(:gift_card_expired), status: :unprocessable_content)
61
+ render_error(code: ERROR_CODES[:gift_card_expired], message: I18n.t('spree.gift_card_expired'), status: :unprocessable_content)
62
62
  return
63
63
  end
64
64
 
65
65
  if gift_card.redeemed?
66
- render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: Spree.t(:gift_card_already_redeemed), status: :unprocessable_content)
66
+ render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: I18n.t('spree.gift_card_already_redeemed'), status: :unprocessable_content)
67
67
  return
68
68
  end
69
69
 
@@ -25,11 +25,7 @@ module Spree
25
25
  with_order_lock do
26
26
  result = Spree.shipping_label_purchase_workflow.call(owner: @parent)
27
27
 
28
- if result.success?
29
- render json: serialize_resource(result.value), status: :created
30
- else
31
- render_result_error(result)
32
- end
28
+ render_result(result, status: :created)
33
29
  end
34
30
  end
35
31
 
@@ -38,11 +34,7 @@ module Spree
38
34
  with_order_lock do
39
35
  result = Spree.shipping_label_refund_workflow.call(shipping_label: @resource)
40
36
 
41
- if result.success?
42
- render json: serialize_resource(result.value)
43
- else
44
- render_result_error(result)
45
- end
37
+ render_result(result)
46
38
  end
47
39
  end
48
40
 
@@ -56,22 +56,14 @@ module Spree
56
56
 
57
57
  result = Spree.payment_capture_workflow.call(payment: @resource, amount: amount)
58
58
 
59
- if result.success?
60
- render json: serialize_resource(result.value)
61
- else
62
- render_result_error(result)
63
- end
59
+ render_result(result)
64
60
  end
65
61
 
66
62
  # PATCH /api/v3/admin/orders/:order_id/payments/:id/void
67
63
  def void
68
64
  result = Spree.payment_void_workflow.call(payment: @resource)
69
65
 
70
- if result.success?
71
- render json: serialize_resource(result.value)
72
- else
73
- render_result_error(result)
74
- end
66
+ render_result(result)
75
67
  end
76
68
 
77
69
  protected
@@ -84,10 +76,6 @@ module Spree
84
76
  Spree.api.admin_payment_serializer
85
77
  end
86
78
 
87
- def parent_association
88
- :payments
89
- end
90
-
91
79
  def permitted_params
92
80
  params.permit(:amount, :payment_method_id, :source_id)
93
81
  end
@@ -33,11 +33,7 @@ module Spree
33
33
  order: @parent
34
34
  )
35
35
 
36
- if result.success?
37
- render json: serialize_resource(result.value), status: :created
38
- else
39
- render_result_error(result)
40
- end
36
+ render_result(result, status: :created)
41
37
  end
42
38
 
43
39
  protected
@@ -58,7 +58,7 @@ module Spree
58
58
  # are nested inside it.
59
59
  def complete
60
60
  with_order_lock do
61
- result = Spree.order_complete_service.call(
61
+ result = Spree.order_complete_workflow.call(
62
62
  order: @resource,
63
63
  payment_pending: params[:payment_pending].to_b,
64
64
  notify_customer: ActiveModel::Type::Boolean.new.cast(params[:notify_customer])
@@ -121,7 +121,7 @@ module Spree
121
121
  unless @resource.po_document.attached?
122
122
  return render_error(
123
123
  code: ERROR_CODES[:validation_error],
124
- message: Spree.t(:po_document_missing),
124
+ message: I18n.t('spree.po_document_missing'),
125
125
  status: :unprocessable_content
126
126
  )
127
127
  end
@@ -247,7 +247,7 @@ module Spree
247
247
  def render_invalid_po_document
248
248
  render_error(
249
249
  code: ERROR_CODES[:validation_error],
250
- message: Spree.t(:po_document_invalid_signed_id),
250
+ message: I18n.t('spree.po_document_invalid_signed_id'),
251
251
  status: :unprocessable_content
252
252
  )
253
253
  end
@@ -20,15 +20,17 @@ module Spree
20
20
  user = Spree.admin_user_class.find_by(email: params[:email])
21
21
 
22
22
  if user
23
- redirect_url = trusted_redirect_url(user)
24
- token = user.generate_token_for(:password_reset)
25
- event_payload = { reset_token: token, email: user.email, store_id: current_store.prefixed_id }
26
- event_payload[:redirect_url] = redirect_url if redirect_url.present?
27
- user.publish_event('admin_user.password_reset_requested', event_payload)
23
+ event_name = 'admin_user.password_reset_requested'
24
+ payload = user.event_payload_for(
25
+ event_name,
26
+ reset_token: user.generate_token_for(:password_reset), store: current_store,
27
+ redirect_url: trusted_redirect_url(user).presence
28
+ )
29
+ user.publish_event(event_name, payload)
28
30
  end
29
31
 
30
32
  # Always return 202 to prevent email enumeration
31
- render json: { message: Spree.t(:password_reset_requested, scope: :api) }, status: :accepted
33
+ render json: { message: I18n.t('spree.api.password_reset_requested') }, status: :accepted
32
34
  end
33
35
 
34
36
  # PATCH /api/v3/admin/password_resets/:id
@@ -38,7 +40,7 @@ module Spree
38
40
  unless user
39
41
  return render_error(
40
42
  code: ERROR_CODES[:password_reset_token_invalid],
41
- message: Spree.t(:password_reset_token_invalid, scope: :api),
43
+ message: I18n.t('spree.api.password_reset_token_invalid'),
42
44
  status: :unprocessable_content
43
45
  )
44
46
  end
@@ -3,8 +3,7 @@ module Spree
3
3
  module V3
4
4
  module Admin
5
5
  # Admin CRUD for `Spree::PriceList`, plus the lifecycle transitions
6
- # (`activate` / `deactivate`) and the spreadsheet's data feed
7
- # (`prices`).
6
+ # (`activate` / `deactivate`).
8
7
  #
9
8
  # Everything writable on the list itself — name, schedule, match
10
9
  # policy, nested rules (`rules: [...]`), and individual price
@@ -25,7 +24,7 @@ module Spree
25
24
  # before_actions by method name, so this would otherwise
26
25
  # *replace* the parent's narrower filter and break the standard
27
26
  # actions. Wrapping it under a different name keeps both.
28
- before_action :load_member_resource, only: [:activate, :deactivate, :prices]
27
+ before_action :load_member_resource, only: [:activate, :deactivate]
29
28
 
30
29
  # GET /api/v3/admin/price_lists/price_rule_types
31
30
  #
@@ -69,29 +68,6 @@ module Spree
69
68
  end
70
69
  end
71
70
 
72
- # GET /api/v3/admin/price_lists/:id/prices
73
- #
74
- # The spreadsheet editor's data source. Returns every Price row
75
- # in this list (filtered by `?currency=`), eager-loading
76
- # `variant.product` + option values so each cell can render
77
- # product name, variant options and SKU without N+1.
78
- def prices
79
- authorize! :read, @resource
80
- currency = params[:currency].presence || current_store.default_currency
81
- prices = @resource.prices
82
- .includes(variant: [:product, { option_values: :option_type }])
83
- .where(currency: currency)
84
- .joins(variant: :product)
85
- .order(Arel.sql("#{Spree::Product.table_name}.name ASC"))
86
- .order(Arel.sql("#{Spree::Variant.table_name}.position ASC"))
87
- .order(min_quantity: :asc)
88
-
89
- render json: {
90
- data: prices.map { |p| serialize_price(p) },
91
- meta: { currency: currency, count: prices.size }
92
- }
93
- end
94
-
95
71
  protected
96
72
 
97
73
  def model_class
@@ -124,6 +100,7 @@ module Spree
124
100
  def permitted_params
125
101
  normalize_params(
126
102
  params.permit(
103
+ *model_additional_permitted_attributes,
127
104
  :name, :description, :position,
128
105
  :starts_at, :ends_at, :match_policy,
129
106
  :price_adjustment_percentage, :adjust_compare_at,
@@ -138,36 +115,12 @@ module Spree
138
115
 
139
116
  # Loads the record without the action-derived authorization
140
117
  # `set_resource` runs (which would check `:activate` /
141
- # `:deactivate` / `:prices` — actions that abilities don't
142
- # grant). The per-action methods below explicitly call
143
- # `authorize!` with the standard action that ability rules
144
- # actually mention (`:update` / `:read`).
118
+ # `:deactivate` — actions that abilities don't grant). The
119
+ # per-action methods explicitly call `authorize!` with
120
+ # `:update`, which ability rules actually mention.
145
121
  def load_member_resource
146
122
  @resource = find_resource
147
123
  end
148
-
149
- # Hand-rolled flat shape for the spreadsheet — keeps the payload
150
- # narrow (no nested variant/product/option_value objects) and
151
- # avoids paying for the admin Price serializer when we only need
152
- # ~6 fields per row. The grouping the UI does (rows → product
153
- # header) is driven entirely off `product_id`/`product_name`.
154
- def serialize_price(price)
155
- variant = price.variant
156
- product = variant.product
157
- {
158
- id: price.prefixed_id,
159
- variant_id: variant.prefixed_id,
160
- product_id: product.prefixed_id,
161
- product_name: product.name,
162
- variant_label: variant.options_text.presence,
163
- sku: variant.sku,
164
- currency: price.currency,
165
- min_quantity: price.min_quantity,
166
- amount: price.amount&.to_s,
167
- compare_at_amount: price.compare_at_amount&.to_s
168
- }
169
- end
170
-
171
124
  end
172
125
  end
173
126
  end
@@ -58,10 +58,6 @@ module Spree
58
58
  # validations (docs/plans/6.0-volume-pricing.md). Each branch is
59
59
  # guarded on the key its own failure carries, so a failure mode the
60
60
  # service grows later is not reported under one of these names.
61
- #
62
- # `I18n.t` rather than `Spree.t` for these: the models raise them
63
- # under `activerecord.errors`, and `Spree.t` would scope the lookup
64
- # to `spree.` and miss the key.
65
61
  if (invalid = result.error&.value.try(:[], :invalid_quantities))
66
62
  return render_error(
67
63
  code: 'invalid_min_quantity',
@@ -45,7 +45,7 @@ module Spree
45
45
 
46
46
  data = Spree.digital_asset_providers.map do |provider_class|
47
47
  {
48
- type: provider_class.to_s,
48
+ type: provider_class.api_type,
49
49
  name: provider_class.provider_name,
50
50
  requires_attachment: provider_class.requires_attachment?,
51
51
  settings_schema: provider_class.settings_schema
@@ -70,10 +70,6 @@ module Spree
70
70
  authorize!(:show, @parent)
71
71
  end
72
72
 
73
- def parent_association
74
- :digital_assets
75
- end
76
-
77
73
  # The parent association reaches assets through `variants`, which
78
74
  # carries an ORDER BY on the variants table. Combined with the
79
75
  # collection's DISTINCT, PostgreSQL rejects the query outright
@@ -138,7 +134,7 @@ module Spree
138
134
  end
139
135
 
140
136
  def render_private_storage_error
141
- render_validation_error(Spree.t(:digital_assets_attachment_must_be_private))
137
+ render_validation_error(I18n.t('spree.digital_assets_attachment_must_be_private'))
142
138
  end
143
139
  end
144
140
  end
@@ -21,10 +21,6 @@ module Spree
21
21
  authorize!(:show, @parent)
22
22
  end
23
23
 
24
- def parent_association
25
- :variants
26
- end
27
-
28
24
  def scope_includes
29
25
  [:prices, stock_levels: :stock_location]
30
26
  end
@@ -54,7 +54,7 @@ module Spree
54
54
  unless Spree::Product::STATUSES.include?(params[:status].to_s)
55
55
  return render_error(
56
56
  code: 'invalid_status',
57
- message: Spree.t(:invalid_status, scope: 'errors.messages', default: 'Invalid status'),
57
+ message: I18n.t('spree.errors.messages.invalid_status'),
58
58
  status: :unprocessable_content
59
59
  )
60
60
  end
@@ -71,10 +71,6 @@ module Spree
71
71
  .find_by_prefix_id!(params[:promotion_id])
72
72
  end
73
73
 
74
- def parent_association
75
- :promotion_actions
76
- end
77
-
78
74
  private
79
75
 
80
76
  def build_subclassed_resource(klass, attrs)
@@ -45,10 +45,6 @@ module Spree
45
45
  .find_by_prefix_id!(params[:promotion_id])
46
46
  end
47
47
 
48
- def parent_association
49
- :promotion_rules
50
- end
51
-
52
48
  private
53
49
 
54
50
  def build_subclassed_resource(klass, attrs)
@@ -31,7 +31,7 @@ module Spree
31
31
 
32
32
  render_error(
33
33
  code: 'invalid_status',
34
- message: Spree.t('purchase_order.errors.only_draft_can_be_deleted'),
34
+ message: I18n.t('spree.purchase_order.errors.only_draft_can_be_deleted'),
35
35
  status: :unprocessable_content
36
36
  )
37
37
  end
@@ -84,7 +84,7 @@ module Spree
84
84
  def render_invalid_position
85
85
  render_error(
86
86
  code: ERROR_CODES[:validation_error],
87
- message: Spree.t('api.errors.invalid_position', default: 'new_position must be an integer'),
87
+ message: I18n.t('spree.api.errors.invalid_position'),
88
88
  status: :unprocessable_content
89
89
  )
90
90
  end