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
@@ -16,6 +16,12 @@ module Spree
16
16
  customer_support_email: [:string, nullable: true],
17
17
  new_order_notifications_email: [:string, nullable: true],
18
18
  preferred_send_consumer_transactional_emails: :boolean,
19
+ preferred_email_accent_color: [:string, nullable: true],
20
+ preferred_email_background_color: [:string, nullable: true],
21
+ preferred_email_card_color: [:string, nullable: true],
22
+ preferred_email_text_color: [:string, nullable: true],
23
+ preferred_email_heading_color: [:string, nullable: true],
24
+ preferred_email_font: [:string, nullable: true, enum: Spree::Emails::Branding::FONTS.keys],
19
25
  preferred_admin_locale: [:string, nullable: true],
20
26
  preferred_timezone: :string,
21
27
  preferred_weight_unit: [:string, enum: Spree::Variant::WEIGHT_UNITS],
@@ -34,12 +40,12 @@ module Spree
34
40
  preferred_track_price_history: :boolean,
35
41
  preferred_show_products_without_price: :boolean,
36
42
  preferred_disable_sku_validation: :boolean,
37
- preferred_order_routing_strategy: :string,
43
+ preferred_order_routing_strategy: [:string, comment: 'Order routing strategy. Built-in: rules. Extensions may register more.'],
38
44
  preferred_pricing_provider: :string,
39
45
  preferred_inventory_provider: :string,
40
46
  preferred_pricing_provider_failure_policy: :string,
41
47
  preferred_inventory_provider_failure_policy: :string,
42
- preferred_payout_provider: 'string | null',
48
+ preferred_payout_provider: [:string, nullable: true, comment: 'Payout provider; null uses the installation default. Built-in: system. Provider gems register more (e.g. stripe).'],
43
49
  preferred_default_payouts_schedule_interval: :string,
44
50
  preferred_default_minimum_payout_amount: :number,
45
51
  preferred_auto_approve_sellers: :boolean,
@@ -68,6 +74,12 @@ module Spree
68
74
  :customer_support_email,
69
75
  :new_order_notifications_email,
70
76
  :preferred_send_consumer_transactional_emails,
77
+ :preferred_email_accent_color,
78
+ :preferred_email_background_color,
79
+ :preferred_email_card_color,
80
+ :preferred_email_text_color,
81
+ :preferred_email_heading_color,
82
+ :preferred_email_font,
71
83
  :preferred_admin_locale,
72
84
  :preferred_timezone,
73
85
  :preferred_weight_unit,
@@ -86,18 +98,14 @@ module Spree
86
98
  :preferred_track_price_history,
87
99
  :preferred_show_products_without_price,
88
100
  :preferred_disable_sku_validation,
89
- :preferred_order_routing_strategy,
90
101
  :preferred_pricing_provider,
91
102
  :preferred_inventory_provider,
92
103
  :preferred_pricing_provider_failure_policy,
93
104
  :preferred_inventory_provider_failure_policy,
94
- :preferred_payout_provider,
95
105
  :preferred_default_payouts_schedule_interval,
96
- :preferred_default_minimum_payout_amount,
97
106
  :preferred_auto_approve_sellers,
98
107
  :preferred_auto_approve_seller_products,
99
108
  :preferred_send_seller_transactional_emails,
100
- :preferred_default_commission_tax_rate,
101
109
  :preferred_document_number_format,
102
110
  :preferred_order_number_prefix,
103
111
  :preferred_order_number_suffix,
@@ -108,6 +116,8 @@ module Spree
108
116
  :preferred_digital_asset_authorized_days,
109
117
  created_at: :iso8601, updated_at: :iso8601
110
118
 
119
+ api_type_attributes :preferred_order_routing_strategy, :preferred_payout_provider
120
+
111
121
  # Once the counter has issued a number the starting value no longer
112
122
  # applies, so the settings page can say that instead of accepting a
113
123
  # value that does nothing.
@@ -115,6 +125,14 @@ module Spree
115
125
  Spree::NumberSequence.started?(store: store)
116
126
  end
117
127
 
