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
@@ -10,6 +10,47 @@ module Spree
10
10
  class CollectionsController < ResourceController
11
11
  scoped_resource :collections
12
12
 
13
+ request_params :collection do |body|
14
+ body.attribute :name, :string, required: true, on: :create, example: 'On Sale'
15
+ body.attribute :description, :string,
16
+ description: 'Rich text HTML. Reads come back as this (plain text) plus `description_html`.'
17
+ body.attribute :permalink, :string
18
+ body.attribute :position, :integer,
19
+ description: "1-based position among the store's collections; the server shifts its siblings. The nested products reposition endpoints, unlike this, take 0-based indexes."
20
+ body.attribute :meta_title, :string
21
+ body.attribute :meta_description, :string
22
+ body.attribute :meta_keywords, :string
23
+ body.attribute :image_signed_id, :string,
24
+ nullable: true,
25
+ description: 'A `signed_id` from `files.upload()` for the landscape image, or null to remove it.'
26
+ body.attribute :square_image_signed_id, :string,
27
+ nullable: true,
28
+ description: 'A `signed_id` from `files.upload()` for the square image, or null to remove it.'
29
+ body.attribute :automatic, :boolean,
30
+ description: 'When true, membership is materialized from `rules` instead of curated by hand.'
31
+ body.attribute :rules_match_policy, :string,
32
+ choices: Spree::Collection::RULES_MATCH_POLICIES,
33
+ description: 'Whether a product must match all rules or any of them. Defaults to `all`.'
34
+ body.attribute :sort_order, :string,
35
+ choices: Spree::Collection::SORT_ORDERS,
36
+ description: "Default product sort for the storefront listing; a shopper's own sort wins. Defaults to `manual`."
37
+ # Applied by the model's sync setter (Spree::Collection#rules=).
38
+ body.attribute :rules, :array,
39
+ as: 'CollectionRuleParams',
40
+ description: 'The complete desired rule set. Entries with an `id` update, entries without one are created, and existing rules left out are removed.' do |rule|
41
+ rule.attribute :id, :id, example: 'crule_abc123', description: 'Omit to create a new rule.'
42
+ rule.attribute :type, :string,
43
+ example: 'tag',
44
+ description: 'Wire shorthand for the rule kind, from the collection rule types endpoint.'
45
+ rule.attribute :value, :string, example: 'summer'
46
+ rule.attribute :match_policy, :string,
47
+ choices: Spree::CollectionRule::MATCH_POLICIES,
48
+ example: 'contains'
49
+ end
50
+ body.attribute :custom_fields, :array, of: Spree::Api::V3::CustomFieldValueRequestSchema,
51
+ description: 'Custom field values, each validated against its definition.'
52
+ end
53
+
13
54
  protected
14
55
 
15
56
  def model_class
@@ -32,22 +73,10 @@ module Spree
32
73
  super.ordered
33
74
  end
34
75
 
35
- # Flat params. +rules+ is applied by the model's sync setter
36
- # (Spree::Collection#rules=): the full desired rule set, prefixed
37
- # +crule_+ ids update, missing ids build, omitted rules are removed —
38
- # so normalize_params is deliberately NOT called (that would rewrite
39
- # +rules+ to +rules_attributes+ and route past the setter).
76
+ # normalize_params is deliberately NOT called: it would rewrite
77
+ # +rules+ to +rules_attributes+ and route past the sync setter.
40
78
  def permitted_params
41
- params.permit(
42
- :name, :description, :permalink, :position,
43
- :meta_title, :meta_description, :meta_keywords,
44
- :image, :square_image,
45
- :automatic, :rules_match_policy, :sort_order,
46
- rules: [:id, :type, :value, :match_policy],
47
- # Inline custom field values keyed by definition id (see
48
- # CategoriesController#permitted_params for the value shapes).
49
- custom_fields: [:id, :custom_field_definition_id, :value, { value: [] }, { value: {} }]
50
- )
79
+ params.permit(*permitted_attributes)
51
80
  end
52
81
  end
53
82
  end
