spree_api 5.2.5 → 5.3.0.rc1

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +10 -21
  3. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +2 -2
  4. data/app/controllers/spree/api/v2/base_controller.rb +2 -2
  5. data/app/controllers/spree/api/v2/data_feeds/google_controller.rb +1 -1
  6. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +1 -1
  7. data/app/controllers/spree/api/v2/platform/adjustments_controller.rb +1 -1
  8. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +2 -2
  9. data/app/controllers/spree/api/v2/platform/countries_controller.rb +1 -1
  10. data/app/controllers/spree/api/v2/platform/data_feeds_controller.rb +1 -1
  11. data/app/controllers/spree/api/v2/platform/digital_links_controller.rb +1 -1
  12. data/app/controllers/spree/api/v2/platform/digitals_controller.rb +1 -1
  13. data/app/controllers/spree/api/v2/platform/gift_cards_controller.rb +1 -1
  14. data/app/controllers/spree/api/v2/platform/line_items_controller.rb +4 -4
  15. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +1 -1
  16. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +1 -1
  17. data/app/controllers/spree/api/v2/platform/orders_controller.rb +11 -11
  18. data/app/controllers/spree/api/v2/platform/payment_methods_controller.rb +1 -1
  19. data/app/controllers/spree/api/v2/platform/payments_controller.rb +1 -1
  20. data/app/controllers/spree/api/v2/platform/products_controller.rb +2 -2
  21. data/app/controllers/spree/api/v2/platform/promotion_actions_controller.rb +1 -1
  22. data/app/controllers/spree/api/v2/platform/promotion_categories_controller.rb +1 -1
  23. data/app/controllers/spree/api/v2/platform/promotion_rules_controller.rb +1 -1
  24. data/app/controllers/spree/api/v2/platform/promotions_controller.rb +1 -1
  25. data/app/controllers/spree/api/v2/platform/roles_controller.rb +1 -1
  26. data/app/controllers/spree/api/v2/platform/shipments_controller.rb +6 -6
  27. data/app/controllers/spree/api/v2/platform/shipping_categories_controller.rb +1 -1
  28. data/app/controllers/spree/api/v2/platform/shipping_methods_controller.rb +1 -1
  29. data/app/controllers/spree/api/v2/platform/states_controller.rb +1 -1
  30. data/app/controllers/spree/api/v2/platform/stock_items_controller.rb +1 -1
  31. data/app/controllers/spree/api/v2/platform/stock_locations_controller.rb +1 -1
  32. data/app/controllers/spree/api/v2/platform/store_credit_categories_controller.rb +1 -1
  33. data/app/controllers/spree/api/v2/platform/store_credit_types_controller.rb +1 -1
  34. data/app/controllers/spree/api/v2/platform/store_credits_controller.rb +1 -1
  35. data/app/controllers/spree/api/v2/platform/tax_categories_controller.rb +1 -1
  36. data/app/controllers/spree/api/v2/platform/tax_rates_controller.rb +1 -1
  37. data/app/controllers/spree/api/v2/platform/taxonomies_controller.rb +1 -1
  38. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +1 -1
  39. data/app/controllers/spree/api/v2/platform/users_controller.rb +1 -1
  40. data/app/controllers/spree/api/v2/platform/variants_controller.rb +1 -1
  41. data/app/controllers/spree/api/v2/platform/wished_items_controller.rb +1 -1
  42. data/app/controllers/spree/api/v2/platform/wishlists_controller.rb +1 -1
  43. data/app/controllers/spree/api/v2/platform/zones_controller.rb +1 -1
  44. data/app/controllers/spree/api/v2/resource_controller.rb +9 -6
  45. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +5 -5
  46. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +4 -4
  47. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +4 -4
  48. data/app/controllers/spree/api/v2/storefront/account_controller.rb +3 -3
  49. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +13 -13
  50. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +12 -12
  51. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +3 -3
  52. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +2 -2
  53. data/app/controllers/spree/api/v2/storefront/policies_controller.rb +2 -2
  54. data/app/controllers/spree/api/v2/storefront/posts_controller.rb +2 -2
  55. data/app/controllers/spree/api/v2/storefront/products_controller.rb +5 -8
  56. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +1 -1
  57. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +3 -3
  58. data/app/controllers/spree/api/v2/storefront/variants_controller.rb +2 -2
  59. data/app/helpers/spree/api/v2/display_money_helper.rb +30 -10
  60. data/app/jobs/spree/webhook_delivery_job.rb +16 -0
  61. data/app/paginators/spree/api/paginate.rb +68 -0
  62. data/app/serializers/concerns/spree/api/v2/public_metafields_concern.rb +1 -1
  63. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +1 -1
  64. data/app/serializers/spree/api/v2/platform/address_serializer.rb +3 -3
  65. data/app/serializers/spree/api/v2/platform/adjustment_serializer.rb +5 -5
  66. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +2 -2
  67. data/app/serializers/spree/api/v2/platform/country_serializer.rb +1 -1
  68. data/app/serializers/spree/api/v2/platform/credit_card_serializer.rb +2 -2
  69. data/app/serializers/spree/api/v2/platform/customer_return_serializer.rb +4 -4
  70. data/app/serializers/spree/api/v2/platform/digital_link_serializer.rb +2 -2
  71. data/app/serializers/spree/api/v2/platform/digital_serializer.rb +1 -1
  72. data/app/serializers/spree/api/v2/platform/gift_card_serializer.rb +2 -2
  73. data/app/serializers/spree/api/v2/platform/inventory_unit_serializer.rb +7 -7
  74. data/app/serializers/spree/api/v2/platform/line_item_serializer.rb +6 -6
  75. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +1 -1
  76. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +1 -1
  77. data/app/serializers/spree/api/v2/platform/order_promotion_serializer.rb +2 -2
  78. data/app/serializers/spree/api/v2/platform/order_serializer.rb +15 -15
  79. data/app/serializers/spree/api/v2/platform/payment_capture_event_serializer.rb +1 -1
  80. data/app/serializers/spree/api/v2/platform/payment_method_serializer.rb +1 -1
  81. data/app/serializers/spree/api/v2/platform/payment_serializer.rb +7 -7
  82. data/app/serializers/spree/api/v2/platform/payment_source_serializer.rb +2 -2
  83. data/app/serializers/spree/api/v2/platform/product_serializer.rb +20 -12
  84. data/app/serializers/spree/api/v2/platform/promotion_action_line_item_serializer.rb +2 -2
  85. data/app/serializers/spree/api/v2/platform/promotion_action_serializer.rb +3 -3
  86. data/app/serializers/spree/api/v2/platform/promotion_category_serializer.rb +1 -1
  87. data/app/serializers/spree/api/v2/platform/promotion_rule_serializer.rb +4 -4
  88. data/app/serializers/spree/api/v2/platform/promotion_serializer.rb +4 -4
  89. data/app/serializers/spree/api/v2/platform/prototype_serializer.rb +3 -3
  90. data/app/serializers/spree/api/v2/platform/refund_serializer.rb +5 -5
  91. data/app/serializers/spree/api/v2/platform/reimbursement_serializer.rb +6 -6
  92. data/app/serializers/spree/api/v2/platform/return_authorization_serializer.rb +4 -4
  93. data/app/serializers/spree/api/v2/platform/return_item_serializer.rb +4 -4
  94. data/app/serializers/spree/api/v2/platform/shipment_serializer.rb +8 -8
  95. data/app/serializers/spree/api/v2/platform/shipping_method_serializer.rb +4 -4
  96. data/app/serializers/spree/api/v2/platform/shipping_rate_serializer.rb +3 -3
  97. data/app/serializers/spree/api/v2/platform/state_change_serializer.rb +1 -1
  98. data/app/serializers/spree/api/v2/platform/state_serializer.rb +1 -1
  99. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +2 -2
  100. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +1 -1
  101. data/app/serializers/spree/api/v2/platform/stock_transfer_serializer.rb +3 -3
  102. data/app/serializers/spree/api/v2/platform/store_credit_event_serializer.rb +1 -1
  103. data/app/serializers/spree/api/v2/platform/store_credit_serializer.rb +5 -5
  104. data/app/serializers/spree/api/v2/platform/store_serializer.rb +1 -1
  105. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +1 -1
  106. data/app/serializers/spree/api/v2/platform/tax_rate_serializer.rb +2 -2
  107. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +5 -5
  108. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +2 -2
  109. data/app/serializers/spree/api/v2/platform/user_serializer.rb +2 -2
  110. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +19 -11
  111. data/app/serializers/spree/api/v2/platform/wished_item_serializer.rb +1 -1
  112. data/app/serializers/spree/api/v2/platform/wishlist_serializer.rb +1 -1
  113. data/app/serializers/spree/api/v2/platform/zone_serializer.rb +1 -1
  114. data/app/serializers/spree/v2/storefront/cart_serializer.rb +9 -9
  115. data/app/serializers/spree/v2/storefront/credit_card_serializer.rb +1 -1
  116. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +1 -1
  117. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +2 -2
  118. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +1 -1
  119. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +1 -1
  120. data/app/serializers/spree/v2/storefront/payment_serializer.rb +1 -1
  121. data/app/serializers/spree/v2/storefront/payment_source_serializer.rb +2 -2
  122. data/app/serializers/spree/v2/storefront/post_category_serializer.rb +1 -1
  123. data/app/serializers/spree/v2/storefront/post_serializer.rb +1 -1
  124. data/app/serializers/spree/v2/storefront/product_serializer.rb +20 -12
  125. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +4 -4
  126. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +1 -1
  127. data/app/serializers/spree/v2/storefront/store_credit_serializer.rb +3 -3
  128. data/app/serializers/spree/v2/storefront/store_serializer.rb +1 -1
  129. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +6 -6
  130. data/app/serializers/spree/v2/storefront/user_serializer.rb +2 -2
  131. data/app/serializers/spree/v2/storefront/variant_serializer.rb +15 -7
  132. data/app/serializers/spree/v2/storefront/wished_item_serializer.rb +1 -1
  133. data/app/serializers/spree/v2/storefront/wishlist_serializer.rb +1 -1
  134. data/app/services/spree/webhooks/deliver_webhook.rb +83 -0
  135. data/app/subscribers/spree/webhook_event_subscriber.rb +67 -0
  136. data/config/routes.rb +0 -2
  137. data/lib/generators/spree/api/install/install_generator.rb +24 -0
  138. data/lib/spree/api/configuration.rb +3 -0
  139. data/lib/spree/api/dependencies.rb +1 -1
  140. data/lib/spree/api/engine.rb +6 -0
  141. data/lib/spree/api/testing_support/matchers/webhooks.rb +1 -67
  142. data/lib/spree/api/testing_support/spree_webhooks.rb +1 -9
  143. data/lib/spree/api/testing_support/v2/current_order.rb +1 -2
  144. data/lib/spree/api.rb +3 -0
  145. data/lib/spree_api.rb +0 -2
  146. metadata +25 -33
  147. data/app/controllers/spree/api/v2/platform/webhooks/events_controller.rb +0 -25
  148. data/app/controllers/spree/api/v2/platform/webhooks/subscribers_controller.rb +0 -25
  149. data/app/jobs/spree/webhooks/subscribers/make_request_job.rb +0 -17
  150. data/app/models/concerns/spree/webhooks/has_webhooks.rb +0 -95
  151. data/app/models/spree/order/webhooks.rb +0 -39
  152. data/app/models/spree/payment/webhooks.rb +0 -23
  153. data/app/models/spree/product/webhooks.rb +0 -42
  154. data/app/models/spree/shipment/webhooks.rb +0 -19
  155. data/app/models/spree/stock_item/webhooks.rb +0 -40
  156. data/app/models/spree/stock_movement/webhooks.rb +0 -49
  157. data/app/models/spree/variant/webhooks.rb +0 -25
  158. data/app/models/spree/webhooks/base.rb +0 -11
  159. data/app/models/spree/webhooks/event.rb +0 -20
  160. data/app/models/spree/webhooks/event_signature.rb +0 -33
  161. data/app/models/spree/webhooks/subscriber.rb +0 -88
  162. data/app/serializers/spree/api/v2/platform/webhooks/event_serializer.rb +0 -15
  163. data/app/serializers/spree/api/v2/platform/webhooks/subscriber_serializer.rb +0 -13
  164. data/app/services/spree/webhooks/subscribers/handle_request.rb +0 -77
  165. data/app/services/spree/webhooks/subscribers/make_request.rb +0 -83
  166. data/app/services/spree/webhooks/subscribers/queue_requests.rb +0 -27
  167. data/db/migrate/20210902162826_create_spree_webhooks_tables.rb +0 -16
  168. data/db/migrate/20211025162826_create_spree_webhooks_events.rb +0 -14
  169. data/db/migrate/20221221122100_add_secret_key_to_spree_webhooks_subscribers.rb +0 -5
  170. data/db/migrate/20230116204600_backfill_secret_key_for_spree_webhooks_subscribers.rb +0 -5
  171. data/db/migrate/20230116205000_change_secret_key_to_non_null_column.rb +0 -5
  172. data/lib/spree/api/testing_support/factories/webhook_event_factory.rb +0 -27
  173. data/lib/spree/api/testing_support/factories/webhook_subscriber_factory.rb +0 -13