128
+ attribute :preferred_default_minimum_payout_amount do |store|
129
+ store.preferred_default_minimum_payout_amount&.to_f
130
+ end
131
+
132
+ attribute :preferred_default_commission_tax_rate do |store|
133
+ store.preferred_default_commission_tax_rate&.to_f
134
+ end
135
+
118
136
  attribute :url, &:storefront_url
119
137
 
120
138
  # The backend's own public URL — what a headless client sets as its
@@ -29,9 +29,7 @@ module Spree
29
29
 
30
30
  # Lets the dashboard hide the delete control rather than offer one
31
31
  # the model will refuse.
32
- attribute :can_be_deleted do |supplier|
33
- supplier.can_be_deleted?
34
- end
32
+ attribute :can_be_deleted, &:can_be_deleted?
35
33
  end
36
34
  end
37
35
  end
@@ -19,9 +19,7 @@ module Spree
19
19
  issued_at: :iso8601, expires_at: :iso8601, verified_at: :iso8601,
20
20
  created_at: :iso8601, updated_at: :iso8601
21
21
 
22
- attribute :company_id do |certificate|
23
- certificate.company&.prefixed_id
24
- end
22
+ prefixed_id_attributes :company
25
23
 
26
24
  # The jurisdiction the certificate holds in, in the same vocabulary the
27
25
  # tax lines use.
@@ -33,14 +31,10 @@ module Spree
33
31
  certificate.verified? && !certificate.lapsed?
34
32
  end
35
33
 
36
- attribute :lapsed do |certificate|
37
- certificate.lapsed?
38
- end
34
+ attribute :lapsed, &:lapsed?
39
35
 
40
36
  # Lets the dashboard hide a delete the model will refuse.
41
- attribute :can_be_deleted do |certificate|
42
- certificate.can_be_deleted?
43
- end
37
+ attribute :can_be_deleted, &:can_be_deleted?
44
38
 
45
39
  attribute :document_filename do |certificate|
46
40
  certificate.document.blob&.filename&.to_s if certificate.document.attached?
@@ -18,9 +18,7 @@ module Spree
18
18
  # Whether this installation can check a number of this kind at all —
19
19
  # what tells a nil verdict "not checked yet" apart from "nothing here
20
20
  # knows how to ask".
21
- attribute :validatable do |tax_identifier|
22
- tax_identifier.validatable?
23
- end
21
+ attribute :validatable, &:validatable?
24
22
 
25
23
  # The owner, reported under the name of what it is, so a client can
26
24
  # tell a customer's durable registration from a cart override or an
@@ -6,7 +6,8 @@ module Spree
6
6
  typelize amount: [:string, nullable: false], display_amount: [:string, nullable: false],
7
7
  provider_id: [:string, nullable: true], metadata: ['Record<string, unknown>', nullable: true],
8
8
  taxability_reason: [:string, nullable: true], country_code: [:string, nullable: true],
9
- state_code: [:string, nullable: true], data: ['Record<string, unknown>', nullable: true]
9
+ state_code: [:string, nullable: true], data: ['Record<string, unknown>', nullable: true],
10
+ original_tax_line_id: [:string, nullable: true]
10
11
 
11
12
  # The treatment and its jurisdiction stay admin-only: no surveyed
12
13
  # platform shows a buyer a machine-readable tax reason, and `label`
@@ -14,6 +15,9 @@ module Spree
14
15
  # breakdown, which is what an e-invoicing integration reads.
15
16
  attributes :provider_id, :metadata, :taxability_reason, :country_code, :state_code, :data,
16
17
  created_at: :iso8601, updated_at: :iso8601
18
+
19
+ # The sale row a credit gives back.
20
+ prefixed_id_attributes :original_tax_line
17
21
  end
18
22
  end
19
23
  end
@@ -30,13 +30,7 @@ module Spree
30
30
  tax_rate.amount_percentage&.to_f
31
31
  end
32
32
 
33
- attribute :tax_category_id do |tax_rate|
34
- tax_rate.tax_category&.prefixed_id
35
- end
36
-
37
- attribute :store_id do |tax_rate|
38
- tax_rate.store&.prefixed_id
39
- end
33
+ prefixed_id_attributes :tax_category, :store
40
34
 
41
35
  # The jurisdiction the rate taxes, as codes: a null country means every
42
36
  # country, and a country with no state means the whole country. Read
@@ -40,12 +40,13 @@ module Spree
40
40
  preorder_ships_at: :iso8601, deleted_at: :iso8601,
41
41
  created_at: :iso8601, updated_at: :iso8601
42
42
 
43
- attribute :preorderable do |variant|
44
- variant.preorderable?
45
- end
43
+ attribute :preorderable, &:preorderable?
46
44
 
45
+ # Stored on the row only — nil means inherit from the product. The
46
+ # model's +tax_category+ reader resolves the effective category for
47
+ # tax; the admin form needs the raw column to tell override from inherit.
47
48
  attribute :tax_category_id do |variant|
48
- variant.tax_category&.prefixed_id
49
+ Spree::TaxCategory.prefixed_id_for(variant[:tax_category_id])
49
50
  end
50
51
 
51
52
  # Encoded from the foreign key: loading the carton row just to
@@ -82,9 +83,7 @@ module Spree
82
83
  # seller's row ships; on an owned product the write is a no-op, since
83
84
  # every variant ships as the product does. The dashboard need not
84
85
  # know which.
85
- attribute :delivery_profile_id do |variant|
86
- variant.resolved_delivery_profile&.prefixed_id
87
- end
86
+ prefixed_id_attributes delivery_profile_id: :resolved_delivery_profile
88
87
 
89
88
  one :seller,
90
89
  resource: proc { Spree.api.admin_seller_serializer },
@@ -38,9 +38,7 @@ module Spree
38
38
  Spree::WebhookPayloadRedaction.split(delivery.payload).first
39
39
  end
40
40
 
41
- attribute :webhook_endpoint_id do |delivery|
42
- delivery.webhook_endpoint&.prefixed_id
43
- end
41
+ prefixed_id_attributes :webhook_endpoint
44
42
 
45
43
  # Delegated from the parent endpoint — saves callers from having to
46
44
  # join the endpoint payload to show "where did this delivery go?".
@@ -0,0 +1,23 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # One event catalog entry (Spree::Events::Catalog::Entry).
6
+ class WebhookEventSerializer
7
+ include Alba::Resource
8
+ include Typelizer::DSL
9
+
10
+ typelize name: :string, group: :string, credential: :boolean,
11
+ credential_permission: [:string, nullable: true],
12
+ deprecated: :boolean, replaced_by: [:string, nullable: true]
13
+
14
+ attributes :name, :group, :credential_permission
15
+
16
+ attribute(:credential, &:credential?)
17
+ attribute(:deprecated, &:deprecated?)
18
+ attribute(:replaced_by, &:deprecated_alias_of)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -6,11 +6,9 @@ module Spree
6
6
  # the typed Spree::Discount money rows.
7
7
  class AppliedPromotionSerializer < BaseSerializer
8
8
  typelize name: :string, description: [:string, nullable: true], code: [:string, nullable: true],
9
- amount: [:string, nullable: true], display_amount: [:string, nullable: true], promotion_id: :string
9
+ promotion_id: :string
10
10
 
11
- attribute :promotion_id do |record|
12
- record.promotion&.prefixed_id
13
- end
11
+ prefixed_id_attributes :promotion
14
12
 
15
13
  attributes :name, :description, :code
16
14
 
@@ -22,11 +22,31 @@ module Spree
22
22
  # (product prices AND cart/order/line-item totals) is gated from one
23
23
  # place instead of per-attribute opt-in.
24
24
  def self.money_attributes(*names)
25
+ typelize(**names.index_with { [:string, nullable: true] })
26
+
25
27
  names.each do |name|
26
28
  attribute(name) { |object| object.public_send(name) unless params[:hide_prices] }
27
29
  end
28
30
  end
29
31
 
