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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.3
4
+ version: 5.5.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2026-05-19 00:00:00.000000000 Z
13
+ date: 2026-06-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n-tasks
@@ -841,7 +841,6 @@ files:
841
841
  - app/finders/spree/taxons/find.rb
842
842
  - app/finders/spree/variants/find.rb
843
843
  - app/finders/spree/variants/option_types_finder.rb
844
- - app/finders/spree/variants/visible_finder.rb
845
844
  - app/helpers/spree/addresses_helper.rb
846
845
  - app/helpers/spree/base_helper.rb
847
846
  - app/helpers/spree/currency_helper.rb
@@ -864,9 +863,13 @@ files:
864
863
  - app/jobs/spree/exports/generate_job.rb
865
864
  - app/jobs/spree/gift_cards/bulk_generate_job.rb
866
865
  - app/jobs/spree/images/save_from_url_job.rb
866
+ - app/jobs/spree/imports/assign_tags_job.rb
867
+ - app/jobs/spree/imports/base_job.rb
868
+ - app/jobs/spree/imports/create_categories_job.rb
867
869
  - app/jobs/spree/imports/create_rows_job.rb
868
870
  - app/jobs/spree/imports/process_group_job.rb
869
871
  - app/jobs/spree/imports/process_rows_job.rb
872
+ - app/jobs/spree/media/migrate_product_assets_job.rb
870
873
  - app/jobs/spree/payments/handle_webhook_job.rb
871
874
  - app/jobs/spree/products/auto_match_taxons_job.rb
872
875
  - app/jobs/spree/products/refresh_metrics_job.rb
@@ -875,6 +878,7 @@ files:
875
878
  - app/jobs/spree/search_provider/index_job.rb
876
879
  - app/jobs/spree/search_provider/remove_job.rb
877
880
  - app/jobs/spree/stock_locations/stock_items/create_job.rb
881
+ - app/jobs/spree/stock_reservations/expire_job.rb
878
882
  - app/jobs/spree/variants/remove_from_incomplete_orders_job.rb
879
883
  - app/jobs/spree/variants/remove_line_item_job.rb
880
884
  - app/jobs/spree/variants/touch_job.rb
@@ -901,6 +905,7 @@ files:
901
905
  - app/models/concerns/spree/number_identifier.rb
902
906
  - app/models/concerns/spree/parameterizable_name.rb
903
907
  - app/models/concerns/spree/payment_source_concern.rb
908
+ - app/models/concerns/spree/preference_schema.rb
904
909
  - app/models/concerns/spree/prefixed_id.rb
905
910
  - app/models/concerns/spree/product_scopes.rb
906
911
  - app/models/concerns/spree/publishable.rb
@@ -909,11 +914,13 @@ files:
909
914
  - app/models/concerns/spree/searchable.rb
910
915
  - app/models/concerns/spree/single_store_resource.rb
911
916
  - app/models/concerns/spree/store_scoped_resource.rb
917
+ - app/models/concerns/spree/stores/channels.rb
912
918
  - app/models/concerns/spree/stores/markets.rb
913
919
  - app/models/concerns/spree/stores/setup.rb
914
920
  - app/models/concerns/spree/translatable_resource.rb
915
921
  - app/models/concerns/spree/translatable_resource_scopes.rb
916
922
  - app/models/concerns/spree/translatable_resource_slug.rb
923
+ - app/models/concerns/spree/typed_associations.rb
917
924
  - app/models/concerns/spree/unique_name.rb
918
925
  - app/models/concerns/spree/user_address.rb
919
926
  - app/models/concerns/spree/user_management.rb
@@ -936,6 +943,7 @@ files:
936
943
  - app/models/spree/asset/support/active_storage.rb
937
944
  - app/models/spree/authentication/strategies/base_strategy.rb
938
945
  - app/models/spree/authentication/strategies/email_password_strategy.rb
946
+ - app/models/spree/authentication/strategy_registry.rb
939
947
  - app/models/spree/base.rb
940
948
  - app/models/spree/base_analytics_event_handler.rb
941
949
  - app/models/spree/calculator.rb
@@ -955,6 +963,7 @@ files:
955
963
  - app/models/spree/calculator/tiered_flat_rate.rb
956
964
  - app/models/spree/calculator/tiered_percent.rb
957
965
  - app/models/spree/category.rb
966
+ - app/models/spree/channel.rb
958
967
  - app/models/spree/checkout/default_requirements.rb
959
968
  - app/models/spree/checkout/registry.rb
960
969
  - app/models/spree/checkout/requirement.rb
@@ -965,6 +974,8 @@ files:
965
974
  - app/models/spree/coupon_code.rb
966
975
  - app/models/spree/credit_card.rb
967
976
  - app/models/spree/current.rb
977
+ - app/models/spree/custom_field.rb
978
+ - app/models/spree/custom_field_definition.rb
968
979
  - app/models/spree/customer_group.rb
969
980
  - app/models/spree/customer_group_user.rb
970
981
  - app/models/spree/customer_return.rb
@@ -1033,10 +1044,21 @@ files:
1033
1044
  - app/models/spree/order/payments.rb
1034
1045
  - app/models/spree/order/store_credit.rb
1035
1046
  - app/models/spree/order/webhooks.rb
1047
+ - app/models/spree/order_approval.rb
1048
+ - app/models/spree/order_cancellation.rb
1036
1049
  - app/models/spree/order_contents.rb
1037
1050
  - app/models/spree/order_inventory.rb
1038
1051
  - app/models/spree/order_merger.rb
1039
1052
  - app/models/spree/order_promotion.rb
1053
+ - app/models/spree/order_routing/has_strategy_preference.rb
1054
+ - app/models/spree/order_routing/rules/default_location.rb
1055
+ - app/models/spree/order_routing/rules/minimize_splits.rb
1056
+ - app/models/spree/order_routing/rules/preferred_location.rb
1057
+ - app/models/spree/order_routing/strategy/base.rb
1058
+ - app/models/spree/order_routing/strategy/legacy.rb
1059
+ - app/models/spree/order_routing/strategy/reducer.rb
1060
+ - app/models/spree/order_routing/strategy/rules.rb
1061
+ - app/models/spree/order_routing_rule.rb
1040
1062
  - app/models/spree/order_updater.rb
1041
1063
  - app/models/spree/payment.rb
1042
1064
  - app/models/spree/payment/custom_events.rb
@@ -1081,10 +1103,13 @@ files:
1081
1103
  - app/models/spree/price_rules/volume_rule.rb
1082
1104
  - app/models/spree/price_rules/zone_rule.rb
1083
1105
  - app/models/spree/product.rb
1106
+ - app/models/spree/product/channels.rb
1107
+ - app/models/spree/product/legacy_multi_store_support.rb
1084
1108
  - app/models/spree/product/slugs.rb
1085
1109
  - app/models/spree/product/webhooks.rb
1086
1110
  - app/models/spree/product_option_type.rb
1087
1111
  - app/models/spree/product_promotion_rule.rb
1112
+ - app/models/spree/product_publication.rb
1088
1113
  - app/models/spree/promotion.rb
1089
1114
  - app/models/spree/promotion/actions/create_adjustment.rb
1090
1115
  - app/models/spree/promotion/actions/create_item_adjustments.rb
@@ -1189,6 +1214,8 @@ files:
1189
1214
  - app/models/spree/stock_movement.rb
1190
1215
  - app/models/spree/stock_movement/custom_events.rb
1191
1216
  - app/models/spree/stock_movement/webhooks.rb
1217
+ - app/models/spree/stock_reservation.rb
1218
+ - app/models/spree/stock_reservations/insufficient_stock_error.rb
1192
1219
  - app/models/spree/stock_transfer.rb
1193
1220
  - app/models/spree/store.rb
1194
1221
  - app/models/spree/store_credit.rb
@@ -1210,13 +1237,13 @@ files:
1210
1237
  - app/models/spree/user_identity.rb
1211
1238
  - app/models/spree/variant.rb
1212
1239
  - app/models/spree/variant/webhooks.rb
1240
+ - app/models/spree/variant_media.rb
1213
1241
  - app/models/spree/webhook_delivery.rb
1214
1242
  - app/models/spree/webhook_endpoint.rb
1215
1243
  - app/models/spree/wished_item.rb
1216
1244
  - app/models/spree/wishlist.rb
1217
1245
  - app/models/spree/zone.rb
1218
1246
  - app/models/spree/zone_member.rb
1219
- - app/paginators/spree/shared/paginate.rb
1220
1247
  - app/presenters/spree/csv/coupon_code_presenter.rb
1221
1248
  - app/presenters/spree/csv/customer_presenter.rb
1222
1249
  - app/presenters/spree/csv/formula_sanitizer.rb
@@ -1229,14 +1256,9 @@ files:
1229
1256
  - app/presenters/spree/data_feeds/base_presenter.rb
1230
1257
  - app/presenters/spree/data_feeds/google_presenter.rb
1231
1258
  - app/presenters/spree/filters/options_presenter.rb
1232
- - app/presenters/spree/filters/price_presenter.rb
1233
- - app/presenters/spree/filters/price_range_presenter.rb
1234
- - app/presenters/spree/filters/quantified_price_range_presenter.rb
1235
- - app/presenters/spree/product_summary_presenter.rb
1236
1259
  - app/presenters/spree/search_provider/product_presenter.rb
1237
1260
  - app/presenters/spree/variant_presenter.rb
1238
1261
  - app/presenters/spree/variants/option_types_presenter.rb
1239
- - app/presenters/spree/variants/options_presenter.rb
1240
1262
  - app/services/spree/account/addresses/create.rb
1241
1263
  - app/services/spree/account/addresses/update.rb
1242
1264
  - app/services/spree/account/create.rb
@@ -1269,7 +1291,6 @@ files:
1269
1291
  - app/services/spree/checkout/remove_store_credit.rb
1270
1292
  - app/services/spree/checkout/select_shipping_method.rb
1271
1293
  - app/services/spree/checkout/update.rb
1272
- - app/services/spree/classifications/reposition.rb
1273
1294
  - app/services/spree/compare_line_items.rb
1274
1295
  - app/services/spree/country_to_timezone.rb
1275
1296
  - app/services/spree/coupon_codes/bulk_generate.rb
@@ -1288,14 +1309,21 @@ files:
1288
1309
  - app/services/spree/line_items/helper.rb
1289
1310
  - app/services/spree/line_items/update.rb
1290
1311
  - app/services/spree/locales/set_fallback_locale_for_store.rb
1312
+ - app/services/spree/newsletter/link_user.rb
1291
1313
  - app/services/spree/newsletter/subscribe.rb
1292
1314
  - app/services/spree/newsletter/verify.rb
1293
1315
  - app/services/spree/orders/approve.rb
1316
+ - app/services/spree/orders/build_shipments.rb
1294
1317
  - app/services/spree/orders/cancel.rb
1318
+ - app/services/spree/orders/complete.rb
1319
+ - app/services/spree/orders/create.rb
1295
1320
  - app/services/spree/orders/create_user_account.rb
1321
+ - app/services/spree/orders/update.rb
1296
1322
  - app/services/spree/orders/update_contact_information.rb
1323
+ - app/services/spree/orders/upsert_items.rb
1297
1324
  - app/services/spree/payments/create.rb
1298
1325
  - app/services/spree/payments/handle_webhook.rb
1326
+ - app/services/spree/prices/bulk_upsert.rb
1299
1327
  - app/services/spree/products/auto_match_taxons.rb
1300
1328
  - app/services/spree/products/duplicator.rb
1301
1329
  - app/services/spree/products/prepare_nested_attributes.rb
@@ -1325,6 +1353,9 @@ files:
1325
1353
  - app/services/spree/shipments/remove_item.rb
1326
1354
  - app/services/spree/shipments/update.rb
1327
1355
  - app/services/spree/stock_locations/stock_items/create.rb
1356
+ - app/services/spree/stock_reservations/extend.rb
1357
+ - app/services/spree/stock_reservations/release.rb
1358
+ - app/services/spree/stock_reservations/reserve.rb
1328
1359
  - app/services/spree/stores/settings_defaults_by_country.rb
1329
1360
  - app/services/spree/tags/bulk_add.rb
1330
1361
  - app/services/spree/tags/bulk_remove.rb
@@ -1337,7 +1368,6 @@ files:
1337
1368
  - app/services/spree/wallet/create_payment_source.rb
1338
1369
  - app/sorters/spree/base_sorter.rb
1339
1370
  - app/sorters/spree/classifications/sort.rb
1340
- - app/sorters/spree/orders/sort.rb
1341
1371
  - app/sorters/spree/products/sort.rb
1342
1372
  - app/subscribers/spree/event_log_subscriber.rb
1343
1373
  - app/subscribers/spree/export_subscriber.rb
@@ -1516,7 +1546,27 @@ files:
1516
1546
  - db/migrate/20260408000001_add_unique_index_to_spree_zone_members.rb
1517
1547
  - db/migrate/20260424000001_add_unique_index_to_spree_payments_response_code.rb
1518
1548
  - db/migrate/20260424100000_add_processing_groups_to_spree_imports.rb
1549
+ - db/migrate/20260429000001_create_spree_order_cancellations.rb
1550
+ - db/migrate/20260429000002_create_spree_order_approvals.rb
1551
+ - db/migrate/20260429000003_add_status_to_spree_orders.rb
1552
+ - db/migrate/20260429000004_add_scopes_to_spree_api_keys.rb
1553
+ - db/migrate/20260501000001_create_spree_stock_reservations.rb
1519
1554
  - db/migrate/20260504103113_add_type_to_spree_payment_setup_sessions.rb
1555
+ - db/migrate/20260507162651_create_spree_variant_media.rb
1556
+ - db/migrate/20260508175303_add_pickup_to_spree_stock_locations.rb
1557
+ - db/migrate/20260508204040_create_spree_channels.rb
1558
+ - db/migrate/20260508204041_create_spree_order_routing_rules.rb
1559
+ - db/migrate/20260508204042_add_preferred_stock_location_to_spree_orders.rb
1560
+ - db/migrate/20260508204043_add_channel_id_to_spree_orders.rb
1561
+ - db/migrate/20260511000001_backfill_status_on_spree_orders.rb
1562
+ - db/migrate/20260515000001_add_store_id_to_spree_newsletter_subscribers.rb
1563
+ - db/migrate/20260529000001_add_unique_index_to_spree_price_rules.rb
1564
+ - db/migrate/20260529000002_add_unique_index_to_spree_promotion_rules.rb
1565
+ - db/migrate/20260601000001_create_spree_product_publications.rb
1566
+ - db/migrate/20260601000002_add_store_id_to_spree_products.rb
1567
+ - db/migrate/20260602000001_add_default_to_spree_channels.rb
1568
+ - db/migrate/20260612000001_change_spree_user_identities_info_to_jsonb.rb
1569
+ - db/sample_data/channels.rb
1520
1570
  - db/sample_data/customers.csv
1521
1571
  - db/sample_data/markets.rb
1522
1572
  - db/sample_data/metafield_definitions.rb
@@ -1530,6 +1580,15 @@ files:
1530
1580
  - db/seeds.rb
1531
1581
  - lib/friendly_id/history_decorator.rb
1532
1582
  - lib/friendly_id/paranoia.rb
1583
+ - lib/generators/spree/api_resource/api_resource_generator.rb
1584
+ - lib/generators/spree/api_resource/templates/admin_controller.rb.tt
1585
+ - lib/generators/spree/api_resource/templates/admin_controller_spec.rb.tt
1586
+ - lib/generators/spree/api_resource/templates/admin_serializer.rb.tt
1587
+ - lib/generators/spree/api_resource/templates/factory.rb.tt
1588
+ - lib/generators/spree/api_resource/templates/store_aliased_serializer.rb.tt
1589
+ - lib/generators/spree/api_resource/templates/store_controller.rb.tt
1590
+ - lib/generators/spree/api_resource/templates/store_controller_spec.rb.tt
1591
+ - lib/generators/spree/api_resource/templates/store_serializer.rb.tt
1533
1592
  - lib/generators/spree/authentication/custom/custom_generator.rb
1534
1593
  - lib/generators/spree/authentication/custom/templates/authentication_helpers.rb.tt
1535
1594
  - lib/generators/spree/authentication/devise/devise_generator.rb
@@ -1537,6 +1596,8 @@ files:
1537
1596
  - lib/generators/spree/authentication/dummy/dummy_generator.rb
1538
1597
  - lib/generators/spree/authentication/dummy/templates/authentication_helpers.rb.tt
1539
1598
  - lib/generators/spree/authentication/dummy/templates/create_spree_admin_users.rb.tt
1599
+ - lib/generators/spree/controller_decorator/controller_decorator_generator.rb
1600
+ - lib/generators/spree/controller_decorator/templates/controller_decorator.rb.tt
1540
1601
  - lib/generators/spree/dummy/dummy_generator.rb
1541
1602
  - lib/generators/spree/dummy/templates/app/assets/config/manifest.js
1542
1603
  - lib/generators/spree/dummy/templates/rails/application.rb
@@ -1548,16 +1609,19 @@ files:
1548
1609
  - lib/generators/spree/dummy_model/templates/migration.rb.tt
1549
1610
  - lib/generators/spree/dummy_model/templates/model.rb.tt
1550
1611
  - lib/generators/spree/model/model_generator.rb
1612
+ - lib/generators/spree/model/templates/create_table_migration.rb.tt
1551
1613
  - lib/generators/spree/model/templates/model.rb.tt
1552
1614
  - lib/generators/spree/model_decorator/model_decorator_generator.rb
1553
1615
  - lib/generators/spree/model_decorator/templates/model_decorator.rb.tt
1616
+ - lib/generators/spree/subscriber/subscriber_generator.rb
1617
+ - lib/generators/spree/subscriber/templates/subscriber.rb.tt
1618
+ - lib/generators/spree/subscriber/templates/subscriber_spec.rb.tt
1554
1619
  - lib/mobility/plugins/store_based_fallbacks.rb
1555
1620
  - lib/spree/analytics.rb
1556
1621
  - lib/spree/core.rb
1557
1622
  - lib/spree/core/components.rb
1558
1623
  - lib/spree/core/configuration.rb
1559
1624
  - lib/spree/core/controller_helpers/auth.rb
1560
- - lib/spree/core/controller_helpers/common.rb
1561
1625
  - lib/spree/core/controller_helpers/currency.rb
1562
1626
  - lib/spree/core/controller_helpers/locale.rb
1563
1627
  - lib/spree/core/controller_helpers/order.rb
@@ -1571,6 +1635,7 @@ files:
1571
1635
  - lib/spree/core/partials.rb
1572
1636
  - lib/spree/core/permission_configuration.rb
1573
1637
  - lib/spree/core/preferences/configuration.rb
1638
+ - lib/spree/core/preferences/masking.rb
1574
1639
  - lib/spree/core/preferences/preferable.rb
1575
1640
  - lib/spree/core/preferences/preferable_class_methods.rb
1576
1641
  - lib/spree/core/preferences/runtime_configuration.rb
@@ -1580,9 +1645,7 @@ files:
1580
1645
  - lib/spree/core/pricing/resolver.rb
1581
1646
  - lib/spree/core/ransack_configuration.rb
1582
1647
  - lib/spree/core/routes.rb
1583
- - lib/spree/core/token_generator.rb
1584
1648
  - lib/spree/core/version.rb
1585
- - lib/spree/database_type_utilities.rb
1586
1649
  - lib/spree/events.rb
1587
1650
  - lib/spree/events/adapters/active_support_notifications.rb
1588
1651
  - lib/spree/events/adapters/base.rb
@@ -1595,7 +1658,6 @@ files:
1595
1658
  - lib/spree/service_module.rb
1596
1659
  - lib/spree/testing_support/ability_helpers.rb
1597
1660
  - lib/spree/testing_support/authorization_helpers.rb
1598
- - lib/spree/testing_support/bar_ability.rb
1599
1661
  - lib/spree/testing_support/caching.rb
1600
1662
  - lib/spree/testing_support/capybara_config.rb
1601
1663
  - lib/spree/testing_support/capybara_ext.rb
@@ -1609,6 +1671,7 @@ files:
1609
1671
  - lib/spree/testing_support/factories/api_key_factory.rb
1610
1672
  - lib/spree/testing_support/factories/asset_factory.rb
1611
1673
  - lib/spree/testing_support/factories/calculator_factory.rb
1674
+ - lib/spree/testing_support/factories/channel_factory.rb
1612
1675
  - lib/spree/testing_support/factories/classification_factory.rb
1613
1676
  - lib/spree/testing_support/factories/country_factory.rb
1614
1677
  - lib/spree/testing_support/factories/coupon_code_factory.rb
@@ -1653,12 +1716,14 @@ files:
1653
1716
  - lib/spree/testing_support/factories/price_rule_factory.rb
1654
1717
  - lib/spree/testing_support/factories/product_factory.rb
1655
1718
  - lib/spree/testing_support/factories/product_option_type_factory.rb
1719
+ - lib/spree/testing_support/factories/product_publication_factory.rb
1656
1720
  - lib/spree/testing_support/factories/product_translation_factory.rb
1657
1721
  - lib/spree/testing_support/factories/promotion_action_factory.rb
1658
1722
  - lib/spree/testing_support/factories/promotion_category_factory.rb
1659
1723
  - lib/spree/testing_support/factories/promotion_factory.rb
1660
1724
  - lib/spree/testing_support/factories/promotion_rule_factory.rb
1661
1725
  - lib/spree/testing_support/factories/prototype_factory.rb
1726
+ - lib/spree/testing_support/factories/refresh_token_factory.rb
1662
1727
  - lib/spree/testing_support/factories/refund_factory.rb
1663
1728
  - lib/spree/testing_support/factories/reimbursement_credit_factory.rb
1664
1729
  - lib/spree/testing_support/factories/reimbursement_factory.rb
@@ -1678,13 +1743,13 @@ files:
1678
1743
  - lib/spree/testing_support/factories/stock_item_factory.rb
1679
1744
  - lib/spree/testing_support/factories/stock_location_factory.rb
1680
1745
  - lib/spree/testing_support/factories/stock_movement_factory.rb
1746
+ - lib/spree/testing_support/factories/stock_reservation_factory.rb
1681
1747
  - lib/spree/testing_support/factories/stock_transfer_factory.rb
1682
1748
  - lib/spree/testing_support/factories/store_credit_category_factory.rb
1683
1749
  - lib/spree/testing_support/factories/store_credit_event_factory.rb
1684
1750
  - lib/spree/testing_support/factories/store_credit_factory.rb
1685
1751
  - lib/spree/testing_support/factories/store_credit_type_factory.rb
1686
1752
  - lib/spree/testing_support/factories/store_factory.rb
1687
- - lib/spree/testing_support/factories/store_product_factory.rb
1688
1753
  - lib/spree/testing_support/factories/tax_category_factory.rb
1689
1754
  - lib/spree/testing_support/factories/tax_rate_factory.rb
1690
1755
  - lib/spree/testing_support/factories/taxon_factory.rb
@@ -1713,8 +1778,10 @@ files:
1713
1778
  - lib/spree/testing_support/store.rb
1714
1779
  - lib/spree/testing_support/url_helpers.rb
1715
1780
  - lib/spree/translation_migrations.rb
1781
+ - lib/spree/upgrades/5_4_to_5_5/manifest.yml
1716
1782
  - lib/spree/webhooks.rb
1717
1783
  - lib/spree_core.rb
1784
+ - lib/tasks/channels.rake
1718
1785
  - lib/tasks/cli.rake
1719
1786
  - lib/tasks/core.rake
1720
1787
  - lib/tasks/dependencies.rake
@@ -1722,9 +1789,11 @@ files:
1722
1789
  - lib/tasks/media.rake
1723
1790
  - lib/tasks/price_history.rake
1724
1791
  - lib/tasks/products.rake
1792
+ - lib/tasks/publications.rake
1725
1793
  - lib/tasks/sample_data.rake
1726
1794
  - lib/tasks/search.rake
1727
1795
  - lib/tasks/taxons.rake
1796
+ - lib/tasks/upgrade.rake
1728
1797
  - lib/tasks/variants.rake
1729
1798
  - spec/fixtures/favicon.ico
1730
1799
  - spec/fixtures/files/customers_import.csv
@@ -1747,9 +1816,9 @@ licenses:
1747
1816
  - BSD-3-Clause
1748
1817
  metadata:
1749
1818
  bug_tracker_uri: https://github.com/spree/spree/issues
1750
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.3
1819
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.5.0.rc2
1751
1820
  documentation_uri: https://docs.spreecommerce.org/
1752
- source_code_uri: https://github.com/spree/spree/tree/v5.4.3
1821
+ source_code_uri: https://github.com/spree/spree/tree/v5.5.0.rc2
1753
1822
  post_install_message:
1754
1823
  rdoc_options: []
1755
1824
  require_paths:
@@ -1,23 +0,0 @@
1
- module Spree
2
- module Variants
3
- class VisibleFinder
4
- def initialize(scope:, current_currency:)
5
- Spree::Deprecation.warn('Spree::Variants::VisibleFinder is deprecated and will be removed in Spree 5.5.')
6
- @scope = scope
7
- @current_currency = current_currency
8
- end
9
-
10
- def execute
11
- Spree::Variant.where(id: active_variants).joins(:option_values).order('spree_option_values.position ASC')
12
- end
13
-
14
- private
15
-
16
- attr_reader :scope, :current_currency
17
-
18
- def active_variants
19
- scope.active(current_currency).unscope(:order)
20
- end
21
- end
22
- end
23
- end
@@ -1,30 +0,0 @@
1
- module Spree
2
- module Shared
3
- class Paginate
4
- def initialize(collection, params)
5
- Spree::Deprecation.warn('Spree::Shared::Paginate is deprecated and will be removed in Spree 5.5. Please use Kaminari instead.')
6
-
7
- raise 'Kaminari is not installed. Please add it to your Gemfile.' unless defined?(Kaminari)
8
-
9
- @collection = collection
10
- @page = params[:page]
11
-
12
- per_page_limit = Spree::Api::Config[:api_v2_per_page_limit]
13
-
14
- @per_page = if params[:per_page].to_i.between?(1, per_page_limit)
15
- params[:per_page]
16
- else
17
- Kaminari.config.default_per_page
18
- end
19
- end
20
-
21
- def call
22
- collection.page(page).per(per_page)
23
- end
24
-
25
- private
26
-
27
- attr_reader :collection, :page, :per_page
28
- end
29
- end
30
- end
@@ -1,23 +0,0 @@
1
- module Spree
2
- module Filters
3
- class PricePresenter
4
- def initialize(amount:, currency:)
5
- Spree::Deprecation.warn('Spree::Filters::PricePresenter is deprecated and will be removed in Spree 5.5.')
6
- @amount = amount.to_i
7
- @currency = currency
8
- end
9
-
10
- def to_i
11
- amount
12
- end
13
-
14
- def to_s
15
- Spree::Money.new(amount, currency: currency, no_cents_if_whole: true).to_s
16
- end
17
-
18
- private
19
-
20
- attr_reader :amount, :currency
21
- end
22
- end
23
- end
@@ -1,30 +0,0 @@
1
- module Spree
2
- module Filters
3
- class PriceRangePresenter
4
- def self.from_param(param, currency:)
5
- prices = param.split('-')
6
-
7
- new(
8
- min_price: PricePresenter.new(amount: prices.first, currency: currency),
9
- max_price: PricePresenter.new(amount: prices.last, currency: currency)
10
- )
11
- end
12
-
13
- def initialize(min_price:, max_price:)
14
- Spree::Deprecation.warn('Spree::Filters::PriceRangePresenter is deprecated and will be removed in Spree 5.5.')
15
- @min_price = min_price
16
- @max_price = max_price
17
- end
18
-
19
- attr_reader :min_price, :max_price
20
-
21
- def to_param
22
- "#{min_price.to_i}-#{max_price.to_i}"
23
- end
24
-
25
- def to_s
26
- "#{min_price} - #{max_price}"
27
- end
28
- end
29
- end
30
- end
@@ -1,45 +0,0 @@
1
- module Spree
2
- module Filters
3
- class QuantifiedPriceRangePresenter
4
- ALLOWED_QUANTIFIERS = [
5
- :less_than,
6
- :more_than
7
- ].freeze
8
-
9
- def initialize(price:, quantifier:)
10
- Spree::Deprecation.warn('Spree::Filters::QuantifiedPriceRangePresenter is deprecated and will be removed in Spree 5.5.')
11
- if ALLOWED_QUANTIFIERS.exclude?(quantifier.to_sym)
12
- raise ArgumentError, "quantifier must be one of: #{ALLOWED_QUANTIFIERS.join(', ')}"
13
- end
14
-
15
- @price = price
16
- @quantifier = quantifier.to_sym
17
- end
18
-
19
- def to_param
20
- case quantifier
21
- when :less_than
22
- less_than_param
23
- when :more_than
24
- more_than_param
25
- end
26
- end
27
-
28
- def to_s
29
- "#{I18n.t("activerecord.attributes.spree/product.#{quantifier}")} #{price}"
30
- end
31
-
32
- private
33
-
34
- attr_reader :price, :quantifier
35
-
36
- def less_than_param
37
- "0-#{price.to_i}"
38
- end
39
-
40
- def more_than_param
41
- "#{price.to_i}-Infinity"
42
- end
43
- end
44
- end
45
- end
@@ -1,27 +0,0 @@
1
- module Spree
2
- class ProductSummaryPresenter
3
- include Rails.application.routes.url_helpers
4
-
5
- def initialize(product)
6
- Spree::Deprecation.warn('Spree::ProductSummaryPresenter is deprecated and will be removed in Spree 5.5.')
7
- @product = product
8
- end
9
-
10
- def call
11
- {
12
- name: @product.name,
13
- images: images
14
- }
15
- end
16
-
17
- private
18
-
19
- def images
20
- @product.images.map do |image|
21
- {
22
- url_product: rails_representation_url(image.url(:product), only_path: true)
23
- }
24
- end
25
- end
26
- end
27
- end
@@ -1,82 +0,0 @@
1
- module Spree
2
- module Variants
3
- class OptionsPresenter
4
- WORDS_CONNECTOR = ', '.freeze
5
-
6
- attr_reader :variant
7
-
8
- delegate :option_values, to: :variant
9
-
10
- def initialize(variant)
11
- Spree::Deprecation.warn('Spree::Variants::OptionsPresenter is deprecated and will be removed in Spree 5.5. Please use Spree::Variant#options_text instead.')
12
- @variant = variant
13
- end
14
-
15
- def to_sentence
16
- options = option_values
17
- options = sort_options(options)
18
- options = present_options(options)
19
-
20
- join_options(options)
21
- end
22
-
23
- def to_hash
24
- options = option_values
25
- options = sort_options(options)
26
- options = present_options_as_hash(options)
27
-
28
- join_hash_options(options)
29
- end
30
-
31
- private
32
-
33
- def sort_options(options)
34
- if options.first&.association(:option_type)&.loaded?
35
- options.sort_by { |o| o.option_type.position }
36
- else
37
- options.includes(:option_type).sort_by { |o| o.option_type.position }
38
- end
39
- end
40
-
41
- def present_options(options)
42
- options.map do |ov|
43
- method = "present_#{ov.option_type.name}_option"
44
-
45
- respond_to?(method, true) ? send(method, ov) : present_option(ov)
46
- end
47
- end
48
-
49
- def present_color_option(option)
50
- "#{option.option_type.presentation}: #{option.presentation}"
51
- end
52
-
53
- def present_option(option)
54
- "#{option.option_type.presentation}: #{option.presentation}"
55
- end
56
-
57
- def join_options(options)
58
- options.to_sentence(words_connector: WORDS_CONNECTOR, two_words_connector: WORDS_CONNECTOR)
59
- end
60
-
61
- def present_options_as_hash(options)
62
- options.map do |ov|
63
- method = "present_#{ov.option_type.name}_option_as_hash"
64
-
65
- respond_to?(method, true) ? send(method, ov) : present_option_as_hash(ov)
66
- end
67
- end
68
-
69
- def present_option_as_hash(option)
70
- {}.tap do |hash|
71
- hash.store(option.option_type.presentation.downcase, option.presentation)
72
- end
73
- end
74
-
75
- def join_hash_options(options)
76
- return {} if options.empty?
77
-
78
- options.inject(:merge).symbolize_keys
79
- end
80
- end
81
- end
82
- end
@@ -1,23 +0,0 @@
1
- module Spree
2
- module Classifications
3
- # @deprecated This service is deprecated and will be removed in Spree 5.5.
4
- class Reposition
5
- prepend Spree::ServiceModule::Base
6
-
7
- def call(classification:, position:)
8
- Spree::Deprecation.warn(
9
- "#{self.class.name} is deprecated and will be removed in Spree 5.5.",
10
- caller_locations(2)
11
- )
12
- if position.is_a?(String) && !position.match(/^\d+$/)
13
- return failure(nil, I18n.t('errors.messages.not_a_number'))
14
- end
15
-
16
- # Because position we get back is 0-indexed.
17
- # acts_as_list is 1-indexed.
18
- classification.insert_at(position.to_i + 1)
19
- success(classification)
20
- end
21
- end
22
- end
23
- end