@@ -5,8 +5,8 @@ module Spree
5
5
  class TaxRateSerializer < BaseSerializer
6
6
  include ResourceSerializerConcern
7
7
 
8
- belongs_to :zone, serializer: Spree::Api::Dependencies.platform_zone_serializer.constantize
9
- belongs_to :tax_category, serializer: Spree::Api::Dependencies.platform_tax_category_serializer.constantize
8
+ belongs_to :zone, serializer: Spree.api.platform_zone_serializer
9
+ belongs_to :tax_category, serializer: Spree.api.platform_tax_category_serializer
10
10
  end
11
11
  end
12
12
  end
@@ -27,19 +27,19 @@ module Spree
27
27
  taxon.leaf?
28
28
  end
29
29
 
30
- belongs_to :parent, record_type: :taxon, serializer: Spree::Api::Dependencies.platform_taxon_serializer.constantize
31
- belongs_to :taxonomy, record_type: :taxonomy, serializer: Spree::Api::Dependencies.platform_taxonomy_serializer.constantize
30
+ belongs_to :parent, record_type: :taxon, serializer: Spree.api.platform_taxon_serializer
31
+ belongs_to :taxonomy, record_type: :taxonomy, serializer: Spree.api.platform_taxonomy_serializer
32
32
 
33
- has_many :children, record_type: :taxon, serializer: Spree::Api::Dependencies.platform_taxon_serializer.constantize
33
+ has_many :children, record_type: :taxon, serializer: Spree.api.platform_taxon_serializer
34
34
  has_many :products, record_type: :product,