@@ -12,8 +12,65 @@ module Spree
12
12
  # seller audience, because a seller must never see, let alone set, what
13
13
  # anyone is charged.
14
14
  class CommissionRatesController < ResourceController
15
+ # `value` is a percentage, a name too general to be in StrictMoneyParams' list.
16
+ before_action -> { decimal_param(:value) }, only: %i[create update]
15
17
  scoped_resource :commissions
16
18
 
19
+ request_params :commission_rate do |body|
20
+ body.attribute :name, :string, required: true, on: :create, example: 'Audio sellers'
21
+ body.attribute :code, :string,
22
+ nullable: true,
23
+ example: 'audio',
24
+ description: 'Your own identifier for this rate; unique per store.'
25
+ body.attribute :enabled, :boolean
26
+ body.attribute :position, :integer,
27
+ example: 1,
28
+ description: 'Place in the list. Rates resolve top-down and the first whose rules match wins, so 1 is tried first. New rates are created at the top; send this to move one. A rate with no rules matches every sale, so the marketplace default belongs at the bottom.'
29
+ body.attribute :kind, :string,
30
+ required: true, on: :create,
31
+ choices: Spree::CommissionRate::KINDS,
32
+ example: 'percentage',
33
+ description: '`percentage` charges a share of the sale; `fixed` charges a flat fee.'
34
+ body.attribute :value, :decimal,
35
+ required: true, on: :create,
36
+ example: '12.5',
37
+ description: 'A percentage (10 = 10%) or a flat amount, per `kind`.'
38
+ body.attribute :tax_inclusive, :boolean,
39
+ description: "Charge on the price including the customer's VAT. Left off, commission is charged on the seller's net revenue, which is the usual basis where the fee is taxed as its own supply."
40
+ body.attribute :include_shipping, :boolean,
41
+ description: "Also charge commission on the seller's delivery revenue. Percentage rates only."
42
+ body.attribute :commission_tax_rate, :decimal,
43
+ nullable: true,
44
+ example: '0.21',
45
+ description: "VAT on the commission itself, as a fraction rather than a percentage. Null lets the store's tax engine answer for the seller's jurisdiction."
46
+ body.attribute :metadata, :hash
47
+ body.attribute :amounts, :hash,
48
+ example: { USD: '2.50', EUR: '2.00' },
49
+ description: 'What a flat fee charges, keyed by currency, as decimal strings. A sale in a currency with no amount falls to the next matching rate. Replaces the whole set.'
50
+ body.attribute :bounds, :hash,
51
+ example: { USD: { min_amount: '1.00', max_amount: '50.00' } },
52
+ description: 'The floor and cap a percentage charges within, keyed by currency: `{ min_amount, max_amount }` decimal strings. A sale in a currency with no bounds is charged unbounded. Replaces the whole set.'
53
+ # Permitted in `permitted_params`, with the keys each registered
54
+ # rule kind adds.
55
+ body.attribute :rules, :array,
56
+ permit: false,
57
+ as: 'CommissionRuleDraftParams',
58
+ description: 'The full targeting; what you send replaces what the rate holds.' do |rule|
59
+ rule.attribute :id, :id,
60
+ nullable: true,
61
+ description: 'Present for an existing rule; omit to create one.'
62
+ rule.attribute :type, :string,
63
+ required: true,
64
+ example: 'seller_rule',
65
+ description: 'A kind from `GET /commission_rates/rule_types`.'
66
+ rule.attribute :preferences, :hash,
67
+ example: { seller_ids: ['sel_a1b2c3'] },
68
+ description: "Configuration for the kind, per its type's `schema`."
69
+ rule.attribute :product_ids, :array, of: :id,
70
+ description: 'For kinds that name products, which are kept outside preferences.'
71
+ end
72
+ end
73
+
17
74
  # GET /api/v3/admin/commission_rates/rule_types
18
75
  #
19
76
  # Every registered rule kind with its configuration schema, so a
