spree_api 6.0.0.rc7 → 6.0.1

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v3/admin/maintenance_tasks_switch.rb +35 -0
  3. data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +8 -4
  4. data/app/controllers/spree/api/v3/admin/maintenance_task_runs/cancellations_controller.rb +42 -0
  5. data/app/controllers/spree/api/v3/admin/maintenance_task_runs_controller.rb +92 -0
  6. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +1 -1
  7. data/app/controllers/spree/api/v3/admin/store_controller.rb +23 -7
  8. data/app/controllers/spree/api/v3/admin/upgrade_steps_controller.rb +114 -0
  9. data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +15 -5
  10. data/app/controllers/spree/api/v3/store/customers_controller.rb +1 -0
  11. data/app/controllers/spree/api/v3/store/store_controller.rb +25 -0
  12. data/app/serializers/spree/api/v3/address_serializer.rb +2 -0
  13. data/app/serializers/spree/api/v3/admin/address_serializer.rb +2 -0
  14. data/app/serializers/spree/api/v3/admin/category_serializer.rb +1 -3
  15. data/app/serializers/spree/api/v3/admin/claim_serializer.rb +2 -0
  16. data/app/serializers/spree/api/v3/admin/collection_serializer.rb +1 -4
  17. data/app/serializers/spree/api/v3/admin/company_serializer.rb +2 -0
  18. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +2 -0
  19. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +2 -0
  20. data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +2 -0
  21. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -0
  22. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -0
  23. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +1 -1
  24. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +1 -0
  25. data/app/serializers/spree/api/v3/admin/maintenance_task_run_serializer.rb +72 -0
  26. data/app/serializers/spree/api/v3/admin/media_serializer.rb +2 -0
  27. data/app/serializers/spree/api/v3/admin/newsletter_subscriber_serializer.rb +2 -0
  28. data/app/serializers/spree/api/v3/admin/option_type_serializer.rb +2 -0
  29. data/app/serializers/spree/api/v3/admin/option_value_serializer.rb +2 -0
  30. data/app/serializers/spree/api/v3/admin/order_serializer.rb +2 -0
  31. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +2 -0
  32. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +3 -1
  33. data/app/serializers/spree/api/v3/admin/payment_source_serializer.rb +2 -0
  34. data/app/serializers/spree/api/v3/admin/product_serializer.rb +1 -3
  35. data/app/serializers/spree/api/v3/admin/return_serializer.rb +2 -0
  36. data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +2 -1
  37. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +4 -0
  38. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +2 -0
  39. data/app/serializers/spree/api/v3/admin/store_serializer.rb +3 -4
  40. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +1 -3
  41. data/app/serializers/spree/api/v3/base_serializer.rb +28 -0
  42. data/app/serializers/spree/api/v3/category_serializer.rb +1 -4
  43. data/app/serializers/spree/api/v3/claim_serializer.rb +2 -0
  44. data/app/serializers/spree/api/v3/collection_serializer.rb +1 -4
  45. data/app/serializers/spree/api/v3/company_serializer.rb +2 -0
  46. data/app/serializers/spree/api/v3/credit_card_serializer.rb +2 -0
  47. data/app/serializers/spree/api/v3/customer_serializer.rb +2 -0
  48. data/app/serializers/spree/api/v3/delivery_method_serializer.rb +2 -0
  49. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +2 -0
  50. data/app/serializers/spree/api/v3/gift_card_serializer.rb +1 -0
  51. data/app/serializers/spree/api/v3/line_item_serializer.rb +2 -0
  52. data/app/serializers/spree/api/v3/media_serializer.rb +2 -0
  53. data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -0
  54. data/app/serializers/spree/api/v3/option_type_serializer.rb +2 -0
  55. data/app/serializers/spree/api/v3/option_value_serializer.rb +2 -0
  56. data/app/serializers/spree/api/v3/order_serializer.rb +2 -0
  57. data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -0
  58. data/app/serializers/spree/api/v3/payment_serializer.rb +3 -1
  59. data/app/serializers/spree/api/v3/payment_source_serializer.rb +2 -0
  60. data/app/serializers/spree/api/v3/product_serializer.rb +1 -4
  61. data/app/serializers/spree/api/v3/return_serializer.rb +2 -0
  62. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +22 -1
  63. data/app/serializers/spree/api/v3/seller/profile_serializer.rb +1 -1
  64. data/app/serializers/spree/api/v3/seller_serializer.rb +2 -0
  65. data/app/serializers/spree/api/v3/store_credit_serializer.rb +2 -0
  66. data/app/serializers/spree/api/v3/store_serializer.rb +16 -0
  67. data/app/serializers/spree/api/v3/variant_serializer.rb +1 -4
  68. data/app/services/spree/api/v3/request_schema.rb +15 -7
  69. data/config/routes.rb +14 -2
  70. data/lib/spree/api/dependencies.rb +2 -1
  71. data/lib/spree/api/enum_types.rb +2 -1
  72. data/lib/typelizer/open_enums.rb +21 -2
  73. metadata +13 -6
