spree_api 5.5.0 → 5.5.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/api/v3/admin/countries_controller.rb +1 -1
  3. data/app/serializers/spree/api/v3/admin/category_serializer.rb +4 -4
  4. data/app/serializers/spree/api/v3/admin/country_serializer.rb +1 -1
  5. data/app/serializers/spree/api/v3/admin/customer_group_serializer.rb +1 -1
  6. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +6 -6
  7. data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +1 -1
  8. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +5 -5
  9. data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -4
  10. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +5 -5
  11. data/app/serializers/spree/api/v3/admin/market_serializer.rb +1 -1
  12. data/app/serializers/spree/api/v3/admin/option_type_serializer.rb +1 -1
  13. data/app/serializers/spree/api/v3/admin/option_value_serializer.rb +1 -1
  14. data/app/serializers/spree/api/v3/admin/order_serializer.rb +19 -19
  15. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +3 -3
  16. data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -1
  17. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +7 -3
  18. data/app/serializers/spree/api/v3/admin/price_serializer.rb +1 -1
  19. data/app/serializers/spree/api/v3/admin/product_serializer.rb +10 -10
  20. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +5 -5
  21. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +2 -2
  22. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +1 -1
  23. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +2 -2
  24. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +2 -2
  25. data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +2 -2
  26. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +6 -6
  27. data/app/serializers/spree/api/v3/cart_serializer.rb +9 -9
  28. data/app/serializers/spree/api/v3/category_serializer.rb +4 -4
  29. data/app/serializers/spree/api/v3/country_serializer.rb +1 -1
  30. data/app/serializers/spree/api/v3/customer_serializer.rb +3 -3
  31. data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +1 -1
  32. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +3 -3
  33. data/app/serializers/spree/api/v3/line_item_serializer.rb +2 -2
  34. data/app/serializers/spree/api/v3/market_serializer.rb +1 -1
  35. data/app/serializers/spree/api/v3/order_serializer.rb +8 -8
  36. data/app/serializers/spree/api/v3/payment_serializer.rb +1 -1
  37. data/app/serializers/spree/api/v3/payment_session_serializer.rb +2 -2
  38. data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
  39. data/app/serializers/spree/api/v3/product_serializer.rb +8 -8
  40. data/app/serializers/spree/api/v3/variant_serializer.rb +4 -4
  41. data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -1
  42. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  43. data/lib/spree/api/testing_support/always_register_type_hints.rb +28 -0
  44. data/lib/spree/api.rb +1 -0
  45. data/lib/typelizer/proc_resource_resolution.rb +14 -0
  46. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 38cbb3acc227f72f6faa6bab69ea024992235fa5f9ced5e13de177a4407deab5
4
- data.tar.gz: b9f8e59be5c640754c0d1a06e531f69676d136a535eb7c8840dad704168846ea
3
+ metadata.gz: 1e02e29699a400725c983a1f6e144ac6a79de5b9aa6eed50e51d35eacb164753
4
+ data.tar.gz: 6245af990fc662476e366220599f4b264ccf40ca485af0f897e76cb64c29731c
5
5
  SHA512:
6
- metadata.gz: ae394b4578fcb155786ea3e51d9dbdb2dc0af2cf7f67f3083d40f56679a37bf02143fefddc91989fbce5f3188c36656cd7135fb13156aec75deb561d49729a47
7
- data.tar.gz: 5308f920f7d771df42eb381e274e81cf03349a85226b10714093be4b08af7339a3ed1ae67a1144aa30198727d99ea9f3a813f95591ec1ff0c5fc862302c07db2
6
+ metadata.gz: 4c0833f715c989a0aea4cc6562d87451a99b6b20df1894464558b16bc5269a5fd7da3c7edea0f5fffe826095924d49ee87e7de49050df722736e2d2736d55fac
7
+ data.tar.gz: d8f1dbf1013bb517d9d1ced860abd4c2a6e27c2a0dc9e30aa130bc4376121b3bec2a48226f0cf2443abfb5859664814ae4f95d36d1515a1488f7a2e18cd0efa2
@@ -25,7 +25,7 @@ module Spree
25
25
  end
26
26
 
27
27
  def scope
28
- Spree::Country.all.order(:name)
28
+ Spree::Country.all.order(:name).preload_associations_lazily
29
29
  end
30
30
 
31
31
  def find_resource
@@ -13,20 +13,20 @@ module Spree
13
13
 
14
14
  # Override inherited associations to use admin serializers
15
15
  one :parent,
16
- resource: Spree.api.admin_category_serializer,
16
+ resource: proc { Spree.api.admin_category_serializer },
17
17
  if: proc { expand?('parent') }
18
18
 
19
19
  many :children,
20
- resource: Spree.api.admin_category_serializer,
20
+ resource: proc { Spree.api.admin_category_serializer },
21
21
  if: proc { expand?('children') }
22
22
 
23
23
  many :ancestors,
24
- resource: Spree.api.admin_category_serializer,
24
+ resource: proc { Spree.api.admin_category_serializer },
25
25
  if: proc { expand?('ancestors') }
26
26
 
27
27
  many :metafields,
28
28
  key: :custom_fields,
29
- resource: Spree.api.admin_custom_field_serializer,
29
+ resource: proc { Spree.api.admin_custom_field_serializer },
30
30
  if: proc { expand?('custom_fields') }
31
31
  end
32
32
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  attributes created_at: :iso8601, updated_at: :iso8601
7
7
 
8
8
  many :states,
9
- resource: Spree.api.admin_state_serializer,
9
+ resource: proc { Spree.api.admin_state_serializer },
10
10
  if: proc { params[:expand]&.include?('states') }
11
11
  end
12
12
  end
@@ -18,7 +18,7 @@ module Spree
18
18
  # whole list on every group fetch would explode the index payload.
19
19
  # Pass `expand=customers` when you need them inline (single-record reads only).
20
20
  many :customers,
21
- resource: Spree.api.admin_customer_serializer,
21
+ resource: proc { Spree.api.admin_customer_serializer },
22
22
  if: proc { expand?('customers') }
23
23
  end
24
24
  end
@@ -80,20 +80,20 @@ module Spree
80
80
  end
81
81
 
82
82
  # Override inherited associations to use admin serializers
83
- many :addresses, resource: Spree.api.admin_address_serializer, if: proc { expand?('addresses') }
84
- one :bill_address, key: :default_billing_address, resource: Spree.api.admin_address_serializer, if: proc { expand?('default_billing_address') }
85
- one :ship_address, key: :default_shipping_address, resource: Spree.api.admin_address_serializer, if: proc { expand?('default_shipping_address') }
83
+ many :addresses, resource: proc { Spree.api.admin_address_serializer }, if: proc { expand?('addresses') }
84
+ one :bill_address, key: :default_billing_address, resource: proc { Spree.api.admin_address_serializer }, if: proc { expand?('default_billing_address') }
85
+ one :ship_address, key: :default_shipping_address, resource: proc { Spree.api.admin_address_serializer }, if: proc { expand?('default_shipping_address') }
86
86
 
87
87
  many :orders,
88
- resource: Spree.api.admin_order_serializer,
88
+ resource: proc { Spree.api.admin_order_serializer },
89
89
  if: proc { expand?('orders') }
90
90
 
91
91
  many :store_credits,
92
- resource: Spree.api.admin_store_credit_serializer,
92
+ resource: proc { Spree.api.admin_store_credit_serializer },
93
93
  if: proc { expand?('store_credits') }
94
94
 
95
95
  many :customer_groups,
96
- resource: Spree.api.admin_customer_group_serializer,
96
+ resource: proc { Spree.api.admin_customer_group_serializer },
97
97
  if: proc { expand?('customer_groups') }
98
98
  end
99
99
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  class DeliveryRateSerializer < V3::DeliveryRateSerializer
6
6
  attributes created_at: :iso8601, updated_at: :iso8601
7
7
 
8
- one :shipping_method, key: :delivery_method, resource: Spree.api.admin_delivery_method_serializer, if: proc { expand?('delivery_method') }
8
+ one :shipping_method, key: :delivery_method, resource: proc { Spree.api.admin_delivery_method_serializer }, if: proc { expand?('delivery_method') }
9
9
  end
10
10
  end
11
11
  end
@@ -21,16 +21,16 @@ module Spree
21
21
  end
22
22
 
23
23
  # Override inherited associations to use admin serializers
24
- one :shipping_method, key: :delivery_method, resource: Spree.api.admin_delivery_method_serializer, if: proc { expand?('delivery_method') }
25
- one :stock_location, resource: Spree.api.admin_stock_location_serializer, if: proc { expand?('stock_location') }
26
- many :shipping_rates, key: :delivery_rates, resource: Spree.api.admin_delivery_rate_serializer, if: proc { expand?('delivery_rates') }
24
+ one :shipping_method, key: :delivery_method, resource: proc { Spree.api.admin_delivery_method_serializer }, if: proc { expand?('delivery_method') }
25
+ one :stock_location, resource: proc { Spree.api.admin_stock_location_serializer }, if: proc { expand?('stock_location') }
26
+ many :shipping_rates, key: :delivery_rates, resource: proc { Spree.api.admin_delivery_rate_serializer }, if: proc { expand?('delivery_rates') }
27
27
 
28
28
  one :order,
29
- resource: Spree.api.admin_order_serializer,
29
+ resource: proc { Spree.api.admin_order_serializer },
30
30
  if: proc { expand?('order') }
31
31
 
32
32
  many :adjustments,
33
- resource: Spree.api.admin_adjustment_serializer,
33
+ resource: proc { Spree.api.admin_adjustment_serializer },
34
34
  if: proc { expand?('adjustments') }
35
35
  end
36
36
  end
@@ -24,12 +24,12 @@ module Spree
24
24
  # `expand=customer,created_by` to populate the row chips.
25
25
  one :user,
26
26
  key: :customer,
27
- resource: Spree.api.admin_customer_serializer,
27
+ resource: proc { Spree.api.admin_customer_serializer },
28
28
  if: proc { expand?('customer') }
29
29
 
30
30
  # Admin who issued the card.
31
31
  one :created_by,
32
- resource: Spree.api.admin_admin_user_serializer,
32
+ resource: proc { Spree.api.admin_admin_user_serializer },
33
33
  if: proc { expand?('created_by') }
34
34
 
35
35
  # Batch the card was issued as part of (bulk-issue flow). The
@@ -38,12 +38,12 @@ module Spree
38
38
  # column for read/write symmetry.
39
39
  one :batch,
40
40
  key: :gift_card_batch,
41
- resource: Spree.api.admin_gift_card_batch_serializer,
41
+ resource: proc { Spree.api.admin_gift_card_batch_serializer },
42
42
  if: proc { expand?('gift_card_batch') }
43
43
 
44
44
  # Orders that consumed the card. Detail-only — pass `expand=orders`.
45
45
  many :orders,
46
- resource: Spree.api.admin_order_serializer,
46
+ resource: proc { Spree.api.admin_order_serializer },
47
47
  if: proc { expand?('orders') }
48
48
  end
49
49
  end