@@ -26,8 +83,8 @@ module Spree
26
83
  {
27
84
  type: klass.api_type,
28
85
  name: klass.human_name,
29
- description: klass.description,
30
- preference_schema: klass.serialized_preference_schema,
86
+ description: klass.human_description,
87
+ schema: klass.preference_json_schema,
31
88
  # Config a rule takes beyond its preferences — a catalog-scale
32
89
  # reference list lives in its own table, not the blob, and an
33
90
  # editor has to know to render a picker for it.
@@ -81,17 +138,8 @@ module Spree
81
138
 
82
139
  def permitted_params
83
140
  attributes = normalize_params(
84
- params.permit(
85
- :name, :code, :enabled, :position, :kind, :value,
86
- :tax_inclusive, :include_shipping, :commission_tax_rate,
87
- metadata: {},
88
- amounts: {},
89
- # Nested one level deeper than +amounts+ — currency => floor and
90
- # cap — so the whole subtree is permitted rather than its keys,
91
- # which are currency codes and not knowable here.
92
- bounds: {},
93
- rules: [:id, :type, { preferences: {} }, *rule_association_attributes]
94
- )
141
+ params.permit(*declared_permitted_attributes,
142
+ rules: [:id, :type, { preferences: {} }, *rule_association_attributes])
95
143
  )
96
144
 
97
145
  attributes[:rules] = resolved_rule_rows(attributes[:rules]) if attributes.key?(:rules)
@@ -139,7 +187,7 @@ module Spree
139
187
  errors = ActiveModel::Errors.new(Spree::CommissionRate.new)
140
188
  unknown.each do |type|
141
189
  errors.add(:rules, :invalid_commission_rule_type, type: type,
142
- message: Spree.t('errors.messages.invalid_commission_rule_type', type: type))
190
+ message: I18n.t('spree.errors.messages.invalid_commission_rule_type', type: type))
143
191
  end
144
192
  render_validation_error(errors)
145
193
 
@@ -8,6 +8,17 @@ module Spree
8
8
  class AddressesController < BaseController
9
9
  include Spree::Api::V3::CompanyAddressWrites
10
10
 
11
+ request_params :company_address do |body|
12
+ body.include_attributes Spree::Api::V3::AddressRequestSchema
13
+ body.require_attributes :first_name, :last_name, :address1, :city, :country_code, on: :create
14
+ body.attribute :default_billing, :boolean,
15
+ permit: false,
16
+ description: 'True makes this the default address of that kind, false gives the slot up, and leaving it out keeps the current default.'
17
+ body.attribute :default_shipping, :boolean,
18
+ permit: false,
19
+ description: 'True makes this the default address of that kind, false gives the slot up, and leaving it out keeps the current default.'
20
+ end
21
+
11
22
  before_action :authorize_parent_access!
12
23
 
13
24
  # POST /api/v3/admin/companies/:company_id/addresses
@@ -53,10 +64,6 @@ module Spree
53
64
  def scope
54
65
  @parent.addresses
55
66
  end
56
-
57
- def parent_association
58
- :addresses
59
- end
60
67
  end
61
68
  end
62
69
  end
@@ -17,7 +17,7 @@ module Spree
17
17
  else
18
18
  render_error(
19
19
  code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
20
- message: Spree.t('company_invitations.not_pending'),
20
+ message: I18n.t('spree.company_invitations.not_pending'),
21
21
  status: :unprocessable_content
22
22
  )
23
23
  end
@@ -44,10 +44,6 @@ module Spree
44
44
  def scope
45
45
  action_name == 'index' ? @parent.invitations.pending : @parent.invitations
46
46
  end
47
-
48
- def parent_association
49
- :invitations
50
- end
51
47
  end
52
48
  end
53
49
  end
@@ -13,6 +13,14 @@ module Spree
13
13
  # who buys for a node — and memberships carry customer emails.
14
14
  before_action :authorize_parent_access!
15
15
 