35
- serializer: Spree::Api::Dependencies.platform_product_serializer.constantize,
35
+ serializer: Spree.api.platform_product_serializer,
36
36
  if: proc { |_taxon, params| params && params[:include_products] == true }
37
37
 
38
38
  has_one :image,
39
39
  object_method_name: :icon,
40
40
  id_method_name: :icon_id,
41
41
  record_type: :taxon_image,
42
- serializer: Spree::Api::Dependencies.platform_taxon_image_serializer.constantize
42
+ serializer: Spree.api.platform_taxon_image_serializer
43
43
  end
44
44
  end
45
45
  end
@@ -5,8 +5,8 @@ module Spree
5
5
  class TaxonomySerializer < BaseSerializer
6
6
  include ResourceSerializerConcern
7
7
 
8
- has_many :taxons, serializer: Spree::Api::Dependencies.platform_taxon_serializer.constantize
9
- has_one :root, serializer: Spree::Api::Dependencies.platform_taxon_serializer.constantize
8
+ has_many :taxons, serializer: Spree.api.platform_taxon_serializer
9
+ has_one :root, serializer: Spree.api.platform_taxon_serializer
10
10
  end
11
11
  end
12
12
  end
@@ -21,11 +21,11 @@ module Spree
21
21
 
22
22
  has_one :bill_address,
23
23
  record_type: :address,
24
- serializer: Spree::Api::Dependencies.platform_address_serializer.constantize
24
+ serializer: Spree.api.platform_address_serializer
25
25
 
26
26
  has_one :ship_address,
27
27
  record_type: :address,
28
- serializer: Spree::Api::Dependencies.platform_address_serializer.constantize
28
+ serializer: Spree.api.platform_address_serializer
29
29
 
30
30
  def self.price_stats(stats)
31
31
  stats.map { |value| { currency: value.currency.to_s, amount: value.money.to_s } }
@@ -29,28 +29,36 @@ module Spree
29
29
  end
30
30
 
31
31
  attribute :price do |object, params|
32
- price(object, params[:currency])
32
+ price(object, params[:currency], pricing_context_options(params))
33
33
  end
34
34
 
35
35
  attribute :display_price do |object, params|
36
- display_price(object, params[:currency])
36
+ display_price(object, params[:currency], pricing_context_options(params))
37
37
  end
38
38
 
39
39
  attribute :compare_at_price do |object, params|
40
- compare_at_price(object, params[:currency])
40
+ compare_at_price(object, params[:currency], pricing_context_options(params))
41
41
  end
42
42
 
43
43
  attribute :display_compare_at_price do |object, params|
44
- display_compare_at_price(object, params[:currency])
44
+ display_compare_at_price(object, params[:currency], pricing_context_options(params))
45
45
  end
46
46
 
47
- belongs_to :product, serializer: Spree::Api::Dependencies.platform_product_serializer.constantize
48
- belongs_to :tax_category, serializer: Spree::Api::Dependencies.platform_tax_category_serializer.constantize
49
- has_many :digitals, serializer: Spree::Api::Dependencies.platform_digital_serializer.constantize
50
- has_many :images, serializer: Spree::Api::Dependencies.platform_image_serializer.constantize
51
- has_many :option_values, serializer: Spree::Api::Dependencies.platform_option_value_serializer.constantize
52
- has_many :stock_items, serializer: Spree::Api::Dependencies.platform_stock_item_serializer.constantize
53
- has_many :stock_locations, serializer: Spree::Api::Dependencies.platform_stock_location_serializer.constantize
47
+ def self.pricing_context_options(params)
48
+ {
49
+ store: params[:store],
50
+ user: params[:user],
51
+ tax_zone: params.dig(:price_options, :tax_zone)
52
+ }
53
+ end
54
+
55
+ belongs_to :product, serializer: Spree.api.platform_product_serializer
56
+ belongs_to :tax_category, serializer: Spree.api.platform_tax_category_serializer
57
+ has_many :digitals, serializer: Spree.api.platform_digital_serializer
58
+ has_many :images, serializer: Spree.api.platform_image_serializer
59
+ has_many :option_values, serializer: Spree.api.platform_option_value_serializer
60
+ has_many :stock_items, serializer: Spree.api.platform_stock_item_serializer
61
+ has_many :stock_locations, serializer: Spree.api.platform_stock_location_serializer
54
62
  end
55
63
  end
56
64
  end
@@ -21,7 +21,7 @@ module Spree
21
21
  wished_item.display_total(currency: params[:currency]).to_s
22
22
  end
23
23
 
24
- belongs_to :variant, serializer: Spree::Api::Dependencies.platform_variant_serializer.constantize
24
+ belongs_to :variant, serializer: Spree.api.platform_variant_serializer
25
25
  end
26
26
  end
27
27
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  wishlist.include?(params[:is_variant_included])
12
12
  end
13
13
 
14
- has_many :wished_items, serializer: Spree::Api::Dependencies.platform_wished_item_serializer.constantize
14
+ has_many :wished_items, serializer: Spree.api.platform_wished_item_serializer
15
15
  end
16
16
  end
17
17
  end
@@ -5,7 +5,7 @@ module Spree
5
5
  class ZoneSerializer < BaseSerializer
6
6
  include ResourceSerializerConcern
7
7
 
8
- has_many :zone_members, serializer: Spree::Api::Dependencies.platform_zone_member_serializer.constantize
8
+ has_many :zone_members, serializer: Spree.api.platform_zone_member_serializer
9
9
  end
10
10
  end
11
11
  end
@@ -42,25 +42,25 @@ module Spree
42
42
  cart.display_total_minus_store_credits.amount_in_cents
43
43
  end
44
44
 
45
- has_many :line_items, serializer: Spree::Api::Dependencies.storefront_line_item_serializer.constantize
46
- has_many :variants, serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
47
- has_many :promotions, serializer: Spree::Api::Dependencies.storefront_order_promotion_serializer.constantize, object_method_name: :valid_promotions, id_method_name: :valid_promotion_ids
48
- has_many :payments, serializer: Spree::Api::Dependencies.storefront_payment_serializer.constantize do |cart|
45
+ has_many :line_items, serializer: Spree.api.storefront_line_item_serializer
46
+ has_many :variants, serializer: Spree.api.storefront_variant_serializer
47
+ has_many :promotions, serializer: Spree.api.storefront_order_promotion_serializer, object_method_name: :valid_promotions, id_method_name: :valid_promotion_ids
48
+ has_many :payments, serializer: Spree.api.storefront_payment_serializer do |cart|
49
49
  cart.payments.valid
50
50
  end
51
- has_many :shipments, serializer: Spree::Api::Dependencies.storefront_shipment_serializer.constantize
51
+ has_many :shipments, serializer: Spree.api.storefront_shipment_serializer
52
52
 
53
- belongs_to :user, serializer: Spree::Api::Dependencies.storefront_user_serializer.constantize
53
+ belongs_to :user, serializer: Spree.api.storefront_user_serializer
54
54
  belongs_to :billing_address,
55
55
  id_method_name: :bill_address_id,
56
- serializer: Spree::Api::Dependencies.storefront_address_serializer.constantize,
56
+ serializer: Spree.api.storefront_address_serializer,
57
57
  record_type: :address
58
58
 
59
59
  belongs_to :shipping_address,
60
60
  id_method_name: :ship_address_id,
61
- serializer: Spree::Api::Dependencies.storefront_address_serializer.constantize,
61
+ serializer: Spree.api.storefront_address_serializer,
62
62
  record_type: :address
63
- belongs_to :gift_card, serializer: Spree::Api::Dependencies.storefront_gift_card_serializer.constantize
63
+ belongs_to :gift_card, serializer: Spree.api.storefront_gift_card_serializer
64
64
  end
65
65
  end
66
66
  end
@@ -8,7 +8,7 @@ module Spree
8
8
 
9
9
  attributes :cc_type, :last_digits, :month, :year, :name, :default, :gateway_payment_profile_id, :public_metadata
10
10
 
11
- belongs_to :payment_method, serializer: Spree::Api::Dependencies.storefront_payment_method_serializer.constantize
11
+ belongs_to :payment_method, serializer: Spree.api.storefront_payment_method_serializer
12
12
  end
13
13
  end
14
14
  end
@@ -12,7 +12,7 @@ module Spree
12
12
  shipping_rate.shipping_method_id.to_s
13
13
  end
14
14
 
15
- belongs_to :shipping_method, serializer: Spree::Api::Dependencies.storefront_shipping_method_serializer.constantize
15
+ belongs_to :shipping_method, serializer: Spree.api.storefront_shipping_method_serializer
16
16
 
17
17
  attribute :final_price do |shipping_rate|
18
18
  shipping_rate.cost
@@ -15,8 +15,8 @@ module Spree
15
15
  :pre_tax_amount, :display_pre_tax_amount, :compare_at_amount, :display_compare_at_amount,
16
16
  :public_metadata
17
17
 
18
- belongs_to :variant, serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
19
- has_many :digital_links, serializer: Spree::Api::Dependencies.storefront_digital_link_serializer.constantize
18
+ belongs_to :variant, serializer: Spree.api.storefront_variant_serializer
19
+ has_many :digital_links, serializer: Spree.api.storefront_digital_link_serializer
20
20
  end
21
21
  end
22
22
  end
@@ -8,7 +8,7 @@ module Spree
8
8
 
9
9
  attributes :name, :presentation, :position, :public_metadata
10
10
 
11
- has_many :option_values, serializer: Spree::Api::Dependencies.storefront_option_value_serializer.constantize
11
+ has_many :option_values, serializer: Spree.api.storefront_option_value_serializer
12
12
  end
13
13
  end
14
14
  end
@@ -6,7 +6,7 @@ module Spree
6
6
 
7
7
  attributes :name, :presentation, :position, :public_metadata
8
8
 
9
- belongs_to :option_type, serializer: Spree::Api::Dependencies.storefront_option_type_serializer.constantize
9
+ belongs_to :option_type, serializer: Spree.api.storefront_option_type_serializer
10
10
  end
11
11
  end
12
12
  end
@@ -7,7 +7,7 @@ module Spree
7
7
  set_type :payment
8
8
 
9
9
  has_one :source, polymorphic: true
10
- has_one :payment_method, serializer: Spree::Api::Dependencies.storefront_payment_method_serializer.constantize
10
+ has_one :payment_method, serializer: Spree.api.storefront_payment_method_serializer
11
11
 
12
12
  attributes :amount, :response_code, :number, :cvv_response_code, :cvv_response_message, :payment_method_name, :state, :public_metadata
13
13
 
@@ -4,8 +4,8 @@ module Spree
4
4
  class PaymentSourceSerializer < BaseSerializer
5
5
  include Spree::Api::V2::PublicMetafieldsConcern
6
6
 
7
- belongs_to :payment_method, serializer: Spree::Api::Dependencies.storefront_payment_method_serializer.constantize
8
- belongs_to :user, serializer: Spree::Api::Dependencies.storefront_user_serializer.constantize
7
+ belongs_to :payment_method, serializer: Spree.api.storefront_payment_method_serializer
8
+ belongs_to :user, serializer: Spree.api.storefront_user_serializer
9
9
  end
10
10
  end
11
11
  end
@@ -12,7 +12,7 @@ module Spree
12
12
  category.description.to_plain_text if category.description.present?
13
13
  end
14
14
 
15
- has_many :posts, serializer: Spree::Api::Dependencies.storefront_post_serializer.constantize, record_type: :post, if: proc { |_record, params|
15
+ has_many :posts, serializer: Spree.api.storefront_post_serializer, record_type: :post, if: proc { |_record, params|
16
16
  params[:include_posts] == true
17
17
  } do |category|
18
18
  category.posts.published.by_newest
@@ -44,7 +44,7 @@ module Spree
44
44
  url_helpers.cdn_image_url(post.image.attachment) if post.image.present? && post.image.attached?
45
45
  end
46
46
 
47
- belongs_to :post_category, serializer: Spree::Api::Dependencies.storefront_post_category_serializer.constantize, record_type: :post_category
47
+ belongs_to :post_category, serializer: Spree.api.storefront_post_category_serializer, record_type: :post_category
48
48
  end
49
49
  end
50
50
  end
@@ -30,19 +30,27 @@ module Spree
30
30
  end
31
31
 
32
32
  attribute :price do |product, params|
33
- price(product, params[:currency])
33
+ price(product, params[:currency], pricing_context_options(params))
34
34
  end
35
35
 
36
36
  attribute :display_price do |product, params|
37
- display_price(product, params[:currency])
37
+ display_price(product, params[:currency], pricing_context_options(params))
38
38
  end
39
39
 
40
40
  attribute :compare_at_price do |product, params|
41
- compare_at_price(product, params[:currency])
41
+ compare_at_price(product, params[:currency], pricing_context_options(params))
42
42
  end
43
43
 
44
44
  attribute :display_compare_at_price do |product, params|
45
- display_compare_at_price(product, params[:currency])
45
+ display_compare_at_price(product, params[:currency], pricing_context_options(params))
46
+ end
47
+
48
+ def self.pricing_context_options(params)
49
+ {
50
+ store: params[:store],
51
+ user: params[:user],
52
+ tax_zone: params.dig(:price_options, :tax_zone)
53
+ }
46
54
  end
47
55
 
48
56
  attribute :localized_slugs do |product, params|
@@ -52,12 +60,12 @@ module Spree
52
60
  attribute :tags, &:tag_list
53
61
  attribute :labels, &:label_list
54
62
 
55
- has_many :variants, serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
56
- has_many :option_types, serializer: Spree::Api::Dependencies.storefront_option_type_serializer.constantize
57
- has_many :product_properties, serializer: Spree::Api::Dependencies.storefront_product_property_serializer.constantize
63
+ has_many :variants, serializer: Spree.api.storefront_variant_serializer
64
+ has_many :option_types, serializer: Spree.api.storefront_option_type_serializer
65
+ has_many :product_properties, serializer: Spree.api.storefront_product_property_serializer
58
66
 
59
- has_many :taxons, serializer: Spree::Api::Dependencies.storefront_taxon_serializer.constantize, record_type: :taxon do |object, params|
60
- object.taxons_for_store(params[:store]).order(:id)
67
+ has_many :taxons, serializer: Spree.api.storefront_taxon_serializer, record_type: :taxon do |object, params|
68
+ object.taxons_for_store(params[:store])
61
69
  end
62
70
 
63
71
  # all images from all variants
@@ -65,19 +73,19 @@ module Spree
65
73
  object_method_name: :variant_images,
66
74
  id_method_name: :variant_image_ids,
67
75
  record_type: :image,
68
- serializer: Spree::Api::Dependencies.storefront_image_serializer.constantize
76
+ serializer: Spree.api.storefront_image_serializer
69
77
 
70
78
  has_one :default_variant,
71
79
  object_method_name: :default_variant,
72
80
  id_method_name: :default_variant_id,
73
81
  record_type: :variant,
74
- serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
82
+ serializer: Spree.api.storefront_variant_serializer
75
83
 
76
84
  has_one :primary_variant,
77
85
  object_method_name: :master,
78
86
  id_method_name: :master_id,
79
87
  record_type: :variant,
80
- serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
88
+ serializer: Spree.api.storefront_variant_serializer
81
89
  end
82
90
  end
83
91
  end
@@ -13,11 +13,11 @@ module Spree
13
13
  shipment.free?
14
14
  end
15
15
 
16
- has_many :shipping_rates, serializer: Spree::Api::Dependencies.storefront_shipping_rate_serializer.constantize
17
- has_one :selected_shipping_rate, serializer: Spree::Api::Dependencies.storefront_shipping_rate_serializer.constantize
16
+ has_many :shipping_rates, serializer: Spree.api.storefront_shipping_rate_serializer
17
+ has_one :selected_shipping_rate, serializer: Spree.api.storefront_shipping_rate_serializer
18
18
 
19
- belongs_to :stock_location, serializer: Spree::Api::Dependencies.storefront_stock_location_serializer.constantize
20
- has_many :line_items, serializer: Spree::Api::Dependencies.storefront_line_item_serializer.constantize do |shipment|
19
+ belongs_to :stock_location, serializer: Spree.api.storefront_stock_location_serializer
20
+ has_many :line_items, serializer: Spree.api.storefront_line_item_serializer do |shipment|
21
21
  shipment.line_items
22
22
  end
23
23
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  shipping_rate.shipping_method_id.to_s
12
12
  end
13
13
 
14
- belongs_to :shipping_method, serializer: Spree::Api::Dependencies.storefront_shipping_method_serializer.constantize
14
+ belongs_to :shipping_method, serializer: Spree.api.storefront_shipping_method_serializer
15
15
 
16
16
  attribute :free do |shipping_rate|
17
17
  shipping_rate.free?
@@ -6,11 +6,11 @@ module Spree
6
6
 
7
7
  set_type :store_credit
8
8
 
9
- belongs_to :category, serializer: Spree::Api::Dependencies.storefront_store_credit_category_serializer.constantize
10
- has_many :store_credit_events, serializer: Spree::Api::Dependencies.storefront_store_credit_event_serializer.constantize
9
+ belongs_to :category, serializer: Spree.api.storefront_store_credit_category_serializer
10
+ has_many :store_credit_events, serializer: Spree.api.storefront_store_credit_event_serializer
11
11
  belongs_to :credit_type,
12
12
  id_method_name: :type_id,
13
- serializer: Spree::Api::Dependencies.storefront_store_credit_type_serializer.constantize
13
+ serializer: Spree.api.storefront_store_credit_type_serializer
14
14
 
15
15
  attributes :amount, :amount_used, :created_at, :public_metadata
16
16
  end
@@ -11,7 +11,7 @@ module Spree
11
11
  :default, :supported_currencies, :facebook, :twitter, :instagram, :default_locale,
12
12
  :customer_support_email, :description, :address, :contact_phone, :supported_locales
13
13
 
14
- has_one :default_country, serializer: Spree::Api::Dependencies.storefront_country_serializer.constantize, record_type: :country, id_method_name: :default_country_id
14
+ has_one :default_country, serializer: Spree.api.storefront_country_serializer, record_type: :country, id_method_name: :default_country_id
15
15
  end
16
16
  end
17
17
  end
@@ -14,7 +14,7 @@ module Spree
14
14
  end
15
15
 
16
16
  attribute :has_products do |taxon|
17
- taxon.active_products_with_descendants.exists?
17
+ taxon.classification_count.positive? || taxon.active_products_with_descendants.exists?
18
18
  end
19
19
 
20
20
  attribute :header_url do |taxon|
@@ -37,18 +37,18 @@ module Spree
37
37
  taxon.localized_slugs_for_store(params[:store])
38
38
  end
39
39
 
40
- belongs_to :parent, record_type: :taxon, serializer: Spree::Api::Dependencies.storefront_taxon_serializer.constantize
41
- belongs_to :taxonomy, record_type: :taxonomy, serializer: Spree::Api::Dependencies.storefront_taxonomy_serializer.constantize
40
+ belongs_to :parent, record_type: :taxon, serializer: Spree.api.storefront_taxon_serializer
41
+ belongs_to :taxonomy, record_type: :taxonomy, serializer: Spree.api.storefront_taxonomy_serializer
42
42
 
43
- has_many :children, record_type: :taxon, serializer: Spree::Api::Dependencies.storefront_taxon_serializer.constantize
44
- has_many :products, record_type: :product, serializer: Spree::Api::Dependencies.storefront_product_serializer.constantize,
43
+ has_many :children, record_type: :taxon, serializer: Spree.api.storefront_taxon_serializer
44
+ has_many :products, record_type: :product, serializer: Spree.api.storefront_product_serializer,
45
45
  if: proc { |_taxon, params| params && params[:include_products] == true }
46
46
 
47
47
  has_one :image,
48
48
  object_method_name: :icon,
49
49
  id_method_name: :icon_id,
50
50
  record_type: :taxon_image,
51
- serializer: Spree::Api::Dependencies.storefront_taxon_image_serializer.constantize
51
+ serializer: Spree.api.storefront_taxon_image_serializer
52
52
  end
53
53
  end
54
54
  end
@@ -20,13 +20,13 @@ module Spree
20
20
  id_method_name: :bill_address_id,
21
21
  object_method_name: :bill_address,
22
22
  record_type: :address,
23
- serializer: Spree::Api::Dependencies.storefront_address_serializer.constantize
23
+ serializer: Spree.api.storefront_address_serializer
24
24
 
25
25
  has_one :default_shipping_address,
26
26
  id_method_name: :ship_address_id,
27
27
  object_method_name: :ship_address,
28
28
  record_type: :address,
29
- serializer: Spree::Api::Dependencies.storefront_address_serializer.constantize
29
+ serializer: Spree.api.storefront_address_serializer
30
30
  end
31
31
  end
32
32
  end
@@ -26,24 +26,32 @@ module Spree
26
26
  end
27
27
 
28
28
  attribute :price do |product, params|
29
- price(product, params[:currency])
29
+ price(product, params[:currency], pricing_context_options(params))
30
30
  end
31
31
 
32
32
  attribute :display_price do |product, params|
33
- display_price(product, params[:currency])
33
+ display_price(product, params[:currency], pricing_context_options(params))
34
34
  end
35
35
 
36
36
  attribute :compare_at_price do |product, params|
37
- compare_at_price(product, params[:currency])
37
+ compare_at_price(product, params[:currency], pricing_context_options(params))
38
38
  end
39
39
 
40
40
  attribute :display_compare_at_price do |product, params|
41
- display_compare_at_price(product, params[:currency])
41
+ display_compare_at_price(product, params[:currency], pricing_context_options(params))
42
42
  end
43
43
 
44
- belongs_to :product, serializer: Spree::Api::Dependencies.storefront_product_serializer.constantize
45
- has_many :images, serializer: Spree::Api::Dependencies.storefront_image_serializer.constantize
46
- has_many :option_values, serializer: Spree::Api::Dependencies.storefront_option_value_serializer.constantize
44
+ def self.pricing_context_options(params)
45
+ {
46
+ store: params[:store],
47
+ user: params[:user],
48
+ tax_zone: params.dig(:price_options, :tax_zone)
49
+ }
50
+ end
51
+
52
+ belongs_to :product, serializer: Spree.api.storefront_product_serializer
53
+ has_many :images, serializer: Spree.api.storefront_image_serializer
54
+ has_many :option_values, serializer: Spree.api.storefront_option_value_serializer
47
55
  end
48
56
  end
49
57
  end
@@ -22,7 +22,7 @@ module Spree
22
22
  wished_item.display_total(currency: params[:currency]).to_s
23
23
  end
24
24
 
25
- belongs_to :variant, serializer: Spree::Api::Dependencies.storefront_variant_serializer.constantize
25
+ belongs_to :variant, serializer: Spree.api.storefront_variant_serializer
26
26
  end
27
27
  end
28
28
  end
@@ -10,7 +10,7 @@ module Spree
10
10
  wishlist.include?(params[:is_variant_included])
11
11
  end
12
12
 
13
- has_many :wished_items, serializer: Spree::Api::Dependencies.storefront_wished_item_serializer.constantize
13
+ has_many :wished_items, serializer: Spree.api.storefront_wished_item_serializer
14
14
  end
15
15
  end
16
16
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'openssl'
5
+
6
+ module Spree
7
+ module Webhooks
8
+ class DeliverWebhook
9
+ TIMEOUT = 30
10
+
11
+ def self.call(delivery:, secret_key:)
12
+ new(delivery: delivery, secret_key: secret_key).call
13
+ end
14
+
15
+ def initialize(delivery:, secret_key:)
16
+ @delivery = delivery
17
+ @secret_key = secret_key
18
+ end
19
+
20
+ def call
21
+ start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
22
+
23
+ response = make_request
24
+ execution_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round
25
+
26
+ @delivery.complete!(
27
+ response_code: response.code.to_i,
28
+ execution_time: execution_time,
29
+ response_body: response.body.to_s.truncate(10_000)
30
+ )
31
+ rescue Net::OpenTimeout, Net::ReadTimeout => e
32
+ execution_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round
33
+ Rails.error.report(e, context: { webhook_delivery_id: @delivery.id, url: @delivery.url })
34
+ @delivery.complete!(
35
+ execution_time: execution_time,
36
+ error_type: 'timeout',
37
+ request_errors: e.message
38
+ )
39
+ rescue StandardError => e
40
+ execution_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000).round
41
+ Rails.error.report(e, context: { webhook_delivery_id: @delivery.id, url: @delivery.url })
42
+ @delivery.complete!(
43
+ execution_time: execution_time,
44
+ error_type: 'connection_error',
45
+ request_errors: e.message
46
+ )
47
+ end
48
+
49
+ private
50
+
51
+ def make_request
52
+ uri = URI.parse(@delivery.url)
53
+ http = Net::HTTP.new(uri.host, uri.port)
54
+ http.use_ssl = uri.scheme == 'https'
55
+ http.verify_mode = ssl_verify_mode
56
+ http.open_timeout = TIMEOUT
57
+ http.read_timeout = TIMEOUT
58
+
59
+ request = Net::HTTP::Post.new(uri.request_uri)
60
+ request['Content-Type'] = 'application/json'
61
+ request['User-Agent'] = 'Spree-Webhooks/1.0'
62
+ request['X-Spree-Webhook-Signature'] = generate_signature
63
+ request['X-Spree-Webhook-Event'] = @delivery.event_name
64
+ request.body = @delivery.payload.to_json
65
+
66
+ http.request(request)
67
+ end
68
+
69
+ def generate_signature
70
+ payload_json = @delivery.payload.to_json
71
+ OpenSSL::HMAC.hexdigest('SHA256', @secret_key, payload_json)
72
+ end
73
+
74
+ def ssl_verify_mode
75
+ if Spree::Api::Config.webhooks_verify_ssl
76
+ OpenSSL::SSL::VERIFY_PEER
77
+ else
78
+ OpenSSL::SSL::VERIFY_NONE
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end