solidus_core 2.11.10 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -2
  3. data/app/assets/javascripts/spree.js.erb +0 -51
  4. data/app/controllers/spree/base_controller.rb +1 -1
  5. data/app/helpers/spree/base_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/helpers/spree/store_helper.rb +0 -11
  8. data/app/mailers/spree/carton_mailer.rb +1 -5
  9. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  10. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +39 -10
  14. data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
  15. data/app/models/concerns/spree/soft_deletable.rb +2 -4
  16. data/app/models/concerns/spree/user_address_book.rb +10 -37
  17. data/app/models/concerns/spree/user_methods.rb +38 -13
  18. data/app/models/spree/ability.rb +0 -37
  19. data/app/models/spree/address/name.rb +2 -20
  20. data/app/models/spree/address.rb +8 -186
  21. data/app/models/spree/adjustment.rb +7 -33
  22. data/app/models/spree/base.rb +0 -53
  23. data/app/models/spree/calculator/flat_fee.rb +21 -0
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +0 -7
  26. data/app/models/spree/carton.rb +1 -1
  27. data/app/models/spree/country.rb +2 -7
  28. data/app/models/spree/credit_card.rb +1 -28
  29. data/app/models/spree/customer_return.rb +5 -7
  30. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  31. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +0 -21
  34. data/app/models/spree/line_item.rb +6 -49
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +10 -1
  38. data/app/models/spree/order/number_generator.rb +7 -1
  39. data/app/models/spree/order.rb +82 -170
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_contents.rb +2 -1
  42. data/app/models/spree/order_inventory.rb +1 -1
  43. data/app/models/spree/order_merger.rb +2 -2
  44. data/app/models/spree/order_promotion.rb +1 -1
  45. data/app/models/spree/order_shipping.rb +6 -9
  46. data/app/models/spree/order_taxation.rb +6 -4
  47. data/app/models/spree/order_updater.rb +17 -16
  48. data/app/models/spree/payment/cancellation.rb +1 -1
  49. data/app/models/spree/payment/processing.rb +58 -55
  50. data/app/models/spree/payment.rb +0 -3
  51. data/app/models/spree/payment_create.rb +1 -13
  52. data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
  53. data/app/models/spree/payment_method/credit_card.rb +1 -3
  54. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
  55. data/app/models/spree/payment_method.rb +26 -110
  56. data/app/models/spree/price.rb +3 -3
  57. data/app/models/spree/product/scopes.rb +24 -33
  58. data/app/models/spree/product.rb +15 -42
  59. data/app/models/spree/product_property.rb +1 -1
  60. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
  61. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
  62. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  63. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  64. data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
  65. data/app/models/spree/promotion/rules/item_total.rb +50 -6
  66. data/app/models/spree/promotion/rules/product.rb +20 -8
  67. data/app/models/spree/promotion/rules/store.rb +4 -0
  68. data/app/models/spree/promotion/rules/taxon.rb +6 -15
  69. data/app/models/spree/promotion/rules/user.rb +4 -0
  70. data/app/models/spree/promotion.rb +39 -32
  71. data/app/models/spree/promotion_action.rb +6 -9
  72. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  73. data/app/models/spree/promotion_code.rb +11 -7
  74. data/app/models/spree/promotion_handler/cart.rb +26 -6
  75. data/app/models/spree/promotion_rule.rb +5 -0
  76. data/app/models/spree/property.rb +1 -1
  77. data/app/models/spree/refund.rb +8 -52
  78. data/app/models/spree/reimbursement.rb +5 -43
  79. data/app/models/spree/reimbursement_performer.rb +2 -8
  80. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  81. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
  82. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  83. data/app/models/spree/return_authorization.rb +2 -5
  84. data/app/models/spree/return_item.rb +4 -24
  85. data/app/models/spree/shipment.rb +3 -56
  86. data/app/models/spree/shipping_method.rb +0 -25
  87. data/app/models/spree/shipping_rate.rb +0 -2
  88. data/app/models/spree/shipping_rate_tax.rb +1 -1
  89. data/app/models/spree/state.rb +1 -5
  90. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  91. data/app/models/spree/stock/availability.rb +11 -3
  92. data/app/models/spree/stock/quantifier.rb +12 -8
  93. data/app/models/spree/stock/simple_coordinator.rb +8 -26
  94. data/app/models/spree/stock/splitter/base.rb +2 -7
  95. data/app/models/spree/stock_item.rb +2 -8
  96. data/app/models/spree/stock_location.rb +2 -2
  97. data/app/models/spree/stock_movement.rb +2 -2
  98. data/app/models/spree/store.rb +0 -12
  99. data/app/models/spree/store_credit.rb +14 -1
  100. data/app/models/spree/store_credit_category.rb +0 -32
  101. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  102. data/app/models/spree/tax/item_tax.rb +3 -2
  103. data/app/models/spree/tax/order_tax.rb +3 -1
  104. data/app/models/spree/tax/tax_helpers.rb +2 -2
  105. data/app/models/spree/tax/tax_location.rb +4 -7
  106. data/app/models/spree/tax_calculator/default.rb +31 -0
  107. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
  108. data/app/models/spree/tax_rate.rb +9 -27
  109. data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
  110. data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
  111. data/app/models/spree/taxon.rb +1 -12
  112. data/app/models/spree/taxonomy.rb +1 -1
  113. data/app/models/spree/user_address.rb +0 -5
  114. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  115. data/app/models/spree/variant/price_selector.rb +34 -4
  116. data/app/models/spree/variant.rb +52 -66
  117. data/app/models/spree/zone.rb +1 -1
  118. data/app/subscribers/spree/mailer_subscriber.rb +4 -0
  119. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  120. data/config/i18n-tasks.yml +134 -0
  121. data/config/locales/en.yml +406 -263
  122. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
  123. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  124. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  125. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
  126. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  127. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  128. data/db/seeds.rb +4 -1
  129. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
  130. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  131. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  132. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  133. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
  134. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
  135. data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
  136. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
  138. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  139. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
  140. data/lib/generators/solidus/install/install_generator.rb +247 -149
  141. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
  142. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  143. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  144. data/lib/generators/solidus/update/update_generator.rb +112 -0
  145. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  146. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  147. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  148. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  149. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
  150. data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
  151. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  152. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  153. data/lib/spree/app_configuration.rb +134 -64
  154. data/lib/spree/bus.rb +20 -0
  155. data/lib/spree/core/class_constantizer.rb +2 -0
  156. data/lib/spree/core/controller_helpers/auth.rb +10 -15
  157. data/lib/spree/core/controller_helpers/current_host.rb +5 -3
  158. data/lib/spree/core/controller_helpers/order.rb +12 -32
  159. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  160. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  161. data/lib/spree/core/controller_helpers/search.rb +1 -1
  162. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  163. data/lib/spree/core/engine.rb +54 -50
  164. data/lib/spree/core/environment_extension.rb +0 -9
  165. data/lib/spree/core/product_filters.rb +1 -41
  166. data/lib/spree/core/role_configuration.rb +0 -14
  167. data/lib/spree/core/search/base.rb +18 -35
  168. data/lib/spree/core/state_machines/order.rb +2 -2
  169. data/lib/spree/core/state_machines.rb +2 -11
  170. data/lib/spree/core/stock_configuration.rb +18 -0
  171. data/lib/spree/core/validators/email.rb +5 -3
  172. data/lib/spree/core/version.rb +5 -1
  173. data/lib/spree/core/versioned_value.rb +75 -0
  174. data/lib/spree/core.rb +40 -11
  175. data/lib/spree/deprecation.rb +1 -1
  176. data/lib/spree/event/configuration.rb +0 -5
  177. data/lib/spree/event/subscriber.rb +0 -18
  178. data/lib/spree/event/subscriber_registry.rb +7 -7
  179. data/lib/spree/event.rb +1 -32
  180. data/lib/spree/i18n.rb +0 -22
  181. data/lib/spree/migrations.rb +13 -11
  182. data/lib/spree/money.rb +3 -18
  183. data/lib/spree/permission_sets/default_customer.rb +8 -1
  184. data/lib/spree/permitted_attributes.rb +17 -59
  185. data/lib/spree/preferences/configuration.rb +84 -0
  186. data/lib/spree/preferences/preferable.rb +13 -0
  187. data/lib/spree/preferences/preferable_class_methods.rb +37 -4
  188. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  189. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  190. data/lib/spree/rails_compatibility.rb +106 -0
  191. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  192. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  193. data/lib/spree/testing_support/capybara_ext.rb +0 -30
  194. data/lib/spree/testing_support/common_rake.rb +71 -23
  195. data/lib/spree/testing_support/controller_requests.rb +0 -82
  196. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  197. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
  198. data/lib/spree/testing_support/dummy_app/database.yml +42 -22
  199. data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
  200. data/lib/spree/testing_support/dummy_app.rb +47 -34
  201. data/lib/spree/testing_support/factories/address_factory.rb +9 -6
  202. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  203. data/lib/spree/testing_support/factories/country_factory.rb +1 -2
  204. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/order_factory.rb +8 -5
  206. data/lib/spree/testing_support/factories/product_factory.rb +4 -1
  207. data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
  208. data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
  209. data/lib/spree/testing_support/factories/state_factory.rb +8 -2
  210. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
  211. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  212. data/lib/spree/testing_support/factory_bot.rb +2 -2
  213. data/lib/spree/testing_support/order_walkthrough.rb +6 -8
  214. data/lib/spree/testing_support/preferences.rb +0 -25
  215. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  216. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  217. data/lib/tasks/payment_method.rake +29 -0
  218. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  219. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  220. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
  221. data/solidus_core.gemspec +14 -7
  222. metadata +127 -78
  223. data/app/mailers/spree/test_mailer.rb +0 -13
  224. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  225. data/app/models/spree/calculator/free_shipping.rb +0 -22
  226. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  227. data/app/models/spree/calculator/price_sack.rb +0 -28
  228. data/app/models/spree/gateway/bogus.rb +0 -13
  229. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  230. data/app/models/spree/gateway.rb +0 -14
  231. data/app/models/spree/order/checkout.rb +0 -244
  232. data/app/models/spree/order_capturing.rb +0 -50
  233. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  234. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  235. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  236. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  237. data/lib/generators/spree/install/install_generator.rb +0 -15
  238. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  239. data/lib/spree/core/current_store.rb +0 -24
  240. data/lib/spree/paranoia_deprecations.rb +0 -41
  241. data/lib/spree/promo/environment.rb +0 -12
  242. data/lib/spree/testing_support/bar_ability.rb +0 -19
  243. data/lib/tasks/core.rake +0 -104
  244. data/lib/tasks/email.rake +0 -12
  245. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  246. data/lib/tasks/migrations/migrate_address_names.rake +0 -158
  247. data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
  248. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  249. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  250. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  251. data/lib/tasks/order_capturing.rake +0 -27
  252. data/lib/tasks/upgrade.rake +0 -13
@@ -21,6 +21,7 @@ require "spree/core/search/base"
21
21
  require "spree/core/search/variant"
22
22
  require 'spree/preferences/configuration'
23
23
  require 'spree/core/environment'
24
+ require 'spree/rails_compatibility'
24
25
 
25
26
  module Spree
26
27
  class AppConfiguration < Preferences::Configuration
@@ -34,10 +35,6 @@ module Spree
34
35
  # @return [Boolean] should state/state_name be required (default: +true+)
35
36
  preference :address_requires_state, :boolean, default: true
36
37
 
37
- # @!attribute [rw] legacy
38
- # @return [Boolean] use the legacy address' state validation logic (default: +true+)
39
- preference :use_legacy_address_state_validator, :boolean, default: true
40
-
41
38
  # @!attribute [rw] admin_interface_logo
42
39
  # @return [String] URL of logo used in admin (default: +'logo/solidus.svg'+)
43
40
  preference :admin_interface_logo, :string, default: 'logo/solidus.svg'
@@ -64,6 +61,11 @@ module Spree
64
61
  # @return [Boolean] When false, customers must create an account to complete an order (default: +true+)
65
62
  preference :allow_guest_checkout, :boolean, default: true
66
63
 
64
+ # @!attribute [rw] allow_promotions_any_match_policy
65
+ # @return [Boolean] When false, admins cannot create promotions with an "any" match policy (default: +false+)
66
+ # Create individual, separate promotions for each of your rules instead.
67
+ preference :allow_promotions_any_match_policy, :boolean, default: false
68
+
67
69
  # @!attribute [rw] guest_token_cookie_options
68
70
  # @return [Hash] Add additional guest_token cookie options here (ie. domain or path)
69
71
  preference :guest_token_cookie_options, :hash, default: {}
@@ -111,16 +113,6 @@ module Spree
111
113
  # @return [Boolean]
112
114
  preference :billing_address_required, :boolean, default: false
113
115
 
114
- # @!attribute [rw] binary_inventory_cache
115
- # Only invalidate product caches when they change from in stock to out of
116
- # stock. By default, caches are invalidated on any change of inventory
117
- # quantity. Setting this to true should make operations on inventory
118
- # faster.
119
- # (default: +false+)
120
- # @deprecated - use inventory_cache_threshold instead
121
- # @return [Boolean]
122
- preference :binary_inventory_cache, :boolean, default: false
123
-
124
116
  # @!attribute [rw] can_restrict_stock_management
125
117
  # @return [Boolean] Indicates if stock management can be restricted by location
126
118
  preference :can_restrict_stock_management, :boolean, default: false
@@ -154,19 +146,14 @@ module Spree
154
146
  # @return [Integer] Customer returns to show per-page in the admin (default: +15+)
155
147
  preference :customer_returns_per_page, :integer, default: 15
156
148
 
157
- # @!attribute [rw] default_country_id
158
- # @deprecated Use the default country ISO preference instead
159
- # @return [Integer,nil] id of {Spree::Country} to be selected by default in dropdowns (default: nil)
160
- preference :default_country_id, :integer
161
-
162
149
  # @!attribute [rw] default_country_iso
163
150
  # Default customer country ISO code
164
151
  # @return [String] Two-letter ISO code of a {Spree::Country} to assumed as the country of an unidentified customer (default: "US")
165
152
  preference :default_country_iso, :string, default: 'US'
166
153
 
167
- # @!attribute [rw] use_custom_cancancan_actions
168
- # @return [Boolean] Allow to use legacy Solidus custom CanCanCan action aliases (default: +true+)
169
- preference :use_custom_cancancan_actions, :boolean, default: true
154
+ # @!attribute [rw] default_email_regexp
155
+ # @return [Regexp] Regex to be used in email validations, for example in Spree::EmailValidator
156
+ preference :default_email_regexp, :regexp, default: URI::MailTo::EMAIL_REGEXP
170
157
 
171
158
  # @!attribute [rw] generate_api_key_for_all_roles
172
159
  # @return [Boolean] Allow generating api key automatically for user
@@ -188,9 +175,35 @@ module Spree
188
175
  # @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
189
176
  preference :logo, :string, default: 'logo/solidus.svg'
190
177
 
178
+ # @!attribute [rw] log_entry_permitted_classes
179
+ # @return [Array<String>] An array of extra classes that are allowed to be
180
+ # loaded from a serialized YAML as details in {Spree::LogEntry}
181
+ # (defaults to a non-frozen empty array, so that extensions can add
182
+ # their own classes).
183
+ # @example
184
+ # config.log_entry_permitted_classes = ['Date']
185
+ preference :log_entry_permitted_classes, :array, default: []
186
+
187
+ # @!attribute [rw] log_entry_allow_aliases
188
+ # @return [Boolean] Whether YAML aliases are allowed when loading
189
+ # serialized data in {Spree::LogEntry}. It defaults to true. Depending
190
+ # on the source of your data, you may consider disabling it to prevent
191
+ # entity expansion attacks.
192
+ preference :log_entry_allow_aliases, :boolean, default: true
193
+
191
194
  # @!attribute [rw] mails_from
192
195
  # @return [String] Email address used as +From:+ field in transactional emails.
196
+ # @deprecated Spree::Store#mail_from_address is used instead
193
197
  preference :mails_from, :string, default: 'solidus@example.com'
198
+ def mails_from=(value)
199
+ Spree::Deprecation.warn(<<~MSG) && preferences[:mail_from] = value
200
+ Solidus doesn't use `Spree::Config.mails_from` preference and it'll
201
+ removed on the next major release. Please, remove its definition in
202
+ `config/initializers/spree.rb`. Use the `Spree::Store#mail_from_address`
203
+ attribute for the default email address used as the 'From:' field in
204
+ transactional emails.
205
+ MSG
206
+ end
194
207
 
195
208
  # @!attribute [rw] max_level_in_taxons_menu
196
209
  # @return [Integer] maximum nesting level in taxons menu (default: +1+)
@@ -225,23 +238,6 @@ module Spree
225
238
  # @return [Integer] Promotions to show per-page in the admin (default: +15+)
226
239
  preference :promotions_per_page, :integer, default: 15
227
240
 
228
- # @!attribute [rw] disable_actionless_promotion_validation
229
- # @return [Boolean] Promotions should have actions associated before being considered active (default: +true+)
230
- preference :consider_actionless_promotion_active, :boolean, default: true
231
-
232
- # @!attribute [rw] raise_with_invalid_currency
233
- # Whether to raise an exception if trying to set a line item currency
234
- # different from the order currency. When false a validation error
235
- # is added to the instance instead.
236
- # @return [Boolean] (default: +true+)
237
- preference :raise_with_invalid_currency, :boolean, default: true
238
-
239
- # @!attribute [rw] redirect_back_on_unauthorized
240
- # Whether to try to redirect users back when they try to access
241
- # unauthorized routes, before redirect them to /unauthorized.
242
- # @return [Boolean] (default: +false+)
243
- preference :redirect_back_on_unauthorized, :boolean, default: false
244
-
245
241
  # @!attribute [rw] require_master_price
246
242
  # @return [Boolean] Require a price on the master variant of a product (default: +true+)
247
243
  preference :require_master_price, :boolean, default: true
@@ -268,10 +264,6 @@ module Spree
268
264
  # (default: +['IT']+)
269
265
  preference :countries_that_use_nested_subregions, :array, default: ['IT']
270
266
 
271
- # @!attribute [rw] run_order_validations_on_order_updater
272
- # @return [Boolean] Whether to run validation when updating an order with the OrderUpdater
273
- preference :run_order_validations_on_order_updater, :boolean, default: false
274
-
275
267
  # @!attribute [rw] send_core_emails
276
268
  # @return [Boolean] Whether to send transactional emails (default: true)
277
269
  preference :send_core_emails, :boolean, default: true
@@ -307,21 +299,13 @@ module Spree
307
299
  # @return [] Track on_hand values for variants / products. (default: true)
308
300
  preference :track_inventory_levels, :boolean, default: true
309
301
 
310
- # @!attribute [rw] use_combined_first_and_last_name_in_address
311
- # @return [Boolean] Use Spree::Address combined first and last name in HTML views and
312
- # API responses. (default: +false+)
313
- preference :use_combined_first_and_last_name_in_address, :boolean, default: false
314
-
315
- # @!attribute [rw] use_legacy_order_state_machine
316
- # @return [Boolean] Uses the legacy order state machine from Spree::Order::Checkout
317
- # (default: +false+)
318
- preference :use_legacy_order_state_machine, :boolean, default: true
319
-
320
- # The legacy_store_credit_category_name allows to control whether the legacy
321
- # way of fetching the category should be used.
322
- #
323
- # @param [Boolean] enable/disable the legacy way of fetching the store category name
324
- preference :use_legacy_store_credit_reimbursement_category_name, :boolean, default: true
302
+ # @!attribute [rw] use_legacy_events
303
+ # Before v3.2, Solidus used a custom pub/sub implementation based on
304
+ # ActiveSupport::Notifications. Now, we internally use and recommend
305
+ # [Omnes](https://github.com/nebulab/omnes). This preference allows falling
306
+ # back to the old system.
307
+ # @return [Boolean]
308
+ versioned_preference :use_legacy_events, :boolean, initial_value: true, boundaries: { "3.2.0.alpha" => false }
325
309
 
326
310
  # Other configurations
327
311
 
@@ -369,6 +353,9 @@ module Spree
369
353
  # promotion_chooser_class allows extensions to provide their own PromotionChooser
370
354
  class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
371
355
 
356
+ # promotion_adjuster_class allows extensions to provide their own Promotion Adjuster
357
+ class_name_attribute :promotion_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator'
358
+
372
359
  class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
373
360
 
374
361
  class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
@@ -431,6 +418,28 @@ module Spree
431
418
  # Spree::Wallet::DefaultPaymentBuilder.
432
419
  class_name_attribute :default_payment_builder_class, default: 'Spree::Wallet::DefaultPaymentBuilder'
433
420
 
421
+ # Allows providing your own class for managing the contents of an order.
422
+ #
423
+ # @!attribute [rw] order_contents_class
424
+ # @return [Class] a class with the same public interfaces as
425
+ # Spree::OrderContents.
426
+ class_name_attribute :order_contents_class, default: 'Spree::OrderContents'
427
+
428
+ # Allows providing your own class for shipping an order.
429
+ #
430
+ # @!attribute [rw] order_shipping_class
431
+ # @return [Class] a class with the same public interfaces as
432
+ # Spree::OrderShipping.
433
+ class_name_attribute :order_shipping_class, default: 'Spree::OrderShipping'
434
+
435
+ # Allows providing your own class for managing the inventory units of a
436
+ # completed order.
437
+ #
438
+ # @!attribute [rw] order_cancellations_class
439
+ # @return [Class] a class with the same public interfaces as
440
+ # Spree::OrderCancellations.
441
+ class_name_attribute :order_cancellations_class, default: 'Spree::OrderCancellations'
442
+
434
443
  # Allows providing your own class for canceling payments.
435
444
  #
436
445
  # @!attribute [rw] payment_canceller
@@ -496,13 +505,13 @@ module Spree
496
505
 
497
506
  # Allows switching attachment library for Image
498
507
  #
499
- # `Spree::Image::PaperclipAttachment`
500
- # is the default and provides the classic Paperclip implementation.
508
+ # `Spree::Image::ActiveStorageAttachment`
509
+ # is the default and provides the Active Storage implementation.
501
510
  #
502
511
  # @!attribute [rw] image_attachment_module
503
512
  # @return [Module] a module that can be included into Spree::Image to allow attachments
504
513
  # Enumerable of images adhering to the present_image_class interface
505
- class_name_attribute :image_attachment_module, default: 'Spree::Image::PaperclipAttachment'
514
+ class_name_attribute :image_attachment_module, default: Spree::RailsCompatibility.default_image_attachment_module
506
515
 
507
516
  # @!attribute [rw] allowed_image_mime_types
508
517
  #
@@ -512,15 +521,75 @@ module Spree
512
521
  # @return [Array]
513
522
  class_name_attribute :allowed_image_mime_types, default: %w(image/jpeg image/jpg image/png image/gif).freeze
514
523
 
524
+ # @!attribute [rw] product_image_style_default
525
+ #
526
+ # Defines which style to default to when style is not provided
527
+ # :product is the default.
528
+ #
529
+ # @return [Symbol]
530
+ class_name_attribute :product_image_style_default, default: :product
531
+
532
+ # @!attribute [rw] product_image_styles
533
+ #
534
+ # Defines image styles/sizes hash for styles
535
+ # `{ mini: '48x48>',
536
+ # small: '400x400>',
537
+ # product: '680x680>',
538
+ # large: '1200x1200>' } is the default.
539
+ #
540
+ # @return [Hash]
541
+ class_name_attribute :product_image_styles, default: { mini: '48x48>',
542
+ small: '400x400>',
543
+ product: '680x680>',
544
+ large: '1200x1200>' }
545
+
546
+ # Allows providing your own class for prioritizing store credit application
547
+ # to an order.
548
+ #
549
+ # @!attribute [rw] store_credit_prioritizer_class
550
+ # @return [Class] a class with the same public interfaces as
551
+ # Spree::StoreCreditPrioritizer.
552
+ class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'
553
+
554
+ # @!attribute [rw] taxon_image_style_default
555
+ #
556
+ # Defines which style to default to when style is not provided
557
+ # :mini is the default.
558
+ #
559
+ # @return [Symbol]
560
+ class_name_attribute :taxon_image_style_default, default: :mini
561
+
562
+ # @!attribute [rw] taxon_styles
563
+ #
564
+ # Defines taxon styles/sizes hash for styles
565
+ # `{ mini: '48x48>',
566
+ # small: '400x400>',
567
+ # product: '680x680>',
568
+ # large: '1200x1200>' } is the default.
569
+ #
570
+ # @return [Hash]
571
+ class_name_attribute :taxon_image_styles, default: { mini: '32x32>', normal: '128x128>' }
572
+
515
573
  # Allows switching attachment library for Taxon
516
574
  #
517
- # `Spree::Taxon::PaperclipAttachment`
518
- # is the default and provides the classic Paperclip implementation.
575
+ # `Spree::Taxon::ActiveStorageAttachment`
576
+ # is the default and provides the Active Storage implementation.
519
577
  #
520
578
  # @!attribute [rw] taxon_attachment_module
521
579
  # @return [Module] a module that can be included into Spree::Taxon to allow attachments
522
580
  # Enumerable of taxons adhering to the present_taxon_class interface
523
- class_name_attribute :taxon_attachment_module, default: 'Spree::Taxon::PaperclipAttachment'
581
+ class_name_attribute :taxon_attachment_module, default: Spree::RailsCompatibility.default_taxon_attachment_module
582
+
583
+ # Configures the absolute path that contains the Solidus engine
584
+ # migrations. This will be checked at app boot to confirm that all Solidus
585
+ # migrations are installed.
586
+ #
587
+ # @!attribute [rw] migration_path
588
+ # @return [Pathname] the configured path. (default: `Rails.root.join('db', 'migrate')`)
589
+ attr_writer :migration_path
590
+ def migration_path
591
+ @migration_path ||= ::Rails.root.join('db', 'migrate')
592
+ end
524
593
 
525
594
  # Allows providing your own class instance for generating order numbers.
526
595
  #
@@ -595,6 +664,7 @@ module Spree
595
664
 
596
665
  env.calculators.tax_rates = %w[
597
666
  Spree::Calculator::DefaultTax
667
+ Spree::Calculator::FlatFee
598
668
  ]
599
669
 
600
670
  env.payment_methods = %w[
data/lib/spree/bus.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'omnes'
2
+
3
+ module Spree
4
+ # Global [Omnes](https://github.com/nebulab/omnes) bus.
5
+ #
6
+ # This is used for internal events, while host applications are also able to
7
+ # use it.
8
+ #
9
+ # It has some modifications to support internal usage of the legacy event
10
+ # system {see Spree::AppConfiguration#use_legacy_events}.
11
+ Bus = Omnes::Bus.new
12
+ def Bus.publish(event, **kwargs)
13
+ if Spree::Config.use_legacy_events
14
+ Spree::Event.fire(event, **kwargs)
15
+ else
16
+ # Override caller_location to point to the actual event publisher
17
+ super(event, **kwargs, caller_location: caller_locations(1)[0])
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/core_ext/module'
4
+
3
5
  module Spree
4
6
  module Core
5
7
  module ClassConstantizer
@@ -18,24 +18,12 @@ module Spree
18
18
  included do
19
19
  before_action :set_guest_token
20
20
  helper_method :try_spree_current_user
21
+ helper_method :spree_current_user
21
22
 
22
23
  class_attribute :unauthorized_redirect
23
24
  self.unauthorized_redirect = -> do
24
25
  flash[:error] = I18n.t('spree.authorization_failure')
25
- if Spree::Config.redirect_back_on_unauthorized
26
- redirect_back(fallback_location: "/unauthorized")
27
- else
28
- Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
29
- Having Spree::Config.redirect_back_on_unauthorized set
30
- to `false` is deprecated and will not be supported in Solidus 3.0.
31
-
32
- Please change this configuration to `true` and be sure that your
33
- application does not break trying to redirect back when there is
34
- an unauthorized access.
35
- WARN
36
-
37
- redirect_to "/unauthorized"
38
- end
26
+ redirect_back(fallback_location: "/unauthorized")
39
27
  end
40
28
 
41
29
  rescue_from CanCan::AccessDenied do
@@ -45,7 +33,7 @@ module Spree
45
33
 
46
34
  # Needs to be overriden so that we use Spree's Ability rather than anyone else's.
47
35
  def current_ability
48
- @current_ability ||= Spree::Ability.new(try_spree_current_user)
36
+ @current_ability ||= Spree::Ability.new(spree_current_user)
49
37
  end
50
38
 
51
39
  def redirect_back_or_default(default)
@@ -66,6 +54,11 @@ module Spree
66
54
  Spree::UserLastUrlStorer.new(self).store_location
67
55
  end
68
56
 
57
+ # Auth extensions are expected to define it, otherwise it's a no-op
58
+ def spree_current_user
59
+ defined?(super) ? super : nil
60
+ end
61
+
69
62
  # proxy method to *possible* spree_current_user method
70
63
  # Authentication extensions (such as spree_auth_devise) are meant to provide spree_current_user
71
64
  def try_spree_current_user
@@ -78,6 +71,8 @@ module Spree
78
71
  current_spree_user
79
72
  end
80
73
  end
74
+
75
+ deprecate try_spree_current_user: :spree_current_user, deprecator: Spree::Deprecation
81
76
  end
82
77
  end
83
78
  end
@@ -7,9 +7,11 @@ module Spree
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- before_action do
11
- ActiveStorage::Current.host = request.base_url
12
- end
10
+ Spree::Deprecation.warn <<~MSG
11
+ 'Spree::Core::ControllerHelpers::CurrentHost' is deprecated.
12
+ Please, include 'ActiveStorage::SetCurrent' instead.
13
+ MSG
14
+ include ActiveStorage::SetCurrent
13
15
  end
14
16
  end
15
17
  end
@@ -11,23 +11,8 @@ module Spree
11
11
 
12
12
  included do
13
13
  helper_method :current_order
14
- helper_method :simple_current_order
15
14
  end
16
15
 
17
- def simple_current_order
18
- return @simple_current_order if @simple_current_order
19
-
20
- @simple_current_order = find_order_by_token_or_user
21
-
22
- if @simple_current_order
23
- @simple_current_order.last_ip_address = ip_address
24
- return @simple_current_order
25
- else
26
- @simple_current_order = Spree::Order.new(current_order_params)
27
- end
28
- end
29
- deprecate simple_current_order: :current_order, deprecator: Spree::Deprecation
30
-
31
16
  # The current incomplete order from the guest_token for use in cart and during checkout
32
17
  def current_order(options = {})
33
18
  should_create = options[:create_order_if_necessary] || false
@@ -39,9 +24,9 @@ module Spree
39
24
 
40
25
  if should_build && (@current_order.nil? || @current_order.completed?)
41
26
  @current_order = Spree::Order.new(new_order_params)
42
- @current_order.user ||= try_spree_current_user
27
+ @current_order.user ||= spree_current_user
43
28
  # See issue https://github.com/spree/spree/issues/3346 for reasons why this line is here
44
- @current_order.created_by ||= try_spree_current_user
29
+ @current_order.created_by ||= spree_current_user
45
30
  @current_order.save! if should_create
46
31
  end
47
32
 
@@ -53,15 +38,15 @@ module Spree
53
38
 
54
39
  def associate_user
55
40
  @order ||= current_order
56
- if try_spree_current_user && @order
57
- @order.associate_user!(try_spree_current_user) if @order.user.blank? || @order.email.blank?
41
+ if spree_current_user && @order
42
+ @order.associate_user!(spree_current_user) if @order.user.blank? || @order.email.blank?
58
43
  end
59
44
  end
60
45
 
61
46
  def set_current_order
62
- if try_spree_current_user && current_order
63
- try_spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).each do |order|
64
- current_order.merge!(order, try_spree_current_user)
47
+ if spree_current_user && current_order
48
+ spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).each do |order|
49
+ current_order.merge!(order, spree_current_user)
65
50
  end
66
51
  end
67
52
  end
@@ -73,30 +58,25 @@ module Spree
73
58
  private
74
59
 
75
60
  def last_incomplete_order
76
- @last_incomplete_order ||= try_spree_current_user.last_incomplete_spree_order(store: current_store)
61
+ @last_incomplete_order ||= spree_current_user.last_incomplete_spree_order(store: current_store)
77
62
  end
78
63
 
79
64
  def current_order_params
80
- { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: try_spree_current_user.try(:id) }
65
+ { currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id) }
81
66
  end
82
67
 
83
68
  def new_order_params
84
69
  current_order_params.merge(last_ip_address: ip_address)
85
70
  end
86
71
 
87
- def find_order_by_token_or_user(options = {}, with_adjustments = false)
72
+ def find_order_by_token_or_user(options = {})
88
73
  should_lock = options[:lock] || false
89
74
 
90
75
  # Find any incomplete orders for the guest_token
91
- if with_adjustments
92
- Spree::Deprecation.warn "The second argument to find_order_by_token_or_user is deprecated, and will be removed in a future version."
93
- order = Spree::Order.incomplete.includes(:adjustments).lock(should_lock).find_by(current_order_params)
94
- else
95
- order = Spree::Order.incomplete.lock(should_lock).find_by(current_order_params)
96
- end
76
+ order = Spree::Order.incomplete.lock(should_lock).find_by(current_order_params)
97
77
 
98
78
  # Find any incomplete orders for the current user
99
- if order.nil? && try_spree_current_user
79
+ if order.nil? && spree_current_user
100
80
  order = last_incomplete_order
101
81
  end
102
82
 
@@ -64,60 +64,6 @@ module Spree
64
64
  params
65
65
  end
66
66
 
67
- # This method handles the awkwardness of how the html forms are currently
68
- # set up for frontend.
69
- #
70
- # This method expects a params hash in the format of:
71
- #
72
- # {
73
- # order: {
74
- # existing_card: '123',
75
- # ...other params...
76
- # },
77
- # cvc_confirm: '456', # optional
78
- # ...other params...
79
- # }
80
- #
81
- # And this method modifies the params into the format of:
82
- #
83
- # {
84
- # order: {
85
- # payments_attributes: [
86
- # {
87
- # source_attributes: {
88
- # existing_card_id: '123',
89
- # verification_value: '456',
90
- # },
91
- # },
92
- # ]
93
- # ...other params...
94
- # },
95
- # ...other params...
96
- # }
97
- #
98
- def move_existing_card_into_payments_attributes(params)
99
- return params if params[:order].blank?
100
-
101
- card_id = params[:order][:existing_card].presence
102
- cvc_confirm = params[:cvc_confirm].presence
103
-
104
- return params if card_id.nil?
105
-
106
- params[:order][:payments_attributes] = [
107
- {
108
- source_attributes: {
109
- existing_card_id: card_id,
110
- verification_value: cvc_confirm
111
- }
112
- }
113
- ]
114
-
115
- params[:order].delete(:existing_card)
116
- params.delete(:cvc_confirm)
117
-
118
- params
119
- end
120
-
121
67
  # This method handles the awkwardness of how the html forms are currently
122
68
  # set up for frontend.
123
69
  #
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/deprecation'
4
-
5
3
  module Spree
6
4
  module Core
7
5
  module ControllerHelpers
@@ -9,18 +7,12 @@ module Spree
9
7
  extend ActiveSupport::Concern
10
8
 
11
9
  included do
12
- helper_method :current_currency
13
10
  helper_method :current_pricing_options
14
11
  end
15
12
 
16
13
  def current_pricing_options
17
14
  Spree::Config.pricing_options_class.from_context(self)
18
15
  end
19
-
20
- def current_currency
21
- current_pricing_options.currency
22
- end
23
- deprecate current_currency: :current_pricing_options, deprecator: Spree::Deprecation
24
16
  end
25
17
  end
26
18
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  module Search
7
7
  def build_searcher(params)
8
8
  Spree::Config.searcher_class.new(params).tap do |searcher|
9
- searcher.current_user = try_spree_current_user
9
+ searcher.current_user = spree_current_user
10
10
  searcher.pricing_options = current_pricing_options
11
11
  end
12
12
  end
@@ -30,10 +30,6 @@ module Spree
30
30
  ]
31
31
  end
32
32
 
33
- def permitted_checkout_attributes
34
- permitted_attributes.checkout_attributes
35
- end
36
-
37
33
  def permitted_checkout_address_attributes
38
34
  permitted_attributes.checkout_address_attributes
39
35
  end