16
+ request_params :company_membership do |body|
17
+ body.attribute :customer_email, :string,
18
+ required: true, on: :create,
19
+ example: 'buyer@example.com',
20
+ description: 'An existing customer becomes a member immediately; an unknown email becomes an invitation, and the response is an invitation instead of a membership.'
21
+ body.attribute :metadata, :hash
22
+ end
23
+
16
24
  # POST /api/v3/admin/companies/:company_id/memberships
17
25
  def create
18
26
  result = Spree.company_add_member_service.call(
@@ -47,16 +55,12 @@ module Spree
47
55
  @parent.memberships
48
56
  end
49
57
 
50
- def parent_association
51
- :memberships
52
- end
53
-
54
58
  def collection_includes
55
59
  [:customer]
56
60
  end
57
61
 
58
62
  def permitted_params
59
- params.permit(:customer_email, metadata: {})
63
+ params.permit(*declared_permitted_attributes)
60
64
  end
61
65
  end
62
66
  end
@@ -9,14 +9,29 @@ module Spree
9
9
  class TaxExemptionCertificatesController < BaseController
10
10
  include ActiveStorage::SetCurrent
11
11
 
12
+ request_params :tax_exemption_certificate do |body|
13
+ body.attribute :certificate_number, :string, required: true, on: :create,
14
+ example: 'DE-RESALE-7'
15
+ body.attribute :reason_code, :string, required: true, on: :create,
16
+ example: 'resale',
17
+ description: "Becomes the tax provider's entity use code."
18
+ body.attribute :issuing_authority, :string, nullable: true, example: 'Finanzamt Berlin'
19
+ body.attribute :issued_at, :datetime, nullable: true
20
+ body.attribute :expires_at, :datetime, nullable: true
21
+ body.attribute :country_code, :country,
22
+ nullable: true,
23
+ description: 'Where the certificate holds. Omit it and `state_code` for one valid everywhere.'
24
+ body.attribute :state_code, :string, nullable: true
25
+ body.attribute :document_signed_id, :string,
26
+ description: "A `signed_id` from `files.upload()` with `visibility: 'private'`."
27
+ body.attribute :metadata, :hash
28
+ end
29
+
12
30
  before_action :authorize_parent_access!
13
31
  # Re-declaring the filter replaces the inherited options, so the
14
32
  # standard actions have to be listed alongside the custom ones.
15
33
  before_action :set_resource, only: [:show, :update, :destroy, :verify, :revoke, :download]
16
34
 
17
- # A tampered signed id would otherwise surface as a 500.
18
- rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_signature
19
-
20
35
  # PATCH /api/v3/admin/companies/:company_id/tax_exemption_certificates/:id/verify
21
36
  def verify
22
37
  result = Spree.tax_exemption_certificate_verify_workflow.call(
@@ -24,11 +39,7 @@ module Spree
24
39
  verified_by: try_spree_current_user
25
40
  )
26
41
 
27
- if result.success?
28
- render json: serialize_resource(result.value)
29
- else
30
- render_result_error(result)
31
- end
42
+ render_result(result)
32
43
  end
33
44
 
34
45
  # PATCH .../:id/revoke — withdrawing evidence that was accepted.
@@ -88,20 +99,12 @@ module Spree
88
99
  @parent.tax_exemption_certificates
89
100
  end
90
101
 
91
- def parent_association
92
- :tax_exemption_certificates
93
- end
94
-
95
102
  def collection_includes
96
103
  [{ document_attachment: :blob }]
97
104
  end
98
105
 
99
- # `document` is an ActiveStorage signed blob id from
100
- # POST /api/v3/admin/direct_uploads.
101
106
  def permitted_params
102
- params.permit(:certificate_number, :reason_code, :issuing_authority,
103
- :issued_at, :expires_at, :country_code, :state_code, :document,
104
- metadata: {})
107
+ params.permit(*declared_permitted_attributes)
105
108
  end
106
109
 
107
110
  def build_resource
@@ -119,16 +122,6 @@ module Spree
119
122
 
120
123
  authorize!(mapped, resource)
121
124
  end
122
-
123
- private
124
-
125
- def render_invalid_signature
126
- render_error(
127
- code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
128
- message: 'Invalid document signed id',
129
- status: :unprocessable_content
130
- )
131
- end
132
125
  end
133
126
  end
134
127
  end
@@ -12,6 +12,11 @@ module Spree
12
12
  class TaxIdentifiersController < BaseController
13
13
  include Spree::Api::V3::TaxIdentifierValidation
14
14
 
15
+ request_params :tax_identifier do |body|
16
+ body.include_attributes Spree::Api::V3::Admin::TaxIdentifierRequestSchema
17
+ body.require_attributes :kind, :value, on: :create
18
+ end
19
+
15
20
  before_action :authorize_parent_access!
16
21
  # Re-declaring the filter replaces the inherited options, so the
17
22
  # standard actions have to be listed alongside the custom one.
@@ -31,12 +36,8 @@ module Spree
31
36
  @parent.tax_identifiers
32
37
  end
33
38
 
34
- def parent_association
35
- :tax_identifiers
36
- end
37
-
38
39
  def permitted_params
39
- params.permit(:kind, :value)
40
+ params.permit(*declared_permitted_attributes)
40
41
  end
41
42
  end
42
43
  end
@@ -12,6 +12,22 @@ module Spree
12
12
  class CompaniesController < ResourceController
13
13
  scoped_resource :customers
14
14
 
15
+ request_params :company do |body|
16
+ body.external_references
17
+ body.attribute :name, :string, required: true, on: :create, example: 'Globex Corporation'
18
+ body.attribute :kind, :string,
19
+ choices: Spree::Company::KINDS,
20
+ example: 'company',
21
+ description: '`company` is a legal entity (may hold tax registrations), `division` an organizational unit. Roots must be `company`.'
22
+ body.attribute :parent_id, :id,
23
+ nullable: true,
24
+ example: 'comp_86Rf07xd4z',
25
+ description: 'The parent node. Omit or null for a root.'
26
+ body.attribute :po_number_required, :boolean,
27
+ description: "Whether this buyer's own procurement process demands a PO reference on every order: checkout asks for one and refuses to complete without it."
28
+ body.attribute :metadata, :hash
29
+ end
30
+
15
31
  protected
16
32
 
17
33
  def model_class
@@ -22,18 +38,12 @@ module Spree
22
38
  Spree.api.admin_company_serializer
23
39
  end
24
40
 
25
- def scope
26
- super.for_store(current_store)
27
- end
28
-
29
41
  def collection_includes
30
42
  [:children, :memberships, :external_references]
31
43
  end
32
44
 
33
45
  def permitted_params
34
- permitted = params.permit(*model_additional_permitted_attributes,
35
- :name, :kind, :parent_id, :po_number_required, metadata: {})
36
- resolve_parent_param(permitted)
46
+ resolve_parent_param(params.permit(*permitted_attributes))
37
47
  end
38
48
 
39
49
  private
@@ -11,7 +11,7 @@ module Spree
11
11
 
12
12
  # Override base index to skip pagination — there are ~250 countries
13
13
  # and address-form dropdowns need them all at once. Pagy's global
14
- # max_limit (100) prevents using the paginated path for this.
14
+ # client_limit (100) prevents using the paginated path for this.
15
15
  #
16
16
  # Countries are reference data rather than records, so this reads
17
17
  # from the registry and needs no authorization beyond the admin
@@ -24,6 +24,10 @@ module Spree
24
24
 
25
25
  protected
26
26
 
27
+ def filterable?
28
+ false
29
+ end
30
+
27
31
  def model_class
28
32
  Spree::Country
29
33
  end
@@ -33,7 +37,7 @@ module Spree
33
37
  end
34
38
 
35
39
  def scope
36
- Spree::Country.all.sort_by(&:name)
40
+ Spree::Country.all.sort_by(&:iso)
37
41
  end
38
42
 
39
43
  def find_resource
@@ -22,10 +22,6 @@ module Spree
22
22
  @parent = current_store.promotions.accessible_by(current_ability, :show)
23
23
  .find_by_prefix_id!(params[:promotion_id])
24
24
  end
25
-
26
- def parent_association
27
- :coupon_codes
28
- end
29
25
  end
30
26
  end
31
27
  end
@@ -4,12 +4,32 @@ module Spree
4
4
  module Admin
5
5
  # Schema-side metadata for custom fields. Definitions are per resource
6
6
  # *type* (every Spree::Product shares the same definitions), so this is
7
- # a flat top-level endpoint. Filter by `?resource_type=Spree::Product`
7
+ # a flat top-level endpoint. Filter by `q[resource_type_eq]=product`
8
8
  # (or any other registered custom-field-bearing resource) to scope the
9
9
  # list to one parent type.
10
10
  class CustomFieldDefinitionsController < ResourceController
11
11
  scoped_resource :settings
12
12
 
13
+ request_params :custom_field_definition do |body|
14
+ body.attribute :namespace, :string, description: 'Defaults to `custom`.'
15
+ body.attribute :key, :string, required: true, on: :create
16
+ body.attribute :label, :string, description: 'Human-readable name; defaults to the titleized `key`.'
17
+ body.attribute :field_type, :string,
18
+ required: true, on: :create,
19
+ example: 'short_text',
20
+ description: 'Custom field type token (`short_text`, `long_text`, `rich_text`, `number`, …). An extension type that has no token is named by its registered class instead.'
21
+ body.attribute :resource_type, :string,
22
+ required: true, on: :create,
23
+ example: 'product',
24
+ description: 'Shorthand of the resource the field attaches to, from the resource types endpoint.'
25
+ body.attribute :storefront_visible, :boolean,
26
+ description: 'When false, the definition is admin-only and never exposed in the Store API.'
27
+ body.attribute :searchable, :boolean,
28
+ description: 'Include values in storefront product text search. Supported for `short_text`, `long_text` and `number` fields; other types are refused.'
29
+ body.attribute :sortable, :boolean,
30
+ description: 'Allow storefront product listings to sort by this field (`sort=cf_{namespace}_{key}`). Supported for `short_text` and `number` fields; other types are refused.'
31
+ end
32
+
13
33
  # GET /api/v3/admin/custom_field_definitions/resource_types
14
34
  #
15
35
  # What a definition can be attached to, from
@@ -34,9 +54,7 @@ module Spree
34
54
  end
35
55
 
36
56
  def permitted_params
37
- params.permit(*model_additional_permitted_attributes, :namespace, :key, :label, :field_type,
38
- :resource_type, :storefront_visible,
39
- :searchable, :sortable)
57
+ params.permit(*permitted_attributes)
40
58
  end
41
59
 
42
60
  # Pure registry discovery — maps to the read scope.
@@ -7,6 +7,16 @@ module Spree
7
7
  # class is inferred from whichever `<segment>_id` route param matches a
8
8
  # registered owner.
9
9
  class CustomFieldsController < ResourceController
10
+ # Only `value` is mutable. Switching the linked definition is a
11
+ # delete-and-create: the model rejects it (definition + resource
12
+ # uniqueness) and the type wouldn't match.
13
+ request_params :custom_field do |body|
14
+ body.attribute :custom_field_definition_id, :id, required: true, only: :create, example: 'cfdef_abc123'
15
+ body.attribute :value, :any,
16
+ required: true,
17
+ description: "A value matching the definition's `field_type`: a scalar for text, number and boolean fields; a list or a hash for JSON fields."
18
+ end
19
+
10
20
  # POST /api/v3/admin/<parent>/<parent_id>/custom_fields
11
21
  def create
12
22
  @resource = @parent.custom_fields.new(permitted_params)
@@ -20,9 +30,6 @@ module Spree
20
30
  end
21
31
 
22
32
  # PATCH /api/v3/admin/<parent>/<parent_id>/custom_fields/:id
23
- # Only `value` is mutable. Switching the linked definition is a
24
- # delete-and-create — the model rejects it (definition + resource
25
- # uniqueness) and the type wouldn't match.
26
33
  def update
27
34
  authorize_resource!(@resource)
28
35
 
@@ -43,10 +50,6 @@ module Spree
43
50
  Spree.api.admin_custom_field_serializer
44
51
  end
45
52
 
46
- def parent_association
47
- :custom_fields
48
- end
49
-
50
53
  def set_parent
51
54
  # Routes always mount this controller under a recognized parent, so
52
55
  # `parent_lookup` matches in normal flows. The explicit raise is a
@@ -86,11 +89,11 @@ module Spree
86
89
  # `custom_field_definition_id` is an alias_attribute on Spree::CustomField;
87
90
  # AR resolves the prefixed-ID and the alias to the canonical FK on assign.
88
91
  def permitted_params
89
- params.permit(*model_additional_permitted_attributes, :custom_field_definition_id, :value)
92
+ params.permit(*permitted_attributes)
90
93
  end
91
94
 
92
95
  def update_permitted_params
93
- params.permit(:value)
96
+ params.permit(*declared_permitted_attributes)
94
97
  end
95
98
 
96
99
  private
@@ -7,6 +7,14 @@ module Spree
7
7
  class CustomerGroupsController < ResourceController
8
8
  scoped_resource :customers
9
9
 
10
+ request_params :customer_group do |body|
11
+ body.attribute :name, :string, required: true, on: :create, example: 'Wholesale'
12
+ body.attribute :description, :string, nullable: true, example: 'B2B accounts'
13
+ body.attribute :customer_ids, :array, of: :id,
14
+ example: %w[cus_UkLWZg9DAJ],
15
+ description: "Replaces the group's members."
16
+ end
17
+
10
18
  protected
11
19
 
12
20
  def model_class
@@ -17,12 +25,8 @@ module Spree
17
25
  Spree.api.admin_customer_group_serializer
18
26
  end
19
27
 
20
- def scope
21
- super.for_store(current_store)
22
- end
23
-
24
28
  def permitted_params
25
- params.permit(*model_additional_permitted_attributes, :name, :description, customer_ids: [])
29
+ params.permit(*permitted_attributes)
26
30
  end
27
31
  end
28
32
  end
@@ -4,6 +4,17 @@ module Spree
4
4
  module Admin
5
5
  module Customers
6
6
  class AddressesController < BaseController
7
+ request_params :customer_address do |body|
8
+ body.include_attributes Spree::Api::V3::Admin::AddressRequestSchema
9
+ body.require_attributes :first_name, :last_name, :address1, :city, :country_code, on: :create
10
+ body.attribute :quick_checkout, :boolean
11
+ body.attribute :is_default_billing, :boolean,
12
+ permit: false,
13
+ description: "Makes this the customer's default address of that kind."
14
+ body.attribute :is_default_shipping, :boolean,
15
+ permit: false,
16
+ description: "Makes this the customer's default address of that kind."
17
+ end
7
18
 
8
19
  # POST /api/v3/admin/customers/:customer_id/addresses
9
20
  def create
@@ -50,10 +61,6 @@ module Spree
50
61
 
51
62
  protected
52
63
 
53
- def parent_association
54
- :addresses
55
- end
56
-
57
64
  def model_class
58
65
  Spree::Address
59
66
  end
@@ -65,13 +72,7 @@ module Spree
65
72
  private
66
73
 
67
74
  def address_attrs
68
- params.permit(
69
- :firstname, :lastname, :first_name, :last_name,
70
- :address1, :address2, :city,
71
- :country_code, :state_code,
72
- :zipcode, :postal_code, :phone, :alternative_phone,
73
- :state_name, :company, :label, :quick_checkout
74
- )
75
+ params.permit(*declared_permitted_attributes)
75
76
  end
76
77
 
77
78
  def default_billing_flag
@@ -6,10 +6,6 @@ module Spree
6
6
  class CreditCardsController < BaseController
7
7
  protected
8
8
 
9
- def parent_association
10
- :credit_cards
11
- end
12
-
13
9
  # Customers are global; a saved card belongs to the store-scoped
14
10
  # payment method it was created against, so the nested collection is
15
11
  # bound to the current store's payment methods.