spree_api 6.0.0.rc4 → 6.0.0.rc5

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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v3/allowed_redirect_url.rb +27 -0
  3. data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +8 -2
  4. data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +6 -2
  5. data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +7 -1
  6. data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +30 -8
  7. data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -0
  8. data/app/controllers/spree/api/v3/admin/customers_controller.rb +1 -6
  9. data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +1 -8
  10. data/app/controllers/spree/api/v3/admin/orders_controller.rb +11 -5
  11. data/app/controllers/spree/api/v3/admin/package_types_controller.rb +2 -3
  12. data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +3 -4
  13. data/app/controllers/spree/api/v3/admin/products_controller.rb +5 -3
  14. data/app/controllers/spree/api/v3/admin/store_controller.rb +1 -1
  15. data/app/controllers/spree/api/v3/admin/variants_controller.rb +96 -1
  16. data/app/controllers/spree/api/v3/oauth/authorizations_controller.rb +17 -6
  17. data/app/controllers/spree/api/v3/resource_controller.rb +35 -5
  18. data/app/controllers/spree/api/v3/seller/package_types_controller.rb +2 -2
  19. data/app/controllers/spree/api/v3/seller/products_controller.rb +7 -61
  20. data/app/controllers/spree/api/v3/seller/resource_controller.rb +2 -6
  21. data/app/controllers/spree/api/v3/store/carts/addresses_controller.rb +53 -0
  22. data/app/controllers/spree/api/v3/store/carts_controller.rb +3 -3
  23. data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +4 -0
  24. data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +4 -0
  25. data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +19 -1
  26. data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +3 -14
  27. data/app/controllers/spree/api/v3/store/data_request_confirmations_controller.rb +23 -0
  28. data/app/controllers/spree/api/v3/store/data_requests_controller.rb +56 -0
  29. data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +2 -11
  30. data/app/request_schemas/spree/api/v3/admin/variant_request_schema.rb +21 -0
  31. data/app/request_schemas/spree/api/v3/seller/price_request_schema.rb +20 -0
  32. data/app/request_schemas/spree/api/v3/seller/variant_request_schema.rb +19 -0
  33. data/app/request_schemas/spree/api/v3/variant_request_schema.rb +8 -13
  34. data/app/serializers/spree/api/v3/address_owner_serializer.rb +27 -0
  35. data/app/serializers/spree/api/v3/address_serializer.rb +5 -1
  36. data/app/serializers/spree/api/v3/admin/address_owner_serializer.rb +10 -0
  37. data/app/serializers/spree/api/v3/admin/address_serializer.rb +1 -10
  38. data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
  39. data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -1
  40. data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +1 -1
  41. data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +1 -1
  42. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +1 -1
  43. data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +2 -2
  44. data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +1 -1
  45. data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +1 -1
  46. data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +1 -1
  47. data/app/serializers/spree/api/v3/admin/order_serializer.rb +1 -1
  48. data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +3 -3
  49. data/app/serializers/spree/api/v3/admin/permission_serializer.rb +1 -1
  50. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -1
  51. data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +1 -1
  52. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +1 -1
  53. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +2 -2
  54. data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +1 -1
  55. data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +3 -3
  56. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +1 -1
  57. data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +2 -2
  58. data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -1
  59. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +1 -1
  60. data/app/serializers/spree/api/v3/admin/store_serializer.rb +1 -0
  61. data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +2 -2
  62. data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +1 -1
  63. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +1 -1
  64. data/app/serializers/spree/api/v3/base_serializer.rb +27 -5
  65. data/app/serializers/spree/api/v3/claim_serializer.rb +1 -1
  66. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -1
  67. data/app/serializers/spree/api/v3/company_invitation_serializer.rb +1 -1
  68. data/app/serializers/spree/api/v3/company_serializer.rb +1 -1
  69. data/app/serializers/spree/api/v3/data_request_confirmation_requested_event_serializer.rb +28 -0
  70. data/app/serializers/spree/api/v3/data_request_event_serializer.rb +1 -1
  71. data/app/serializers/spree/api/v3/data_request_serializer.rb +8 -4
  72. data/app/serializers/spree/api/v3/delivery_serializer.rb +1 -1
  73. data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
  74. data/app/serializers/spree/api/v3/discount_serializer.rb +1 -1
  75. data/app/serializers/spree/api/v3/file_upload_serializer.rb +1 -1
  76. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +1 -1
  77. data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -1
  78. data/app/serializers/spree/api/v3/media_serializer.rb +1 -1
  79. data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
  80. data/app/serializers/spree/api/v3/order_group_serializer.rb +2 -2
  81. data/app/serializers/spree/api/v3/order_serializer.rb +4 -2
  82. data/app/serializers/spree/api/v3/payment_serializer.rb +1 -1
  83. data/app/serializers/spree/api/v3/product_filter_availability_option_serializer.rb +1 -1
  84. data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
  85. data/app/serializers/spree/api/v3/seller/address_serializer.rb +3 -2
  86. data/app/serializers/spree/api/v3/seller/order_serializer.rb +3 -3
  87. data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +3 -3
  88. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +2 -2
  89. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +1 -1
  90. data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +1 -1
  91. data/app/serializers/spree/api/v3/seller/variant_serializer.rb +1 -1
  92. data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +1 -1
  93. data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -1
  94. data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +1 -1
  95. data/app/serializers/spree/api/v3/variant_serializer.rb +2 -2
  96. data/app/services/spree/api/v3/filter_table.rb +22 -3
  97. data/app/services/spree/api/v3/request_schema.rb +64 -17
  98. data/config/locales/en.yml +1 -0
  99. data/config/routes.rb +19 -11
  100. data/lib/spree/api/agent_write_schemas.rb +15 -3
  101. data/lib/spree/api/dependencies.rb +2 -2
  102. data/lib/spree/api/enum_types.rb +118 -0
  103. data/lib/spree/api/openapi/filter_documentation.rb +8 -1
  104. data/lib/spree/api/typelizer_generation.rb +5 -0
  105. data/lib/typelizer/open_enums.rb +40 -16
  106. metadata +17 -6