32
+ # Declares `<association>_id` attributes carrying the associated
33
+ # record's prefixed id, or nil when there is none. Pass
34
+ # `seller_id: :resolved_seller` when the attribute name and the
35
+ # association it reads differ.
36
+ def self.prefixed_id_attributes(*associations, **renamed)
37
+ associations.index_by { |association| :"#{association}_id" }.merge(renamed).each do |name, association|
38
+ attribute(name) { |object| object.public_send(association)&.prefixed_id }
39
+ end
40
+ end
41
+
42
+ # Declares attributes whose column stores a provider or strategy class
43
+ # name, sent as its shorthand (`manual`, `rules`) instead.
44
+ def self.api_type_attributes(*names)
45
+ names.each do |name|
46
+ attribute(name) { |object| Spree::ApiTyped.api_type_for(object.public_send(name)) }
47
+ end
48
+ end
49
+
30
50
  # Declares the wire form of an `acted_by` association: the actor's
31
51
  # prefixed id, the kind of actor it is, and the expansion. Both
32
52
  # halves read off the columns, so naming an actor costs no query and
@@ -4,58 +4,36 @@ module Spree
4
4
  # Store API Cart Serializer
5
5
  # Pre-purchase cart data with checkout progression info
6
6
  class CartSerializer < BaseSerializer
7
- typelize number: :string, current_step: :string, completed_steps: 'string[]', token: :string, email: [:string, nullable: true],
8
- customer_note: [:string, nullable: true], market_id: [:string, nullable: true], channel_id: [:string, nullable: true],
9
- currency: :string, locale: [:string, nullable: true], total_quantity: :number,
10
- coupon_code: [:string, nullable: true],
11
- preferred_stock_location_id: [:string, nullable: true],
12
- company_id: [:string, nullable: true], company_name: [:string, nullable: true],
13
- po_number: [:string, nullable: true], po_number_required: :boolean,
14
- po_document_filename: [:string, nullable: true],
15
- po_document_byte_size: ['number | null'],
16
- order_minimum: ['number | null'], order_minimum_shortfall: ['number | null'],
17
- below_order_minimum: ['boolean | null'],
7
+ typelize number: :string, current_step: :string, completed_steps: 'string[]', token: :string,
8
+ email: [:string, nullable: true], customer_note: [:string, nullable: true],
9
+ market_id: [:string, nullable: true], channel_id: [:string, nullable: true], currency: :string,
10
+ locale: [:string, nullable: true], total_quantity: :number, coupon_code: [:string, nullable: true],
11
+ preferred_stock_location_id: [:string, nullable: true], company_id: [:string, nullable: true],
12
+ company_name: [:string, nullable: true], po_number: [:string, nullable: true],
13
+ po_number_required: :boolean, po_document_filename: [:string, nullable: true],
14
+ po_document_byte_size: ['number | null'], order_minimum: ['number | null'],
15
+ order_minimum_shortfall: ['number | null'], below_order_minimum: ['boolean | null'],
18
16
  freight_summary: [:FreightSummary, nullable: true],
19
17
  requirements: 'Array<{step: string, field: string, code: string, message: string}>',
20
- item_total: [:string, nullable: true], display_item_total: [:string, nullable: true],
21
- delivery_total: [:string, nullable: true], display_delivery_total: [:string, nullable: true],
22
- adjustment_total: [:string, nullable: true], display_adjustment_total: [:string, nullable: true],
23
- discount_total: [:string, nullable: true], display_discount_total: [:string, nullable: true],
24
- tax_total: [:string, nullable: true], display_tax_total: [:string, nullable: true],
25
- included_tax_total: [:string, nullable: true], display_included_tax_total: [:string, nullable: true],
26
- additional_tax_total: [:string, nullable: true], display_additional_tax_total: [:string, nullable: true],
27
- fee_total: [:string, nullable: true], display_fee_total: [:string, nullable: true],
28
18
  store_credit_total: [:string, nullable: true], display_store_credit_total: [:string, nullable: true],
29
- gift_card_total: [:string, nullable: true], display_gift_card_total: [:string, nullable: true],
30
- covered_by_store_credit: :boolean,
31
- total: [:string, nullable: true], display_total: [:string, nullable: true],
32
- amount_due: [:string, nullable: true], display_amount_due: [:string, nullable: true],
33
- shipping_eq_billing_address: :boolean,
19
+ covered_by_store_credit: :boolean, shipping_eq_billing_address: :boolean,
34
20
  warnings: 'Array<{code: string, message: string, line_item_id?: string, variant_id?: string, item_index?: number}>',
35
21
  billing_address: { nullable: true }, shipping_address: { nullable: true },
36
22
  gift_card: { nullable: true }, market: { nullable: true }
37
23
 
38
- attribute :market_id do |order|
39
- order.market&.prefixed_id
40
- end
24
+ prefixed_id_attributes :market
41
25
 
42
26
  # Which surface this cart belongs to — lets a multi-channel storefront
43
27
  # verify a cookie-persisted cart against its own channel before
44
28
  # adopting it (see the wholesale reference storefront's cart guard).
45
- attribute :channel_id do |order|
46
- order.channel&.prefixed_id
47
- end
29
+ prefixed_id_attributes :channel
48
30
 
49
31
  # Pickup selection — mirrors the writable param on cart update.
50
- attribute :preferred_stock_location_id do |cart|
51
- cart.preferred_stock_location&.prefixed_id
52
- end
32
+ prefixed_id_attributes :preferred_stock_location
53
33
 
54
34
  # Which company node the purchase is for — mirrors the writable
55
35
  # `company_id` param. Read from the column, never re-resolved.
56
- attribute :company_id do |cart|
57
- cart.company&.prefixed_id
58
- end
36
+ prefixed_id_attributes :company
59
37
 
60
38
  attribute :company_name do |cart|
61
39
  cart.company&.name
@@ -64,9 +42,7 @@ module Spree
64
42
  # The buyer's own purchase-order reference, and whether their company
65
43
  # demands one — the storefront marks the field required from this
66
44
  # rather than fetching the company to ask.
67
- attribute :po_number_required do |cart|
68
- cart.po_number_required?
69
- end
45
+ attribute :po_number_required, &:po_number_required?
70
46
 
71
47
  attribute :po_document_filename do |cart|
72
48
  cart.po_document.blob&.filename&.to_s if cart.po_document.attached?
@@ -101,9 +77,7 @@ module Spree
101
77
  order.display_total_applied_store_credit.to_s unless params[:hide_prices]
102
78
  end
103
79
 
104
- attribute :covered_by_store_credit do |order|
105
- order.covered_by_store_credit?
106
- end
80
+ attribute :covered_by_store_credit, &:covered_by_store_credit?
107
81
 
108
82
  attribute :current_step do |order|
109
83
  order.current_checkout_step
@@ -153,9 +127,7 @@ module Spree
153
127
  # withhold.
154
128
  one :freight_summary, resource: proc { Spree.api.freight_summary_serializer }
155
129
 
156
- attribute :shipping_eq_billing_address do |order|
157
- order.shipping_eq_billing_address?
158
- end
130
+ attribute :shipping_eq_billing_address, &:shipping_eq_billing_address?
159
131
 
160
132
  many :order_promotions, key: :discounts, resource: proc { Spree.api.applied_promotion_serializer }
161
133
  # Itemized charges (duties, surcharges, COD, handling). Storefronts
@@ -13,17 +13,13 @@ module Spree
13
13
  :meta_title, :meta_description, :meta_keywords,
14
14
  :children_count
15
15
 
16
- attribute :parent_id do |category|
17
- category.parent&.prefixed_id
18
- end
16
+ prefixed_id_attributes :parent
19
17
 
20
18
  attribute :description do |category|
21
19
  Spree::RichTextHelper.to_plain_text(category.description)
22
20
  end
23
21
 
24
- attribute :description_html do |category|
25
- category.description_html
26
- end
22
+ attributes :description_html
27
23
 
28
24
  attribute :image_url do |category|
29
25
  image_url_for(category.image)
@@ -33,17 +29,11 @@ module Spree
33
29
  image_url_for(category.square_image)
34
30
  end
35
31
 
36
- attribute :is_root do |category|
37
- category.root?
38
- end
32
+ attribute :is_root, &:root?
39
33
 
40
- attribute :is_child do |category|
41
- category.child?
42
- end
34
+ attribute :is_child, &:child?
43
35
 
44
- attribute :is_leaf do |category|
45
- category.leaf?
46
- end
36
+ attribute :is_leaf, &:leaf?
47
37
 
48
38
  # Conditional associations
49
39
  # Note: We pass empty expand to nested categories to prevent infinite recursion
@@ -9,6 +9,10 @@ module Spree
9
9
  refund_amount: :string,
10
10
  display_refund_amount: :string,
11
11
  paid_amount: :string,
12
+ pre_tax_amount: :string,
13
+ included_tax_total: :string,
14
+ additional_tax_total: :string,
15
+ tax_total: :string,
12
16
  description: [:string, nullable: true],
13
17
  variant_id: [:string, nullable: true],
14
18
  replacement_variant_id: [:string, nullable: true],
@@ -16,32 +20,13 @@ module Spree
16
20
 
17
21
  attributes :quantity, :send_replacement, :description
18
22
 
19
- attribute :refund_amount do |line|
20
- line.refund_amount.to_s
21
- end
22
-
23
- # What the customer actually paid for these units — the ceiling the
24
- # resolve workflow enforces, and what the dashboard offers when the
25
- # claim carries no explicit amount.
26
- attribute :paid_amount do |line|
27
- line.paid_amount.to_s
28
- end
29
-
30
- attribute :display_refund_amount do |line|
31
- line.display_refund_amount.to_s
32
- end
33
-
34
- attribute :variant_id do |line|
35
- line.variant&.prefixed_id
36
- end
37
-
38
- attribute :replacement_variant_id do |line|
39
- line.replacement_variant&.prefixed_id
40
- end
41
-
42
- attribute :line_item_id do |line|
43
- line.line_item&.prefixed_id
44
- end
23
+ attributes refund_amount: :string
24
+ # What the customer actually paid for these units, tax included — the
25
+ # ceiling the resolve workflow enforces, and what the dashboard offers
26
+ # when the claim carries no explicit amount.
27
+ attributes paid_amount: :string, pre_tax_amount: :string, included_tax_total: :string,
28
+ additional_tax_total: :string, tax_total: :string, display_refund_amount: :string
29
+ prefixed_id_attributes :variant, :replacement_variant, :line_item
45
30
 
46
31
  one :variant, resource: proc { Spree.api.variant_serializer }, if: proc { expand?('variant') }
47
32
  end
@@ -19,22 +19,9 @@ module Spree
19
19
 
20
20
  attributes :number, :status, :resolution
21
21
 
22
- attribute :order_id do |claim|
23
- claim.order&.prefixed_id
24
- end
25
-
26
- attribute :reason_id do |claim|
27
- claim.reason&.prefixed_id
28
- end
29
-
30
- attribute :refund_total do |claim|
31
- claim.refund_total.to_s
32
- end
33
-
34
- attribute :display_refund_total do |claim|
35
- claim.display_refund_total.to_s
36
- end
22
+ prefixed_id_attributes :order, :reason
37
23
 
24
+ attributes refund_total: :string, display_refund_total: :string
38
25
  attribute :approved_at do |claim|
39
26
  claim.approved_at&.iso8601
40
27
  end
@@ -19,9 +19,7 @@ module Spree
19
19
  Spree::RichTextHelper.to_plain_text(collection.description)
20
20
  end
21
21
 
22
- attribute :description_html do |collection|
23
- collection.description_html
24
- end
22
+ attributes :description_html
25
23
 
26
24
  attribute :image_url do |collection|
27
25
  image_url_for(collection.image)
@@ -15,9 +15,7 @@ module Spree
15
15
  # the PO field required from it.
16
16
  attributes :name, :kind, :po_number_required
17
17
 
18
- attribute :parent_id do |company|
19
- company.parent&.prefixed_id
20
- end
18
+ prefixed_id_attributes :parent
21
19
 
22
20
  # The path above this node, root first — lets a client render
23
21
  # "Acme / EMEA / Berlin" without a request per level. Bounded by the
@@ -6,11 +6,10 @@ module Spree
6
6
  class CustomFieldSerializer < BaseSerializer
7
7
  typelize key: :string,
8
8
  label: :string,
9
- type: [:string, deprecated: 'Use `field_type` instead. The legacy `type` field returns the Ruby STI class name (e.g. `Spree::CustomFields::ShortText`) and will be removed in a future minor.'],
10
9
  field_type: Spree::CustomField::FIELD_TYPE_TOKENS,
11
10
  value: :any
12
11
 
13
- attributes :label, :type, :field_type
12
+ attributes :label, :field_type
14
13
 
15
14
  attribute :key, &:full_key
16
15
  attribute :value, &:serialize_value
@@ -14,9 +14,7 @@ module Spree
14
14
  unpriced: :boolean,
15
15
  freight_summary: [:FreightSummary, nullable: true]
16
16
 
17
- attribute :delivery_method_id do |deliver_rate|
18
- deliver_rate.delivery_method&.prefixed_id
19
- end
17
+ prefixed_id_attributes :delivery_method
20
18
 
21
19
  # Carrier, service level and delivery date come from the rate provider
22
20
  # and are what the customer chooses between; nil on calculator-priced
@@ -35,26 +33,8 @@ module Spree
35
33
  # froze it here when it quoted.
36
34
  one :freight_summary, resource: proc { Spree.api.freight_summary_serializer }
37
35
 
38
- attribute :display_cost do |deliver_rate|
39
- deliver_rate.display_cost.to_s
40
- end
41
-
42
- attribute :display_total do |deliver_rate|
43
- deliver_rate.display_total.to_s
44
- end
45
-
46
- attribute :display_additional_tax_total do |deliver_rate|
47
- deliver_rate.display_additional_tax_total.to_s
48
- end
49
-
50
- attribute :display_included_tax_total do |deliver_rate|
51
- deliver_rate.display_included_tax_total.to_s
52
- end
53
-
54
- attribute :display_tax_total do |deliver_rate|
55
- deliver_rate.display_tax_total.to_s
56
- end
57
-
36
+ attributes display_cost: :string, display_total: :string, display_additional_tax_total: :string,
37
+ display_included_tax_total: :string, display_tax_total: :string
58
38
  one :delivery_method, resource: proc { Spree.api.delivery_method_serializer }
59
39
  end
60
40
  end
@@ -8,9 +8,7 @@ module Spree
8
8
  filename: [:string, nullable: true],
9
9
  content_type: [:string, nullable: true]
10
10
 
11
- attribute :variant_id do |digital_asset|
12
- digital_asset.variant&.prefixed_id
13
- end
11
+ prefixed_id_attributes :variant
14
12
 
15
13
  attribute :filename do |digital_asset|
16
14
  digital_asset.filename&.to_s
@@ -16,17 +16,11 @@ module Spree
16
16
  digital_link.expires_at&.iso8601
17
17
  end
18
18
 
19
- attribute :authorizable do |digital_link|
20
- digital_link.authorizable?
21
- end
19
+ attribute :authorizable, &:authorizable?
22
20
 
23
- attribute :expired do |digital_link|
24
- digital_link.expired?
25
- end
21
+ attribute :expired, &:expired?
26
22
 
27
- attribute :access_limit_exceeded do |digital_link|
28
- digital_link.access_limit_exceeded?
29
- end
23
+ attribute :access_limit_exceeded, &:access_limit_exceeded?
30
24
  end
31
25
  end
32
26
  end
@@ -7,7 +7,6 @@ module Spree
7
7
  class DiscountSerializer < BaseSerializer
8
8
  typelize label: :string, kind: [:string, enum: Spree::Discount::KINDS], code: [:string, nullable: true],
9
9
  value: [:string, nullable: true], value_type: [:string, nullable: true],
10
- amount: [:string, nullable: true], display_amount: [:string, nullable: true],
11
10
  promotion_id: [:string, nullable: true], line_item_id: [:string, nullable: true],
12
11
  fulfillment_id: [:string, nullable: true]
13
12
 
@@ -17,17 +16,7 @@ module Spree
17
16
  record.value&.to_s
18
17
  end
19
18
 
20
- attribute :promotion_id do |record|
21
- record.promotion&.prefixed_id
22
- end
23
-
24
- attribute :line_item_id do |record|
25
- record.line_item&.prefixed_id
26
- end
27
-
28
- attribute :fulfillment_id do |record|
29
- record.fulfillment&.prefixed_id
30
- end
19
+ prefixed_id_attributes :promotion, :line_item, :fulfillment
31
20
 
32
21
  money_attributes :amount, :display_amount
33
22
  end