@@ -21,19 +21,19 @@ module Spree
21
21
  end
22
22
 
23
23
  # Override inherited associations to use admin serializers
24
- many :option_values, resource: Spree.api.admin_option_value_serializer
25
- many :digital_links, resource: Spree.api.admin_digital_link_serializer
24
+ many :option_values, resource: proc { Spree.api.admin_option_value_serializer }
25
+ many :digital_links, resource: proc { Spree.api.admin_digital_link_serializer }
26
26
 
27
27
  one :variant,
28
- resource: Spree.api.admin_variant_serializer,
28
+ resource: proc { Spree.api.admin_variant_serializer },
29
29
  if: proc { expand?('variant') }
30
30
 
31
31
  one :tax_category,
32
- resource: Spree.api.admin_tax_category_serializer,
32
+ resource: proc { Spree.api.admin_tax_category_serializer },
33
33
  if: proc { expand?('tax_category') }
34
34
 
35
35
  many :adjustments,
36
- resource: Spree.api.admin_adjustment_serializer,
36
+ resource: proc { Spree.api.admin_adjustment_serializer },
37
37
  if: proc { expand?('adjustments') }
38
38
  end
39
39
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  attributes created_at: :iso8601, updated_at: :iso8601
7
7
 
8
8
  many :countries,
9
- resource: Spree.api.admin_country_serializer,
9
+ resource: proc { Spree.api.admin_country_serializer },
10
10
  if: proc { expand?(:countries) }
11
11
  end
12
12
  end
@@ -9,7 +9,7 @@ module Spree
9
9
  created_at: :iso8601, updated_at: :iso8601
10
10
 
11
11
  many :option_values,
12
- resource: Spree.api.admin_option_value_serializer,
12
+ resource: proc { Spree.api.admin_option_value_serializer },
13
13
  if: proc { expand?('option_values') }
14
14
  end
15
15
  end
@@ -9,7 +9,7 @@ module Spree
9
9
  created_at: :iso8601, updated_at: :iso8601
10
10
 
11
11
  one :option_type,
12
- resource: Spree.api.admin_option_type_serializer,
12
+ resource: proc { Spree.api.admin_option_type_serializer },
13
13
  if: proc { expand?('option_type') }
14
14
  end
15
15
  end
@@ -55,49 +55,49 @@ module Spree
55
55
  end
56
56
 
57
57
  # Override inherited associations to use admin serializers
58
- many :discounts, resource: Spree.api.admin_discount_serializer, if: proc { expand?('discounts') }
59
- many :line_items, key: :items, resource: Spree.api.admin_line_item_serializer, if: proc { expand?('items') }
60
- many :fulfillments, resource: Spree.api.admin_fulfillment_serializer, if: proc { expand?('fulfillments') }
61
- many :payments, resource: Spree.api.admin_payment_serializer, if: proc { expand?('payments') }
62
-
63
- one :billing_address, resource: Spree.api.admin_address_serializer, if: proc { expand?('billing_address') }
64
- one :shipping_address, resource: Spree.api.admin_address_serializer, if: proc { expand?('shipping_address') }
65
- one :gift_card, resource: Spree.api.admin_gift_card_serializer
66
- one :market, resource: Spree.api.admin_market_serializer
67
- one :channel, resource: Spree.api.admin_channel_serializer, if: proc { expand?('channel') }
58
+ many :discounts, resource: proc { Spree.api.admin_discount_serializer }, if: proc { expand?('discounts') }
59
+ many :line_items, key: :items, resource: proc { Spree.api.admin_line_item_serializer }, if: proc { expand?('items') }
60
+ many :fulfillments, resource: proc { Spree.api.admin_fulfillment_serializer }, if: proc { expand?('fulfillments') }
61
+ many :payments, resource: proc { Spree.api.admin_payment_serializer }, if: proc { expand?('payments') }
62
+
63
+ one :billing_address, resource: proc { Spree.api.admin_address_serializer }, if: proc { expand?('billing_address') }
64
+ one :shipping_address, resource: proc { Spree.api.admin_address_serializer }, if: proc { expand?('shipping_address') }
65
+ one :gift_card, resource: proc { Spree.api.admin_gift_card_serializer }
66
+ one :market, resource: proc { Spree.api.admin_market_serializer }
67
+ one :channel, resource: proc { Spree.api.admin_channel_serializer }, if: proc { expand?('channel') }
68
68
  one :preferred_stock_location,
69
- resource: Spree.api.admin_stock_location_serializer,
69
+ resource: proc { Spree.api.admin_stock_location_serializer },
70
70
  if: proc { expand?('preferred_stock_location') }
71
71
 
72
- many :payment_methods, resource: Spree.api.admin_payment_method_serializer, if: proc { expand?('payment_methods') }
72
+ many :payment_methods, resource: proc { Spree.api.admin_payment_method_serializer }, if: proc { expand?('payment_methods') }
73
73
 
74
74
  one :user,
75
75
  key: :customer,
76
- resource: Spree.api.admin_customer_serializer,
76
+ resource: proc { Spree.api.admin_customer_serializer },
77
77
  if: proc { expand?('customer') }
78
78
 
79
79
  one :approver,
80
- resource: Spree.api.admin_customer_serializer,
80
+ resource: proc { Spree.api.admin_customer_serializer },
81
81
  if: proc { expand?('approver') }
82
82
 
83
83
  one :canceler,
84
- resource: Spree.api.admin_customer_serializer,
84
+ resource: proc { Spree.api.admin_customer_serializer },
85
85
  if: proc { expand?('canceler') }
86
86
 
87
87
  one :created_by,
88
- resource: Spree.api.admin_customer_serializer,
88
+ resource: proc { Spree.api.admin_customer_serializer },
89
89
  if: proc { expand?('created_by') }
90
90
 
91
91
  many :adjustments,
92
- resource: Spree.api.admin_adjustment_serializer,
92
+ resource: proc { Spree.api.admin_adjustment_serializer },
93
93
  if: proc { expand?('adjustments') }
94
94
 
95
95
  many :return_authorizations,
96
- resource: Spree.api.admin_return_authorization_serializer,
96
+ resource: proc { Spree.api.admin_return_authorization_serializer },
97
97
  if: proc { expand?('return_authorizations') }
98
98
 
99
99
  many :reimbursements,
100
- resource: Spree.api.admin_reimbursement_serializer,
100
+ resource: proc { Spree.api.admin_reimbursement_serializer },
101
101
  if: proc { expand?('reimbursements') }
102
102
  end
103
103
  end
@@ -22,7 +22,7 @@ module Spree
22
22
  end
23
23
 
24
24
  # Override inherited associations to use admin serializers
25
- one :payment_method, resource: Spree.api.admin_payment_method_serializer, if: proc { expand?('payment_method') }
25
+ one :payment_method, resource: proc { Spree.api.admin_payment_method_serializer }, if: proc { expand?('payment_method') }
26
26
 
27
27
  attribute :source do |payment|
28
28
  next nil if payment.source.blank?
@@ -40,11 +40,11 @@ module Spree
40
40
  end
41
41
 
42
42
  one :order,
43
- resource: Spree.api.admin_order_serializer,
43
+ resource: proc { Spree.api.admin_order_serializer },
44
44
  if: proc { expand?('order') }
45
45
 
46
46
  many :refunds,
47
- resource: Spree.api.admin_refund_serializer,
47
+ resource: proc { Spree.api.admin_refund_serializer },
48
48
  if: proc { expand?('refunds') }
49
49
  end
50
50
  end
@@ -42,7 +42,7 @@ module Spree
42
42
  attribute :product_ids, &:product_prefixed_ids
43
43
 
44
44
  many :price_rules,
45
- resource: Spree.api.admin_price_rule_serializer,
45
+ resource: proc { Spree.api.admin_price_rule_serializer },
46
46
  if: proc { expand?('price_rules') }
47
47
  end
48
48
  end
@@ -37,16 +37,20 @@ module Spree
37
37
  # Embeds skip rules that don't carry the association (e.g.
38
38
  # VolumeRule has no markets/customers — the keys are omitted).
39
39
  many :markets,
40
- resource: Spree.api.admin_market_serializer,
40
+ resource: proc { Spree.api.admin_market_serializer },
41
41
  if: proc { |rule| rule.respond_to?(:markets) }
42
42
 
43
43
  many :customer_groups,
44
- resource: Spree.api.admin_customer_group_serializer,
44
+ resource: proc { Spree.api.admin_customer_group_serializer },
45
45
  if: proc { |rule| rule.respond_to?(:customer_groups) }
46
46
 
47
+ many :channels,
48
+ resource: proc { Spree.api.admin_channel_serializer },
49
+ if: proc { |rule| rule.respond_to?(:channels) }
50
+
47
51
  many :users,
48
52
  key: :customers,
49
- resource: Spree.api.admin_customer_serializer,
53
+ resource: proc { Spree.api.admin_customer_serializer },
50
54
  if: proc { |rule| rule.respond_to?(:users) }
51
55
  end
52
56
  end
@@ -16,7 +16,7 @@ module Spree
16
16
  attributes created_at: :iso8601, updated_at: :iso8601
17
17
 
18
18
  one :variant,
19
- resource: Spree.api.admin_variant_serializer,
19
+ resource: proc { Spree.api.admin_variant_serializer },
20
20
  if: proc { expand?('variant') }
21
21
  end
22
22
  end
@@ -38,28 +38,28 @@ module Spree
38
38
 
39
39
  # Admin uses admin variant serializer
40
40
  many :variants,
41
- resource: Spree.api.admin_variant_serializer,
41
+ resource: proc { Spree.api.admin_variant_serializer },
42
42
  if: proc { expand?('variants') }
43
43
 
44
44
  one :default_variant,
45
- resource: Spree.api.admin_variant_serializer,
45
+ resource: proc { Spree.api.admin_variant_serializer },
46
46
  if: proc { expand?('default_variant') }
47
47
 
48
48
  one :primary_media,
49
- resource: Spree.api.admin_media_serializer,
49
+ resource: proc { Spree.api.admin_media_serializer },
50
50
  if: proc { expand?('primary_media') }
51
51
 
52
52
  many :gallery_media,
53
53
  key: :media,
54
- resource: Spree.api.admin_media_serializer,
54
+ resource: proc { Spree.api.admin_media_serializer },
55
55
  if: proc { expand?('media') }
56
56
 
57
57
  many :option_types,
58
- resource: Spree.api.admin_option_type_serializer,
58
+ resource: proc { Spree.api.admin_option_type_serializer },
59
59
  if: proc { expand?('option_types') }
60
60
 
61
61
  many :option_values,
62
- resource: Spree.api.admin_option_value_serializer,
62
+ resource: proc { Spree.api.admin_option_value_serializer },
63
63
  if: proc { expand?('option_values') }
64
64
 
65
65
  many :taxons,
@@ -67,20 +67,20 @@ module Spree
67
67
  taxons.select { |t| t.taxonomy.store_id == params[:store].id }
68
68
  },
69
69
  key: :categories,
70
- resource: Spree.api.admin_category_serializer,
70
+ resource: proc { Spree.api.admin_category_serializer },
71
71
  if: proc { expand?('categories') }
72
72
 
73
73
  many :metafields,
74
74
  key: :custom_fields,
75
- resource: Spree.api.admin_custom_field_serializer,
75
+ resource: proc { Spree.api.admin_custom_field_serializer },
76
76
  if: proc { expand?('custom_fields') }
77
77
 
78
78
  many :product_publications,
79
- resource: Spree.api.admin_product_publication_serializer,
79
+ resource: proc { Spree.api.admin_product_publication_serializer },
80
80
  if: proc { expand?('product_publications') }
81
81
 
82
82
  many :channels,
83
- resource: Spree.api.admin_channel_serializer,
83
+ resource: proc { Spree.api.admin_channel_serializer },
84
84
  if: proc { expand?('channels') }
85
85
  end
86
86
  end
@@ -58,25 +58,25 @@ module Spree
58
58
  # products) skip via `if:` and the key is omitted from the
59
59
  # payload.
60
60
  many :products,
61
- resource: Spree.api.admin_product_serializer,
61
+ resource: proc { Spree.api.admin_product_serializer },
62
62
  if: proc { |rule| rule.respond_to?(:products) }
63
63
 
64
64
  many :taxons,
65
65
  key: :categories,
66
- resource: Spree.api.admin_category_serializer,
66
+ resource: proc { Spree.api.admin_category_serializer },
67
67
  if: proc { |rule| rule.respond_to?(:taxons) }
68
68
 
69
69
  many :users,
70
70
  key: :customers,
71
- resource: Spree.api.admin_customer_serializer,
71
+ resource: proc { Spree.api.admin_customer_serializer },
72
72
  if: proc { |rule| rule.respond_to?(:users) }
73
73
 
74
74
  many :customer_groups,
75
- resource: Spree.api.admin_customer_group_serializer,
75
+ resource: proc { Spree.api.admin_customer_group_serializer },
76
76
  if: proc { |rule| rule.respond_to?(:customer_groups) }
77
77
 
78
78
  many :countries,
79
- resource: Spree.api.admin_country_serializer,
79
+ resource: proc { Spree.api.admin_country_serializer },
80
80
  if: proc { |rule| rule.respond_to?(:countries) }
81
81
  end
82
82
  end
@@ -12,11 +12,11 @@ module Spree
12
12
  created_at: :iso8601, updated_at: :iso8601
13
13
 
14
14
  one :payment,
15
- resource: Spree.api.admin_payment_serializer,
15
+ resource: proc { Spree.api.admin_payment_serializer },
16
16
  if: proc { expand?('payment') }
17
17
 
18
18
  one :reimbursement,
19
- resource: Spree.api.admin_reimbursement_serializer,
19
+ resource: proc { Spree.api.admin_reimbursement_serializer },
20
20
  if: proc { expand?('reimbursement') }
21
21
  end
22
22
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  attributes created_at: :iso8601, updated_at: :iso8601
7
7
 
8
8
  one :order,
9
- resource: Spree.api.admin_order_serializer,
9
+ resource: proc { Spree.api.admin_order_serializer },
10
10
  if: proc { expand?('order') }
11
11
  end
12
12
  end
@@ -6,11 +6,11 @@ module Spree
6
6
  attributes created_at: :iso8601, updated_at: :iso8601
7
7
 
8
8
  one :order,
9
- resource: Spree.api.admin_order_serializer,
9
+ resource: proc { Spree.api.admin_order_serializer },
10
10
  if: proc { expand?('order') }
11
11
 
12
12
  one :stock_location,
13
- resource: Spree.api.admin_stock_location_serializer,
13
+ resource: proc { Spree.api.admin_stock_location_serializer },
14
14
  if: proc { expand?('stock_location') }
15
15
  end
16
16
  end
@@ -21,11 +21,11 @@ module Spree
21
21
  end
22
22
 
23
23
  one :stock_location,
24
- resource: Spree.api.admin_stock_location_serializer,
24
+ resource: proc { Spree.api.admin_stock_location_serializer },
25
25
  if: proc { expand?('stock_location') }
26
26
 
27
27
  one :variant,
28
- resource: Spree.api.admin_variant_serializer,
28
+ resource: proc { Spree.api.admin_variant_serializer },
29
29
  if: proc { expand?('variant') }
30
30
  end
31
31
  end
@@ -24,11 +24,11 @@ module Spree
24
24
  end
25
25
 
26
26
  one :source_location,
27
- resource: Spree.api.admin_stock_location_serializer,
27
+ resource: proc { Spree.api.admin_stock_location_serializer },
28
28
  if: proc { expand?('source_location') }
29
29
 
30
30
  one :destination_location,
31
- resource: Spree.api.admin_stock_location_serializer,
31
+ resource: proc { Spree.api.admin_stock_location_serializer },
32
32
  if: proc { expand?('destination_location') }
33
33
  end
34
34
  end
@@ -45,28 +45,28 @@ module Spree
45
45
 
46
46
  # Override inherited associations to use admin serializers
47
47
  one :primary_media,
48
- resource: Spree.api.admin_media_serializer,
48
+ resource: proc { Spree.api.admin_media_serializer },
49
49
  if: proc { expand?('primary_media') }
50
50
 
51
51
  many :gallery_media,
52
52
  key: :media,
53
- resource: Spree.api.admin_media_serializer,
53
+ resource: proc { Spree.api.admin_media_serializer },
54
54
  if: proc { expand?('media') }
55
55
 
56
- many :option_values, resource: Spree.api.admin_option_value_serializer
56
+ many :option_values, resource: proc { Spree.api.admin_option_value_serializer }
57
57
 
58
58
  # All prices for this variant (for admin management)
59
59
  many :prices,
60
- resource: Spree.api.admin_price_serializer,
60
+ resource: proc { Spree.api.admin_price_serializer },
61
61
  if: proc { expand?('prices') }
62
62
 
63
63
  many :metafields,
64
64
  key: :custom_fields,
65
- resource: Spree.api.admin_custom_field_serializer,
65
+ resource: proc { Spree.api.admin_custom_field_serializer },
66
66
  if: proc { expand?('custom_fields') }
67
67
 
68
68
  many :stock_items,
69
- resource: Spree.api.admin_stock_item_serializer,
69
+ resource: proc { Spree.api.admin_stock_item_serializer },
70
70
  if: proc { expand?('stock_items') }
71
71
  end
72
72
  end
@@ -73,16 +73,16 @@ module Spree
73
73
  order.shipping_eq_billing_address?
74
74
  end
75
75
 
76
- many :discounts, resource: Spree.api.discount_serializer
77
- many :line_items, key: :items, resource: Spree.api.line_item_serializer
78
- many :fulfillments, resource: Spree.api.fulfillment_serializer
79
- many :payments, resource: Spree.api.payment_serializer
80
- one :billing_address, resource: Spree.api.address_serializer
81
- one :shipping_address, resource: Spree.api.address_serializer
76
+ many :discounts, resource: proc { Spree.api.discount_serializer }
77
+ many :line_items, key: :items, resource: proc { Spree.api.line_item_serializer }
78
+ many :fulfillments, resource: proc { Spree.api.fulfillment_serializer }
79
+ many :payments, resource: proc { Spree.api.payment_serializer }
80
+ one :billing_address, resource: proc { Spree.api.address_serializer }
81
+ one :shipping_address, resource: proc { Spree.api.address_serializer }
82
82
 
83
- many :payment_methods, resource: Spree.api.payment_method_serializer
84
- one :gift_card, resource: Spree.api.gift_card_serializer
85
- one :market, resource: Spree.api.market_serializer
83
+ many :payment_methods, resource: proc { Spree.api.payment_method_serializer }
84
+ one :gift_card, resource: proc { Spree.api.gift_card_serializer }
85
+ one :market, resource: proc { Spree.api.market_serializer }
86
86
  end
87
87
  end
88
88
  end
@@ -49,20 +49,20 @@ module Spree
49
49
  # Note: We pass empty expand to nested categories to prevent infinite recursion
50
50
  # (e.g., ancestors trying to load their own ancestors)
51
51
  one :parent,
52
- resource: Spree.api.category_serializer,
52
+ resource: proc { Spree.api.category_serializer },
53
53
  if: proc { expand?('parent') }
54
54
 
55
55
  many :children,
56
- resource: Spree.api.category_serializer,
56
+ resource: proc { Spree.api.category_serializer },
57
57
  if: proc { expand?('children') }
58
58
 
59
59
  many :ancestors,
60
- resource: Spree.api.category_serializer,
60
+ resource: proc { Spree.api.category_serializer },
61
61
  if: proc { expand?('ancestors') }
62
62
 
63
63
  many :public_metafields,
64
64
  key: :custom_fields,
65
- resource: Spree.api.custom_field_serializer,
65
+ resource: proc { Spree.api.custom_field_serializer },
66
66
  if: proc { expand?('custom_fields') }
67
67
  end
68
68
  end
@@ -12,7 +12,7 @@ module Spree
12
12
  attributes :iso, :iso3, :name, :states_required, :zipcode_required
13
13
 
14
14
  many :states,
15
- resource: Spree.api.state_serializer,
15
+ resource: proc { Spree.api.state_serializer },
16
16
  if: proc { params[:expand]&.include?('states') }
17
17
 
18
18
  attribute :market, if: proc { params[:expand]&.include?('market') } do |country|
@@ -28,9 +28,9 @@ module Spree
28
28
  Spree::Money.new(user.total_available_store_credit(currency, store), currency: currency).to_s
29
29
  end
30
30
 
31
- many :addresses, resource: Spree.api.address_serializer
32
- one :bill_address, key: :default_billing_address, resource: Spree.api.address_serializer
33
- one :ship_address, key: :default_shipping_address, resource: Spree.api.address_serializer
31
+ many :addresses, resource: proc { Spree.api.address_serializer }
32
+ one :bill_address, key: :default_billing_address, resource: proc { Spree.api.address_serializer }
33
+ one :ship_address, key: :default_shipping_address, resource: proc { Spree.api.address_serializer }
34
34
  end
35
35
  end
36
36
  end
@@ -38,7 +38,7 @@ module Spree
38
38
  shipping_rate.display_tax_total.to_s
39
39
  end
40
40
 
41
- one :shipping_method, key: :delivery_method, resource: Spree.api.delivery_method_serializer
41
+ one :shipping_method, key: :delivery_method, resource: proc { Spree.api.delivery_method_serializer }
42
42
  end
43
43
  end
44
44
  end
@@ -47,9 +47,9 @@ module Spree
47
47
  end
48
48
  end
49
49
 
50
- one :shipping_method, key: :delivery_method, resource: Spree.api.delivery_method_serializer
51
- one :stock_location, resource: Spree.api.stock_location_serializer
52
- many :shipping_rates, key: :delivery_rates, resource: Spree.api.delivery_rate_serializer
50
+ one :shipping_method, key: :delivery_method, resource: proc { Spree.api.delivery_method_serializer }
51
+ one :stock_location, resource: proc { Spree.api.stock_location_serializer }
52
+ many :shipping_rates, key: :delivery_rates, resource: proc { Spree.api.delivery_rate_serializer }
53
53
  end