@@ -40,22 +40,25 @@ module Spree
40
40
  datetime: { type: :string, format: :'date-time' },
41
41
  id: { type: :string },
42
42
  any: {},
43
- # Codes from the closed lists below.
43
+ # Codes from the lists below.
44
44
  country: { type: :string },
45
45
  currency: { type: :string },
46
46
  locale: { type: :string },
47
+ time_zone: { type: :string },
47
48
  weight_unit: { type: :string },
48
49
  dimension_unit: { type: :string }
49
50
  }.freeze
50
51
 
51
- # The closed lists a code field takes, published once per API as a
52
- # named component — the same `CountryCode`, `CurrencyCode` and
53
- # `WeightUnit` types the serializers declare, so a value read from a
54
- # response is the type a request takes.
52
+ # The lists a code field takes, published once per API as a named
53
+ # component — the same `CountryCode`, `CurrencyCode` and `WeightUnit`
54
+ # types the serializers declare, so a value read from a response is the
55
+ # type a request takes. A list `Typelizer::OpenEnums` does not close
56
+ # only suggests its values.
55
57
  CODE_LISTS = {
56
58
  country: ['CountryCode', -> { Spree::IsoData.country_codes }],
57
59
  currency: ['CurrencyCode', -> { Spree::Money::Rounding::CURRENCY_CODES }],
58
60
  locale: ['LocaleCode', -> { Spree::Locales::ALL }],
61
+ time_zone: ['TimeZone', -> { Spree::TimeZones::SUGGESTED }],
59
62
  weight_unit: ['WeightUnit', -> { Spree::Variant::WEIGHT_UNITS }],
60
63
  dimension_unit: ['DimensionUnit', -> { Spree::Variant::DIMENSION_UNITS }]
61
64
  }.freeze
@@ -348,7 +351,12 @@ module Spree
348
351
  next unless CODE_LISTS.key?(field.kind)
349
352
 
350
353
  name, values = CODE_LISTS[field.kind]
351
- lists[name] = { type: :string, enum: values.call }
354
+ lists[name] = if Typelizer::OpenEnums.closed?(name)
355
+ { type: :string, enum: values.call }
356
+ else
357
+ Typelizer::OpenEnums.open_schema({ type: :string }, values.call)
358
+ .merge(description: Typelizer::OpenEnums.description(name)).compact
359
+ end
352
360
  end
353
361
  end
354
362
 
@@ -469,7 +477,7 @@ module Spree
469
477
 
470
478
  # The same open list the serializers publish (`enum_type_name`):
471
479
  # clients autocomplete the built-in values and still accept any other.
472
- { anyOf: [schema.merge(enum: field.enum), schema] }
480
+ Typelizer::OpenEnums.open_schema(schema, field.enum)
473
481
  end
474
482
  end
475
483
  end
data/config/routes.rb CHANGED
@@ -22,6 +22,9 @@ Spree::Core::Engine.add_routes do
22
22
  # Current channel context (never a list — see Store::ChannelController)
23
23
  resource :channel, only: [:show], controller: 'channel'
24
24
 
25
+ # Current store context (name and default SEO metadata, localized)
26
+ resource :store, only: [:show], controller: 'store'
27
+
25
28
  # Catalog
26
29
  resources :products, only: [:index, :show] do
27
30
  collection do
@@ -287,9 +290,9 @@ Spree::Core::Engine.add_routes do
287
290
  resource :store, only: [:show, :update], controller: 'store' do
288
291
  get :data_sources
289
292
  end
290
- # The store's own custom fields, addressed by its id like every other
293
+ # The store's own custom fields and translations, addressed by its id like every other
291
294
  # parent. The controller only ever resolves the current store.
292
- resources :stores, only: [], concerns: :custom_fieldable
295
+ resources :stores, only: [], concerns: [:custom_fieldable, :translatable]
293
296
 
294
297
  # Staff & access (invitations, admin users, roles, API keys)
295
298
  resources :admin_users, only: [:index, :show, :update, :destroy]
@@ -509,6 +512,15 @@ Spree::Core::Engine.add_routes do
509
512
  post :test, on: :member
510
513
  end
511
514
 
515
+ # Maintenance tasks — see docs/plans/6.0-maintenance-tasks.md.
516
+ # A run names its task by the short name the upgrade steps give.
517
+ resources :upgrade_steps, only: [:index]
518
+ resources :maintenance_task_runs, only: [:index, :show, :create] do
519
+ scope module: :maintenance_task_runs do
520
+ resource :cancellation, only: [:create]
521
+ end
522
+ end
523
+
512
524
  # Promotions, with nested actions/rules/coupon codes.
513
525
  resources :promotions, concerns: :custom_fieldable do
514
526
  resources :promotion_actions, only: [:index, :show, :create, :update, :destroy]
@@ -18,7 +18,7 @@ module Spree
18
18
  product_filter_sort_option media_event return return_line_item exchange exchange_line_item claim
19
19
  claim_line_item return_reason claim_reason digital_asset export gift_card_batch import import_row
20
20
  invitation newsletter_subscriber promotion refund stock_level stock_movement stock_reservation
21
- stock_transfer company company_membership company_invitation seller file_upload file_upload_target].freeze
21
+ stock_transfer company company_membership company_invitation seller file_upload file_upload_target store].freeze
22
22
 
23
23
  ADMIN_SERIALIZERS =
24
24
  %i[country state locale applied_promotion discount tax_line cart delivery_zone delivery_profile
@@ -41,6 +41,7 @@ module Spree
41
41
  store setup_task update_status api_key oauth_application oauth_access_token oauth_consent_request oauth_redirect
42
42
  oauth_protected_resource allowed_origin webhook_endpoint webhook_event webhook_delivery invitation
43
43
  invitation_acceptance_link role permission export saved_report import import_row import_mapping promotion
44
+ maintenance_task_run
44
45
  promotion_action promotion_rule coupon_code price_adjustment_tier price_list price_rule
45
46
  resource_translations email_template email_template_draft email_template_revision email_template_preview
46
47
  email_template_sample_record file_upload file_upload_target].freeze
@@ -110,7 +110,8 @@ module Spree
110
110
  type = "export type #{name} = (typeof #{constant})[number] | (string & {})"
111
111
  type = "export type #{name} =\n | (typeof #{constant})[number]\n | (string & {})" if type.length > LINE_WIDTH
112
112
 
113
- "\n/** The built-in values of `#{name}`. Extensions may add more. */\n#{line}\n#{type}\n"
113
+ summary = Typelizer::OpenEnums.description(name) || "The built-in values of `#{name}`. Extensions may add more."
114
+ "\n/** #{summary} */\n#{line}\n#{type}\n"
114
115
  end
115
116
  end
116
117
  end
@@ -34,6 +34,25 @@ module Typelizer
34
34
  TaxRemittance UnitSystem
35
35
  ].freeze
36
36
 
37
+ # Open lists whose values are suggestions rather than built-ins an
38
+ # extension adds to, described as such wherever the list is published.
39
+ DESCRIPTIONS = {
40
+ 'TimeZone' => 'Common IANA time zones; any other IANA time zone identifier is accepted too.'
41
+ }.freeze
42
+
43
+ # @param name [String, nil] a list's `enum_type_name`
44
+ # @return [String, nil] what the list's values are, when they are not built-ins
45
+ def self.description(name)
46
+ DESCRIPTIONS[name]
47
+ end
48
+
49
+ # @param schema [Hash] the schema of any value in the list
50
+ # @param values [Array<String>] the values to suggest
51
+ # @return [Hash] a schema suggesting the values while accepting any other
52
+ def self.open_schema(schema, values)
53
+ { anyOf: [schema.merge(enum: values), schema] }
54
+ end
55
+
37
56
  # @param name [String, nil] a list's `enum_type_name`
38
57
  # @return [Boolean] whether the list is closed: no value outside it is valid
39
58
  def self.closed?(name)
@@ -63,7 +82,7 @@ module Typelizer
63
82
  return super unless property.enum_type_name && property.enum.is_a?(Array) && !property.multi
64
83
  return super if OpenEnums.closed?(property.enum_type_name)
65
84
 
66
- open = { anyOf: [{ type: :string, enum: property.enum.compact }, { type: :string }] }
85
+ open = OpenEnums.open_schema({ type: :string }, property.enum.compact)
67
86
  # OpenAPI 3.0 ignores `nullable` beside `anyOf`, which is where
68
87
  # Typelizer puts it, so the free-string branch carries it instead.
69
88
  if property.nullable && !v31?(openapi_version)
@@ -72,7 +91,7 @@ module Typelizer
72
91
  apply_nullable(open, property, openapi_version: openapi_version)
73
92
  end
74
93
  apply_metadata(open, property)
75
- open[:description] ||= OPEN_ENUM_DESCRIPTION
94
+ open[:description] ||= OpenEnums.description(property.enum_type_name) || OPEN_ENUM_DESCRIPTION
76
95
  open
77
96
  end
78
97
  end
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.rc7
4
+ version: 6.0.1
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-26 00:00:00.000000000 Z
11
+ date: 2026-10-29 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.rc7
47
+ version: 6.0.1
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.rc7
54
+ version: 6.0.1
55
55
  description: Spree Commerce Store / Admin API and HTTP webhooks
56
56
  email:
57
57
  - hello@spreecommerce.org
@@ -65,6 +65,7 @@ files:
65
65
  - app/controllers/concerns/spree/api/v3/admin/auth_cookies.rb
66
66
  - app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb
67
67
  - app/controllers/concerns/spree/api/v3/admin/embed_permissions.rb
68
+ - app/controllers/concerns/spree/api/v3/admin/maintenance_tasks_switch.rb
68
69
  - app/controllers/concerns/spree/api/v3/admin/product_listing.rb
69
70
  - app/controllers/concerns/spree/api/v3/admin/product_membership.rb
70
71
  - app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb
@@ -190,6 +191,8 @@ files:
190
191
  - app/controllers/spree/api/v3/admin/invitations/acceptance_links_controller.rb
191
192
  - app/controllers/spree/api/v3/admin/invitations_controller.rb
192
193
  - app/controllers/spree/api/v3/admin/locales_controller.rb
194
+ - app/controllers/spree/api/v3/admin/maintenance_task_runs/cancellations_controller.rb
195
+ - app/controllers/spree/api/v3/admin/maintenance_task_runs_controller.rb
193
196
  - app/controllers/spree/api/v3/admin/markets_controller.rb
194
197
  - app/controllers/spree/api/v3/admin/me_controller.rb
195
198
  - app/controllers/spree/api/v3/admin/media_controller.rb
@@ -276,6 +279,7 @@ files:
276
279
  - app/controllers/spree/api/v3/admin/translations_controller.rb
277
280
  - app/controllers/spree/api/v3/admin/translations_coverage_controller.rb
278
281
  - app/controllers/spree/api/v3/admin/updates_controller.rb
282
+ - app/controllers/spree/api/v3/admin/upgrade_steps_controller.rb
279
283
  - app/controllers/spree/api/v3/admin/variants_controller.rb
280
284
  - app/controllers/spree/api/v3/admin/webhook_deliveries_controller.rb
281
285
  - app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb
@@ -386,6 +390,7 @@ files:
386
390
  - app/controllers/spree/api/v3/store/products_controller.rb
387
391
  - app/controllers/spree/api/v3/store/resource_controller.rb
388
392
  - app/controllers/spree/api/v3/store/sellers_controller.rb
393
+ - app/controllers/spree/api/v3/store/store_controller.rb
389
394
  - app/controllers/spree/api/v3/store/wishlist_items_controller.rb
390
395
  - app/controllers/spree/api/v3/store/wishlists_controller.rb
391
396
  - app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb
@@ -507,6 +512,7 @@ files:
507
512
  - app/serializers/spree/api/v3/admin/invitation_serializer.rb
508
513
  - app/serializers/spree/api/v3/admin/line_item_serializer.rb
509
514
  - app/serializers/spree/api/v3/admin/locale_serializer.rb
515
+ - app/serializers/spree/api/v3/admin/maintenance_task_run_serializer.rb
510
516
  - app/serializers/spree/api/v3/admin/market_serializer.rb
511
517
  - app/serializers/spree/api/v3/admin/media_serializer.rb
512
518
  - app/serializers/spree/api/v3/admin/membership_product_serializer.rb
@@ -735,6 +741,7 @@ files:
735
741
  - app/serializers/spree/api/v3/stock_transfer_serializer.rb
736
742
  - app/serializers/spree/api/v3/store_credit_event_serializer.rb
737
743
  - app/serializers/spree/api/v3/store_credit_serializer.rb
744
+ - app/serializers/spree/api/v3/store_serializer.rb
738
745
  - app/serializers/spree/api/v3/supplier_event_serializer.rb
739
746
  - app/serializers/spree/api/v3/tax_category_serializer.rb
740
747
  - app/serializers/spree/api/v3/tax_identifier_serializer.rb
@@ -831,9 +838,9 @@ licenses:
831
838
  - BSD-3-Clause
832
839
  metadata:
833
840
  bug_tracker_uri: https://github.com/spree/spree/issues
834
- changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.0.rc7
841
+ changelog_uri: https://github.com/spree/spree/releases/tag/v6.0.1
835
842
  documentation_uri: https://docs.spreecommerce.org/
836
- source_code_uri: https://github.com/spree/spree/tree/v6.0.0.rc7
843
+ source_code_uri: https://github.com/spree/spree/tree/v6.0.1
837
844
  post_install_message:
838
845
  rdoc_options: []
839
846
  require_paths: