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.
- checksums.yaml +4 -4
- data/Rakefile +6 -2
- data/app/assets/javascripts/spree.js.erb +0 -51
- data/app/controllers/spree/base_controller.rb +1 -1
- data/app/helpers/spree/base_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +2 -2
- data/app/helpers/spree/store_helper.rb +0 -11
- data/app/mailers/spree/carton_mailer.rb +1 -5
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/adjustment_source.rb +0 -15
- data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
- data/app/models/concerns/spree/default_price.rb +39 -10
- data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
- data/app/models/concerns/spree/soft_deletable.rb +2 -4
- data/app/models/concerns/spree/user_address_book.rb +10 -37
- data/app/models/concerns/spree/user_methods.rb +38 -13
- data/app/models/spree/ability.rb +0 -37
- data/app/models/spree/address/name.rb +2 -20
- data/app/models/spree/address.rb +8 -186
- data/app/models/spree/adjustment.rb +7 -33
- data/app/models/spree/base.rb +0 -53
- data/app/models/spree/calculator/flat_fee.rb +21 -0
- data/app/models/spree/calculator/flexi_rate.rb +0 -5
- data/app/models/spree/calculator.rb +0 -7
- data/app/models/spree/carton.rb +1 -1
- data/app/models/spree/country.rb +2 -7
- data/app/models/spree/credit_card.rb +1 -28
- data/app/models/spree/customer_return.rb +5 -7
- data/app/models/spree/image/active_storage_attachment.rb +2 -7
- data/app/models/spree/image/paperclip_attachment.rb +2 -2
- data/app/models/spree/image.rb +0 -7
- data/app/models/spree/inventory_unit.rb +0 -21
- data/app/models/spree/line_item.rb +6 -49
- data/app/models/spree/log_entry.rb +74 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +10 -1
- data/app/models/spree/order/number_generator.rb +7 -1
- data/app/models/spree/order.rb +82 -170
- data/app/models/spree/order_cancellations.rb +4 -24
- data/app/models/spree/order_contents.rb +2 -1
- data/app/models/spree/order_inventory.rb +1 -1
- data/app/models/spree/order_merger.rb +2 -2
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_shipping.rb +6 -9
- data/app/models/spree/order_taxation.rb +6 -4
- data/app/models/spree/order_updater.rb +17 -16
- data/app/models/spree/payment/cancellation.rb +1 -1
- data/app/models/spree/payment/processing.rb +58 -55
- data/app/models/spree/payment.rb +0 -3
- data/app/models/spree/payment_create.rb +1 -13
- data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
- data/app/models/spree/payment_method/credit_card.rb +1 -3
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
- data/app/models/spree/payment_method.rb +26 -110
- data/app/models/spree/price.rb +3 -3
- data/app/models/spree/product/scopes.rb +24 -33
- data/app/models/spree/product.rb +15 -42
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
- data/app/models/spree/promotion/rules/item_total.rb +50 -6
- data/app/models/spree/promotion/rules/product.rb +20 -8
- data/app/models/spree/promotion/rules/store.rb +4 -0
- data/app/models/spree/promotion/rules/taxon.rb +6 -15
- data/app/models/spree/promotion/rules/user.rb +4 -0
- data/app/models/spree/promotion.rb +39 -32
- data/app/models/spree/promotion_action.rb +6 -9
- data/app/models/spree/promotion_code/batch_builder.rb +0 -14
- data/app/models/spree/promotion_code.rb +11 -7
- data/app/models/spree/promotion_handler/cart.rb +26 -6
- data/app/models/spree/promotion_rule.rb +5 -0
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/refund.rb +8 -52
- data/app/models/spree/reimbursement.rb +5 -43
- data/app/models/spree/reimbursement_performer.rb +2 -8
- data/app/models/spree/reimbursement_type/credit.rb +1 -4
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
- data/app/models/spree/return_authorization.rb +2 -5
- data/app/models/spree/return_item.rb +4 -24
- data/app/models/spree/shipment.rb +3 -56
- data/app/models/spree/shipping_method.rb +0 -25
- data/app/models/spree/shipping_rate.rb +0 -2
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/state.rb +1 -5
- data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
- data/app/models/spree/stock/availability.rb +11 -3
- data/app/models/spree/stock/quantifier.rb +12 -8
- data/app/models/spree/stock/simple_coordinator.rb +8 -26
- data/app/models/spree/stock/splitter/base.rb +2 -7
- data/app/models/spree/stock_item.rb +2 -8
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/store.rb +0 -12
- data/app/models/spree/store_credit.rb +14 -1
- data/app/models/spree/store_credit_category.rb +0 -32
- data/app/models/spree/store_credit_prioritizer.rb +17 -0
- data/app/models/spree/tax/item_tax.rb +3 -2
- data/app/models/spree/tax/order_tax.rb +3 -1
- data/app/models/spree/tax/tax_helpers.rb +2 -2
- data/app/models/spree/tax/tax_location.rb +4 -7
- data/app/models/spree/tax_calculator/default.rb +31 -0
- data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
- data/app/models/spree/tax_rate.rb +9 -27
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
- data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
- data/app/models/spree/taxon.rb +1 -12
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/user_address.rb +0 -5
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +34 -4
- data/app/models/spree/variant.rb +52 -66
- data/app/models/spree/zone.rb +1 -1
- data/app/subscribers/spree/mailer_subscriber.rb +4 -0
- data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
- data/config/i18n-tasks.yml +134 -0
- data/config/locales/en.yml +406 -263
- data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
- data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
- data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
- data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
- data/db/seeds.rb +4 -1
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
- data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
- data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
- data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
- data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
- data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
- data/lib/generators/solidus/install/install_generator.rb +247 -149
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
- data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
- data/lib/generators/solidus/update/update_generator.rb +112 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
- data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/spree/app_configuration.rb +134 -64
- data/lib/spree/bus.rb +20 -0
- data/lib/spree/core/class_constantizer.rb +2 -0
- data/lib/spree/core/controller_helpers/auth.rb +10 -15
- data/lib/spree/core/controller_helpers/current_host.rb +5 -3
- data/lib/spree/core/controller_helpers/order.rb +12 -32
- data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
- data/lib/spree/core/controller_helpers/pricing.rb +0 -8
- data/lib/spree/core/controller_helpers/search.rb +1 -1
- data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
- data/lib/spree/core/engine.rb +54 -50
- data/lib/spree/core/environment_extension.rb +0 -9
- data/lib/spree/core/product_filters.rb +1 -41
- data/lib/spree/core/role_configuration.rb +0 -14
- data/lib/spree/core/search/base.rb +18 -35
- data/lib/spree/core/state_machines/order.rb +2 -2
- data/lib/spree/core/state_machines.rb +2 -11
- data/lib/spree/core/stock_configuration.rb +18 -0
- data/lib/spree/core/validators/email.rb +5 -3
- data/lib/spree/core/version.rb +5 -1
- data/lib/spree/core/versioned_value.rb +75 -0
- data/lib/spree/core.rb +40 -11
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/event/configuration.rb +0 -5
- data/lib/spree/event/subscriber.rb +0 -18
- data/lib/spree/event/subscriber_registry.rb +7 -7
- data/lib/spree/event.rb +1 -32
- data/lib/spree/i18n.rb +0 -22
- data/lib/spree/migrations.rb +13 -11
- data/lib/spree/money.rb +3 -18
- data/lib/spree/permission_sets/default_customer.rb +8 -1
- data/lib/spree/permitted_attributes.rb +17 -59
- data/lib/spree/preferences/configuration.rb +84 -0
- data/lib/spree/preferences/preferable.rb +13 -0
- data/lib/spree/preferences/preferable_class_methods.rb +37 -4
- data/lib/spree/preferences/preference_differentiator.rb +29 -0
- data/lib/spree/preferences/static_model_preferences.rb +25 -10
- data/lib/spree/rails_compatibility.rb +106 -0
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +101 -0
- data/lib/spree/testing_support/capybara_ext.rb +0 -30
- data/lib/spree/testing_support/common_rake.rb +71 -23
- data/lib/spree/testing_support/controller_requests.rb +0 -82
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/database.yml +42 -22
- data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
- data/lib/spree/testing_support/dummy_app.rb +47 -34
- data/lib/spree/testing_support/factories/address_factory.rb +9 -6
- data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
- data/lib/spree/testing_support/factories/country_factory.rb +1 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +8 -5
- data/lib/spree/testing_support/factories/product_factory.rb +4 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
- data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
- data/lib/spree/testing_support/factories/state_factory.rb +8 -2
- data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/user_factory.rb +6 -0
- data/lib/spree/testing_support/factory_bot.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +6 -8
- data/lib/spree/testing_support/preferences.rb +0 -25
- data/lib/spree/testing_support/silence_deprecations.rb +9 -0
- data/lib/tasks/colorado_delivery_fee.rake +28 -0
- data/lib/tasks/payment_method.rake +29 -0
- data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
- data/solidus_core.gemspec +14 -7
- metadata +127 -78
- data/app/mailers/spree/test_mailer.rb +0 -13
- data/app/models/concerns/spree/user_payment_source.rb +0 -26
- data/app/models/spree/calculator/free_shipping.rb +0 -22
- data/app/models/spree/calculator/percent_per_item.rb +0 -51
- data/app/models/spree/calculator/price_sack.rb +0 -28
- data/app/models/spree/gateway/bogus.rb +0 -13
- data/app/models/spree/gateway/bogus_simple.rb +0 -13
- data/app/models/spree/gateway.rb +0 -14
- data/app/models/spree/order/checkout.rb +0 -244
- data/app/models/spree/order_capturing.rb +0 -50
- data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
- data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
- data/lib/generators/spree/install/install_generator.rb +0 -15
- data/lib/solidus/migrations/rename_gateways.rb +0 -41
- data/lib/spree/core/current_store.rb +0 -24
- data/lib/spree/paranoia_deprecations.rb +0 -41
- data/lib/spree/promo/environment.rb +0 -12
- data/lib/spree/testing_support/bar_ability.rb +0 -19
- data/lib/tasks/core.rake +0 -104
- data/lib/tasks/email.rake +0 -12
- data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
- data/lib/tasks/migrations/migrate_address_names.rake +0 -158
- data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
- data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
- data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
- data/lib/tasks/migrations/rename_gateways.rake +0 -23
- data/lib/tasks/order_capturing.rake +0 -27
- data/lib/tasks/upgrade.rake +0 -13
data/lib/spree/core/engine.rb
CHANGED
@@ -15,6 +15,12 @@ module Spree
|
|
15
15
|
generator.test_framework :rspec
|
16
16
|
end
|
17
17
|
|
18
|
+
if ActiveRecord.respond_to?(:yaml_column_permitted_classes) || ActiveRecord::Base.respond_to?(:yaml_column_permitted_classes)
|
19
|
+
config.active_record.yaml_column_permitted_classes ||= []
|
20
|
+
config.active_record.yaml_column_permitted_classes |=
|
21
|
+
[Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
|
22
|
+
end
|
23
|
+
|
18
24
|
initializer "spree.environment", before: :load_config_initializers do |app|
|
19
25
|
app.config.spree = Spree::Config.environment
|
20
26
|
end
|
@@ -40,67 +46,65 @@ module Spree
|
|
40
46
|
]
|
41
47
|
end
|
42
48
|
|
43
|
-
initializer "spree.core.checking_migrations",
|
49
|
+
initializer "spree.core.checking_migrations", after: :load_config_initializers do |_app|
|
44
50
|
Migrations.new(config, engine_name).check
|
45
51
|
end
|
46
52
|
|
47
|
-
# Setup
|
48
|
-
initializer 'spree.core.
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
# Setup pub/sub
|
54
|
+
initializer 'spree.core.pub_sub' do |app|
|
55
|
+
if Spree::Config.use_legacy_events
|
56
|
+
app.reloader.to_prepare do
|
57
|
+
Spree::Event.activate_autoloadable_subscribers
|
58
|
+
end
|
59
|
+
|
60
|
+
app.reloader.before_class_unload do
|
61
|
+
Spree::Event.deactivate_all_subscribers
|
62
|
+
end
|
63
|
+
else
|
64
|
+
app.reloader.to_prepare do
|
65
|
+
Spree::Bus.clear
|
66
|
+
|
67
|
+
%i[
|
68
|
+
order_finalized
|
69
|
+
order_recalculated
|
70
|
+
reimbursement_reimbursed
|
71
|
+
reimbursement_errored
|
72
|
+
].each { |event_name| Spree::Bus.register(event_name) }
|
52
73
|
|
53
|
-
|
54
|
-
|
74
|
+
Spree::OrderMailerSubscriber.new.subscribe_to(Spree::Bus)
|
75
|
+
end
|
55
76
|
end
|
56
77
|
end
|
57
78
|
|
79
|
+
# Load in mailer previews for apps to use in development.
|
80
|
+
initializer "spree.core.action_mailer.set_preview_path", after: "action_mailer.set_configs" do |app|
|
81
|
+
original_preview_path = app.config.action_mailer.preview_path
|
82
|
+
solidus_preview_path = Spree::Core::Engine.root.join 'lib/spree/mailer_previews'
|
83
|
+
|
84
|
+
app.config.action_mailer.preview_path = "{#{original_preview_path},#{solidus_preview_path}}"
|
85
|
+
ActionMailer::Base.preview_path = app.config.action_mailer.preview_path
|
86
|
+
end
|
87
|
+
|
58
88
|
config.after_initialize do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
'deprecated. Please note that by switching this value, ' \
|
63
|
-
'Spree::LineItem::CurrencyMismatch will not be raised anymore.',
|
64
|
-
caller
|
65
|
-
)
|
66
|
-
end
|
67
|
-
if Spree::Config.consider_actionless_promotion_active == true
|
68
|
-
Spree::Deprecation.warn(
|
69
|
-
'Spree::Config.consider_actionless_promotion_active set to true is ' \
|
70
|
-
'deprecated. Please note that by switching this value, ' \
|
71
|
-
'promotions with no actions will be considered active.',
|
72
|
-
caller
|
73
|
-
)
|
74
|
-
end
|
75
|
-
if Spree::Config.run_order_validations_on_order_updater != true
|
76
|
-
Spree::Deprecation.warn(
|
77
|
-
'Spree::Config.run_order_validations_on_order_updater set to false is ' \
|
78
|
-
'deprecated and will not be possibile in Solidus 3.0. Please switch this ' \
|
79
|
-
'value to true and check that everything works as expected.',
|
80
|
-
caller
|
81
|
-
)
|
82
|
-
end
|
89
|
+
Spree::Config.check_load_defaults_called('Spree::Config')
|
90
|
+
Spree::Config.static_model_preferences.validate!
|
91
|
+
end
|
83
92
|
|
84
|
-
|
85
|
-
|
86
|
-
Spree::
|
87
|
-
|
88
|
-
|
89
|
-
Switch Spree::Config.use_legacy_address_state_validator to false to start
|
90
|
-
using the external validation class.
|
91
|
-
DEPRECATION
|
93
|
+
config.after_initialize do
|
94
|
+
if defined?(Spree::Auth::Engine) &&
|
95
|
+
Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new('2.5.4') &&
|
96
|
+
defined?(Spree::UsersController)
|
97
|
+
Spree::UsersController.protect_from_forgery with: :exception
|
92
98
|
end
|
99
|
+
end
|
93
100
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
Dir[root.join("lib/spree/mailer_previews/**/*_preview.rb")].each do |file|
|
102
|
-
require_dependency file
|
103
|
-
end
|
101
|
+
config.after_initialize do
|
102
|
+
if Spree::Config.use_legacy_events && !ENV['CI']
|
103
|
+
Spree::Deprecation.warn <<~MSG
|
104
|
+
Your Solidus store is using the legacy event system. You're
|
105
|
+
encouraged to switch to the new event bus. After you're done, you
|
106
|
+
can remove the `use_legacy_events` setting from `spree.rb`.
|
107
|
+
MSG
|
104
108
|
end
|
105
109
|
end
|
106
110
|
end
|
@@ -22,15 +22,6 @@ module Spree
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
26
|
-
def add_class(name)
|
27
|
-
Spree::Deprecation.warn(
|
28
|
-
'This method is deprecated. ' \
|
29
|
-
"Please use `#{self.class}.add_class_set(#{name.inspect})` instead.",
|
30
|
-
caller,
|
31
|
-
)
|
32
|
-
singleton_class.send(:add_class_set, name)
|
33
|
-
end
|
34
25
|
end
|
35
26
|
end
|
36
27
|
end
|
@@ -61,7 +61,7 @@ module Spree
|
|
61
61
|
scope = scope.or(new_scope)
|
62
62
|
end
|
63
63
|
|
64
|
-
Spree::Product.joins(master: :
|
64
|
+
Spree::Product.joins(master: :prices).where(scope)
|
65
65
|
end
|
66
66
|
|
67
67
|
def self.format_price(amount)
|
@@ -153,46 +153,6 @@ module Spree
|
|
153
153
|
labels: brands.sort.map { |key| [key, key] }
|
154
154
|
}
|
155
155
|
end
|
156
|
-
|
157
|
-
# Provide filtering on the immediate children of a taxon
|
158
|
-
#
|
159
|
-
# This doesn't fit the pattern of the examples above, so there's a few changes.
|
160
|
-
# Firstly, it uses an existing scope which was not built for filtering - and so
|
161
|
-
# has no need of a conditions mapping, and secondly, it has a mapping of name
|
162
|
-
# to the argument type expected by the other scope.
|
163
|
-
#
|
164
|
-
# This technique is useful for filtering on objects (by passing ids) or with a
|
165
|
-
# scope that can be used directly (eg. testing only ever on a single property).
|
166
|
-
#
|
167
|
-
# This scope selects products in any of the active taxons or their children.
|
168
|
-
#
|
169
|
-
def self.taxons_below(taxon)
|
170
|
-
Spree::Deprecation.warn "taxons_below is deprecated in solidus_core. Please add it to your own application to continue using it."
|
171
|
-
return Spree::Core::ProductFilters.all_taxons if taxon.nil?
|
172
|
-
{
|
173
|
-
name: 'Taxons under ' + taxon.name,
|
174
|
-
scope: :taxons_id_in_tree_any,
|
175
|
-
labels: taxon.children.sort_by(&:position).map { |element| [element.name, element.id] },
|
176
|
-
conds: nil
|
177
|
-
}
|
178
|
-
end
|
179
|
-
|
180
|
-
# Filtering by the list of all taxons
|
181
|
-
#
|
182
|
-
# Similar idea as above, but we don't want the descendants' products, hence
|
183
|
-
# it uses one of the auto-generated scopes from Ransack.
|
184
|
-
#
|
185
|
-
# idea: expand the format to allow nesting of labels?
|
186
|
-
def self.all_taxons
|
187
|
-
Spree::Deprecation.warn "all_taxons is deprecated in solidus_core. Please add it to your own application to continue using it."
|
188
|
-
taxons = Spree::Taxonomy.all.flat_map { |element| [element.root] + element.root.descendants }
|
189
|
-
{
|
190
|
-
name: 'All taxons',
|
191
|
-
scope: :taxons_id_equals_any,
|
192
|
-
labels: taxons.sort_by(&:name).map { |element| [element.name, element.id] },
|
193
|
-
conds: nil # not needed
|
194
|
-
}
|
195
|
-
end
|
196
156
|
end
|
197
157
|
end
|
198
158
|
end
|
@@ -31,20 +31,6 @@ module Spree
|
|
31
31
|
|
32
32
|
attr_accessor :roles
|
33
33
|
|
34
|
-
class << self
|
35
|
-
def instance
|
36
|
-
Spree::Deprecation.warn "Spree::RoleConfiguration.instance is DEPRECATED use Spree::Config.roles instead"
|
37
|
-
Spree::Config.roles
|
38
|
-
end
|
39
|
-
|
40
|
-
# Yields the instance of the singleton, used for configuration
|
41
|
-
# @yieldparam instance [Spree::RoleConfiguration]
|
42
|
-
def configure
|
43
|
-
Spree::Deprecation.warn "Spree::RoleConfiguration.configure is deprecated. Call Spree::Config.roles.assign_permissions instead"
|
44
|
-
yield(Spree::Config.roles)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
34
|
# Given a CanCan::Ability, and a user, determine what permissions sets can
|
49
35
|
# be activated on the ability, then activate them.
|
50
36
|
#
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'spree/deprecation'
|
4
|
-
|
5
3
|
module Spree
|
6
4
|
module Core
|
7
5
|
module Search
|
8
6
|
class Base
|
7
|
+
class InvalidOptions < ArgumentError
|
8
|
+
def initialize(option)
|
9
|
+
super("Invalid option passed to the searcher: '#{option}'")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
9
13
|
attr_accessor :properties
|
10
14
|
attr_accessor :current_user
|
11
15
|
attr_accessor :pricing_options
|
@@ -16,17 +20,6 @@ module Spree
|
|
16
20
|
prepare(params)
|
17
21
|
end
|
18
22
|
|
19
|
-
def current_currency=(currency)
|
20
|
-
self.pricing_options = Spree::Config.pricing_options_class.new(
|
21
|
-
pricing_options.desired_attributes.merge(currency: currency)
|
22
|
-
)
|
23
|
-
end
|
24
|
-
|
25
|
-
def current_currency
|
26
|
-
pricing_options.currency
|
27
|
-
end
|
28
|
-
deprecate :current_currency, :current_currency=, deprecator: Spree::Deprecation
|
29
|
-
|
30
23
|
def retrieve_products
|
31
24
|
@products = get_base_scope
|
32
25
|
curr_page = @properties[:page] || 1
|
@@ -37,19 +30,6 @@ module Spree
|
|
37
30
|
@products = @products.page(curr_page).per(@properties[:per_page])
|
38
31
|
end
|
39
32
|
|
40
|
-
def method_missing(name)
|
41
|
-
if @properties.key?(name)
|
42
|
-
Spree::Deprecation.warn "Accessing Searcher's #{name} property using #{self.class.name}##{name} is deprecated without replacement"
|
43
|
-
@properties[name]
|
44
|
-
else
|
45
|
-
super
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def respond_to_missing?(name)
|
50
|
-
@properties.key?(name) || super(name)
|
51
|
-
end
|
52
|
-
|
53
33
|
protected
|
54
34
|
|
55
35
|
def get_base_scope
|
@@ -77,22 +57,25 @@ module Spree
|
|
77
57
|
# separate queries most of the time but opt for a join as soon as any
|
78
58
|
# `where` constraints affecting joined tables are added to the search;
|
79
59
|
# which is the case as soon as a taxon is added to the base scope.
|
80
|
-
scope = scope.preload(master: :
|
60
|
+
scope = scope.preload(master: :prices)
|
81
61
|
scope = scope.preload(master: :images) if @properties[:include_images]
|
82
62
|
scope
|
83
63
|
end
|
84
64
|
|
85
65
|
def add_search_scopes(base_scope)
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
66
|
+
return base_scope unless @properties[:search].present?
|
67
|
+
raise InvalidOptions.new(:search) unless @properties[:search].respond_to?(:each_pair)
|
68
|
+
|
69
|
+
@properties[:search].each_pair do |name, scope_attribute|
|
70
|
+
scope_name = name.to_sym
|
71
|
+
|
72
|
+
if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
|
73
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
74
|
+
else
|
75
|
+
base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
|
94
76
|
end
|
95
77
|
end
|
78
|
+
|
96
79
|
base_scope
|
97
80
|
end
|
98
81
|
|
@@ -73,7 +73,7 @@ module Spree
|
|
73
73
|
end
|
74
74
|
|
75
75
|
event :complete do
|
76
|
-
transition to: :complete, from:
|
76
|
+
transition to: :complete, from: klass.checkout_steps.keys.last
|
77
77
|
end
|
78
78
|
|
79
79
|
if states[:payment]
|
@@ -119,7 +119,7 @@ module Spree
|
|
119
119
|
before_transition to: :complete, do: :process_payments_before_complete
|
120
120
|
end
|
121
121
|
|
122
|
-
after_transition to: :complete, do: :finalize
|
122
|
+
after_transition to: :complete, do: :finalize
|
123
123
|
after_transition to: :resumed, do: :after_resume
|
124
124
|
after_transition to: :canceled, do: :after_cancel
|
125
125
|
|
@@ -68,17 +68,8 @@ module Spree
|
|
68
68
|
|
69
69
|
def order
|
70
70
|
@order ||= begin
|
71
|
-
|
72
|
-
|
73
|
-
"Spree::Order state machine defined in Spree::Order::Checkout is deprecated. " \
|
74
|
-
"Future versions of Solidus will use Spree::Core::StateMachines::Order}",
|
75
|
-
caller
|
76
|
-
)
|
77
|
-
'Spree::Order::Checkout'
|
78
|
-
else
|
79
|
-
require 'spree/core/state_machines/order'
|
80
|
-
'Spree::Core::StateMachines::Order'
|
81
|
-
end
|
71
|
+
require 'spree/core/state_machines/order'
|
72
|
+
'Spree::Core::StateMachines::Order'
|
82
73
|
end
|
83
74
|
|
84
75
|
@order.constantize
|
@@ -8,6 +8,9 @@ module Spree
|
|
8
8
|
attr_writer :location_filter_class
|
9
9
|
attr_writer :location_sorter_class
|
10
10
|
attr_writer :allocator_class
|
11
|
+
attr_writer :inventory_unit_builder_class
|
12
|
+
attr_writer :availability_validator_class
|
13
|
+
attr_writer :inventory_validator_class
|
11
14
|
|
12
15
|
def coordinator_class
|
13
16
|
@coordinator_class ||= '::Spree::Stock::SimpleCoordinator'
|
@@ -33,6 +36,21 @@ module Spree
|
|
33
36
|
@allocator_class ||= '::Spree::Stock::Allocator::OnHandFirst'
|
34
37
|
@allocator_class.constantize
|
35
38
|
end
|
39
|
+
|
40
|
+
def inventory_unit_builder_class
|
41
|
+
@inventory_unit_builder_class ||= '::Spree::Stock::InventoryUnitBuilder'
|
42
|
+
@inventory_unit_builder_class.constantize
|
43
|
+
end
|
44
|
+
|
45
|
+
def availability_validator_class
|
46
|
+
@availability_validator_class ||= '::Spree::Stock::AvailabilityValidator'
|
47
|
+
@availability_validator_class.constantize
|
48
|
+
end
|
49
|
+
|
50
|
+
def inventory_validator_class
|
51
|
+
@inventory_validator_class ||= '::Spree::Stock::InventoryValidator'
|
52
|
+
@inventory_validator_class.constantize
|
53
|
+
end
|
36
54
|
end
|
37
55
|
end
|
38
56
|
end
|
@@ -12,11 +12,13 @@ module Spree
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
class EmailValidator < ActiveModel::EachValidator
|
15
|
-
EMAIL_REGEXP =
|
15
|
+
EMAIL_REGEXP = URI::MailTo::EMAIL_REGEXP
|
16
|
+
# Use Spree::Config.default_email_regexp instead
|
17
|
+
deprecate_constant :EMAIL_REGEXP
|
16
18
|
|
17
19
|
def validate_each(record, attribute, value)
|
18
|
-
unless
|
19
|
-
record.errors.add(attribute, :invalid, { value: value }.merge!(options))
|
20
|
+
unless Spree::Config.default_email_regexp.match? value
|
21
|
+
record.errors.add(attribute, :invalid, **{ value: value }.merge!(options))
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
data/lib/spree/core/version.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
VERSION = "
|
4
|
+
VERSION = "3.3.1"
|
5
5
|
|
6
6
|
def self.solidus_version
|
7
7
|
VERSION
|
8
8
|
end
|
9
9
|
|
10
|
+
def self.previous_solidus_minor_version
|
11
|
+
'3.2'
|
12
|
+
end
|
13
|
+
|
10
14
|
def self.solidus_gem_version
|
11
15
|
Gem::Version.new(solidus_version)
|
12
16
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Core
|
5
|
+
# Wrapper for a value that can be different depending on the Solidus version
|
6
|
+
#
|
7
|
+
# Some configuration defaults can be added or changed when a new Solidus
|
8
|
+
# version is released. This class encapsulates getting the correct value for a
|
9
|
+
# given Solidus version.
|
10
|
+
#
|
11
|
+
# The way it works is you provide an initial value in time, plus the version
|
12
|
+
# boundary where it got changed. Then you can fetch the value providing the
|
13
|
+
# desired Solidus version:
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# value = VersionedValue.new(true, "3.0.0" => false)
|
17
|
+
# value.call("2.7.0") # => true
|
18
|
+
# value.call("3.0.0") # => false
|
19
|
+
# value.call("3.1.0") # => false
|
20
|
+
#
|
21
|
+
# Remember that you must provide the exact boundary when a value got changed,
|
22
|
+
# which could easily be during a pre-release:
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
# value = VersionedValue.new(true, "3.0.0" => false)
|
26
|
+
# value.call("3.0.0.alpha") # => true
|
27
|
+
#
|
28
|
+
# value = VersionedValue.new(true, "3.0.0.alpha" => false)
|
29
|
+
# value.call("3.0.0.alpha") # => false
|
30
|
+
#
|
31
|
+
# Multiple boundaries can also be provided:
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# value = VersionedValue.new(0, "2.0.0" => 1, "3.0.0" => 2)
|
35
|
+
# value.call("1.0.0") # => 0
|
36
|
+
# value.call("2.1.0") # => 1
|
37
|
+
# value.call("3.0.0") # => 2
|
38
|
+
class VersionedValue
|
39
|
+
attr_reader :boundaries
|
40
|
+
|
41
|
+
# @param initial_value [Any]
|
42
|
+
# @param boundary [Hash<String, Any>] Map from version number to new value
|
43
|
+
def initialize(initial_value, boundaries = {})
|
44
|
+
@boundaries = Hash[
|
45
|
+
{ '0' => initial_value }
|
46
|
+
.merge(boundaries)
|
47
|
+
.transform_keys { |version| to_gem_version(version) }
|
48
|
+
.sort
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param solidus_version [String]
|
53
|
+
def call(solidus_version = Spree.solidus_version)
|
54
|
+
solidus_version = to_gem_version(solidus_version)
|
55
|
+
boundaries.fetch(
|
56
|
+
boundaries
|
57
|
+
.keys
|
58
|
+
.reduce do |target, following|
|
59
|
+
if target <= solidus_version && solidus_version < following
|
60
|
+
target
|
61
|
+
else
|
62
|
+
following
|
63
|
+
end
|
64
|
+
end
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def to_gem_version(string)
|
71
|
+
Gem::Version.new(string)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/spree/core.rb
CHANGED
@@ -1,27 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "action_controller/railtie"
|
4
|
+
require "action_mailer/railtie"
|
5
|
+
require "action_view/railtie"
|
6
|
+
require "active_job/railtie"
|
7
|
+
require "active_model/railtie"
|
8
|
+
require "active_record/railtie"
|
9
|
+
require "active_storage/engine"
|
10
|
+
require "sprockets/railtie"
|
11
|
+
|
4
12
|
require 'acts_as_list'
|
5
13
|
require 'awesome_nested_set'
|
6
14
|
require 'cancan'
|
7
15
|
require 'friendly_id'
|
8
16
|
require 'kaminari/activerecord'
|
9
|
-
require 'mail'
|
10
17
|
require 'monetize'
|
11
18
|
require 'paperclip'
|
12
|
-
require 'paranoia'
|
13
19
|
require 'ransack'
|
14
20
|
require 'state_machines-activerecord'
|
15
21
|
|
16
22
|
require 'spree/deprecation'
|
17
|
-
require 'spree/
|
23
|
+
require 'spree/rails_compatibility'
|
18
24
|
|
19
25
|
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
20
26
|
# invalid state of a Payment. In the future this should be removed.
|
21
27
|
StateMachines::Machine.ignore_method_conflicts = true
|
22
28
|
|
23
29
|
module Spree
|
24
|
-
mattr_accessor :user_class
|
30
|
+
mattr_accessor :user_class, default: 'Spree::LegacyUser'
|
25
31
|
|
26
32
|
def self.user_class
|
27
33
|
if @@user_class.is_a?(Class)
|
@@ -31,6 +37,16 @@ module Spree
|
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
40
|
+
# Load the same version defaults for all available Solidus components
|
41
|
+
#
|
42
|
+
# @see Spree::Preferences::Configuration#load_defaults
|
43
|
+
def self.load_defaults(version)
|
44
|
+
Spree::Config.load_defaults(version)
|
45
|
+
Spree::Frontend::Config.load_defaults(version) if defined?(Spree::Frontend::Config)
|
46
|
+
Spree::Backend::Config.load_defaults(version) if defined?(Spree::Backend::Config)
|
47
|
+
Spree::Api::Config.load_defaults(version) if defined?(Spree::Api::Config)
|
48
|
+
end
|
49
|
+
|
34
50
|
# Used to configure Spree.
|
35
51
|
#
|
36
52
|
# Example:
|
@@ -46,10 +62,25 @@ module Spree
|
|
46
62
|
end
|
47
63
|
|
48
64
|
module Core
|
49
|
-
|
65
|
+
# @api private
|
66
|
+
def self.has_install_generator_been_run?(rails_paths: Rails.application.paths, initializer_name: 'spree.rb', dummy_app_name: 'DummyApp::Application')
|
67
|
+
does_spree_initializer_exist?(rails_paths, initializer_name) ||
|
68
|
+
running_solidus_test_suite_with_dummy_app?(dummy_app_name)
|
69
|
+
end
|
50
70
|
|
51
|
-
|
52
|
-
|
71
|
+
def self.running_solidus_test_suite_with_dummy_app?(dummy_app_name)
|
72
|
+
Rails.env.test? && Rails.application.class.name == dummy_app_name
|
73
|
+
end
|
74
|
+
private_class_method :running_solidus_test_suite_with_dummy_app?
|
75
|
+
|
76
|
+
def self.does_spree_initializer_exist?(rails_paths, initializer_name)
|
77
|
+
rails_paths['config/initializers'].any? do |path|
|
78
|
+
File.exist?(Pathname.new(path).join(initializer_name))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
private_class_method :does_spree_initializer_exist?
|
82
|
+
|
83
|
+
class GatewayError < RuntimeError; end
|
53
84
|
end
|
54
85
|
end
|
55
86
|
|
@@ -61,10 +92,10 @@ require 'spree/core/environment_extension'
|
|
61
92
|
require 'spree/core/environment/calculators'
|
62
93
|
require 'spree/core/environment/promotions'
|
63
94
|
require 'spree/core/environment'
|
64
|
-
require 'spree/promo/environment'
|
65
95
|
require 'spree/migrations'
|
66
96
|
require 'spree/migration_helpers'
|
67
97
|
require 'spree/event'
|
98
|
+
require 'spree/bus'
|
68
99
|
require 'spree/core/engine'
|
69
100
|
|
70
101
|
require 'spree/i18n'
|
@@ -75,10 +106,8 @@ require 'spree/permitted_attributes'
|
|
75
106
|
require 'spree/core/importer'
|
76
107
|
require 'spree/core/permalinks'
|
77
108
|
require 'spree/core/product_duplicator'
|
78
|
-
require 'spree/core/current_store'
|
79
109
|
require 'spree/core/controller_helpers/auth'
|
80
110
|
require 'spree/core/controller_helpers/common'
|
81
|
-
require 'spree/core/controller_helpers/current_host'
|
82
111
|
require 'spree/core/controller_helpers/order'
|
83
112
|
require 'spree/core/controller_helpers/payment_parameters'
|
84
113
|
require 'spree/core/controller_helpers/pricing'
|
data/lib/spree/deprecation.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'active_support/deprecation'
|
4
4
|
|
5
5
|
module Spree
|
6
|
-
Deprecation = ActiveSupport::Deprecation.new('
|
6
|
+
Deprecation = ActiveSupport::Deprecation.new('4.0', 'Solidus')
|
7
7
|
|
8
8
|
# This DeprecatedInstanceVariableProxy transforms instance variable to
|
9
9
|
# deprecated instance variable.
|
@@ -7,11 +7,6 @@ module Spree
|
|
7
7
|
@subscriber_registry ||= Spree::Event::SubscriberRegistry.new
|
8
8
|
end
|
9
9
|
|
10
|
-
def subscribers
|
11
|
-
Spree::Deprecation.warn("`Spree::Config.events.subscribers` is deprecated. Please use `Spree::Config.events.subscriber_registry`.", caller)
|
12
|
-
subscriber_registry.send(:registry).keys.map { |module_name| module_name.constantize }
|
13
|
-
end
|
14
|
-
|
15
10
|
attr_writer :adapter, :suffix, :autoload_subscribers
|
16
11
|
|
17
12
|
def autoload_subscribers
|
@@ -59,14 +59,6 @@ module Spree
|
|
59
59
|
# end
|
60
60
|
# end
|
61
61
|
def event_action(method_name, event_name: nil)
|
62
|
-
mattr_writer "#{method_name}_handler"
|
63
|
-
|
64
|
-
define_method "#{method_name}_handler" do
|
65
|
-
Spree::Deprecation.warn("#{name}.#{method_name}_handler and #{name}.#{method_name}_handler= from the old events mapping interface are deprecated. Please use the new mapping stored in Spree::Event.subscribers.", caller)
|
66
|
-
|
67
|
-
class_variable_get("@@#{method_name}_handler")
|
68
|
-
end
|
69
|
-
|
70
62
|
event_actions[method_name] = (event_name || method_name).to_s
|
71
63
|
end
|
72
64
|
|
@@ -89,16 +81,6 @@ module Spree
|
|
89
81
|
def deactivate(event_action_name = nil)
|
90
82
|
Spree::Event.subscriber_registry.deactivate_subscriber(self, event_action_name)
|
91
83
|
end
|
92
|
-
|
93
|
-
def subscribe!
|
94
|
-
Spree::Deprecation.warn("#{self}.subscribe! is deprecated. Please use `#{self}.activate`.", caller)
|
95
|
-
activate
|
96
|
-
end
|
97
|
-
|
98
|
-
def unsubscribe!
|
99
|
-
Spree::Deprecation.warn("#{self}.unsubscribe! is deprecated. Please use `#{self}.deactivate`.", caller)
|
100
|
-
deactivate
|
101
|
-
end
|
102
84
|
end
|
103
85
|
end
|
104
86
|
end
|