spree_core 5.1.0.beta4 → 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 (75) 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/product_scopes.rb +1 -5
  8. data/app/models/concerns/spree/stores/socials.rb +6 -2
  9. data/app/models/concerns/spree/user_methods.rb +2 -1
  10. data/app/models/spree/ability.rb +2 -0
  11. data/app/models/spree/address.rb +11 -3
  12. data/app/models/spree/gift_card.rb +162 -0
  13. data/app/models/spree/gift_card_batch.rb +79 -0
  14. data/app/models/spree/inventory_unit.rb +11 -4
  15. data/app/models/spree/line_item.rb +13 -2
  16. data/app/models/spree/option_type.rb +5 -15
  17. data/app/models/spree/option_value.rb +18 -12
  18. data/app/models/spree/order/checkout.rb +2 -0
  19. data/app/models/spree/order/gift_card.rb +51 -0
  20. data/app/models/spree/order/store_credit.rb +20 -1
  21. data/app/models/spree/order.rb +51 -6
  22. data/app/models/spree/order_merger.rb +12 -0
  23. data/app/models/spree/page_sections/featured_posts.rb +4 -0
  24. data/app/models/spree/payment_method/store_credit.rb +1 -1
  25. data/app/models/spree/payment_method.rb +1 -0
  26. data/app/models/spree/post.rb +1 -0
  27. data/app/models/spree/price.rb +7 -1
  28. data/app/models/spree/product/slugs.rb +103 -0
  29. data/app/models/spree/product.rb +7 -81
  30. data/app/models/spree/product_property.rb +2 -2
  31. data/app/models/spree/promotion_handler/coupon.rb +39 -0
  32. data/app/models/spree/property.rb +2 -8
  33. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
  34. data/app/models/spree/return_item.rb +4 -0
  35. data/app/models/spree/shipment.rb +19 -0
  36. data/app/models/spree/shipping_method.rb +8 -9
  37. data/app/models/spree/store.rb +2 -0
  38. data/app/models/spree/store_credit.rb +9 -6
  39. data/app/models/spree/store_credit_event.rb +8 -4
  40. data/app/models/spree/taxon.rb +8 -1
  41. data/app/models/spree/theme.rb +1 -1
  42. data/app/models/spree/variant.rb +1 -1
  43. data/app/presenters/spree/csv/product_variant_presenter.rb +14 -3
  44. data/app/services/spree/addresses/phone_validator.rb +20 -0
  45. data/app/services/spree/cart/destroy.rb +1 -1
  46. data/app/services/spree/cart/recalculate.rb +1 -0
  47. data/app/services/spree/gift_cards/apply.rb +66 -0
  48. data/app/services/spree/gift_cards/redeem.rb +17 -0
  49. data/app/services/spree/gift_cards/remove.rb +38 -0
  50. data/app/services/spree/products/prepare_nested_attributes.rb +2 -2
  51. data/app/views/spree/addresses/_form.html.erb +1 -1
  52. data/app/views/spree/shared/_payment.html.erb +4 -4
  53. data/config/locales/en.yml +44 -14
  54. data/config/routes.rb +1 -0
  55. data/db/migrate/20250506073057_create_spree_gift_cards_and_spree_gift_card_batches.rb +37 -0
  56. data/db/migrate/20250530101236_enable_pg_trgm_extension.rb +13 -0
  57. data/db/migrate/20250605131334_add_missing_fields_to_users.rb +25 -0
  58. data/lib/generators/spree/install/install_generator.rb +0 -8
  59. data/lib/spree/core/configuration.rb +4 -0
  60. data/lib/spree/core/controller_helpers/store.rb +13 -1
  61. data/lib/spree/core/dependencies.rb +5 -0
  62. data/lib/spree/core/engine.rb +7 -1
  63. data/lib/spree/core/version.rb +1 -1
  64. data/lib/spree/core.rb +2 -1
  65. data/lib/spree/permitted_attributes.rb +22 -9
  66. data/lib/spree/testing_support/authorization_helpers.rb +5 -9
  67. data/lib/spree/testing_support/common_rake.rb +7 -1
  68. data/lib/spree/testing_support/factories/gift_card_batch_factory.rb +5 -0
  69. data/lib/spree/testing_support/factories/gift_card_factory.rb +17 -0
  70. data/lib/spree/testing_support/factories/page_section_factory.rb +2 -1
  71. data/lib/spree/testing_support/factories/post_factory.rb +4 -0
  72. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +4 -0
  73. data/lib/spree/testing_support/factories/user_factory.rb +2 -2
  74. metadata +45 -11
  75. data/config/initializers/state_machine.rb +0 -37
