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
@@ -18,6 +18,7 @@ module Spree
18
18
  result = @cart.apply_gift_card(gift_card)
19
19
 
20
20
  if result.success?
21
+ sweep_unavailable_coupon_code!
21
22
  render_cart(status: :created)
22
23
  else
23
24
  render_service_error(result.error)
@@ -31,6 +32,7 @@ module Spree
31
32
  result = @cart.remove_gift_card
32
33
 
33
34
  if result.success?
35
+ sweep_unavailable_coupon_code!
34
36
  render_cart
35
37
  else
36
38
  render_service_error(result.error)
@@ -44,17 +46,17 @@ module Spree
44
46
  gift_card = @cart.store.gift_cards.find_by(code: permitted_params[:code]&.downcase)
45
47
 
46
48
  if gift_card.nil?
47
- render_error(code: ERROR_CODES[:gift_card_not_found], message: Spree.t(:gift_card_not_found), status: :not_found)
49
+ render_error(code: ERROR_CODES[:gift_card_not_found], message: I18n.t('spree.gift_card_not_found'), status: :not_found)
48
50
  return
49
51
  end
50
52
 
51
53
  if gift_card.expired?
52
- render_error(code: ERROR_CODES[:gift_card_expired], message: Spree.t(:gift_card_expired), status: :unprocessable_content)
54
+ render_error(code: ERROR_CODES[:gift_card_expired], message: I18n.t('spree.gift_card_expired'), status: :unprocessable_content)
53
55
  return
54
56
  end
55
57
 
56
58
  if gift_card.redeemed?
57
- render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: Spree.t(:gift_card_already_redeemed), status: :unprocessable_content)
59
+ render_error(code: ERROR_CODES[:gift_card_already_redeemed], message: I18n.t('spree.gift_card_already_redeemed'), status: :unprocessable_content)
58
60
  return
59
61
  end
60
62
 
@@ -21,6 +21,7 @@ module Spree
21
21
  )
22
22
 
23
23
  if result.success?
24
+ sweep_unavailable_coupon_code!
24
25
  render_cart(status: :created)
25
26
  else
26
27
  render_result_error(result)
@@ -41,7 +42,7 @@ module Spree
41
42
  if permitted_params[:quantity].to_i < 1
42
43
  return render_error(
43
44
  code: ERROR_CODES[:invalid_quantity],
44
- message: Spree.t('cart_line_item.quantity_must_be_positive'),
45
+ message: I18n.t('spree.cart_line_item.quantity_must_be_positive'),
45
46
  status: :unprocessable_content
46
47
  )
47
48
  end
@@ -56,6 +57,7 @@ module Spree
56
57
  )
57
58
 
58
59
  if result.success?
60
+ sweep_unavailable_coupon_code!
59
61
  render_cart
60
62
  else
61
63
  render_result_error(result)
@@ -67,6 +69,7 @@ module Spree
67
69
  @line_item.update!(metadata: @line_item.metadata.merge(permitted_params[:metadata].to_h))
68
70
  end
69
71
 
72
+ sweep_unavailable_coupon_code!
70
73
  render_cart
71
74
  end
72
75
  end
@@ -83,6 +86,7 @@ module Spree
83
86
  )
84
87
 
85
88
  if result.success?
89
+ sweep_unavailable_coupon_code!
86
90
  render_cart
87
91
  else
88
92
  render_result_error(result)
@@ -93,7 +97,7 @@ module Spree
93
97
  private
94
98
 
95
99
  def variant
96
- @variant ||= current_store.variants.find_by_prefix_id!(permitted_params[:variant_id])
100
+ @variant ||= @cart.orderable_variants.find_by_prefix_id!(permitted_params[:variant_id])
97
101
  end
98
102
 
99
103
  # Extension attributes ride in `options`, which is how AddItem
@@ -19,7 +19,7 @@ module Spree
19
19
  unless payment_method.available_for_order?(@cart)
20
20
  return render_error(
21
21
  code: 'payment_method_unavailable',
22
- message: Spree.t('api.v3.payments.method_unavailable'),
22
+ message: I18n.t('spree.api.v3.payments.method_unavailable'),
23
23
  status: :unprocessable_content
24
24
  )
25
25
  end
@@ -20,15 +20,17 @@ module Spree
20
20
  if payment_method.session_required?
21
21
  return render_error(
22
22
  code: 'payment_session_required',
23
- message: Spree.t('api.v3.payments.session_required'),
23
+ message: I18n.t('spree.api.v3.payments.session_required'),
24
24
  status: :unprocessable_content
25
25
  )
26
26
  end
27
27
 
28
- unless payment_method.available_for_order?(@cart)
28
+ # Store credit passes the lookup above but has its own endpoint, so
29
+ # it is never among the methods the cart offers.
30
+ unless @cart.payment_methods.include?(payment_method)
29
31
  return render_error(
30
32
  code: 'payment_method_unavailable',
31
- message: Spree.t('api.v3.payments.method_unavailable'),
33
+ message: I18n.t('spree.api.v3.payments.method_unavailable'),
32
34
  status: :unprocessable_content
33
35
  )
34
36
  end
@@ -94,8 +94,8 @@ module Spree
94
94
  def render_po_document_invalid
95
95
  render_error(
96
96
  code: ERROR_CODES[:parameter_invalid],
97
- message: Spree.t(
98
- :po_document_invalid,
97
+ message: I18n.t(
98
+ 'spree.po_document_invalid',
99
99
  size: ActiveSupport::NumberHelper.number_to_human_size(
100
100
  Spree::Purchase::PurchaseOrder::MAX_PO_DOCUMENT_SIZE
101
101
  )
@@ -19,6 +19,7 @@ module Spree
19
19
  )
20
20
 
21
21
  if result.success?
22
+ sweep_unavailable_coupon_code!
22
23
  render_cart
23
24
  else
24
25
  render_service_error(result.error)
@@ -32,6 +33,7 @@ module Spree
32
33
  result = Spree.store_credit_remove_service.call(order: @cart)
33
34
 
34
35
  if result.success?
36
+ sweep_unavailable_coupon_code!
35
37
  render_cart
36
38
  else
37
39
  render_service_error(result.error)
@@ -26,12 +26,13 @@ module Spree
26
26
  # with_order_lock, and a read must not 409 against the fence.
27
27
  if @cart.ship_address_id.present? && @cart.fulfillments.empty? && !@cart.completion_claimed?
28
28
  ActiveRecord::Base.connected_to(role: :writing) do
29
- with_order_lock { Spree::Checkout::Advance.call(order: @cart) }
29
+ with_order_lock { Spree.checkout_advance_service.call(order: @cart) }
30
30
  end
31
31
  end
32
32
 
33
33
  # The customer is returning to a cart that may have sat for days.
34
34
  sweep_unbuyable_lines!
35
+ sweep_unavailable_coupon_code!
35
36
  render_cart
36
37
  end
37
38
 
@@ -39,9 +40,9 @@ module Spree
39
40
  # Creates a new shopping cart (order)
40
41
  # Can be created by guests or authenticated customers
41
42
  def create
42
- result = Spree::Carts::Create.call(
43
+ result = Spree.carts_create_service.call(
43
44
  params: permitted_params.merge(
44
- user: current_user,
45
+ customer: current_user,
45
46
  store: current_store,
46
47
  channel: current_channel,
47
48
  currency: current_currency,
@@ -64,12 +65,13 @@ module Spree
64
65
  find_cart!
65
66
 
66
67
  with_order_lock do
67
- result = Spree::Carts::Update.call(
68
+ result = Spree.carts_update_service.call(
68
69
  cart: @cart,
69
70
  params: permitted_params
70
71
  )
71
72
 
72
73
  if result.success?
74
+ sweep_unavailable_coupon_code!
73
75
  render_cart
74
76
  else
75
77
  render_service_error(result.error, code: ERROR_CODES[:validation_error])
@@ -107,6 +109,7 @@ module Spree
107
109
  if result.success?
108
110
  # Signing in hands back a cart built earlier, possibly long ago.
109
111
  sweep_unbuyable_lines!
112
+ sweep_unavailable_coupon_code!
110
113
  render_cart
111
114
  else
112
115
  render_service_error(result.error.to_s)
@@ -121,7 +124,7 @@ module Spree
121
124
  find_cart!(include_completed: true)
122
125
 
123
126
  if @cart.guest_checkout_disallowed?
124
- return render_authentication_required('api.errors.guest_checkout_not_allowed', 'You must be signed in to complete checkout')
127
+ return render_authentication_required(I18n.t('spree.api.errors.guest_checkout_not_allowed'))
125
128
  end
126
129
 
127
130
  result = Spree::Dependencies.carts_complete_workflow.constantize.call(cart: @cart)
@@ -184,7 +187,7 @@ module Spree
184
187
  def render_invalid_po_document
185
188
  render_error(
186
189
  code: ERROR_CODES[:validation_error],
187
- message: Spree.t(:po_document_invalid_signed_id),
190
+ message: I18n.t('spree.po_document_invalid_signed_id'),
188
191
  status: :unprocessable_content
189
192
  )
190
193
  end
@@ -66,10 +66,6 @@ module Spree
66
66
  action_name == 'index' ? @parent.address_book : @parent.addresses
67
67
  end
68
68
 
69
- def parent_association
70
- :addresses
71
- end
72
-
73
69
  def permitted_params
74
70
  params.permit(:label, *Spree::Api::V3::AddressParams::ADDRESS_KEYS)
75
71
  end
@@ -15,7 +15,7 @@ module Spree
15
15
  else
16
16
  render_error(
17
17
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
18
- message: Spree.t('company_invitations.not_pending'),
18
+ message: I18n.t('spree.company_invitations.not_pending'),
19
19
  status: :unprocessable_content
20
20
  )
21
21
  end
@@ -38,10 +38,6 @@ module Spree
38
38
  def scope
39
39
  action_name == 'index' ? @parent.invitations.pending : @parent.invitations
40
40
  end
41
-
42
- def parent_association
43
- :invitations
44
- end
45
41
  end
46
42
  end
47
43
  end
@@ -52,7 +52,7 @@ module Spree
52
52
  else
53
53
  render_error(
54
54
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
55
- message: Spree.t('company_invitations.not_pending'),
55
+ message: I18n.t('spree.company_invitations.not_pending'),
56
56
  status: :unprocessable_content
57
57
  )
58
58
  end
@@ -49,10 +49,6 @@ module Spree
49
49
  @parent = current_user
50
50
  end
51
51
 
52
- def parent_association
53
- :addresses
54
- end
55
-
56
52
  def model_class
57
53
  Spree::Address
58
54
  end
@@ -12,10 +12,6 @@ module Spree
12
12
  @parent = current_user
13
13
  end
14
14
 
15
- def parent_association
16
- :credit_cards
17
- end
18
-
19
15
  # Customers are global; a saved card belongs to the store-scoped
20
16
  # payment method it was created against, so the nested collection is
21
17
  # bound to the current store's payment methods.
@@ -46,10 +46,6 @@ module Spree
46
46
  @parent = current_user
47
47
  end
48
48
 
49
- def parent_association
50
- :data_requests
51
- end
52
-
53
49
  # A person sees their own requests and no one else's. The store
54
50
  # narrowing is restated because the parent branch of the base scope
55
51
  # replaces `for_store` with the association, and a customer is
@@ -69,7 +65,6 @@ module Spree
69
65
  def erasure?
70
66
  params[:kind].to_s == Spree::DataRequest::ERASURE
71
67
  end
72
-
73
68
  end
74
69
  end
75
70
  end
@@ -23,10 +23,6 @@ module Spree
23
23
  @parent = current_user
24
24
  end
25
25
 
26
- def parent_association
27
- :digital_links
28
- end
29
-
30
26
  # The `digital_links` association reaches links through orders and
31
27
  # line items, so it carries a DISTINCT and inherits an ORDER BY on
32
28
  # the line items' table. PostgreSQL rejects DISTINCT combined with
@@ -12,10 +12,6 @@ module Spree
12
12
  @parent = current_user
13
13
  end
14
14
 
15
- def parent_association
16
- :gift_cards
17
- end
18
-
19
15
  def model_class
20
16
  Spree::GiftCard
21
17
  end
@@ -20,10 +20,6 @@ module Spree
20
20
  @parent = current_user
21
21
  end
22
22
 
23
- def parent_association
24
- :orders
25
- end
26
-
27
23
  def scope
28
24
  super.for_store(current_store).complete
29
25
  end
@@ -32,14 +32,16 @@ module Spree
32
32
  user = Spree.customer_class.find_by(email: params[:email])
33
33
 
34
34
  if user
35
- token = user.generate_token_for(:password_reset)
36
- event_payload = { reset_token: token, email: user.email, store_id: current_store.prefixed_id }
37
- event_payload[:redirect_url] = redirect_url if redirect_url.present?
38
- user.publish_event('customer.password_reset_requested', event_payload)
35
+ event_name = 'customer.password_reset_requested'
36
+ payload = user.event_payload_for(
37
+ event_name,
38
+ reset_token: user.generate_token_for(:password_reset), store: current_store, redirect_url: redirect_url.presence
39
+ )
40
+ user.publish_event(event_name, payload)
39
41
  end
40
42
 
41
43
  # Always return 202 to prevent email enumeration
42
- render json: { message: Spree.t(:password_reset_requested, scope: :api) }, status: :accepted
44
+ render json: { message: I18n.t('spree.api.password_reset_requested') }, status: :accepted
43
45
  end
44
46
 
45
47
  # PATCH /api/v3/store/password_resets/:id
@@ -49,7 +51,7 @@ module Spree
49
51
  unless user
50
52
  return render_error(
51
53
  code: ERROR_CODES[:password_reset_token_invalid],
52
- message: Spree.t(:password_reset_token_invalid, scope: :api),
54
+ message: I18n.t('spree.api.password_reset_token_invalid'),
53
55
  status: :unprocessable_content
54
56
  )
55
57
  end
@@ -50,10 +50,6 @@ module Spree
50
50
  @parent = current_user
51
51
  end
52
52
 
53
- def parent_association
54
- :payment_setup_sessions
55
- end
56
-
57
53
  def model_class
58
54
  Spree::PaymentSetupSession
59
55
  end
@@ -12,10 +12,6 @@ module Spree
12
12
  @parent = current_user
13
13
  end
14
14
 
15
- def parent_association
16
- :store_credits
17
- end
18
-
19
15
  def scope
20
16
  super.for_store(current_store).where(currency: current_currency)
21
17
  end
@@ -27,7 +23,6 @@ module Spree
27
23
  def serializer_class
28
24
  Spree.api.store_credit_serializer
29
25
  end
30
-
31
26
  end
32
27
  end
33
28
  end
@@ -30,7 +30,7 @@ module Spree
30
30
  unless data_request&.downloadable?
31
31
  return render_error(
32
32
  code: 'data_request_expired',
33
- message: Spree.t('data_request_errors.download_unavailable'),
33
+ message: I18n.t('spree.data_request_errors.download_unavailable'),
34
34
  status: :forbidden
35
35
  )
36
36
  end
@@ -26,7 +26,7 @@ module Spree
26
26
  def pickup_points
27
27
  provider = find_resource.pickup_point_provider_instance
28
28
  if provider.nil?
29
- return render_error(code: ERROR_CODES[:record_not_found], message: Spree.t('errors.messages.no_pickup_point_provider'), status: :not_found)
29
+ return render_error(code: ERROR_CODES[:record_not_found], message: I18n.t('spree.errors.messages.no_pickup_point_provider'), status: :not_found)
30
30
  end
31
31
 
32
32
  latitude = params[:latitude].presence&.to_f
@@ -43,7 +43,7 @@ module Spree
43
43
  unless subscriber
44
44
  return render_error(
45
45
  code: ERROR_CODES[:invalid_token],
46
- message: Spree.t(:newsletter_verification_token_invalid, scope: :api),
46
+ message: I18n.t('spree.api.newsletter_verification_token_invalid'),
47
47
  status: :unprocessable_content
48
48
  )
49
49
  end
@@ -64,7 +64,7 @@ module Spree
64
64
  if subscriber.blank?
65
65
  return render_error(
66
66
  code: ERROR_CODES[:invalid_token],
67
- message: Spree.t(:newsletter_unsubscribe_token_invalid, scope: :api),
67
+ message: I18n.t('spree.api.newsletter_unsubscribe_token_invalid'),
68
68
  status: :unprocessable_content
69
69
  )
70
70
  end
@@ -87,18 +87,9 @@ module Spree
87
87
  subscriber = Spree::NewsletterSubscriber.for_store(current_store).find_by(email: params[:email])
88
88
 
89
89
  if subscriber
90
- payload = {
91
- id: subscriber.prefixed_id,
92
- email: subscriber.email,
93
- unsubscribe_token: subscriber.generate_token_for(:unsubscribe),
94
- store_id: current_store.prefixed_id,
95
- customer_id: subscriber.customer&.prefixed_id
96
- }
97
-
98
- redirect_url = validated_redirect_url
99
- payload[:redirect_url] = redirect_url if redirect_url.present?
100
-
101
- subscriber.publish_event('newsletter_subscriber.unsubscribe_requested', payload)
90
+ event_name = 'newsletter_subscriber.unsubscribe_requested'
91
+ payload = subscriber.event_payload_for(event_name, store: current_store, redirect_url: validated_redirect_url.presence)
92
+ subscriber.publish_event(event_name, payload)
102
93
  end
103
94
 
104
95
  head :accepted
@@ -18,11 +18,7 @@ module Spree
18
18
  memo: create_params[:memo]
19
19
  )
20
20
 
21
- if result.success?
22
- render json: serialize_resource(result.value), status: :created
23
- else
24
- render_result_error(result)
25
- end
21
+ render_result(result, status: :created)
26
22
  end
27
23
 
28
24
  protected
@@ -37,11 +37,7 @@ module Spree
37
37
  memo: create_params[:memo]
38
38
  )
39
39
 
40
- if result.success?
41
- render json: serialize_resource(result.value), status: :created
42
- else
43
- render_result_error(result)
44
- end
40
+ render_result(result, status: :created)
45
41
  end
46
42
 
47
43
  protected
@@ -16,10 +16,6 @@ module Spree
16
16
  authorize_storefront_write!(@parent)
17
17
  end
18
18
 
19
- def parent_association
20
- :wishlist_items
21
- end
22
-
23
19
  def model_class
24
20
  Spree::WishlistItem
25
21
  end
@@ -24,18 +24,16 @@ module Spree
24
24
  address.longitude&.to_f
25
25
  end
26
26
 
27
- attribute :customer_id do |address|
28
- address.customer_owner&.prefixed_id
29
- end
27
+ prefixed_id_attributes customer_id: :customer_owner
30
28
 
31
29
  # Who the row belongs to — a customer's book, a company node's, or a
32
30
  # seller's billing address. `customer_id` above stays as the
33
31
  # customer-only shorthand the customers surface reads.
34
- attribute :owner_id do |address|
35
- address.owner&.prefixed_id
36
- end
32
+ prefixed_id_attributes :owner
37
33
 
38
- attributes :owner_type
34
+ attribute :owner_type do |address|
35
+ Spree::Base.polymorphic_api_type(address.owner_type)
36
+ end
39
37
  end
40
38
  end
41
39
  end
@@ -27,17 +27,13 @@ module Spree
27
27
  created_at: :iso8601, updated_at: :iso8601,
28
28
  revoked_at: :iso8601, last_used_at: :iso8601
29
29
 
30
- attribute :channel_id do |key|
31
- key.channel&.prefixed_id
32
- end
30
+ prefixed_id_attributes :channel
33
31
 
34
32
  # Returned only on the create response — `plaintext_token` is held in
35
33
  # memory on the model after `generate_token` and is never persisted
36
34
  # for secret keys, so we serialize it whenever it's available rather
37
35
  # than gating on the action.
38
- attribute :plaintext_token do |key|
39
- key.plaintext_token
40
- end
36
+ attributes :plaintext_token
41
37
 
42
38
  # A key can be minted by another key, which has no email — so the
43
39
  # address is answered only for the actors that have one, and
@@ -18,9 +18,7 @@ module Spree
18
18
  assignment.assignable_type.demodulize.underscore
19
19
  end
20
20
 
21
- attribute :assignable_id do |assignment|
22
- assignment.assignable&.prefixed_id
23
- end
21
+ prefixed_id_attributes :assignable
24
22
 
25
23
  attribute :assignable_name do |assignment|
26
24
  assignment.assignable.try(:name)
@@ -9,13 +9,7 @@ module Spree
9
9
 
10
10
  attributes :currency, created_at: :iso8601, updated_at: :iso8601
11
11
 
12
- attribute :amount do |minimum|
13
- minimum.amount.to_s
14
- end
15
-
16
- attribute :display_amount do |minimum|
17
- minimum.display_amount.to_s
18
- end
12
+ attributes amount: :string, display_amount: :string
19
13
  end
20
14
  end
21
15
  end
@@ -28,9 +28,7 @@ module Spree
28
28
  # True when the product's variants carry different terms, so the
29
29
  # editor shows "mixed" rather than claiming one variant's pair is
30
30
  # the product's.
31
- attribute :mixed do |term|
32
- term.mixed?
33
- end
31
+ attribute :mixed, &:mixed?
34
32
  end
35
33
  end
36
34
  end
@@ -15,9 +15,7 @@ module Spree
15
15
  attributes :minimum_order_quantity, :order_multiple,
16
16
  created_at: :iso8601, updated_at: :iso8601
17
17
 
18
- attribute :variant_id do |rule|
19
- rule.variant&.prefixed_id
20
- end
18
+ prefixed_id_attributes :variant
21
19
 
22
20
  attribute :variant_sku do |rule|
23
21
  rule.variant&.sku
@@ -4,17 +4,18 @@ module Spree
4
4
  module Admin
5
5
  class ChannelSerializer < V3::ChannelSerializer
6
6
  typelize store_id: :string,
7
- preferred_order_routing_strategy: [:string, nullable: true],
7
+ preferred_order_routing_strategy: [:string, nullable: true, comment: 'Order routing strategy; null inherits the store setting. Built-in: rules. Extensions may register more.'],
8
8
  preferred_storefront_access: [:string, nullable: true],
9
9
  preferred_guest_checkout: [:boolean, nullable: true],
10
10
  stock_location_ids: [:string, multi: true],
11
11
  default_catalog_id: [:string, nullable: true]
12
12
 
13
- attributes :preferred_order_routing_strategy,
14
- :preferred_storefront_access,
13
+ attributes :preferred_storefront_access,
15
14
  :preferred_guest_checkout,
16
15
  created_at: :iso8601, updated_at: :iso8601
17
16
 
17
+ api_type_attributes :preferred_order_routing_strategy
18
+
18
19
  # Fulfillment-origin allowlist; empty means every store location
19
20
  # serves this channel.
20
21
  attribute :stock_location_ids do |record|
@@ -23,9 +24,7 @@ module Spree
23
24
 
24
25
  # When set, only the default catalog's products are visible on this
25
26
  # channel; unset means every publication.
26
- attribute :default_catalog_id do |record|
27
- record.default_catalog&.prefixed_id
28
- end
27
+ prefixed_id_attributes :default_catalog
29
28
  end
30
29
  end
31
30
  end
@@ -11,9 +11,7 @@ module Spree
11
11
 
12
12
  # Lets the dashboard hide destructive controls instead of offering a
13
13
  # delete that the model will refuse.
14
- attribute :can_be_deleted do |reason|
15
- reason.can_be_deleted?
16
- end
14
+ attribute :can_be_deleted, &:can_be_deleted?
17
15
  end
18
16
  end
19
17
  end