54
54
  end
55
55
  end
@@ -39,8 +39,8 @@ module Spree
39
39
  image_url_for(line_item.thumbnail)
40
40
  end
41
41
 
42
- many :option_values, resource: Spree.api.option_value_serializer
43
- many :digital_links, resource: Spree.api.digital_link_serializer
42
+ many :option_values, resource: proc { Spree.api.option_value_serializer }
43
+ many :digital_links, resource: proc { Spree.api.digital_link_serializer }
44
44
  end
45
45
  end
46
46
  end
@@ -16,7 +16,7 @@ module Spree
16
16
  end
17
17
 
18
18
  many :countries,
19
- resource: Spree.api.country_serializer,
19
+ resource: proc { Spree.api.country_serializer },
20
20
  if: proc { expand?(:countries) }
21
21
  end
22
22
  end
@@ -57,14 +57,14 @@ module Spree
57
57
  order.covered_by_store_credit?
58
58
  end
59
59
 
60
- many :discounts, resource: Spree.api.discount_serializer
61
- many :line_items, key: :items, resource: Spree.api.line_item_serializer
62
- many :fulfillments, resource: Spree.api.fulfillment_serializer
63
- many :payments, resource: Spree.api.payment_serializer
64
- one :billing_address, resource: Spree.api.address_serializer
65
- one :shipping_address, resource: Spree.api.address_serializer
66
- one :gift_card, resource: Spree.api.gift_card_serializer
67
- one :market, resource: Spree.api.market_serializer
60
+ many :discounts, resource: proc { Spree.api.discount_serializer }
61
+ many :line_items, key: :items, resource: proc { Spree.api.line_item_serializer }
62
+ many :fulfillments, resource: proc { Spree.api.fulfillment_serializer }
63
+ many :payments, resource: proc { Spree.api.payment_serializer }
64
+ one :billing_address, resource: proc { Spree.api.address_serializer }
65
+ one :shipping_address, resource: proc { Spree.api.address_serializer }
66
+ one :gift_card, resource: proc { Spree.api.gift_card_serializer }
67
+ one :market, resource: proc { Spree.api.market_serializer }
68
68
  end
69
69
  end
70
70
  end
@@ -50,7 +50,7 @@ module Spree
50
50
  serializer.new(payment.source).to_h
51
51
  end
52
52
 
53
- one :payment_method, resource: Spree.api.payment_method_serializer
53
+ one :payment_method, resource: proc { Spree.api.payment_method_serializer }
54
54
  end
55
55
  end
56
56
  end
@@ -23,8 +23,8 @@ module Spree
23
23
  session.order&.prefixed_id
24
24
  end
25
25
 
26
- one :payment_method, resource: Spree.api.payment_method_serializer
27
- one :payment, resource: Spree.api.payment_serializer,
26
+ one :payment_method, resource: proc { Spree.api.payment_method_serializer }
27
+ one :payment, resource: proc { Spree.api.payment_serializer },
28
28
  if: proc { |session| session.payment.present? }
29
29
  end
30
30
  end
@@ -25,7 +25,7 @@ module Spree
25
25
  session.customer&.prefixed_id
26
26
  end
27
27
 
28
- one :payment_method, resource: Spree.api.payment_method_serializer
28
+ one :payment_method, resource: proc { Spree.api.payment_method_serializer }
29
29
  end
30
30
  end
31
31
  end
@@ -80,28 +80,28 @@ module Spree
80
80
 
81
81
  # Conditional associations
82
82
  one :primary_media,
83
- resource: Spree.api.media_serializer,
83
+ resource: proc { Spree.api.media_serializer },
84
84
  if: proc { expand?('primary_media') }
85
85
 
86
86
  many :gallery_media,
87
87
  key: :media,
88
- resource: Spree.api.media_serializer,
88
+ resource: proc { Spree.api.media_serializer },
89
89
  if: proc { expand?('media') }
90
90
 
91
91
  many :variants,
92
- resource: Spree.api.variant_serializer,
92
+ resource: proc { Spree.api.variant_serializer },
93
93
  if: proc { expand?('variants') }
94
94
 
95
95
  one :default_variant,
96
- resource: Spree.api.variant_serializer,
96
+ resource: proc { Spree.api.variant_serializer },
97
97
  if: proc { expand?('default_variant') }
98
98
 
99
99
  many :option_types,
100
- resource: Spree.api.option_type_serializer,
100
+ resource: proc { Spree.api.option_type_serializer },
101
101
  if: proc { expand?('option_types') }
102
102
 
103
103
  many :option_values,
104
- resource: Spree.api.option_value_serializer,
104
+ resource: proc { Spree.api.option_value_serializer },
105
105
  if: proc { expand?('option_values') }
106
106
 
107
107
  many :taxons,
@@ -109,12 +109,12 @@ module Spree
109
109
  taxons.select { |t| t.taxonomy.store_id == params[:store].id }
110
110
  },
111
111
  key: :categories,
112
- resource: Spree.api.category_serializer,
112
+ resource: proc { Spree.api.category_serializer },
113
113
  if: proc { expand?('categories') }
114
114
 
115
115
  many :public_metafields,
116
116
  key: :custom_fields,
117
- resource: Spree.api.custom_field_serializer,
117
+ resource: proc { Spree.api.custom_field_serializer },
118
118
  if: proc { expand?('custom_fields') }
119
119
 
120
120
  typelize prior_price: ['PriceHistory', nullable: true]