@@ -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
@@ -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
@@ -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.beta4
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-06-04 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
@@ -689,6 +711,8 @@ files:
689
711
  - app/models/spree/gateway/bogus_simple.rb
690
712
  - app/models/spree/gateway/custom_payment_source_method.rb
691
713
  - app/models/spree/gateway_customer.rb
714
+ - app/models/spree/gift_card.rb
715
+ - app/models/spree/gift_card_batch.rb
692
716
  - app/models/spree/image.rb
693
717
  - app/models/spree/image/configuration/active_storage.rb
694
718
  - app/models/spree/integration.rb
@@ -708,6 +732,7 @@ files:
708
732
  - app/models/spree/order/currency_updater.rb
709
733
  - app/models/spree/order/digital.rb
710
734
  - app/models/spree/order/emails.rb
735
+ - app/models/spree/order/gift_card.rb
711
736
  - app/models/spree/order/payments.rb
712
737
  - app/models/spree/order/store_credit.rb
713
738
  - app/models/spree/order/webhooks.rb
@@ -789,6 +814,7 @@ files:
789
814
  - app/models/spree/preference.rb
790
815
  - app/models/spree/price.rb
791
816
  - app/models/spree/product.rb
817
+ - app/models/spree/product/slugs.rb
792
818
  - app/models/spree/product/webhooks.rb
793
819
  - app/models/spree/product_option_type.rb
794
820
  - app/models/spree/product_promotion_rule.rb
@@ -942,6 +968,7 @@ files:
942
968
  - app/services/spree/account/update.rb
943
969
  - app/services/spree/addresses/create.rb
944
970
  - app/services/spree/addresses/helper.rb
971
+ - app/services/spree/addresses/phone_validator.rb
945
972
  - app/services/spree/addresses/update.rb
946
973
  - app/services/spree/cart/add_item.rb
947
974
  - app/services/spree/cart/associate.rb
@@ -976,6 +1003,9 @@ files:
976
1003
  - app/services/spree/data_feeds/google/required_attributes.rb
977
1004
  - app/services/spree/data_feeds/google/rss.rb
978
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
979
1009
  - app/services/spree/line_items/create.rb
980
1010
  - app/services/spree/line_items/destroy.rb
981
1011
  - app/services/spree/line_items/helper.rb
@@ -1057,7 +1087,6 @@ files:
1057
1087
  - config/initializers/mobility.rb
1058
1088
  - config/initializers/oembed.rb
1059
1089
  - config/initializers/rails61_fixes.rb
1060
- - config/initializers/state_machine.rb
1061
1090
  - config/locales/en.yml
1062
1091
  - config/routes.rb
1063
1092
  - db/migrate/20210914000000_spree_four_three.rb
@@ -1158,9 +1187,12 @@ files:
1158
1187
  - db/migrate/20250407085228_create_spree_integrations.rb
1159
1188
  - db/migrate/20250410061306_create_spree_invitations.rb
1160
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
1161
1191
  - db/migrate/20250508060800_add_selected_locale_to_spree_admin_users.rb
1162
1192
  - db/migrate/20250509143831_add_session_id_to_spree_assets.rb
1163
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
1164
1196
  - db/seeds.rb
1165
1197
  - lib/friendly_id/paranoia.rb
1166
1198
  - lib/generators/spree/authentication/custom/custom_generator.rb
@@ -1251,6 +1283,8 @@ files:
1251
1283
  - lib/spree/testing_support/factories/export_factory.rb
1252
1284
  - lib/spree/testing_support/factories/favicon_image_factory.rb
1253
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
1254
1288
  - lib/spree/testing_support/factories/google_data_feed_factory.rb
1255
1289
  - lib/spree/testing_support/factories/image_factory.rb
1256
1290
  - lib/spree/testing_support/factories/integration_factory.rb
@@ -1348,9 +1382,9 @@ licenses:
1348
1382
  - BSD-3-Clause
1349
1383
  metadata:
1350
1384
  bug_tracker_uri: https://github.com/spree/spree/issues
1351
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.0.beta4
1385
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.1.0.rc1
1352
1386
  documentation_uri: https://docs.spreecommerce.org/
1353
- source_code_uri: https://github.com/spree/spree/tree/v5.1.0.beta4
1387
+ source_code_uri: https://github.com/spree/spree/tree/v5.1.0.rc1
1354
1388
  post_install_message:
1355
1389
  rdoc_options: []
1356
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