@@ -9,6 +9,11 @@ module Spree
9
9
  def self.call(serializer_dirs)
10
10
  serializer_dirs.each { |dir| Rails.autoloaders.main.eager_load_dir(dir.to_s) }
11
11
 
12
+ # Before the SDK types, so two serializers disagreeing on a list's
13
+ # values stop generation instead of one of them silently winning.
14
+ require Spree::Api::Engine.root.join('lib/spree/api/enum_types').to_s
15
+ Spree::Api::EnumTypes.new.write!(Spree::Api::Engine.root.join('../..'))
16
+
12
17
  require 'typelizer/generator'
13
18
  Typelizer::Generator.call(force: true)
14
19
 
@@ -8,23 +8,41 @@ module Typelizer
8
8
  # from either still accepts an added value while every built-in value stays
9
9
  # documented and autocompletable.
10
10
  #
11
- # ISO lists are the exception: a named type several serializers and the
12
- # request types share, but closed, since nothing outside the standard can
13
- # add a country or a currency, and markets only accept the locales
14
- # `Spree::Locales::ALL` lists. The SDKs define them once, as values and
15
- # types, in `@spree/sdk-core` (generated from the API reference by
16
- # `pnpm generate:iso-codes`), so each SDK's `Enums.ts` re-exports that
17
- # definition instead of carrying a copy of the list.
11
+ # Every named list is defined once, as values and type, in `@spree/core`, and
12
+ # each SDK's `Enums.ts` re-exports it through `@spree/sdk-core` instead of
13
+ # carrying a copy. {Spree::Api::EnumTypes} writes them there.
14
+ #
15
+ # A name in `CLOSED_LIST_NAMES` keeps its list closed — named only so it is
16
+ # defined once — and both contracts stay exactly what `enum:` alone gives.
17
+ # Shared code lists are closed too, but come from the API reference
18
+ # (`pnpm generate:code-lists`) rather than the serializers: nothing outside
19
+ # the standard can add a country, a currency or a unit, and markets only
20
+ # accept the locales `Spree::Locales::ALL` lists.
18
21
  module OpenEnums
19
- CLOSED_TYPE_NAMES = %w[CountryCode CurrencyCode LocaleCode].freeze
22
+ CLOSED_TYPE_NAMES = %w[CountryCode CurrencyCode LocaleCode WeightUnit DimensionUnit].freeze
23
+
24
+ CLOSED_LIST_NAMES = %w[
25
+ ApiKeyType CaptureMethod CatalogAssignableType CatalogPriceSource ClaimResolution
26
+ CollectionRuleMatchPolicy CollectionSortOrder CommissionKind CompanyInvitationStatus CompanyKind
27
+ ConsentSource DataRequestKind DeliveryStatus DeliveryZoneMemberType DiscountKind DocumentNumberFormat
28
+ EmailFont EmailTemplateKind FileUploadVisibility FulfillmentType MatchPolicy MediaType OptionTypeKind
29
+ OrderFulfillmentStatus OrderPaymentStatus OrderStatus PackageTypeKind PaymentSourceType
30
+ PayoutScheduleInterval PermissionKind PickupStockPolicy ProviderFailurePolicy PurchaseUnit
31
+ SellerRequirementState SellerTransferKind ShippingLabelFormat ShippingLabelOwnerType ShippingLabelSource
32
+ StockAvailability StockMovementKind StockReceiptLineType StockReceiptReceivableType
33
+ StockReceiptRejectionReason StorefrontAccess TaxIdentifierSource TaxIdentifierValidationStatus
34
+ TaxRemittance UnitSystem
35
+ ].freeze
36
+
37
+ # @param name [String, nil] a list's `enum_type_name`
38
+ # @return [Boolean] whether the list is closed: no value outside it is valid
39
+ def self.closed?(name)
40
+ CLOSED_TYPE_NAMES.include?(name) || CLOSED_LIST_NAMES.include?(name)
41
+ end
20
42
 
21
43
  module Property
22
44
  def enum_definition(...)
23
- definition = super
24
- return definition unless definition
25
- return "type { #{enum_type_name} } from '@spree/sdk-core'" if CLOSED_TYPE_NAMES.include?(enum_type_name)
26
-
27
- "#{definition} | (string & {})"
45
+ super && "type { #{enum_type_name} } from '@spree/sdk-core'"
28
46
  end
29
47
 
30
48
  # Typelizer skips rewriting a file whose digest is unchanged, and the
@@ -32,7 +50,7 @@ module Typelizer
32
50
  # the re-export in makes a checkout that still carries the old inline
33
51
  # list regenerate.
34
52
  def fingerprint
35
- return super unless CLOSED_TYPE_NAMES.include?(enum_type_name)
53
+ return super unless enum_type_name
36
54
 
37
55
  [super, enum_definition].inspect
38
56
  end
@@ -43,10 +61,16 @@ module Typelizer
43
61
 
44
62
  def inline_schema(definition, property, openapi_version:)
45
63
  return super unless property.enum_type_name && property.enum.is_a?(Array) && !property.multi
46
- return super if CLOSED_TYPE_NAMES.include?(property.enum_type_name)
64
+ return super if OpenEnums.closed?(property.enum_type_name)
47
65
 
48
66
  open = { anyOf: [{ type: :string, enum: property.enum.compact }, { type: :string }] }
49
- apply_nullable(open, property, openapi_version: openapi_version)
67
+ # OpenAPI 3.0 ignores `nullable` beside `anyOf`, which is where
68
+ # Typelizer puts it, so the free-string branch carries it instead.
69
+ if property.nullable && !v31?(openapi_version)
70
+ open[:anyOf].last[:nullable] = true
71
+ else
72
+ apply_nullable(open, property, openapi_version: openapi_version)
73
+ end
50
74
  apply_metadata(open, property)
51
75
  open[:description] ||= OPEN_ENUM_DESCRIPTION
52
76
  open
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0.rc4
4
+ version: 6.0.0.rc5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vendo Connect Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-19 00:00:00.000000000 Z
11
+ date: 2026-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rswag-specs
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 6.0.0.rc4
47
+ version: 6.0.0.rc5
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 6.0.0.rc4
54
+ version: 6.0.0.rc5
55
55
  description: Spree Commerce Store / Admin API and HTTP webhooks
56
56
  email:
57
57
  - hello@spreecommerce.org
@@ -75,6 +75,7 @@ files:
75
75
  - app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb
76
76
  - app/controllers/concerns/spree/api/v3/admin/validation_details.rb
77
77
  - app/controllers/concerns/spree/api/v3/admin_authentication.rb
78
+ - app/controllers/concerns/spree/api/v3/allowed_redirect_url.rb
78
79
  - app/controllers/concerns/spree/api/v3/api_key_authentication.rb
79
80
  - app/controllers/concerns/spree/api/v3/authentication_strategies.rb
80
81
  - app/controllers/concerns/spree/api/v3/bulk_operations.rb
@@ -328,6 +329,7 @@ files:
328
329
  - app/controllers/spree/api/v3/store/account/companies_controller.rb
329
330
  - app/controllers/spree/api/v3/store/auth_controller.rb
330
331
  - app/controllers/spree/api/v3/store/base_controller.rb
332
+ - app/controllers/spree/api/v3/store/carts/addresses_controller.rb
331
333
  - app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb
332
334
  - app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb
333
335
  - app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb
@@ -363,7 +365,9 @@ files:
363
365
  - app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb
364
366
  - app/controllers/spree/api/v3/store/customers_controller.rb
365
367
  - app/controllers/spree/api/v3/store/data_feeds_controller.rb
368
+ - app/controllers/spree/api/v3/store/data_request_confirmations_controller.rb
366
369
  - app/controllers/spree/api/v3/store/data_request_downloads_controller.rb
370
+ - app/controllers/spree/api/v3/store/data_requests_controller.rb
367
371
  - app/controllers/spree/api/v3/store/delivery_methods_controller.rb
368
372
  - app/controllers/spree/api/v3/store/digital_links_controller.rb
369
373
  - app/controllers/spree/api/v3/store/locales_controller.rb
@@ -405,10 +409,13 @@ files:
405
409
  - app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb
406
410
  - app/request_schemas/spree/api/v3/admin/reason_request_schema.rb
407
411
  - app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb
412
+ - app/request_schemas/spree/api/v3/admin/variant_request_schema.rb
408
413
  - app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb
409
414
  - app/request_schemas/spree/api/v3/file_upload_request_schema.rb
410
415
  - app/request_schemas/spree/api/v3/media_request_schema.rb
411
416
  - app/request_schemas/spree/api/v3/price_request_schema.rb
417
+ - app/request_schemas/spree/api/v3/seller/price_request_schema.rb
418
+ - app/request_schemas/spree/api/v3/seller/variant_request_schema.rb
412
419
  - app/request_schemas/spree/api/v3/stock_level_request_schema.rb
413
420
  - app/request_schemas/spree/api/v3/store/address_request_schema.rb
414
421
  - app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb
@@ -416,8 +423,10 @@ files:
416
423
  - app/request_schemas/spree/api/v3/variant_request_schema.rb
417
424
  - app/serializers/concerns/spree/api/v3/admin/translatable.rb
418
425
  - app/serializers/concerns/spree/api/v3/purchase_summary.rb
426
+ - app/serializers/spree/api/v3/address_owner_serializer.rb
419
427
  - app/serializers/spree/api/v3/address_serializer.rb
420
428
  - app/serializers/spree/api/v3/admin/actor_serializer.rb
429
+ - app/serializers/spree/api/v3/admin/address_owner_serializer.rb
421
430
  - app/serializers/spree/api/v3/admin/address_serializer.rb
422
431
  - app/serializers/spree/api/v3/admin/admin_user_serializer.rb
423
432
  - app/serializers/spree/api/v3/admin/allowed_origin_serializer.rb
@@ -593,6 +602,7 @@ files:
593
602
  - app/serializers/spree/api/v3/custom_field_serializer.rb
594
603
  - app/serializers/spree/api/v3/customer_group_serializer.rb
595
604
  - app/serializers/spree/api/v3/customer_serializer.rb
605
+ - app/serializers/spree/api/v3/data_request_confirmation_requested_event_serializer.rb
596
606
  - app/serializers/spree/api/v3/data_request_event_serializer.rb
597
607
  - app/serializers/spree/api/v3/data_request_serializer.rb
598
608
  - app/serializers/spree/api/v3/delivery_method_serializer.rb
@@ -788,6 +798,7 @@ files:
788
798
  - lib/spree/api/configuration.rb
789
799
  - lib/spree/api/dependencies.rb
790
800
  - lib/spree/api/engine.rb
801
+ - lib/spree/api/enum_types.rb
791
802
  - lib/spree/api/extension_fields.rb
792
803
  - lib/spree/api/middleware/request_size_limit.rb
793
804
  - lib/spree/api/oauth.rb
@@ -812,9 +823,9 @@ licenses:
812
823
  - BSD-3-Clause
813
824
  metadata:
814
825
  bug_tracker_uri: https://github.com/spree/spree/issues
815
- changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.rc4
826
+ changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.rc5
816
827
  documentation_uri: https://docs.spreecommerce.org/
817
- source_code_uri: https://github.com/spree/spree/tree/v6.0.0.rc4
828
+ source_code_uri: https://github.com/spree/spree/tree/v6.0.0.rc5
818
829
  post_install_message:
819
830
  rdoc_options: []
820
831
  require_paths: