solidus_core 4.7.1 → 4.8.0

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +3 -0
  3. data/app/helpers/spree/base_helper.rb +3 -3
  4. data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
  5. data/app/helpers/spree/core/controller_helpers/common.rb +2 -2
  6. data/app/helpers/spree/core/controller_helpers/timezone.rb +55 -0
  7. data/app/helpers/spree/products_helper.rb +3 -3
  8. data/app/jobs/spree/base_job.rb +1 -1
  9. data/app/mailers/spree/base_mailer.rb +2 -2
  10. data/app/models/concerns/spree/user_methods.rb +4 -4
  11. data/app/models/spree/address.rb +1 -1
  12. data/app/models/spree/adjustment.rb +1 -1
  13. data/app/models/spree/calculator/flat_rate.rb +2 -2
  14. data/app/models/spree/calculator/shipping/flat_rate.rb +1 -1
  15. data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -1
  16. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  17. data/app/models/spree/calculator/shipping/price_sack.rb +1 -1
  18. data/app/models/spree/calculator.rb +1 -1
  19. data/app/models/spree/country.rb +1 -1
  20. data/app/models/spree/customer_return.rb +7 -0
  21. data/app/models/spree/exchange.rb +4 -1
  22. data/app/models/spree/image/active_storage_attachment.rb +15 -0
  23. data/app/models/spree/image/paperclip_attachment.rb +3 -0
  24. data/app/models/spree/image.rb +4 -0
  25. data/app/models/spree/log_entry.rb +26 -22
  26. data/app/models/spree/money.rb +2 -2
  27. data/app/models/spree/order/payments.rb +1 -1
  28. data/app/models/spree/order.rb +15 -17
  29. data/app/models/spree/order_cancellations.rb +1 -0
  30. data/app/models/spree/order_mutex.rb +1 -1
  31. data/app/models/spree/order_shipping.rb +17 -0
  32. data/app/models/spree/order_updater.rb +1 -1
  33. data/app/models/spree/payment/processing.rb +0 -1
  34. data/app/models/spree/payment_create.rb +23 -0
  35. data/app/models/spree/payment_method/bogus_credit_card.rb +4 -0
  36. data/app/models/spree/payment_method/check.rb +4 -2
  37. data/app/models/spree/payment_method.rb +1 -1
  38. data/app/models/spree/price.rb +1 -1
  39. data/app/models/spree/product.rb +10 -7
  40. data/app/models/spree/product_option_type.rb +2 -0
  41. data/app/models/spree/refund.rb +17 -0
  42. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  43. data/app/models/spree/return_item.rb +10 -1
  44. data/app/models/spree/shipment.rb +5 -3
  45. data/app/models/spree/stock/inventory_unit_builder.rb +1 -0
  46. data/app/models/spree/stock/simple_coordinator.rb +9 -2
  47. data/app/models/spree/store.rb +8 -1
  48. data/app/models/spree/store_credit.rb +1 -1
  49. data/app/models/spree/tax_calculator/default.rb +2 -0
  50. data/app/models/spree/taxon.rb +5 -2
  51. data/app/models/spree/variant/pricing_options.rb +1 -1
  52. data/app/models/spree/variant/vat_price_generator.rb +1 -0
  53. data/app/models/spree/variant.rb +3 -3
  54. data/config/locales/en.yml +13 -0
  55. data/db/default/spree/states.rb +1 -1
  56. data/db/migrate/20260924120000_add_address_to_spree_stores.rb +9 -0
  57. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +0 -2
  58. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +19 -1
  59. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +2 -1
  60. data/lib/generators/solidus/install/install_generator.rb +7 -7
  61. data/lib/spree/app_configuration.rb +51 -0
  62. data/lib/spree/core/search/base.rb +3 -1
  63. data/lib/spree/core/version.rb +2 -2
  64. data/lib/spree/core.rb +0 -1
  65. data/lib/spree/permitted_attributes.rb +3 -2
  66. data/lib/spree/preferences/statically_configurable.rb +2 -1
  67. data/lib/spree/testing_support/capybara_ext.rb +0 -10
  68. data/lib/spree/testing_support/factories/calculator_factory.rb +6 -0
  69. data/lib/spree/testing_support/factories/return_item_factory.rb +9 -1
  70. data/lib/spree/testing_support/factories/shipping_method_factory.rb +1 -1
  71. data/lib/spree/testing_support/factories/store_factory.rb +4 -0
  72. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  73. data/solidus_core.gemspec +3 -3
  74. metadata +13 -11
@@ -70,11 +70,25 @@ module Spree
70
70
 
71
71
  # @!attribute [rw] allow_return_item_amount_editing
72
72
  # @return [Boolean] Determines whether an admin is allowed to change a return item's pre-calculated amount (default: +false+)
73
+ # @deprecated Unused since a6755a7f0f; remove it from your initializer.
73
74
  preference :allow_return_item_amount_editing, :boolean, default: false
75
+ msg = "`Spree::Config.allow_return_item_amount_editing` has had no effect since commit a6755a7f0f; remove it from your initializer."
76
+ deprecate(
77
+ allow_return_item_amount_editing: msg,
78
+ "allow_return_item_amount_editing=": msg,
79
+ deprecator: Spree.deprecator
80
+ )
74
81
 
75
82
  # @!attribute [rw] alternative_billing_phone
76
83
  # @return [Boolean] Request an extra phone number for bill address (default: +false+)
84
+ # @deprecated Unused since c40d4cbeef; remove it from your initializer.
77
85
  preference :alternative_billing_phone, :boolean, default: false
86
+ msg = "`Spree::Config.alternative_billing_phone` has had no effect since commit c40d4cbeef; remove it from your initializer."
87
+ deprecate(
88
+ alternative_billing_phone: msg,
89
+ "alternative_billing_phone=": msg,
90
+ deprecator: Spree.deprecator
91
+ )
78
92
 
79
93
  # @!attribute [rw] alternative_shipping_phone
80
94
  # @return [Boolean] Request an extra phone number for shipping address (default: +false+)
@@ -94,7 +108,14 @@ module Spree
94
108
 
95
109
  # @!attribute [rw] auto_capture_exchanges
96
110
  # @return [Boolean] Automatically capture the credit card (as opposed to just authorize and capture later) (default: +false+)
111
+ # @deprecated Unused since ca63667027; remove it from your initializer.
97
112
  preference :auto_capture_exchanges, :boolean, default: false
113
+ msg = "`Spree::Config.auto_capture_exchanges` has had no effect since commit ca63667027; remove it from your initializer."
114
+ deprecate(
115
+ auto_capture_exchanges: msg,
116
+ "auto_capture_exchanges=": msg,
117
+ deprecator: Spree.deprecator
118
+ )
98
119
 
99
120
  # @!attribute [rw] automatic_default_address
100
121
  # The default value of true preserves existing backwards compatible feature of
@@ -142,7 +163,14 @@ module Spree
142
163
 
143
164
  # @!attribute [rw] customer_returns_per_page
144
165
  # @return [Integer] Customer returns to show per-page in the admin (default: +15+)
166
+ # @deprecated Unused since 834a24a695; remove it from your initializer.
145
167
  preference :customer_returns_per_page, :integer, default: 15
168
+ msg = "`Spree::Config.customer_returns_per_page` has had no effect since commit 834a24a695; remove it from your initializer."
169
+ deprecate(
170
+ customer_returns_per_page: msg,
171
+ "customer_returns_per_page=": msg,
172
+ deprecator: Spree.deprecator
173
+ )
146
174
 
147
175
  # @!attribute [rw] default_country_iso
148
176
  # Default customer country ISO code
@@ -207,7 +235,14 @@ module Spree
207
235
 
208
236
  # @!attribute [rw] order_capturing_time_window
209
237
  # @return [Integer] the number of days to look back for fully-shipped/cancelled orders in order to charge for them
238
+ # @deprecated Unused since 9c5107fcae; remove it from your initializer.
210
239
  preference :order_capturing_time_window, :integer, default: 14
240
+ msg = "`Spree::Config.order_capturing_time_window` has had no effect since commit 9c5107fcae; remove it from your initializer."
241
+ deprecate(
242
+ order_capturing_time_window: msg,
243
+ "order_capturing_time_window=": msg,
244
+ deprecator: Spree.deprecator
245
+ )
211
246
 
212
247
  # @!attribute [rw] order_mutex_max_age
213
248
  # @return [Integer] Max age of {Spree::OrderMutex} in seconds (default: 2 minutes)
@@ -250,10 +285,18 @@ module Spree
250
285
  # @return [Boolean] Whether to recalculate cart prices when recalculating (default: +false+)
251
286
  versioned_preference :recalculate_cart_prices, :boolean, initial_value: false, boundaries: {"5.0.0.alpha" => true}
252
287
 
288
+ # @!attribute [rw] refundable_payment_states
289
+ # @return [Array<String>] Payment states in which refunds may be created (default: +["completed", "pending"]+)
290
+ preference :refundable_payment_states, :array, default: %w[completed pending]
291
+
253
292
  # @!attribute [rw] require_master_price
254
293
  # @return [Boolean] Require a price on the master variant of a product (default: +true+)
255
294
  preference :require_master_price, :boolean, default: true
256
295
 
296
+ # @!attribute [rw] require_refundable_payment_state
297
+ # @return [Boolean] Whether creating a refund for a payment outside Spree::Config.refundable_payment_states is a validation error rather than a deprecation warning (default: +false+)
298
+ versioned_preference :require_refundable_payment_state, :boolean, initial_value: false, boundaries: {"5.0.0.alpha" => true}
299
+
257
300
  # @!attribute [rw] require_payment_to_ship
258
301
  # @return [Boolean] Allows shipments to be ready to ship regardless of the order being paid if false (default: +true+)
259
302
  preference :require_payment_to_ship, :boolean, default: true # Allows shipments to be ready to ship regardless of the order being paid if false
@@ -354,7 +397,15 @@ module Spree
354
397
  # Spree::Variant::VatPriceGenerator.
355
398
  class_name_attribute :variant_vat_prices_generator_class, default: "Spree::Variant::VatPriceGenerator"
356
399
 
400
+ # @!attribute [rw] allocator_class
401
+ # @deprecated Never read; use Spree::Config.stock.allocator_class instead.
357
402
  class_name_attribute :allocator_class, default: "Spree::Stock::Allocator::OnHandFirst"
403
+ msg = "`Spree::Config.allocator_class` has never been read; the stock allocator is configured with `Spree::Config.stock.allocator_class`."
404
+ deprecate(
405
+ allocator_class: msg,
406
+ "allocator_class=": msg,
407
+ deprecator: Spree.deprecator
408
+ )
358
409
 
359
410
  class_name_attribute :shipping_rate_sorter_class, default: "Spree::Stock::ShippingRateSorter"
360
411
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "kaminari/activerecord"
4
+
3
5
  module Spree
4
6
  module Core
5
7
  module Search
@@ -93,7 +95,7 @@ module Spree
93
95
  @properties[:include_images] = params[:include_images]
94
96
 
95
97
  per_page = params[:per_page].to_i
96
- @properties[:per_page] = (per_page > 0) ? per_page : Spree::Config[:products_per_page]
98
+ @properties[:per_page] = (per_page > 0) ? per_page : Spree::Config.products_per_page
97
99
  @properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
98
100
  end
99
101
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spree
4
- VERSION = "4.7.1"
4
+ VERSION = "4.8.0"
5
5
 
6
6
  def self.solidus_version = VERSION
7
7
 
8
8
  def self.minimum_required_rails_version = "7.2"
9
9
 
10
- def self.previous_solidus_minor_version = "4.6"
10
+ def self.previous_solidus_minor_version = "4.7"
11
11
 
12
12
  def self.solidus_gem_version = Gem::Version.new(solidus_version)
13
13
  end
data/lib/spree/core.rb CHANGED
@@ -16,7 +16,6 @@ require "acts_as_list"
16
16
  require "awesome_nested_set"
17
17
  require "cancan"
18
18
  require "friendly_id"
19
- require "kaminari/activerecord"
20
19
  require "monetize"
21
20
  require "paperclip"
22
21
  require "ransack"
@@ -125,7 +125,8 @@ module Spree
125
125
  @@store_attributes = [:name, :url, :seo_title, :meta_keywords,
126
126
  :meta_description, :default_currency,
127
127
  :mail_from_address, :cart_tax_country_iso,
128
- :bcc_email, :reverse_charge_status]
128
+ :bcc_email, :reverse_charge_status,
129
+ address_attributes:]
129
130
 
130
131
  @@taxonomy_attributes = [:name]
131
132
 
@@ -138,7 +139,7 @@ module Spree
138
139
  # by changing a user with higher priveleges' email to one a lower-priveleged
139
140
  # admin owns. Creating a user with an email is handled separate at the
140
141
  # controller level.
141
- @@user_attributes = [:password, :password_confirmation, customer_metadata: {}]
142
+ @@user_attributes = [:password, :password_confirmation, :timezone, customer_metadata: {}]
142
143
 
143
144
  @@variant_attributes = [
144
145
  :name, :presentation, :cost_price, :lock_version,
@@ -22,7 +22,8 @@ module Spree
22
22
 
23
23
  def preferences
24
24
  if respond_to?(:preference_source) && preference_source
25
- self.class.preference_sources[preference_source] || {}
25
+ source = self.class.preference_sources[preference_source]
26
+ source ? default_preferences.merge(source.to_hash) : {}
26
27
  else
27
28
  self[:preferences]
28
29
  end
@@ -118,16 +118,6 @@ module Spree
118
118
  # find the original.
119
119
  find("label:not(.select2-offscreen)", text: /#{Regexp.escape(text)}/i, match: :one)
120
120
  end
121
-
122
- def dialog(parent: "body", **options)
123
- within(parent) do
124
- find("dialog", visible: :all, **options)
125
- end
126
- end
127
-
128
- def turbo_frame_modal
129
- dialog(parent: find("turbo-frame", visible: :all))
130
- end
131
121
  end
132
122
  end
133
123
  end
@@ -22,4 +22,10 @@ FactoryBot.define do
22
22
  factory :shipping_no_amount_calculator, class: "Spree::Calculator::Shipping::FlatRate" do
23
23
  preferred_amount { 0 }
24
24
  end
25
+
26
+ factory :flexi_rate_calculator, class: "Spree::Calculator::Shipping::FlexiRate" do
27
+ preferred_first_item { 10.0 }
28
+ preferred_additional_item { 5.0 }
29
+ preferred_max_items { 100 }
30
+ end
25
31
  end
@@ -2,7 +2,15 @@
2
2
 
3
3
  FactoryBot.define do
4
4
  factory :return_item, class: "Spree::ReturnItem" do
5
- association(:inventory_unit, factory: :inventory_unit, state: :shipped)
5
+ inventory_unit do
6
+ # When a return authorization is given, the inventory unit must belong
7
+ # to the same order.
8
+ if __override_names__.include?(:return_authorization) && return_authorization&.order
9
+ association(:inventory_unit, state: :shipped, order: return_authorization.order)
10
+ else
11
+ association(:inventory_unit, state: :shipped)
12
+ end
13
+ end
6
14
  association(:return_reason, factory: :return_reason)
7
15
  return_authorization do |_return_item|
8
16
  build(:return_authorization, order: inventory_unit.order)
@@ -21,7 +21,7 @@ FactoryBot.define do
21
21
 
22
22
  transient do
23
23
  cost { 10.0 }
24
- currency { Spree::Config[:currency] }
24
+ currency { Spree::Config.currency }
25
25
  end
26
26
 
27
27
  before(:create) do |shipping_method, _evaluator|
@@ -6,5 +6,9 @@ FactoryBot.define do
6
6
  sequence(:name) { |i| "Spree Test Store #{i}" }
7
7
  sequence(:url) { |i| "www.example#{i}.com" }
8
8
  mail_from_address { "solidus@example.org" }
9
+
10
+ trait :with_address do
11
+ address
12
+ end
9
13
  end
10
14
  end
@@ -18,7 +18,7 @@ module Spree
18
18
  # A shipping method must exist for rates to be displayed on checkout page
19
19
  ::FactoryBot.create(:shipping_method, zones: [@zone]).tap do |sm|
20
20
  sm.calculator.preferred_amount = 10
21
- sm.calculator.preferred_currency = Spree::Config[:currency]
21
+ sm.calculator.preferred_currency = Spree::Config.currency
22
22
  sm.calculator.save
23
23
  end
24
24
 
data/solidus_core.gemspec CHANGED
@@ -39,13 +39,13 @@ Gem::Specification.new do |s|
39
39
  s.add_dependency "cancancan", [">= 2.2", "< 4.0"]
40
40
  s.add_dependency "carmen", "~> 1.1.0"
41
41
  s.add_dependency "db-query-matchers", "~> 0.14"
42
- s.add_dependency "discard", "~> 1.0"
42
+ s.add_dependency "discard", "~> 2.0"
43
43
  s.add_dependency "friendly_id", "~> 5.0"
44
44
  s.add_dependency "image_processing", "~> 1.10"
45
- s.add_dependency "kaminari-activerecord", "~> 1.1"
45
+ s.add_dependency "json", "< 3"
46
46
  s.add_dependency "mini_magick", "~> 4.10"
47
47
  s.add_dependency "monetize", "~> 1.8"
48
- s.add_dependency "kt-paperclip", [">= 6.3", "< 8"]
48
+ s.add_dependency "kt-paperclip", [">= 6.3", "< 8.1"]
49
49
  s.add_dependency "psych", [">= 4.0.1", "< 6.0"]
50
50
  s.add_dependency "ransack", ["~> 4.0", "< 5"]
51
51
  s.add_dependency "state_machines", ["~> 0.6", "< 0.10.0"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.1
4
+ version: 4.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Solidus Team
@@ -291,14 +291,14 @@ dependencies:
291
291
  requirements:
292
292
  - - "~>"
293
293
  - !ruby/object:Gem::Version
294
- version: '1.0'
294
+ version: '2.0'
295
295
  type: :runtime
296
296
  prerelease: false
297
297
  version_requirements: !ruby/object:Gem::Requirement
298
298
  requirements:
299
299
  - - "~>"
300
300
  - !ruby/object:Gem::Version
301
- version: '1.0'
301
+ version: '2.0'
302
302
  - !ruby/object:Gem::Dependency
303
303
  name: friendly_id
304
304
  requirement: !ruby/object:Gem::Requirement
@@ -328,19 +328,19 @@ dependencies:
328
328
  - !ruby/object:Gem::Version
329
329
  version: '1.10'
330
330
  - !ruby/object:Gem::Dependency
331
- name: kaminari-activerecord
331
+ name: json
332
332
  requirement: !ruby/object:Gem::Requirement
333
333
  requirements:
334
- - - "~>"
334
+ - - "<"
335
335
  - !ruby/object:Gem::Version
336
- version: '1.1'
336
+ version: '3'
337
337
  type: :runtime
338
338
  prerelease: false
339
339
  version_requirements: !ruby/object:Gem::Requirement
340
340
  requirements:
341
- - - "~>"
341
+ - - "<"
342
342
  - !ruby/object:Gem::Version
343
- version: '1.1'
343
+ version: '3'
344
344
  - !ruby/object:Gem::Dependency
345
345
  name: mini_magick
346
346
  requirement: !ruby/object:Gem::Requirement
@@ -378,7 +378,7 @@ dependencies:
378
378
  version: '6.3'
379
379
  - - "<"
380
380
  - !ruby/object:Gem::Version
381
- version: '8'
381
+ version: '8.1'
382
382
  type: :runtime
383
383
  prerelease: false
384
384
  version_requirements: !ruby/object:Gem::Requirement
@@ -388,7 +388,7 @@ dependencies:
388
388
  version: '6.3'
389
389
  - - "<"
390
390
  - !ruby/object:Gem::Version
391
- version: '8'
391
+ version: '8.1'
392
392
  - !ruby/object:Gem::Dependency
393
393
  name: psych
394
394
  requirement: !ruby/object:Gem::Requirement
@@ -511,6 +511,7 @@ files:
511
511
  - app/helpers/spree/core/controller_helpers/search.rb
512
512
  - app/helpers/spree/core/controller_helpers/store.rb
513
513
  - app/helpers/spree/core/controller_helpers/strong_parameters.rb
514
+ - app/helpers/spree/core/controller_helpers/timezone.rb
514
515
  - app/helpers/spree/products_helper.rb
515
516
  - app/helpers/spree/store_helper.rb
516
517
  - app/helpers/spree/taxons_helper.rb
@@ -862,6 +863,7 @@ files:
862
863
  - db/migrate/20250709073151_add_country_foreign_keys.rb
863
864
  - db/migrate/20250709084513_add_state_foreign_keys.rb
864
865
  - db/migrate/20250726220709_add_fk_to_customer_return.rb
866
+ - db/migrate/20260924120000_add_address_to_spree_stores.rb
865
867
  - db/seeds.rb
866
868
  - lib/generators/solidus/install/app_templates/authentication/custom.rb
867
869
  - lib/generators/solidus/install/app_templates/authentication/devise.rb
@@ -1121,7 +1123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1121
1123
  - !ruby/object:Gem::Version
1122
1124
  version: 1.8.23
1123
1125
  requirements: []
1124
- rubygems_version: 4.0.10
1126
+ rubygems_version: 4.0.20
1125
1127
  specification_version: 4
1126
1128
  summary: Essential models, mailers, and classes for the Solidus e-commerce project.
1127
1129
  test_files: []