@@ -70,19 +70,19 @@ module Spree
70
70
 
71
71
  # Conditional associations
72
72
  one :primary_media,
73
- resource: Spree.api.media_serializer,
73
+ resource: proc { Spree.api.media_serializer },
74
74
  if: proc { expand?('primary_media') }
75
75
 
76
76
  many :gallery_media,
77
77
  key: :media,
78
- resource: Spree.api.media_serializer,
78
+ resource: proc { Spree.api.media_serializer },
79
79
  if: proc { expand?('media') }
80
80
 
81
- many :option_values, resource: Spree.api.option_value_serializer
81
+ many :option_values, resource: proc { Spree.api.option_value_serializer }
82
82
 
83
83
  many :public_metafields,
84
84
  key: :custom_fields,
85
- resource: Spree.api.custom_field_serializer,
85
+ resource: proc { Spree.api.custom_field_serializer },
86
86
  if: proc { expand?('custom_fields') }
87
87
 
88
88
  typelize prior_price: ['PriceHistory', nullable: true]
@@ -14,7 +14,7 @@ module Spree
14
14
 
15
15
  attributes :quantity
16
16
 
17
- one :variant, resource: Spree.api.variant_serializer
17
+ one :variant, resource: proc { Spree.api.variant_serializer }
18
18
  end
19
19
  end
20
20
  end
@@ -16,7 +16,7 @@ module Spree
16
16
 
17
17
  many :wished_items,
18
18
  key: :items,
19
- resource: Spree.api.wishlist_item_serializer,
19
+ resource: proc { Spree.api.wishlist_item_serializer },
20
20
  if: proc { expand?('items') }
21
21
  end
22
22
  end
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module Api
3
+ module TestingSupport
4
+ # Typelizer only records its `typelize` hints when enabled at the moment the
5
+ # serializer class body runs (see `assign_type_information`'s `return unless
6
+ # Typelizer.enabled?`). Spree keeps Typelizer disabled at boot and only enables it
7
+ # while generating OpenAPI schemas on demand (see SchemaHelper#with_typelizer_enabled).
8
+ # A serializer autoloaded by an earlier spec while disabled would otherwise lose its
9
+ # hints, and Rswag schema validation would see `object` for the `id`/`created_at`/
10
+ # `updated_at` declared on the shared BaseSerializer.
11
+ #
12
+ # Record the metadata unconditionally so it survives regardless of load order. This
13
+ # only matters for the on-demand schema generation in the test suite, so it is
14
+ # installed from spec_helper rather than the gem's runtime load path.
15
+ module AlwaysRegisterTypeHints
16
+ def assign_type_information(attribute_name, attributes)
17
+ attributes.each do |name, attrs|
18
+ next unless name
19
+
20
+ store_type(attribute_name, name, Typelizer::TypeParser.parse_declaration(attrs))
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ Typelizer::DSL::ClassMethods.prepend(Spree::Api::TestingSupport::AlwaysRegisterTypeHints)
data/lib/spree/api.rb CHANGED
@@ -3,6 +3,7 @@ require 'pagy'
3
3
  require 'alba'
4
4
  require 'oj'
5
5
  require 'typelizer'
6
+ require 'typelizer/proc_resource_resolution'
6
7
 
7
8
  module Spree
8
9
  module Api
@@ -0,0 +1,14 @@
1
+ module Typelizer
2
+ module ProcResourceResolution
3
+ # V3 serializers declare association resources lazily as `proc { Spree.api.x_serializer }`
4
+ # so host-app overrides registered in initializers are respected at render time. Alba
5
+ # calls the proc per object, but Typelizer introspects the resource as a class. Resolve
6
+ # the proc to its serializer class so schema generation works for lazy associations.
7
+ def interface_for(serializer_class)
8
+ serializer_class = serializer_class.call if serializer_class.is_a?(Proc)
9
+ super
10
+ end
11
+ end
12
+ end
13
+
14
+ Typelizer::WriterContext.prepend(Typelizer::ProcResourceResolution)
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: 5.5.0
4
+ version: 5.5.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-06-18 00:00:00.000000000 Z
11
+ date: 2026-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rswag-specs
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 5.5.0
75
+ version: 5.5.1
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 5.5.0
82
+ version: 5.5.1
83
83
  description: Spree's API
84
84
  email:
85
85
  - hello@spreecommerce.org
@@ -343,19 +343,21 @@ files:
343
343
  - lib/spree/api/middleware/request_size_limit.rb
344
344
  - lib/spree/api/openapi/path_sorter.rb
345
345
  - lib/spree/api/openapi/schema_helper.rb
346
+ - lib/spree/api/testing_support/always_register_type_hints.rb
346
347
  - lib/spree/api/testing_support/factories.rb
347
348
  - lib/spree/api/testing_support/matchers/webhooks.rb
348
349
  - lib/spree/api/testing_support/spree_webhooks.rb
349
350
  - lib/spree/api/testing_support/v3/base.rb
350
351
  - lib/spree_api.rb
352
+ - lib/typelizer/proc_resource_resolution.rb
351
353
  homepage: https://spreecommerce.org
352
354
  licenses:
353
355
  - BSD-3-Clause
354
356
  metadata:
355
357
  bug_tracker_uri: https://github.com/spree/spree/issues
356
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.5.0
358
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.5.1
357
359
  documentation_uri: https://docs.spreecommerce.org/
358
- source_code_uri: https://github.com/spree/spree/tree/v5.5.0
360
+ source_code_uri: https://github.com/spree/spree/tree/v5.5.1
359
361
  post_install_message:
360
362
  rdoc_options: []
361
363
  require_paths: