spree_core 5.4.3 → 5.5.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +0 -82
  3. data/app/helpers/spree/currency_helper.rb +0 -12
  4. data/app/helpers/spree/products_helper.rb +0 -8
  5. data/app/jobs/spree/base_job.rb +18 -0
  6. data/app/jobs/spree/events/subscriber_job.rb +2 -1
  7. data/app/jobs/spree/exports/generate_job.rb +11 -0
  8. data/app/jobs/spree/images/save_from_url_job.rb +23 -8
  9. data/app/jobs/spree/imports/assign_tags_job.rb +11 -0
  10. data/app/jobs/spree/imports/base_job.rb +15 -0
  11. data/app/jobs/spree/imports/create_categories_job.rb +37 -0
  12. data/app/jobs/spree/imports/create_rows_job.rb +1 -3
  13. data/app/jobs/spree/imports/process_group_job.rb +8 -6
  14. data/app/jobs/spree/imports/process_rows_job.rb +1 -3
  15. data/app/jobs/spree/media/migrate_product_assets_job.rb +83 -0
  16. data/app/jobs/spree/products/refresh_metrics_job.rb +15 -4
  17. data/app/jobs/spree/reports/generate_job.rb +11 -0
  18. data/app/jobs/spree/search_provider/index_job.rb +5 -1
  19. data/app/jobs/spree/search_provider/remove_job.rb +4 -0
  20. data/app/jobs/spree/stock_reservations/expire_job.rb +11 -0
  21. data/app/models/concerns/spree/calculated_adjustments.rb +34 -1
  22. data/app/models/concerns/spree/display_on.rb +31 -0
  23. data/app/models/concerns/spree/metafields.rb +167 -5
  24. data/app/models/concerns/spree/preference_schema.rb +191 -0
  25. data/app/models/concerns/spree/prefixed_id.rb +94 -11
  26. data/app/models/concerns/spree/product_scopes.rb +36 -17
  27. data/app/models/concerns/spree/ransackable_attributes.rb +5 -1
  28. data/app/models/concerns/spree/search_indexable.rb +8 -7
  29. data/app/models/concerns/spree/searchable.rb +11 -2
  30. data/app/models/concerns/spree/stores/channels.rb +20 -0
  31. data/app/models/concerns/spree/stores/markets.rb +21 -5
  32. data/app/models/concerns/spree/typed_associations.rb +120 -0
  33. data/app/models/concerns/spree/user_methods.rb +71 -12
  34. data/app/models/spree/ability.rb +4 -117
  35. data/app/models/spree/api_key.rb +60 -0
  36. data/app/models/spree/asset.rb +28 -5
  37. data/app/models/spree/authentication/strategy_registry.rb +72 -0
  38. data/app/models/spree/base.rb +18 -1
  39. data/app/models/spree/channel.rb +159 -0
  40. data/app/models/spree/country.rb +2 -0
  41. data/app/models/spree/current.rb +7 -3
  42. data/app/models/spree/custom_field.rb +9 -0
  43. data/app/models/spree/custom_field_definition.rb +7 -0
  44. data/app/models/spree/customer_group.rb +8 -2
  45. data/app/models/spree/export.rb +45 -3
  46. data/app/models/spree/exports/coupon_codes.rb +4 -0
  47. data/app/models/spree/exports/newsletter_subscribers.rb +4 -0
  48. data/app/models/spree/exports/product_translations.rb +4 -0
  49. data/app/models/spree/gateway.rb +25 -0
  50. data/app/models/spree/gift_card.rb +1 -1
  51. data/app/models/spree/gift_card_batch.rb +4 -1
  52. data/app/models/spree/import.rb +5 -0
  53. data/app/models/spree/import_row.rb +12 -0
  54. data/app/models/spree/line_item.rb +6 -1
  55. data/app/models/spree/market.rb +32 -1
  56. data/app/models/spree/metafield.rb +38 -0
  57. data/app/models/spree/metafield_definition.rb +29 -6
  58. data/app/models/spree/metafields/json.rb +10 -0
  59. data/app/models/spree/newsletter_subscriber.rb +19 -3
  60. data/app/models/spree/option_type.rb +48 -7
  61. data/app/models/spree/order/checkout.rb +3 -3
  62. data/app/models/spree/order.rb +102 -6
  63. data/app/models/spree/order_approval.rb +19 -0
  64. data/app/models/spree/order_cancellation.rb +19 -0
  65. data/app/models/spree/order_routing/has_strategy_preference.rb +28 -0
  66. data/app/models/spree/order_routing/rules/default_location.rb +16 -0
  67. data/app/models/spree/order_routing/rules/minimize_splits.rb +45 -0
  68. data/app/models/spree/order_routing/rules/preferred_location.rb +22 -0
  69. data/app/models/spree/order_routing/strategy/base.rb +47 -0
  70. data/app/models/spree/order_routing/strategy/legacy.rb +33 -0
  71. data/app/models/spree/order_routing/strategy/reducer.rb +68 -0
  72. data/app/models/spree/order_routing/strategy/rules.rb +83 -0
  73. data/app/models/spree/order_routing_rule.rb +75 -0
  74. data/app/models/spree/permission_sets/configuration_management.rb +16 -0
  75. data/app/models/spree/permission_sets/product_display.rb +2 -0
  76. data/app/models/spree/permission_sets/product_management.rb +2 -0
  77. data/app/models/spree/price.rb +14 -1
  78. data/app/models/spree/price_list.rb +129 -17
  79. data/app/models/spree/price_rule.rb +11 -1
  80. data/app/models/spree/price_rules/customer_group_rule.rb +15 -1
  81. data/app/models/spree/price_rules/market_rule.rb +16 -1
  82. data/app/models/spree/price_rules/user_rule.rb +21 -2
  83. data/app/models/spree/product/channels.rb +149 -0
  84. data/app/models/spree/product/legacy_multi_store_support.rb +40 -0
  85. data/app/models/spree/product/slugs.rb +1 -1
  86. data/app/models/spree/product.rb +172 -31
  87. data/app/models/spree/product_publication.rb +43 -0
  88. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -0
  89. data/app/models/spree/promotion/actions/create_item_adjustments.rb +4 -0
  90. data/app/models/spree/promotion/actions/create_line_items.rb +32 -14
  91. data/app/models/spree/promotion/rules/country.rb +40 -18
  92. data/app/models/spree/promotion/rules/customer_group.rb +10 -1
  93. data/app/models/spree/promotion/rules/product.rb +4 -0
  94. data/app/models/spree/promotion/rules/taxon.rb +24 -1
  95. data/app/models/spree/promotion/rules/user.rb +21 -0
  96. data/app/models/spree/promotion/rules/user_logged_in.rb +6 -0
  97. data/app/models/spree/promotion.rb +22 -1
  98. data/app/models/spree/promotion_action.rb +17 -11
  99. data/app/models/spree/promotion_rule.rb +17 -18
  100. data/app/models/spree/search_provider/meilisearch.rb +12 -2
  101. data/app/models/spree/stock/availability_validator.rb +1 -1
  102. data/app/models/spree/stock/quantifier.rb +89 -9
  103. data/app/models/spree/stock_item.rb +36 -0
  104. data/app/models/spree/stock_location.rb +52 -0
  105. data/app/models/spree/stock_reservation.rb +38 -0
  106. data/app/models/spree/stock_reservations/insufficient_stock_error.rb +12 -0
  107. data/app/models/spree/store.rb +18 -72
  108. data/app/models/spree/store_credit.rb +0 -8
  109. data/app/models/spree/store_product.rb +11 -23
  110. data/app/models/spree/taxon.rb +0 -5
  111. data/app/models/spree/user_identity.rb +1 -2
  112. data/app/models/spree/variant.rb +132 -18
  113. data/app/models/spree/variant_media.rb +46 -0
  114. data/app/models/spree/webhook_delivery.rb +1 -1
  115. data/app/models/spree/webhook_endpoint.rb +24 -0
  116. data/app/models/spree/wished_item.rb +0 -13
  117. data/app/presenters/spree/csv/product_variant_presenter.rb +23 -3
  118. data/app/presenters/spree/search_provider/product_presenter.rb +11 -4
  119. data/app/presenters/spree/variant_presenter.rb +4 -3
  120. data/app/services/spree/addresses/update.rb +6 -8
  121. data/app/services/spree/cart/add_item.rb +10 -0
  122. data/app/services/spree/cart/empty.rb +2 -0
  123. data/app/services/spree/cart/remove_line_item.rb +10 -0
  124. data/app/services/spree/cart/remove_out_of_stock_items.rb +1 -1
  125. data/app/services/spree/cart/set_quantity.rb +10 -0
  126. data/app/services/spree/carts/complete.rb +1 -0
  127. data/app/services/spree/carts/create.rb +1 -0
  128. data/app/services/spree/carts/update.rb +18 -2
  129. data/app/services/spree/carts/upsert_items.rb +6 -6
  130. data/app/services/spree/imports/row_processors/customer.rb +4 -1
  131. data/app/services/spree/imports/row_processors/product_variant.rb +95 -57
  132. data/app/services/spree/newsletter/link_user.rb +53 -0
  133. data/app/services/spree/newsletter/subscribe.rb +31 -9
  134. data/app/services/spree/orders/approve.rb +27 -6
  135. data/app/services/spree/orders/build_shipments.rb +29 -0
  136. data/app/services/spree/orders/cancel.rb +34 -3
  137. data/app/services/spree/orders/complete.rb +53 -0
  138. data/app/services/spree/orders/create.rb +156 -0
  139. data/app/services/spree/orders/update.rb +51 -0
  140. data/app/services/spree/orders/upsert_items.rb +70 -0
  141. data/app/services/spree/prices/bulk_upsert.rb +201 -0
  142. data/app/services/spree/products/duplicator.rb +1 -1
  143. data/app/services/spree/products/prepare_nested_attributes.rb +2 -30
  144. data/app/services/spree/sample_data/loader.rb +30 -0
  145. data/app/services/spree/stock_reservations/extend.rb +19 -0
  146. data/app/services/spree/stock_reservations/release.rb +12 -0
  147. data/app/services/spree/stock_reservations/reserve.rb +103 -0
  148. data/app/services/spree/taxons/remove_products.rb +7 -1
  149. data/app/subscribers/spree/product_metrics_subscriber.rb +3 -7
  150. data/app/views/spree/invitation_mailer/invitation_email.html.erb +4 -0
  151. data/config/locales/en.yml +28 -10
  152. data/config/routes.rb +9 -0
  153. data/db/migrate/20260429000001_create_spree_order_cancellations.rb +25 -0
  154. data/db/migrate/20260429000002_create_spree_order_approvals.rb +22 -0
  155. data/db/migrate/20260429000003_add_status_to_spree_orders.rb +6 -0
  156. data/db/migrate/20260429000004_add_scopes_to_spree_api_keys.rb +11 -0
  157. data/db/migrate/20260501000001_create_spree_stock_reservations.rb +19 -0
  158. data/db/migrate/20260507162651_create_spree_variant_media.rb +23 -0
  159. data/db/migrate/20260508175303_add_pickup_to_spree_stock_locations.rb +12 -0
  160. data/db/migrate/20260508204040_create_spree_channels.rb +18 -0
  161. data/db/migrate/20260508204041_create_spree_order_routing_rules.rb +18 -0
  162. data/db/migrate/20260508204042_add_preferred_stock_location_to_spree_orders.rb +5 -0
  163. data/db/migrate/20260508204043_add_channel_id_to_spree_orders.rb +10 -0
  164. data/db/migrate/20260511000001_backfill_status_on_spree_orders.rb +57 -0
  165. data/db/migrate/20260515000001_add_store_id_to_spree_newsletter_subscribers.rb +25 -0
  166. data/db/migrate/20260529000001_add_unique_index_to_spree_price_rules.rb +41 -0
  167. data/db/migrate/20260529000002_add_unique_index_to_spree_promotion_rules.rb +37 -0
  168. data/db/migrate/20260601000001_create_spree_product_publications.rb +14 -0
  169. data/db/migrate/20260601000002_add_store_id_to_spree_products.rb +16 -0
  170. data/db/migrate/20260602000001_add_default_to_spree_channels.rb +14 -0
  171. data/db/migrate/20260612000001_change_spree_user_identities_info_to_jsonb.rb +13 -0
  172. data/db/sample_data/channels.rb +12 -0
  173. data/db/sample_data/orders.rb +1 -1
  174. data/db/sample_data/products.csv +212 -212
  175. data/lib/generators/spree/api_resource/api_resource_generator.rb +353 -0
  176. data/lib/generators/spree/api_resource/templates/admin_controller.rb.tt +23 -0
  177. data/lib/generators/spree/api_resource/templates/admin_controller_spec.rb.tt +59 -0
  178. data/lib/generators/spree/api_resource/templates/admin_serializer.rb.tt +11 -0
  179. data/lib/generators/spree/api_resource/templates/factory.rb.tt +26 -0
  180. data/lib/generators/spree/api_resource/templates/store_aliased_serializer.rb.tt +12 -0
  181. data/lib/generators/spree/api_resource/templates/store_controller.rb.tt +31 -0
  182. data/lib/generators/spree/api_resource/templates/store_controller_spec.rb.tt +61 -0
  183. data/lib/generators/spree/api_resource/templates/store_serializer.rb.tt +17 -0
  184. data/lib/generators/spree/controller_decorator/controller_decorator_generator.rb +66 -0
  185. data/lib/generators/spree/controller_decorator/templates/controller_decorator.rb.tt +25 -0
  186. data/lib/generators/spree/model/model_generator.rb +73 -7
  187. data/lib/generators/spree/model/templates/create_table_migration.rb.tt +40 -0
  188. data/lib/generators/spree/model/templates/model.rb.tt +28 -2
  189. data/lib/generators/spree/subscriber/subscriber_generator.rb +116 -0
  190. data/lib/generators/spree/subscriber/templates/subscriber.rb.tt +17 -0
  191. data/lib/generators/spree/subscriber/templates/subscriber_spec.rb.tt +9 -0
  192. data/lib/spree/core/configuration.rb +7 -0
  193. data/lib/spree/core/controller_helpers/auth.rb +0 -12
  194. data/lib/spree/core/controller_helpers/currency.rb +0 -17
  195. data/lib/spree/core/controller_helpers/order.rb +0 -19
  196. data/lib/spree/core/dependencies.rb +5 -2
  197. data/lib/spree/core/engine.rb +54 -7
  198. data/lib/spree/core/permission_configuration.rb +15 -0
  199. data/lib/spree/core/preferences/masking.rb +47 -0
  200. data/lib/spree/core/preferences/preferable_class_methods.rb +7 -1
  201. data/lib/spree/core/version.rb +1 -1
  202. data/lib/spree/core.rb +56 -5
  203. data/lib/spree/permitted_attributes.rb +9 -7
  204. data/lib/spree/testing_support/factories/address_factory.rb +16 -9
  205. data/lib/spree/testing_support/factories/api_key_factory.rb +1 -0
  206. data/lib/spree/testing_support/factories/channel_factory.rb +8 -0
  207. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -8
  208. data/lib/spree/testing_support/factories/newsletter_subscriber_factory.rb +2 -0
  209. data/lib/spree/testing_support/factories/product_factory.rb +16 -7
  210. data/lib/spree/testing_support/factories/product_publication_factory.rb +6 -0
  211. data/lib/spree/testing_support/factories/refresh_token_factory.rb +15 -0
  212. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -2
  213. data/lib/spree/testing_support/factories/stock_reservation_factory.rb +31 -0
  214. data/lib/spree/testing_support/factories/variant_factory.rb +3 -3
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/store.rb +10 -0
  217. data/lib/spree/upgrades/5_4_to_5_5/manifest.yml +53 -0
  218. data/lib/tasks/channels.rake +94 -0
  219. data/lib/tasks/cli.rake +2 -1
  220. data/lib/tasks/core.rake +1 -0
  221. data/lib/tasks/media.rake +27 -0
  222. data/lib/tasks/products.rake +4 -6
  223. data/lib/tasks/publications.rake +60 -0
  224. data/lib/tasks/upgrade.rake +211 -0
  225. metadata +87 -18
  226. data/app/finders/spree/variants/visible_finder.rb +0 -23
  227. data/app/paginators/spree/shared/paginate.rb +0 -30
  228. data/app/presenters/spree/filters/price_presenter.rb +0 -23
  229. data/app/presenters/spree/filters/price_range_presenter.rb +0 -30
  230. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +0 -45
  231. data/app/presenters/spree/product_summary_presenter.rb +0 -27
  232. data/app/presenters/spree/variants/options_presenter.rb +0 -82
  233. data/app/services/spree/classifications/reposition.rb +0 -23
  234. data/app/sorters/spree/orders/sort.rb +0 -10
  235. data/lib/spree/core/controller_helpers/common.rb +0 -14
  236. data/lib/spree/core/token_generator.rb +0 -23
  237. data/lib/spree/database_type_utilities.rb +0 -22
  238. data/lib/spree/testing_support/bar_ability.rb +0 -14
  239. data/lib/spree/testing_support/factories/store_product_factory.rb +0 -6
@@ -1,10 +0,0 @@
1
- module Spree
2
- module Orders
3
- class Sort < ::Spree::BaseSorter
4
- def initialize(*args)
5
- Spree::Deprecation.warn('Spree::Orders::Sort is deprecated and will be removed in Spree 5.5.')
6
- super
7
- end
8
- end
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- module Spree
2
- module Core
3
- module ControllerHelpers
4
- # @deprecated This module is deprecated and will be removed in Spree 5.5.
5
- module Common
6
- def self.included(base)
7
- Spree::Deprecation.warn(
8
- 'Spree::Core::ControllerHelpers::Common is deprecated and will be removed in Spree 5.5.'
9
- )
10
- end
11
- end
12
- end
13
- end
14
- end
@@ -1,23 +0,0 @@
1
- module Spree
2
- module Core
3
- module TokenGenerator
4
- def generate_token(model_class = Spree::Order)
5
- Spree::Deprecation.warn('generate_token is deprecated and will be removed in Spree 5.5. Please use Rails secure token generator: https://api.rubyonrails.org/classes/ActiveRecord/SecureToken/ClassMethods.html')
6
- loop do
7
- token = "#{random_token}#{unique_ending}"
8
- break token unless model_class.exists?(token: token)
9
- end
10
- end
11
-
12
- private
13
-
14
- def random_token
15
- SecureRandom.urlsafe_base64(nil, false)
16
- end
17
-
18
- def unique_ending
19
- (Time.now.to_f * 1000).to_i
20
- end
21
- end
22
- end
23
- end
@@ -1,22 +0,0 @@
1
- module Spree
2
- # @deprecated Use the integer constant directly instead, eg. `2_147_483_647` for 4-byte signed integer max.
3
- # This module will be removed in Spree 5.5.
4
- module DatabaseTypeUtilities
5
- # Maximum value for a 4-byte signed integer (default database integer type)
6
- INTEGER_MAX = (2**31) - 1
7
-
8
- def self.maximum_value_for(data_type)
9
- Spree::Deprecation.warn(
10
- 'Spree::DatabaseTypeUtilities.maximum_value_for is deprecated and will be removed in Spree 5.5. ' \
11
- 'Use the integer constant directly instead, eg. 2_147_483_647 for 4-byte signed integer max.'
12
- )
13
-
14
- case data_type
15
- when :integer
16
- INTEGER_MAX
17
- else
18
- raise ArgumentError, 'Currently only :integer argument is acceptable'
19
- end
20
- end
21
- end
22
- end
@@ -1,14 +0,0 @@
1
- # Fake ability for testing administration
2
- class BarAbility
3
- include CanCan::Ability
4
-
5
- def initialize(user)
6
- user ||= Spree::User.new
7
- if user.has_spree_role? 'bar'
8
- # allow dispatch to :admin, :index, and :show on Spree::Order
9
- can [:admin, :index, :show], Spree::Order
10
- # allow dispatch to :index, :show, :create and :update shipments on the admin
11
- can [:admin, :manage], Spree::Shipment
12
- end
13
- end
14
- end
@@ -1,6 +0,0 @@
1
- FactoryBot.define do
2
- factory :store_product, class: Spree::StoreProduct do
3
- store
4
- product
5
- end
6
- end