spree_core 5.1.0.beta3 → 5.1.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +6 -1
  3. data/app/helpers/spree/images_helper.rb +19 -16
  4. data/app/helpers/spree/shipment_helper.rb +12 -0
  5. data/app/jobs/spree/gift_cards/bulk_generate_job.rb +13 -0
  6. data/app/models/concerns/spree/parameterizable_name.rb +11 -0
  7. data/app/models/concerns/spree/payment_source_concern.rb +39 -0
  8. data/app/models/concerns/spree/product_scopes.rb +1 -5
  9. data/app/models/concerns/spree/stores/socials.rb +6 -2
  10. data/app/models/concerns/spree/user_methods.rb +2 -1
  11. data/app/models/spree/ability.rb +2 -0
  12. data/app/models/spree/address.rb +11 -3
  13. data/app/models/spree/credit_card.rb +2 -24
  14. data/app/models/spree/gateway/custom_payment_source_method.rb +33 -0
  15. data/app/models/spree/gift_card.rb +162 -0
  16. data/app/models/spree/gift_card_batch.rb +79 -0
  17. data/app/models/spree/inventory_unit.rb +11 -4
  18. data/app/models/spree/line_item.rb +13 -2
  19. data/app/models/spree/option_type.rb +5 -15
  20. data/app/models/spree/option_value.rb +18 -12
  21. data/app/models/spree/order/checkout.rb +2 -0
  22. data/app/models/spree/order/gift_card.rb +51 -0
  23. data/app/models/spree/order/store_credit.rb +20 -1
  24. data/app/models/spree/order.rb +51 -6
  25. data/app/models/spree/order_merger.rb +12 -0
  26. data/app/models/spree/page_sections/featured_posts.rb +4 -0
  27. data/app/models/spree/payment.rb +2 -1
  28. data/app/models/spree/payment_method/store_credit.rb +1 -1
  29. data/app/models/spree/payment_method.rb +1 -0
  30. data/app/models/spree/payment_source.rb +21 -0
  31. data/app/models/spree/post.rb +1 -0
  32. data/app/models/spree/price.rb +7 -1
  33. data/app/models/spree/product/slugs.rb +103 -0
  34. data/app/models/spree/product.rb +7 -81
  35. data/app/models/spree/product_property.rb +2 -2
  36. data/app/models/spree/promotion_handler/coupon.rb +39 -0
  37. data/app/models/spree/property.rb +2 -8
  38. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
  39. data/app/models/spree/return_item.rb +4 -0
  40. data/app/models/spree/shipment.rb +19 -0
  41. data/app/models/spree/shipping_method.rb +8 -9
  42. data/app/models/spree/store.rb +2 -0
  43. data/app/models/spree/store_credit.rb +9 -6
  44. data/app/models/spree/store_credit_event.rb +8 -4
  45. data/app/models/spree/taxon.rb +8 -1
  46. data/app/models/spree/theme.rb +1 -1
  47. data/app/models/spree/variant.rb +1 -1
  48. data/app/models/spree/wishlist.rb +7 -0
  49. data/app/presenters/spree/csv/product_variant_presenter.rb +14 -3
  50. data/app/services/spree/addresses/phone_validator.rb +20 -0
  51. data/app/services/spree/cart/destroy.rb +1 -1
  52. data/app/services/spree/cart/recalculate.rb +1 -0
  53. data/app/services/spree/gift_cards/apply.rb +66 -0
  54. data/app/services/spree/gift_cards/redeem.rb +17 -0
  55. data/app/services/spree/gift_cards/remove.rb +38 -0
  56. data/app/services/spree/products/prepare_nested_attributes.rb +9 -2
  57. data/app/views/spree/addresses/_form.html.erb +1 -1
  58. data/app/views/spree/shared/_payment.html.erb +13 -4
  59. data/config/locales/en.yml +44 -14
  60. data/config/routes.rb +1 -0
  61. data/db/migrate/20250506073057_create_spree_gift_cards_and_spree_gift_card_batches.rb +37 -0
  62. data/db/migrate/20250530101236_enable_pg_trgm_extension.rb +13 -0
  63. data/db/migrate/20250605131334_add_missing_fields_to_users.rb +25 -0
  64. data/lib/generators/spree/install/install_generator.rb +0 -8
  65. data/lib/spree/core/configuration.rb +4 -0
  66. data/lib/spree/core/controller_helpers/store.rb +13 -1
  67. data/lib/spree/core/dependencies.rb +5 -0
  68. data/lib/spree/core/engine.rb +8 -1
  69. data/lib/spree/core/version.rb +1 -1
  70. data/lib/spree/core.rb +2 -1
  71. data/lib/spree/permitted_attributes.rb +23 -10
  72. data/lib/spree/testing_support/authorization_helpers.rb +5 -9
  73. data/lib/spree/testing_support/common_rake.rb +7 -1
  74. data/lib/spree/testing_support/factories/gift_card_batch_factory.rb +5 -0
  75. data/lib/spree/testing_support/factories/gift_card_factory.rb +17 -0
  76. data/lib/spree/testing_support/factories/page_section_factory.rb +2 -1
  77. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  78. data/lib/spree/testing_support/factories/payment_method_factory.rb +5 -0
  79. data/lib/spree/testing_support/factories/payment_source_factory.rb +5 -0
  80. data/lib/spree/testing_support/factories/post_factory.rb +4 -0
  81. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +4 -0
  82. data/lib/spree/testing_support/factories/theme_factory.rb +1 -1
  83. data/lib/spree/testing_support/factories/user_factory.rb +2 -2
  84. metadata +48 -11
  85. data/config/initializers/state_machine.rb +0 -37
@@ -12,6 +12,8 @@ module Spree
12
12
  :digital_attributes,
13
13
  :digital_link_attributes,
14
14
  :export_attributes,
15
+ :gift_card_attributes,
16
+ :gift_card_batch_attributes,
15
17
  :image_attributes,
16
18
  :integration_attributes,
17
19
  :inventory_unit_attributes,
@@ -105,6 +107,10 @@ module Spree
105
107
 
106
108
  @@export_attributes = [:type, :format, :record_selection, :search_params]
107
109
 
110
+ @@gift_card_attributes = [:code, :amount, :expires_at, :user_id]
111
+
112
+ @@gift_card_batch_attributes = [:prefix, :codes_count, :amount, :expires_at]
113
+
108
114
  @@image_attributes = [:alt, :attachment, :position, :viewable_type, :viewable_id]
109
115
 
110
116
  @@integration_attributes = [:type, :active]
@@ -127,7 +133,7 @@ module Spree
127
133
 
128
134
  @@page_attributes = [:name, :slug, :meta_title, :meta_description, :meta_keywords]
129
135
 
130
- @@page_block_attributes = [:type, :name, :text, :position]
136
+ @@page_block_attributes = [:type, :name, :text, :position, :asset]
131
137
 
132
138
  @@page_link_attributes = [:linkable_id, :linkable_type, :position, :label, :url, :open_in_new_tab]
133
139
 
@@ -145,7 +151,7 @@ module Spree
145
151
 
146
152
  @@product_attributes = [
147
153
  :name, :description, :available_on, :make_active_at, :discontinue_on, :permalink, :meta_description,
148
- :meta_keywords, :price, :sku, :deleted_at, :prototype_id,
154
+ :meta_keywords, :meta_title, :price, :sku, :deleted_at, :prototype_id,
149
155
  :option_values_hash, :weight, :height, :width, :depth,
150
156
  :shipping_category_id, :tax_category_id,
151
157
  :cost_currency, :cost_price, :compare_at_price,
@@ -164,7 +170,7 @@ module Spree
164
170
  @@promotion_attributes = [:name, :description, :starts_at, :expires_at, :code, :usage_limit, :path, :match_policy,
165
171
  :advertise, :promotion_category_id, :code_prefix, :kind, :number_of_codes, :multi_codes, store_ids: []]
166
172
 
167
- @@promotion_rule_attributes = [:type, :preferred_match_policy, user_ids_to_add: [], product_ids_to_add: [], taxon_ids_to_add: []]
173
+ @@promotion_rule_attributes = [:type, :preferred_match_policy, preferred_eligible_values: [], user_ids_to_add: [], product_ids_to_add: [], taxon_ids_to_add: []]
168
174
 
169
175
  @@promotion_action_attributes = [:type, :calculator_type, calculator_attributes: {}, promotion_action_line_items_attributes: [:id, :promotion_action_id, :variant_id, :quantity, :_destroy]]
170
176
 
@@ -180,11 +186,18 @@ module Spree
180
186
 
181
187
  @@report_attributes = [:type, :date_from, :date_to, :currency]
182
188
 
183
- @@return_authorization_attributes = [:amount, :memo, :stock_location_id, :inventory_units_attributes,
184
- :return_authorization_reason_id, {
185
- return_items_attributes: [:id, :inventory_unit_id, :return_authorization_id, :returned, :pre_tax_amount,
186
- :acceptance_status, :exchange_variant_id, :resellable]
187
- }]
189
+ @@return_authorization_attributes = [
190
+ :amount, :memo, :stock_location_id, :inventory_units_attributes,
191
+ :return_authorization_reason_id, {
192
+ return_items_attributes: [
193
+ :_destroy,
194
+ :id, :inventory_unit_id,
195
+ :preferred_reimbursement_type_id,
196
+ :return_authorization_id, :returned, :pre_tax_amount,
197
+ :acceptance_status, :exchange_variant_id, :resellable
198
+ ]
199
+ }
200
+ ]
188
201
 
189
202
  @@return_authorization_reason_attributes = [:name, :active]
190
203
 
@@ -199,7 +212,7 @@ module Spree
199
212
 
200
213
  @@shipping_category_attributes = [:name]
201
214
 
202
- @@shipping_method_attributes = [:name, :code,:tracking_url, :tax_category_id, :display_on,
215
+ @@shipping_method_attributes = [:name, :admin_name, :code, :tracking_url, :tax_category_id, :display_on,
203
216
  :estimated_transit_business_days_min, :estimated_transit_business_days_max,
204
217
  :calculator_type, :preferences, zone_ids: [], shipping_category_ids: [], calculator_attributes: {}]
205
218
 
@@ -271,7 +284,7 @@ module Spree
271
284
  :weight, :height, :width, :depth, :sku, :barcode, :cost_currency,
272
285
  :weight_unit, :dimensions_unit,
273
286
  {
274
- options: [:id, :name, :value, :position, :_destroy],
287
+ options: [:id, :name, :option_value_presentation, :option_value_name, :position, :_destroy],
275
288
  stock_items_attributes: [:id, :count_on_hand, :stock_location_id, :backorderable, :_destroy],
276
289
  prices_attributes: [:id, :amount, :compare_at_amount, :currency, :_destroy],
277
290
  price: {},
@@ -15,15 +15,11 @@ module Spree
15
15
  include CustomAbility
16
16
 
17
17
  def stub_authorization!(&block)
18
- ability_class = build_ability(&block)
19
-
20
- let(:user) { Spree.admin_user_class.new(email: FFaker::Internet.email) }
18
+ let(:admin_user) { FactoryBot.create(:admin_user) }
21
19
 
22
20
  before do
23
- allow(controller).to receive(:current_ability).and_return(ability_class.new(nil))
24
-
25
21
  if defined?(Spree::Admin::BaseController)
26
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(user)
22
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(admin_user)
27
23
  end
28
24
  end
29
25
  end
@@ -44,12 +40,11 @@ module Spree
44
40
  ability_class.register_ability(ability)
45
41
  end
46
42
 
47
- let(:user) { Spree.admin_user_class.new(email: FFaker::Internet.email) }
43
+ let(:admin_user) { FactoryBot.create(:admin_user) }
48
44
 
49
45
  before do
50
- allow(Spree.admin_user_class).to receive(:find_by).and_return(user)
51
46
  if defined?(Spree::Admin::BaseController)
52
- allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(user)
47
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(admin_user)
53
48
  end
54
49
  end
55
50
  end
@@ -73,4 +68,5 @@ end
73
68
  RSpec.configure do |config|
74
69
  config.extend Spree::TestingSupport::AuthorizationHelpers::Controller, type: :controller
75
70
  config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :feature
71
+ config.extend Spree::TestingSupport::AuthorizationHelpers::Request, type: :request
76
72
  end
@@ -33,13 +33,19 @@ namespace :common do
33
33
  system('bin/rails stimulus:install')
34
34
  end
35
35
 
36
+ # install devise if it's not the legacy user, useful for testing storefront
37
+ if args[:authentication] == 'devise' && args[:user_class] != 'Spree::LegacyUser'
38
+ system('bin/rails g devise:install --force --auto-accept')
39
+ system("bin/rails g devise #{args[:user_class]} --force --auto-accept")
40
+ system('rm -rf spec') # we need to cleanup factories created by devise to avoid naming conflict
41
+ end
42
+
36
43
  Spree::InstallGenerator.start [
37
44
  "--lib_name=#{ENV['LIB_NAME']}",
38
45
  '--auto-accept',
39
46
  '--migrate=false',
40
47
  '--seed=false',
41
48
  '--sample=false',
42
- '--copy_storefront=false',
43
49
  "--install_storefront=#{args[:install_storefront]}",
44
50
  "--install_admin=#{args[:install_admin]}",
45
51
  "--user_class=#{args[:user_class]}",
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :gift_card_batch, class: Spree::GiftCardBatch do
3
+ store { Spree::Store.default || create(:store) }
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ FactoryBot.define do
2
+ factory :gift_card, class: Spree::GiftCard do
3
+ state { :active }
4
+ amount { 10.00 }
5
+ store { Spree::Store.default || create(:store) }
6
+
7
+ trait :redeemed do
8
+ state { :redeemed }
9
+ redeemed_at { Time.current }
10
+ amount_used { amount }
11
+ end
12
+
13
+ trait :expired do
14
+ expires_at { 1.day.ago }
15
+ end
16
+ end
17
+ end
@@ -1,7 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :page_section, class: Spree::PageSection do
3
3
  pageable { Spree::Page.find_by!(name: 'Homepage') }
4
- pageable_type { 'Spree::Page' }
5
4
 
6
5
  trait :without_links do
7
6
  do_not_create_links { true }
@@ -22,5 +21,7 @@ FactoryBot.define do
22
21
  factory :video_page_section, class: Spree::PageSections::Video
23
22
 
24
23
  factory :image_with_text_page_section, class: Spree::PageSections::ImageWithText
24
+
25
+ factory :featured_posts_page_section, class: Spree::PageSections::FeaturedPosts
25
26
  end
26
27
  end
@@ -14,6 +14,11 @@ FactoryBot.define do
14
14
  create(:refund, amount: 5, payment: payment)
15
15
  end
16
16
  end
17
+
18
+ factory :custom_payment, class: Spree::Payment do
19
+ payment_method { create(:custom_payment_method, stores: [order.store]) }
20
+ source { create(:payment_source, user: order.user, payment_method: payment_method) }
21
+ end
17
22
  end
18
23
 
19
24
  factory :check_payment, class: Spree::Payment do
@@ -37,4 +37,9 @@ FactoryBot.define do
37
37
  active { true }
38
38
  auto_capture { true }
39
39
  end
40
+
41
+ factory :custom_payment_method, parent: :payment_method, class: Spree::Gateway::CustomPaymentSourceMethod do
42
+ type { 'Spree::Gateway::CustomPaymentSourceMethod' }
43
+ name { 'Custom' }
44
+ end
40
45
  end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :payment_source, class: Spree::PaymentSource do
3
+ association(:payment_method, factory: :custom_payment_method)
4
+ end
5
+ end
@@ -6,5 +6,9 @@ FactoryBot.define do
6
6
  published_at { Time.current }
7
7
  author { create(:admin_user) }
8
8
  store { Spree::Store.default || create(:store) }
9
+
10
+ trait :with_image do
11
+ image { Rack::Test::UploadedFile.new(Spree::Core::Engine.root.join('spec/fixtures/thinking-cat.jpg'), 'image/jpeg') }
12
+ end
9
13
  end
10
14
  end
@@ -14,4 +14,8 @@ FactoryBot.define do
14
14
  factory :promotion_rule_taxon, class: Spree::Promotion::Rules::Taxon do
15
15
  association :promotion
16
16
  end
17
+
18
+ factory :promotion_rule_option_value, class: Spree::Promotion::Rules::OptionValue do
19
+ association :promotion
20
+ end
17
21
  end
@@ -8,7 +8,7 @@ FactoryBot.define do
8
8
  end
9
9
 
10
10
  trait :preview do
11
- parent { create(:theme) }
11
+ parent { Spree::Store.default.default_theme || create(:theme, store: store) }
12
12
  end
13
13
  end
14
14
  end
@@ -5,8 +5,8 @@ FactoryBot.define do
5
5
  password { 'secret' }
6
6
  password_confirmation { password }
7
7
 
8
- first_name { FFaker::Name.first_name } if Spree.user_class.attribute_method?(:first_name)
9
- last_name { FFaker::Name.last_name } if Spree.user_class.attribute_method?(:last_name)
8
+ first_name { FFaker::Name.first_name }
9
+ last_name { FFaker::Name.last_name }
10
10
 
11
11
  public_metadata { {} }
12
12
  private_metadata { {} }
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.1.0.beta3
4
+ version: 5.1.0.rc1
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: 2025-05-29 00:00:00.000000000 Z
13
+ date: 2025-07-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n-tasks
@@ -336,28 +336,28 @@ dependencies:
336
336
  requirements:
337
337
  - - "~>"
338
338
  - !ruby/object:Gem::Version
339
- version: '0.6'
339
+ version: '0.10'
340
340
  type: :runtime
341
341
  prerelease: false
342
342
  version_requirements: !ruby/object:Gem::Requirement
343
343
  requirements:
344
344
  - - "~>"
345
345
  - !ruby/object:Gem::Version
346
- version: '0.6'
346
+ version: '0.10'
347
347
  - !ruby/object:Gem::Dependency
348
348
  name: state_machines-activemodel
349
349
  requirement: !ruby/object:Gem::Requirement
350
350
  requirements:
351
351
  - - "~>"
352
352
  - !ruby/object:Gem::Version
353
- version: '0.7'
353
+ version: '0.10'
354
354
  type: :runtime
355
355
  prerelease: false
356
356
  version_requirements: !ruby/object:Gem::Requirement
357
357
  requirements:
358
358
  - - "~>"
359
359
  - !ruby/object:Gem::Version
360
- version: '0.7'
360
+ version: '0.10'
361
361
  - !ruby/object:Gem::Dependency
362
362
  name: stringex
363
363
  requirement: !ruby/object:Gem::Requirement
@@ -434,14 +434,20 @@ dependencies:
434
434
  requirements:
435
435
  - - "~>"
436
436
  - !ruby/object:Gem::Version
437
- version: '1.2'
437
+ version: '1.3'
438
+ - - ">="
439
+ - !ruby/object:Gem::Version
440
+ version: 1.3.2
438
441
  type: :runtime
439
442
  prerelease: false
440
443
  version_requirements: !ruby/object:Gem::Requirement
441
444
  requirements:
442
445
  - - "~>"
443
446
  - !ruby/object:Gem::Version
444
- version: '1.2'
447
+ version: '1.3'
448
+ - - ">="
449
+ - !ruby/object:Gem::Version
450
+ version: 1.3.2
445
451
  - !ruby/object:Gem::Dependency
446
452
  name: mobility-ransack
447
453
  requirement: !ruby/object:Gem::Requirement
@@ -540,6 +546,20 @@ dependencies:
540
546
  - - "~>"
541
547
  - !ruby/object:Gem::Version
542
548
  version: '0.4'
549
+ - !ruby/object:Gem::Dependency
550
+ name: phonelib
551
+ requirement: !ruby/object:Gem::Requirement
552
+ requirements:
553
+ - - "~>"
554
+ - !ruby/object:Gem::Version
555
+ version: '0.10'
556
+ type: :runtime
557
+ prerelease: false
558
+ version_requirements: !ruby/object:Gem::Requirement
559
+ requirements:
560
+ - - "~>"
561
+ - !ruby/object:Gem::Version
562
+ version: '0.10'
543
563
  description: Spree Models, Helpers, Services and core libraries
544
564
  email: hello@spreecommerce.org
545
565
  executables: []
@@ -577,6 +597,7 @@ files:
577
597
  - app/helpers/spree/locale_helper.rb
578
598
  - app/helpers/spree/mail_helper.rb
579
599
  - app/helpers/spree/products_helper.rb
600
+ - app/helpers/spree/shipment_helper.rb
580
601
  - app/javascript/spree/core/controllers/address_autocomplete_controller.js
581
602
  - app/javascript/spree/core/controllers/address_form_controller.js
582
603
  - app/javascript/spree/core/controllers/disable_submit_button_controller.js
@@ -588,6 +609,7 @@ files:
588
609
  - app/jobs/spree/base_job.rb
589
610
  - app/jobs/spree/coupon_codes/bulk_generate_job.rb
590
611
  - app/jobs/spree/exports/generate_job.rb
612
+ - app/jobs/spree/gift_cards/bulk_generate_job.rb
591
613
  - app/jobs/spree/products/auto_match_taxons_job.rb
592
614
  - app/jobs/spree/products/touch_taxons_job.rb
593
615
  - app/jobs/spree/reports/generate_job.rb
@@ -622,6 +644,7 @@ files:
622
644
  - app/models/concerns/spree/number_as_param.rb
623
645
  - app/models/concerns/spree/number_identifier.rb
624
646
  - app/models/concerns/spree/parameterizable_name.rb
647
+ - app/models/concerns/spree/payment_source_concern.rb
625
648
  - app/models/concerns/spree/previewable.rb
626
649
  - app/models/concerns/spree/product_scopes.rb
627
650
  - app/models/concerns/spree/ransackable_attributes.rb
@@ -686,7 +709,10 @@ files:
686
709
  - app/models/spree/gateway.rb
687
710
  - app/models/spree/gateway/bogus.rb
688
711
  - app/models/spree/gateway/bogus_simple.rb
712
+ - app/models/spree/gateway/custom_payment_source_method.rb
689
713
  - app/models/spree/gateway_customer.rb
714
+ - app/models/spree/gift_card.rb
715
+ - app/models/spree/gift_card_batch.rb
690
716
  - app/models/spree/image.rb
691
717
  - app/models/spree/image/configuration/active_storage.rb
692
718
  - app/models/spree/integration.rb
@@ -706,6 +732,7 @@ files:
706
732
  - app/models/spree/order/currency_updater.rb
707
733
  - app/models/spree/order/digital.rb
708
734
  - app/models/spree/order/emails.rb
735
+ - app/models/spree/order/gift_card.rb
709
736
  - app/models/spree/order/payments.rb
710
737
  - app/models/spree/order/store_credit.rb
711
738
  - app/models/spree/order/webhooks.rb
@@ -787,6 +814,7 @@ files:
787
814
  - app/models/spree/preference.rb
788
815
  - app/models/spree/price.rb
789
816
  - app/models/spree/product.rb
817
+ - app/models/spree/product/slugs.rb
790
818
  - app/models/spree/product/webhooks.rb
791
819
  - app/models/spree/product_option_type.rb
792
820
  - app/models/spree/product_promotion_rule.rb
@@ -940,6 +968,7 @@ files:
940
968
  - app/services/spree/account/update.rb
941
969
  - app/services/spree/addresses/create.rb
942
970
  - app/services/spree/addresses/helper.rb
971
+ - app/services/spree/addresses/phone_validator.rb
943
972
  - app/services/spree/addresses/update.rb
944
973
  - app/services/spree/cart/add_item.rb
945
974
  - app/services/spree/cart/associate.rb
@@ -974,6 +1003,9 @@ files:
974
1003
  - app/services/spree/data_feeds/google/required_attributes.rb
975
1004
  - app/services/spree/data_feeds/google/rss.rb
976
1005
  - app/services/spree/generate_token.rb
1006
+ - app/services/spree/gift_cards/apply.rb
1007
+ - app/services/spree/gift_cards/redeem.rb
1008
+ - app/services/spree/gift_cards/remove.rb
977
1009
  - app/services/spree/line_items/create.rb
978
1010
  - app/services/spree/line_items/destroy.rb
979
1011
  - app/services/spree/line_items/helper.rb
@@ -1055,7 +1087,6 @@ files:
1055
1087
  - config/initializers/mobility.rb
1056
1088
  - config/initializers/oembed.rb
1057
1089
  - config/initializers/rails61_fixes.rb
1058
- - config/initializers/state_machine.rb
1059
1090
  - config/locales/en.yml
1060
1091
  - config/routes.rb
1061
1092
  - db/migrate/20210914000000_spree_four_three.rb
@@ -1156,9 +1187,12 @@ files:
1156
1187
  - db/migrate/20250407085228_create_spree_integrations.rb
1157
1188
  - db/migrate/20250410061306_create_spree_invitations.rb
1158
1189
  - db/migrate/20250418174652_add_resource_to_spree_role_users.rb
1190
+ - db/migrate/20250506073057_create_spree_gift_cards_and_spree_gift_card_batches.rb
1159
1191
  - db/migrate/20250508060800_add_selected_locale_to_spree_admin_users.rb
1160
1192
  - db/migrate/20250509143831_add_session_id_to_spree_assets.rb
1161
1193
  - db/migrate/20250527134027_add_company_to_spree_stock_locations.rb
1194
+ - db/migrate/20250530101236_enable_pg_trgm_extension.rb
1195
+ - db/migrate/20250605131334_add_missing_fields_to_users.rb
1162
1196
  - db/seeds.rb
1163
1197
  - lib/friendly_id/paranoia.rb
1164
1198
  - lib/generators/spree/authentication/custom/custom_generator.rb
@@ -1249,6 +1283,8 @@ files:
1249
1283
  - lib/spree/testing_support/factories/export_factory.rb
1250
1284
  - lib/spree/testing_support/factories/favicon_image_factory.rb
1251
1285
  - lib/spree/testing_support/factories/gateway_customer_factory.rb
1286
+ - lib/spree/testing_support/factories/gift_card_batch_factory.rb
1287
+ - lib/spree/testing_support/factories/gift_card_factory.rb
1252
1288
  - lib/spree/testing_support/factories/google_data_feed_factory.rb
1253
1289
  - lib/spree/testing_support/factories/image_factory.rb
1254
1290
  - lib/spree/testing_support/factories/integration_factory.rb
@@ -1266,6 +1302,7 @@ files:
1266
1302
  - lib/spree/testing_support/factories/payment_capture_event_factory.rb
1267
1303
  - lib/spree/testing_support/factories/payment_factory.rb
1268
1304
  - lib/spree/testing_support/factories/payment_method_factory.rb
1305
+ - lib/spree/testing_support/factories/payment_source_factory.rb
1269
1306
  - lib/spree/testing_support/factories/post_category_factory.rb
1270
1307
  - lib/spree/testing_support/factories/post_factory.rb
1271
1308
  - lib/spree/testing_support/factories/price_factory.rb
@@ -1345,9 +1382,9 @@ licenses:
1345
1382
  - BSD-3-Clause
1346
1383
  metadata:
1347
1384
  bug_tracker_uri: https://github.com/spree/spree/issues
1348
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.0.beta3
1385
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.0.rc1
1349
1386
  documentation_uri: https://docs.spreecommerce.org/
1350
- source_code_uri: https://github.com/spree/spree/tree/v5.1.0.beta3
1387
+ source_code_uri: https://github.com/spree/spree/tree/v5.1.0.rc1
1351
1388
  post_install_message:
1352
1389
  rdoc_options: []
1353
1390
  require_paths:
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module MachineDecorator
4
- protected
5
-
6
- # Determines whether there's already a helper method defined within the
7
- # given scope. This is true only if one of the owner's ancestors defines
8
- # the method and is further along in the ancestor chain than this
9
- # machine's helper module.
10
- def owner_class_ancestor_has_method?(scope, method)
11
- return false unless owner_class_has_method?(scope, method)
12
-
13
- superclasses = owner_class.ancestors.select { |ancestor| ancestor.is_a?(Class) }[1..-1]
14
-
15
- if scope == :class
16
- current = owner_class.singleton_class
17
- superclass = superclasses.first
18
- else
19
- current = owner_class
20
- superclass = owner_class.superclass
21
- end
22
-
23
- # Generate the list of modules that *only* occur in the owner class, but
24
- # were included *prior* to the helper modules, in addition to the
25
- # superclasses
26
- ancestors = current.ancestors - superclass.ancestors + superclasses
27
- ancestors = ancestors[ancestors.index(@helper_modules[scope])..-1].reverse
28
-
29
- # Search for for the first ancestor that defined this method
30
- ancestors.detect do |ancestor|
31
- ancestor = ancestor.singleton_class if scope == :class && ancestor.is_a?(Class)
32
- ancestor.method_defined?(method) || ancestor.private_method_defined?(method)
33
- end
34
- end
35
- end
36
-
37
- ::StateMachines::Machine.prepend MachineDecorator