spree_api 6.0.0.beta4 → 6.0.0.rc2

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 (531) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -48
  3. data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
  4. data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
  5. data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
  6. data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
  7. data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
  8. data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
  9. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
  10. data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
  11. data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
  12. data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
  13. data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
  14. data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
  15. data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
  16. data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
  17. data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
  18. data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
  19. data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
  20. data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
  21. data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
  22. data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
  23. data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
  24. data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
  25. data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
  26. data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
  27. data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
  28. data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
  29. data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
  30. data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
  31. data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
  32. data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
  33. data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
  34. data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
  35. data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
  36. data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
  37. data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
  38. data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
  39. data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
  40. data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
  41. data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
  42. data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
  43. data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
  44. data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
  45. data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
  46. data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
  47. data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
  48. data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
  49. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
  50. data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
  51. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
  52. data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
  53. data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
  54. data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
  55. data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
  56. data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
  57. data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
  58. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
  59. data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
  60. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
  61. data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
  62. data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
  63. data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
  64. data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
  65. data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
  66. data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
  67. data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
  68. data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
  69. data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
  70. data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
  71. data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
  72. data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
  73. data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
  74. data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
  75. data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
  76. data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
  77. data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
  78. data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
  79. data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
  80. data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
  81. data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
  82. data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
  83. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
  84. data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
  85. data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
  86. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
  87. data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
  88. data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
  89. data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
  90. data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
  91. data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
  92. data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
  93. data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
  94. data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
  95. data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
  96. data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
  97. data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
  98. data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
  99. data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
  100. data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
  101. data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
  102. data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
  103. data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
  104. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
  105. data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
  106. data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
  107. data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
  108. data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
  109. data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
  110. data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
  111. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
  112. data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
  113. data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
  114. data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
  115. data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
  116. data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
  117. data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
  118. data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
  119. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
  120. data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
  121. data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
  122. data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
  123. data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
  124. data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
  125. data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
  126. data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
  127. data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
  128. data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
  129. data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
  130. data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
  131. data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
  132. data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
  133. data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
  134. data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
  135. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
  136. data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
  137. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
  138. data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
  139. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
  140. data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
  141. data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
  142. data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
  143. data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
  144. data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
  145. data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
  146. data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
  147. data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
  148. data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
  149. data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
  150. data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
  151. data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
  152. data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
  153. data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
  154. data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
  155. data/app/controllers/spree/api/v3/base_controller.rb +12 -0
  156. data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
  157. data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
  158. data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
  159. data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
  160. data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
  161. data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
  162. data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
  163. data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
  164. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
  165. data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
  166. data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
  167. data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
  168. data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
  169. data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
  170. data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
  171. data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
  172. data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
  173. data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
  174. data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
  175. data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
  176. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
  177. data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
  178. data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
  179. data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
  180. data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
  181. data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
  182. data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
  183. data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
  184. data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
  185. data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
  186. data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
  187. data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
  188. data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
  189. data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
  190. data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
  191. data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
  192. data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
  193. data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
  194. data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
  195. data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
  196. data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
  197. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
  198. data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
  199. data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
  200. data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
  201. data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
  202. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
  203. data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
  204. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
  205. data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
  206. data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
  207. data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
  208. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
  209. data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
  210. data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
  211. data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
  212. data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
  213. data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
  214. data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
  215. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
  216. data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
  217. data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
  218. data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
  219. data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
  220. data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
  221. data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
  222. data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
  223. data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
  224. data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
  225. data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
  226. data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
  227. data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
  228. data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
  229. data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
  230. data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
  231. data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
  232. data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
  233. data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
  234. data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
  235. data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
  236. data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
  237. data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
  238. data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
  239. data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
  240. data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
  241. data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
  242. data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
  243. data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
  244. data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
  245. data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
  246. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
  247. data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
  248. data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
  249. data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
  250. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
  251. data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
  252. data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
  253. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
  254. data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
  255. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
  256. data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
  257. data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
  258. data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
  259. data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
  260. data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
  261. data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
  262. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
  263. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
  264. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
  265. data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
  266. data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
  267. data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
  268. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
  269. data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
  270. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
  271. data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
  272. data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
  273. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
  274. data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
  275. data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
  276. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
  277. data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
  278. data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
  279. data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
  280. data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
  281. data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
  282. data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
  283. data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
  284. data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
  285. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
  286. data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
  287. data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
  288. data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
  289. data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
  290. data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
  291. data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
  292. data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
  293. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
  294. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
  295. data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
  296. data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
  297. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
  298. data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
  299. data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
  300. data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
  301. data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
  302. data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
  303. data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
  304. data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
  305. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
  306. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
  307. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
  308. data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
  309. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
  310. data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
  311. data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
  312. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
  313. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
  314. data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
  315. data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
  316. data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
  317. data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
  318. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
  319. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
  320. data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
  321. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
  322. data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
  323. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
  324. data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
  325. data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
  326. data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
  327. data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
  328. data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
  329. data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
  330. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
  331. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
  332. data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
  333. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
  334. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
  335. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
  336. data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
  337. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
  338. data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
  339. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
  340. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
  341. data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
  342. data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
  343. data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
  344. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
  345. data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
  346. data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
  347. data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
  348. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
  349. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
  350. data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
  351. data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
  352. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
  353. data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
  354. data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
  355. data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
  356. data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
  357. data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
  358. data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
  359. data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
  360. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
  361. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
  362. data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
  363. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  364. data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
  365. data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
  366. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
  367. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
  368. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  369. data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
  370. data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
  371. data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
  372. data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
  373. data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
  374. data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
  375. data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
  376. data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
  377. data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
  378. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
  379. data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
  380. data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
  381. data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
  382. data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
  383. data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
  384. data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
  385. data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
  386. data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
  387. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
  388. data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
  389. data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
  390. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
  391. data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
  392. data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
  393. data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
  394. data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
  395. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
  396. data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
  397. data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
  398. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
  399. data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
  400. data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
  401. data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
  402. data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
  403. data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
  404. data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
  405. data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
  406. data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
  407. data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
  408. data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
  409. data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
  410. data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
  411. data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
  412. data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
  413. data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
  414. data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
  415. data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
  416. data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
  417. data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
  418. data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
  419. data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
  420. data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
  421. data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
  422. data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
  423. data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
  424. data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
  425. data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
  426. data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
  427. data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
  428. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
  429. data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
  430. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
  431. data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
  432. data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
  433. data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
  434. data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
  435. data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
  436. data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
  437. data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
  438. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
  439. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
  440. data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
  441. data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
  442. data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
  443. data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
  444. data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
  445. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
  446. data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
  447. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
  448. data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
  449. data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
  450. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
  451. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
  452. data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
  453. data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
  454. data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
  455. data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
  456. data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
  457. data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
  458. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
  459. data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
  460. data/app/services/spree/api/v3/filter_predicates.rb +29 -0
  461. data/app/services/spree/api/v3/filter_table.rb +337 -0
  462. data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
  463. data/app/services/spree/api/v3/request_schema.rb +430 -0
  464. data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
  465. data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
  466. data/config/initializers/pagy.rb +1 -1
  467. data/config/initializers/typelizer.rb +7 -9
  468. data/config/locales/ar.yml +15 -0
  469. data/config/locales/be.yml +15 -0
  470. data/config/locales/bg.yml +15 -0
  471. data/config/locales/ca.yml +15 -0
  472. data/config/locales/cs.yml +15 -0
  473. data/config/locales/da.yml +15 -0
  474. data/config/locales/de-CH.yml +11 -0
  475. data/config/locales/de.yml +15 -0
  476. data/config/locales/el.yml +15 -0
  477. data/config/locales/en.yml +5 -40
  478. data/config/locales/es-CL.yml +10 -0
  479. data/config/locales/es-EC.yml +11 -0
  480. data/config/locales/es-MX.yml +12 -0
  481. data/config/locales/es.yml +15 -0
  482. data/config/locales/et.yml +15 -0
  483. data/config/locales/fa.yml +15 -0
  484. data/config/locales/fi.yml +15 -0
  485. data/config/locales/fr.yml +15 -0
  486. data/config/locales/hu.yml +15 -0
  487. data/config/locales/id.yml +15 -0
  488. data/config/locales/it.yml +15 -0
  489. data/config/locales/ja.yml +15 -0
  490. data/config/locales/km.yml +15 -0
  491. data/config/locales/ko.yml +15 -0
  492. data/config/locales/ku.yml +15 -0
  493. data/config/locales/lt.yml +15 -0
  494. data/config/locales/lv.yml +15 -0
  495. data/config/locales/nb.yml +15 -0
  496. data/config/locales/ne.yml +15 -0
  497. data/config/locales/nl.yml +15 -0
  498. data/config/locales/pl.yml +15 -0
  499. data/config/locales/pt-BR.yml +13 -0
  500. data/config/locales/pt.yml +15 -0
  501. data/config/locales/ro.yml +15 -0
  502. data/config/locales/ru.yml +15 -0
  503. data/config/locales/sk.yml +15 -0
  504. data/config/locales/sl-SI.yml +15 -0
  505. data/config/locales/sv.yml +15 -0
  506. data/config/locales/th.yml +15 -0
  507. data/config/locales/tr.yml +15 -0
  508. data/config/locales/uk.yml +15 -0
  509. data/config/locales/vi.yml +15 -0
  510. data/config/locales/zh-CN.yml +15 -0
  511. data/config/locales/zh-TW.yml +15 -0
  512. data/config/routes.rb +54 -102
  513. data/lib/spree/api/configuration.rb +5 -0
  514. data/lib/spree/api/dependencies.rb +54 -274
  515. data/lib/spree/api/middleware/request_size_limit.rb +24 -3
  516. data/lib/spree/api/openapi/filter_documentation.rb +136 -0
  517. data/lib/spree/api/openapi/schema_helper.rb +127 -81
  518. data/lib/spree/api/preference_families.rb +46 -0
  519. data/lib/spree/api/preference_types.rb +138 -0
  520. data/lib/spree/api/typelizer_generation.rb +39 -0
  521. data/lib/spree/api/webhook_event_types.rb +140 -0
  522. data/lib/spree/api.rb +0 -2
  523. data/lib/tasks/filters.rake +12 -0
  524. data/lib/typelizer/open_enums.rb +10 -0
  525. metadata +125 -40
  526. data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
  527. data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
  528. data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
  529. data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
  530. data/config/i18n-tasks.yml +0 -40
  531. data/config/initializers/alba.rb +0 -5
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module Api
3
+ module V3
4
+ module Admin
5
+ # What the last update check found (Spree::UpdateStatus). A computed
6
+ # value rather than a record, so it carries no id.
7
+ class UpdateStatusSerializer < V3::BaseSerializer
8
+ typelize current_version: :string,
9
+ enabled: :boolean,
10
+ update_available: :boolean,
11
+ latest_version: [:string, nullable: true],
12
+ latest_release_url: [:string, nullable: true],
13
+ latest_release_published_at: [:string, nullable: true],
14
+ checked_at: [:string, nullable: true]
15
+
16
+ _attributes.delete(:id)
17
+
18
+ attributes :current_version, :enabled, checked_at: :iso8601
19
+
20
+ attribute(:update_available) { |status| status.update_available? }
21
+ attribute(:latest_version) { |status| status.latest_release&.dig(:version) }
22
+ attribute(:latest_release_url) { |status| status.latest_release&.dig(:url) }
23
+ attribute(:latest_release_published_at) { |status| status.latest_release&.dig(:published_at)&.iso8601(3) }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -5,19 +5,21 @@ module Spree
5
5
  # Admin API Variant Serializer
6
6
  # Full variant data including admin-only fields
7
7
  class VariantSerializer < V3::VariantSerializer
8
+ without_formatted_money
9
+
8
10
  include Concerns::ExternalReferencesAttribute
9
11
 
10
12
 
11
13
  typelize product_name: :string,
12
14
  position: :number, tax_category_id: [:string, nullable: true],
13
- cost_price: [:string, nullable: true], cost_currency: [:string, nullable: true],
15
+ cost_price: [:string, nullable: true], cost_currency: [:string, nullable: true, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
14
16
  barcode: [:string, nullable: true],
15
17
  available_stock: [:number, nullable: true],
16
18
  reserved_quantity: :number, total_on_hand: [:number, nullable: true],
17
19
  preorderable: :boolean, preorder_ships_at: [:string, nullable: true],
18
20
  backorder_limit: [:number, nullable: true],
19
21
  hs_code: [:string, nullable: true],
20
- country_of_origin: [:string, nullable: true],
22
+ country_of_origin: [:string, nullable: true, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'],
21
23
  customs_description: [:string, nullable: true],
22
24
  deleted_at: [:string, nullable: true],
23
25
  delivery_profile_id: [:string, nullable: true],
@@ -32,7 +34,7 @@ module Spree
32
34
  # The last three override the store serializer's buyer-resolved
33
35
  # values with the variant's OWN: a merchant edits what is stored on
34
36
  # the row, not what some catalog resolves to for a buyer they are not.
35
- attributes :metadata, :position, :cost_price, :cost_currency,
37
+ attributes :metadata, :position, :cost_currency,
36
38
  :barcode, :backorder_limit,
37
39
  :hs_code, :country_of_origin, :customs_description,
38
40
  :minimum_order_quantity, :order_multiple, :purchase_unit,
@@ -40,12 +42,15 @@ module Spree
40
42
  preorder_ships_at: :iso8601, deleted_at: :iso8601,
41
43
  created_at: :iso8601, updated_at: :iso8601
42
44
 
43
- attribute :preorderable do |variant|
44
- variant.preorderable?
45
- end
45
+ money_attributes :cost_price, currency: :cost_currency, unit_price: true
46
46
 
47
+ attribute :preorderable, &:preorderable?
48
+
49
+ # Stored on the row only — nil means inherit from the product. The
50
+ # model's +tax_category+ reader resolves the effective category for
51
+ # tax; the admin form needs the raw column to tell override from inherit.
47
52
  attribute :tax_category_id do |variant|
48
- variant.tax_category&.prefixed_id
53
+ Spree::TaxCategory.prefixed_id_for(variant[:tax_category_id])
49
54
  end
50
55
 
51
56
  # Encoded from the foreign key: loading the carton row just to
@@ -82,9 +87,7 @@ module Spree
82
87
  # seller's row ships; on an owned product the write is a no-op, since
83
88
  # every variant ships as the product does. The dashboard need not
84
89
  # know which.
85
- attribute :delivery_profile_id do |variant|
86
- variant.resolved_delivery_profile&.prefixed_id
87
- end
90
+ prefixed_id_attributes delivery_profile_id: :resolved_delivery_profile
88
91
 
89
92
  one :seller,
90
93
  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
 
@@ -16,17 +16,138 @@ module Spree
16
16
  object.prefixed_id
17
17
  end
18
18
 
19
- # Declares money/display attributes that render +null+ for gated
20
- # (prices_hidden) guests, keyed off the same +hide_prices+ flag the
21
- # +price_for+/+price_in+ helpers use — so the whole price surface
22
- # (product prices AND cart/order/line-item totals) is gated from one
23
- # place instead of per-attribute opt-in.
24
- def self.money_attributes(*names)
19
+ # Display strings that are labels, not formatted money.
20
+ FORMATTED_LABELS = %i[display_name display_description display_code display_action].freeze
21
+
22
+ # Back-office serializers leave formatting money to the client, which
23
+ # shows it in the admin's own language (docs/plans/6.0-money-correctness.md,
24
+ # PR E): inherited display_* attributes are dropped, and nested prices
25
+ # are written with the admin price serializers, which carry none.
26
+ #
27
+ # @param surface [Symbol] :admin or :seller, whose price serializers to use
28
+ def self.without_formatted_money(surface = :admin)
29
+ without_display_money
30
+ define_method(:price_serializer) { Spree.api.public_send(:"#{surface}_price_serializer") }
31
+ define_method(:price_history_serializer) { Spree.api.public_send(:"#{surface}_price_history_serializer") }
32
+ end
33
+
34
+ # Drops the inherited display_* money attributes, keeping labels.
35
+ # Emails use it alone: their templates format amounts with the `money`
36
+ # Liquid filter.
37
+ def self.without_display_money
38
+ _attributes.delete_if { |key, _| display_money?(key) }
39
+ end
40
+
41
+ # Declares money attributes, written as decimal strings with exactly
42
+ # the currency's decimal places ("10.00", "1.500", "100"), or up to
43
+ # four for unit prices ("0.0125"). +display_*+ names pass through as
44
+ # formatted. All render +null+ for gated (prices_hidden) guests, keyed
45
+ # off the same +hide_prices+ flag the +price_for+/+price_in+ helpers
46
+ # use, so the whole price surface is gated from one place.
47
+ #
48
+ # @param currency [Symbol, Proc] the record's reader for its currency,
49
+ # or a block taking the record
50
+ # @param unit_price [Boolean]
51
+ # @param descriptions [Hash{Symbol => String}] what each amount is, for
52
+ # the API reference and the SDK types
53
+ def self.money_attributes(*names, currency: :currency, unit_price: false, descriptions: {})
54
+ typelize(**names.index_with do |name|
55
+ next display_money_type(name) if display_money?(name)
56
+
57
+ descriptions[name] ? [:string, nullable: true, comment: descriptions[name]] : [:string, nullable: true]
58
+ end)
59
+
25
60
  names.each do |name|
26
- attribute(name) { |object| object.public_send(name) unless params[:hide_prices] }
61
+ formatted = display_money?(name)
62
+ attribute(name) do |object|
63
+ next if params[:hide_prices]
64
+
65
+ value = object.public_send(name)
66
+ next value if formatted || value.nil?
67
+
68
+ code = currency.is_a?(Proc) ? currency.call(object) : object.public_send(currency)
69
+ Spree::Money::Rounding.format(value, code, unit_price: unit_price)
70
+ end
27
71
  end
28
72
  end
29
73
 
74
+ # A formatted money copy, as opposed to a label such as +display_name+.
75
+ def self.display_money?(name)
76
+ name.to_s.start_with?('display_') && !FORMATTED_LABELS.include?(name.to_sym)
77
+ end
78
+
79
+ # The type of a formatted money copy: deprecated in favour of the
80
+ # amount it formats, which clients format in the reader's language.
81
+ def self.display_money_type(name, nullable: true)
82
+ amount = name.to_s.delete_prefix('display_')
83
+ [:string, nullable: nullable,
84
+ comment: "`#{amount}` formatted with its currency symbol in the request's language.",
85
+ deprecated: "Format `#{amount}` with its currency instead. Removed in 6.1."]
86
+ end
87
+
88
+ # Declares rates and percentages, written as decimal strings without
89
+ # trailing zeros ("0.23", "7.25", "10"). A name ending +_percent+ or
90
+ # +_percentage+ holds 0-100; +rate+ or a name ending +_rate+ holds a
91
+ # fraction.
92
+ def self.rate_attributes(*names)
93
+ typelize(**names.index_with { [:string, nullable: true] })
94
+
95
+ names.each do |name|
96
+ attribute(name) { |object| Spree::Money::Rounding.format_decimal(object.public_send(name)) }
97
+ end
98
+ end
99
+
100
+ # Declares `<association>_id` attributes carrying the associated
101
+ # record's prefixed id, or nil when there is none. Pass
102
+ # `seller_id: :resolved_seller` when the attribute name and the
103
+ # association it reads differ.
104
+ def self.prefixed_id_attributes(*associations, **renamed)
105
+ associations.index_by { |association| :"#{association}_id" }.merge(renamed).each do |name, association|
106
+ attribute(name) { |object| object.public_send(association)&.prefixed_id }
107
+ end
108
+ end
109
+
110
+ # Declares attributes whose column stores a provider or strategy class
111
+ # name, sent as its shorthand (`manual`, `rules`) instead.
112
+ def self.api_type_attributes(*names)
113
+ names.each do |name|
114
+ attribute(name) { |object| Spree::ApiTyped.api_type_for(object.public_send(name)) }
115
+ end
116
+ end
117
+
118
+ # Declares a model's settings under their plain names (see
119
+ # `exposes_preferences`) — every exposed one unless named — typed from
120
+ # their declarations so the generated SDK types never drift from the
121
+ # model. Each reads the stored setting, never a reader the model
122
+ # overrides with a fallback.
123
+ #
124
+ # preference_attributes Spree::Store, except: %i[payout_provider]
125
+ def self.preference_attributes(model, *names, except: [])
126
+ names = model.exposed_preference_names.to_a - except if names.empty?
127
+ definitions = model.preference_definitions
128
+ names.each do |name|
129
+ typelize name => preference_type_hint(Spree::PreferenceSchema::JsonSchema.property_schema(definitions.fetch(name)))
130
+ reader = :"preferred_#{name}"
131
+ attribute(name) do |object|
132
+ value = object.public_send(reader)
133
+ value.is_a?(BigDecimal) ? value.to_s('F') : value
134
+ end
135
+ end
136
+ end
137
+
138
+ TYPELIZER_TYPES = { 'string' => :string, 'integer' => :number, 'number' => :number, 'boolean' => :boolean }.freeze
139
+ private_constant :TYPELIZER_TYPES
140
+
141
+ def self.preference_type_hint(schema)
142
+ types = Array(schema['type'])
143
+ hint = TYPELIZER_TYPES.fetch((types - ['null']).first, :unknown)
144
+ options = {}
145
+ options[:nullable] = true if types.include?('null')
146
+ options[:enum] = schema['enum'].compact if schema['enum']
147
+ options.empty? ? hint : [hint, options]
148
+ end
149
+ private_class_method :preference_type_hint
150
+
30
151
  # Declares the wire form of an `acted_by` association: the actor's
31
152
  # prefixed id, the kind of actor it is, and the expansion. Both
32
153
  # halves read off the columns, so naming an actor costs no query and
@@ -123,6 +244,10 @@ module Spree
123
244
  product.featured_variant(currency: current_currency)
124
245
  end
125
246
 
247
+ def price_serializer = Spree.api.price_serializer
248
+
249
+ def price_history_serializer = Spree.api.price_history_serializer
250
+
126
251
  # Returns price for a variant using full Price List resolution
127
252
  # This may return a price from a price list if applicable
128
253
  # Memoized per variant to avoid duplicate queries
@@ -4,58 +4,35 @@ 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, deprecated: 'Use `id`; a cart has no order number. Removed in 6.1.'], 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, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'],
10
+ locale: [:string, nullable: true, enum: Spree::Locales::ALL, enum_type_name: 'LocaleCode'], 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: [:string, nullable: true],
15
+ order_minimum_shortfall: [:string, nullable: true], 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
- 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
18
  shipping_eq_billing_address: :boolean,
34
19
  warnings: 'Array<{code: string, message: string, line_item_id?: string, variant_id?: string, item_index?: number}>',
35
20
  billing_address: { nullable: true }, shipping_address: { nullable: true },
36
21
  gift_card: { nullable: true }, market: { nullable: true }
37
22
 
38
- attribute :market_id do |order|
39
- order.market&.prefixed_id
40
- end
23
+ prefixed_id_attributes :market
41
24
 
42
25
  # Which surface this cart belongs to — lets a multi-channel storefront
43
26
  # verify a cookie-persisted cart against its own channel before
44
27
  # adopting it (see the wholesale reference storefront's cart guard).
45
- attribute :channel_id do |order|
46
- order.channel&.prefixed_id
47
- end
28
+ prefixed_id_attributes :channel
48
29
 
49
30
  # 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
31
+ prefixed_id_attributes :preferred_stock_location
53
32
 
54
33
  # Which company node the purchase is for — mirrors the writable
55
34
  # `company_id` param. Read from the column, never re-resolved.
56
- attribute :company_id do |cart|
57
- cart.company&.prefixed_id
58
- end
35
+ prefixed_id_attributes :company
59
36
 
60
37
  attribute :company_name do |cart|
61
38
  cart.company&.name
@@ -64,9 +41,7 @@ module Spree
64
41
  # The buyer's own purchase-order reference, and whether their company
65
42
  # demands one — the storefront marks the field required from this
66
43
  # rather than fetching the company to ask.
67
- attribute :po_number_required do |cart|
68
- cart.po_number_required?
69
- end
44
+ attribute :po_number_required, &:po_number_required?
70
45
 
71
46
  attribute :po_document_filename do |cart|
72
47
  cart.po_document.blob&.filename&.to_s if cart.po_document.attached?
@@ -83,27 +58,9 @@ module Spree
83
58
 
84
59
  # Nulled for gated (prices_hidden) guests so the cart can't leak the
85
60
  # prices that product/variant serializers already withhold.
86
- money_attributes :item_total, :display_item_total,
87
- :adjustment_total, :display_adjustment_total,
88
- :discount_total, :display_discount_total,
89
- :tax_total, :display_tax_total, :included_tax_total, :display_included_tax_total,
90
- :additional_tax_total, :display_additional_tax_total, :total, :display_total,
91
- :gift_card_total, :display_gift_card_total,
92
- :amount_due, :display_amount_due,
93
- :delivery_total, :display_delivery_total,
94
- :fee_total, :display_fee_total
95
-
96
- attribute :store_credit_total do |order|
97
- order.total_applied_store_credit.to_s unless params[:hide_prices]
98
- end
99
-
100
- attribute :display_store_credit_total do |order|
101
- order.display_total_applied_store_credit.to_s unless params[:hide_prices]
102
- end
103
-
104
- attribute :covered_by_store_credit do |order|
105
- order.covered_by_store_credit?
106
- end
61
+ include Spree::Api::V3::PurchaseSummary
62
+ money_attributes :adjustment_total, :display_adjustment_total,
63
+ descriptions: { adjustment_total: 'Every discount, fee and added tax together, as one amount.' }
107
64
 
108
65
  attribute :current_step do |order|
109
66
  order.current_checkout_step
@@ -132,11 +89,11 @@ module Spree
132
89
  # shortfall are amounts, and a storefront that hides prices from
133
90
  # guests must not hand them "$180 short of $500" instead.
134
91
  attribute :order_minimum do |order|
135
- order.order_minimum_amount&.to_f unless params[:hide_prices]
92
+ Spree::Money::Rounding.format(order.order_minimum_amount, order.currency) unless params[:hide_prices]
136
93
  end
137
94
 
138
95
  attribute :order_minimum_shortfall do |order|
139
- order.order_minimum_shortfall&.to_f unless params[:hide_prices]
96
+ Spree::Money::Rounding.format(order.order_minimum_shortfall, order.currency) unless params[:hide_prices]
140
97
  end
141
98
 
142
99
  attribute :below_order_minimum do |order|
@@ -153,9 +110,7 @@ module Spree
153
110
  # withhold.
154
111
  one :freight_summary, resource: proc { Spree.api.freight_summary_serializer }
155
112
 
156
- attribute :shipping_eq_billing_address do |order|
157
- order.shipping_eq_billing_address?
158
- end
113
+ attribute :shipping_eq_billing_address, &:shipping_eq_billing_address?
159
114
 
160
115
  many :order_promotions, key: :discounts, resource: proc { Spree.api.applied_promotion_serializer }
161
116
  # Itemized charges (duties, surcharges, COD, handling). Storefronts
@@ -164,7 +119,6 @@ module Spree
164
119
  many :fees, resource: proc { Spree.api.fee_serializer }
165
120
  many :line_items, key: :items, resource: proc { Spree.api.line_item_serializer }
166
121
  many :fulfillments, resource: proc { Spree.api.fulfillment_serializer }
167
- many :payments, resource: proc { Spree.api.payment_serializer }
168
122
  one :billing_address, resource: proc { Spree.api.address_serializer }
169
123
  one :shipping_address, resource: proc { Spree.api.address_serializer }
170
124
 
@@ -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
@@ -6,9 +6,6 @@ module Spree
6
6
  class ClaimLineItemSerializer < BaseSerializer
7
7
  typelize quantity: :number,
8
8
  send_replacement: :boolean,
9
- refund_amount: :string,
10
- display_refund_amount: :string,
11
- paid_amount: :string,
12
9
  description: [:string, nullable: true],
13
10
  variant_id: [:string, nullable: true],
14
11
  replacement_variant_id: [:string, nullable: true],
@@ -16,32 +13,12 @@ module Spree
16
13
 
17
14
  attributes :quantity, :send_replacement, :description
18
15
 
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
16
+ # paid_amount is what the customer actually paid for these units, tax
17
+ # included — the ceiling the resolve workflow enforces, and what the
18
+ # dashboard offers when the claim carries no explicit amount.
19
+ money_attributes :refund_amount, :paid_amount, :pre_tax_amount, :included_tax_total,
20
+ :additional_tax_total, :tax_total, :display_refund_amount
21
+ prefixed_id_attributes :variant, :replacement_variant, :line_item
45
22
 
46
23
  one :variant, resource: proc { Spree.api.variant_serializer }, if: proc { expand?('variant') }
47
24
  end
@@ -10,8 +10,6 @@ module Spree
10
10
  resolution: [:string, nullable: true],
11
11
  order_id: [:string, nullable: true],
12
12
  reason_id: [:string, nullable: true],
13
- refund_total: :string,
14
- display_refund_total: :string,
15
13
  approved_at: [:string, nullable: true],
16
14
  resolved_at: [:string, nullable: true],
17
15
  denied_at: [:string, nullable: true],
@@ -19,21 +17,9 @@ module Spree
19
17
 
20
18
  attributes :number, :status, :resolution
21
19
 
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
20
+ prefixed_id_attributes :order, :reason
29
21
 
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
+ money_attributes :refund_total, :display_refund_total
37
23
 
38
24
  attribute :approved_at do |claim|
39
25
  claim.approved_at&.iso8601
@@ -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
@@ -5,7 +5,8 @@ module Spree
5
5
  include Alba::Resource
6
6
  include Typelizer::DSL
7
7
 
8
- typelize iso: :string, iso3: :string, name: :string,
8
+ typelize iso: [:string, enum: Spree::IsoData.country_codes, enum_type_name: 'CountryCode'], iso3: :string,
9
+ name: [:string, deprecated: 'Name the country from `iso` with `Intl.DisplayNames` (type `region`). Removed in 6.1.'],
9
10
  states_required: :boolean, zipcode_required: :boolean,
10
11
  market: [:Market, nullable: true]
11
12
 
@@ -5,9 +5,17 @@ module Spree
5
5
  include Alba::Resource
6
6
  include Typelizer::DSL
7
7
 
8
- typelize iso_code: :string, name: :string, symbol: :string
8
+ typelize iso_code: [:string, enum: Spree::Money::Rounding::CURRENCY_CODES, enum_type_name: 'CurrencyCode'], name: [:string, deprecated: 'Name the currency from `iso_code` with `Intl.DisplayNames` (type `currency`). Removed in 6.1.'],
9
+ symbol: [:string, deprecated: 'Format amounts with `formatMoney` or `Intl.NumberFormat`, which place the symbol. Removed in 6.1.'],
10
+ decimal_places: :number
9
11
 
10
12
  attributes :iso_code, :name, :symbol
13
+
14
+ # ISO 4217 minor units: the decimals every amount in this currency is
15
+ # written with (2 for USD, 0 for JPY, 3 for KWD).
16
+ attribute :decimal_places do |currency|
17
+ Spree::Money::Rounding.precision(currency)
18
+ end
11
19
  end
12
20
  end
13
21
  end
@@ -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