solidus_core 2.11.10 → 3.3.1
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.
- 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
@@ -35,7 +35,9 @@ module Spree
|
|
35
35
|
subscription = Spree::Event.subscribe(event_name) { |event| subscriber.send(event_action, event) }
|
36
36
|
|
37
37
|
# deprecated mappings, to be removed when Solidus 2.10 is not supported anymore:
|
38
|
-
subscriber.
|
38
|
+
if subscriber.respond_to?("#{event_action}_handler=")
|
39
|
+
subscriber.send("#{event_action}_handler=", subscription)
|
40
|
+
end
|
39
41
|
|
40
42
|
registry[subscriber.name][event_action] = subscription
|
41
43
|
end
|
@@ -62,13 +64,11 @@ module Spree
|
|
62
64
|
# Loading the files has the side effect of adding their module to the
|
63
65
|
# list in Spree::Event.subscribers.
|
64
66
|
def require_subscriber_files
|
65
|
-
|
67
|
+
require_dependency(
|
68
|
+
Spree::Core::Engine.root.join('app', 'subscribers', 'spree', 'mailer_subscriber.rb')
|
69
|
+
)
|
66
70
|
|
67
|
-
|
68
|
-
# rubocop:disable Rails/DynamicFindBy
|
69
|
-
solidus_core_dir = Gem::Specification.find_by_name('solidus_core').gem_dir
|
70
|
-
# rubocop:enable Rails/DynamicFindBy
|
71
|
-
Dir.glob(File.join(solidus_core_dir, pattern)) { |c| require_dependency(c.to_s) }
|
71
|
+
pattern = "app/subscribers/**/*_subscriber.rb"
|
72
72
|
|
73
73
|
# Load application subscribers, only when the flag is set to true:
|
74
74
|
if Spree::Config.events.autoload_subscribers
|
data/lib/spree/event.rb
CHANGED
@@ -21,7 +21,7 @@ module Spree
|
|
21
21
|
#
|
22
22
|
# @example Trigger an event named 'order_finalized'
|
23
23
|
# Spree::Event.fire 'order_finalized', order: @order do
|
24
|
-
# @order.
|
24
|
+
# @order.complete!
|
25
25
|
# end
|
26
26
|
def fire(event_name, opts = {})
|
27
27
|
adapter.fire normalize_name(event_name), opts do
|
@@ -29,20 +29,6 @@ module Spree
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
# @deprecated Loads all Solidus' core and application's event subscribers files.
|
33
|
-
# The latter are loaded automatically only when the preference
|
34
|
-
# Spree::Config.events.autoload_subscribers is set to a truthy value.
|
35
|
-
#
|
36
|
-
# Files must be placed under the directory `app/subscribers` and their
|
37
|
-
# name must end with `_subscriber.rb`.
|
38
|
-
#
|
39
|
-
# Loading the files has the side effect of adding their module to the
|
40
|
-
# list in Spree::Event.subscribers.
|
41
|
-
def require_subscriber_files
|
42
|
-
Spree::Deprecation.warn("#{self}.require_subscriber_files is deprecated and will be removed in Solidus 3.0.", caller)
|
43
|
-
subscriber_registry.send(:require_subscriber_files)
|
44
|
-
end
|
45
|
-
|
46
32
|
# Subscribe to an event with the given name. The provided block is executed
|
47
33
|
# every time the subscribed event is fired.
|
48
34
|
#
|
@@ -114,23 +100,6 @@ module Spree
|
|
114
100
|
Spree::Config.events.adapter
|
115
101
|
end
|
116
102
|
|
117
|
-
# The suffix used for namespacing Solidus events, defaults to
|
118
|
-
# `.spree`
|
119
|
-
#
|
120
|
-
# @see Spree::Event::Configuration#suffix
|
121
|
-
def suffix
|
122
|
-
Spree::Deprecation.warn "This method is deprecated and will be removed. Please use Event::Adapters::ActiveSupportNotifications#suffix"
|
123
|
-
Spree::Config.events.suffix
|
124
|
-
end
|
125
|
-
|
126
|
-
# @deprecated
|
127
|
-
# @!attribute [r] subscribers
|
128
|
-
# @return [Array<Spree::Event::Subscriber>] A list of subscribers used to support class reloading for Spree::Event::Subscriber instances
|
129
|
-
def subscribers
|
130
|
-
Spree::Deprecation.warn("`#{self}.subscribers` is deprecated. Please use `#{self}.subscriber_registry` instead.", caller)
|
131
|
-
Spree::Config.events.subscribers
|
132
|
-
end
|
133
|
-
|
134
103
|
# @!attribute [r] subscribers
|
135
104
|
# @return <Spree::Event::SubscriberRegistry> The registry for supporting class reloading for Spree::Event::Subscriber instances
|
136
105
|
def subscriber_registry
|
data/lib/spree/i18n.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'i18n'
|
4
|
-
require 'active_support/core_ext/array/extract_options'
|
5
|
-
require 'action_view'
|
6
4
|
|
7
5
|
module Spree
|
8
6
|
def self.i18n_available_locales
|
@@ -11,29 +9,9 @@ module Spree
|
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
14
|
-
class TranslationHelperWrapper # :nodoc:
|
15
|
-
include ActionView::Helpers::TranslationHelper
|
16
|
-
end
|
17
|
-
|
18
12
|
# This value is used as a count for the pluralization helpers related to I18n
|
19
13
|
# ex: Spree::Order.model_name.human(count: Spree::I18N_GENERIC_PLURAL)
|
20
14
|
# Related to Solidus issue #1164, this is needed to avoid problems with
|
21
15
|
# some pluralization calculators
|
22
16
|
I18N_GENERIC_PLURAL = 2.1
|
23
|
-
|
24
|
-
class << self
|
25
|
-
# Add spree namespace and delegate to Rails TranslationHelper for some nice
|
26
|
-
# extra functionality. e.g return reasonable strings for missing translations
|
27
|
-
|
28
|
-
def translate(key, options = {})
|
29
|
-
Spree::Deprecation.warn <<-WARN.squish
|
30
|
-
Spree.t & Spree.translate have been deprecated.
|
31
|
-
Instead use I18n.t('spree.your_translation_key')
|
32
|
-
WARN
|
33
|
-
options[:scope] = [:spree, *options[:scope]]
|
34
|
-
TranslationHelperWrapper.new.translate(key, **options)
|
35
|
-
end
|
36
|
-
|
37
|
-
alias_method :t, :translate
|
38
|
-
end
|
39
17
|
end
|
data/lib/spree/migrations.rb
CHANGED
@@ -23,16 +23,18 @@ module Spree
|
|
23
23
|
# Shouldn't run on test mode because migrations inside engine don't have
|
24
24
|
# engine name on the file name
|
25
25
|
def check
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
26
|
+
return unless File.directory?(app_dir)
|
27
|
+
return if missing_migrations.empty?
|
28
|
+
return if ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK']
|
29
|
+
|
30
|
+
prefix = "[WARNING #{engine_name.capitalize}]"
|
31
|
+
warn <<~WARN
|
32
|
+
#{prefix} Missing migrations.
|
33
|
+
#{missing_migrations.map {|m| "#{prefix} - #{m}"}.join("\n")}
|
34
|
+
#{prefix}
|
35
|
+
#{prefix} Run `bin/rails railties:install:migrations` to get them.
|
36
|
+
#{prefix} You can silence this warning by setting the `SOLIDUS_SKIP_MIGRATIONS_CHECK` environment variable.
|
37
|
+
WARN
|
36
38
|
end
|
37
39
|
|
38
40
|
def missing_migrations
|
@@ -66,7 +68,7 @@ module Spree
|
|
66
68
|
end
|
67
69
|
|
68
70
|
def app_dir
|
69
|
-
|
71
|
+
Spree::Config.migration_path
|
70
72
|
end
|
71
73
|
|
72
74
|
def engine_dir
|
data/lib/spree/money.rb
CHANGED
@@ -6,7 +6,6 @@ module Spree
|
|
6
6
|
class Money
|
7
7
|
include Comparable
|
8
8
|
DifferentCurrencyError = Class.new(StandardError)
|
9
|
-
RUBY_NUMERIC_STRING = /\A-?\d+(\.\d+)?\z/
|
10
9
|
|
11
10
|
class <<self
|
12
11
|
attr_accessor :default_formatting_rules
|
@@ -37,15 +36,8 @@ module Spree
|
|
37
36
|
@money = amount
|
38
37
|
else
|
39
38
|
currency = (options[:currency] || Spree::Config[:currency])
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
@money = Spree::Money.parse_to_money(amount, currency)
|
44
|
-
Spree::Deprecation.warn <<-WARN.squish, caller
|
45
|
-
Spree::Money was initialized with #{amount.inspect}, which will not be supported in the future.
|
46
|
-
Instead use Spree::Money.new(#{@money.to_s.inspect}, options) or Spree::Money.parse(#{amount.inspect})
|
47
|
-
WARN
|
48
|
-
end
|
39
|
+
|
40
|
+
@money = Monetize.from_string(amount, currency)
|
49
41
|
end
|
50
42
|
@options = Spree::Money.default_formatting_rules.merge(options)
|
51
43
|
end
|
@@ -80,14 +72,7 @@ module Spree
|
|
80
72
|
def to_html(options = { html_wrap: true })
|
81
73
|
output = format(options)
|
82
74
|
# Maintain compatibility by checking html option renamed to html_wrap.
|
83
|
-
if options[:
|
84
|
-
Spree::Deprecation.warn <<-WARN.squish, caller
|
85
|
-
Spree::Money#to_html called with Spree::Money#to_html(html: #{options[:html].inspect}),
|
86
|
-
which will not be supported in the future.
|
87
|
-
Instead use :html_wrap e.g. Spree::Money#to_html(html_wrap: #{options[:html].inspect})
|
88
|
-
WARN
|
89
|
-
end
|
90
|
-
if options[:html_wrap] || options[:html]
|
75
|
+
if options[:html_wrap]
|
91
76
|
output = output.html_safe
|
92
77
|
end
|
93
78
|
output
|
@@ -7,7 +7,14 @@ module Spree
|
|
7
7
|
can :read, Country
|
8
8
|
can :read, OptionType
|
9
9
|
can :read, OptionValue
|
10
|
-
can :create, Order
|
10
|
+
can :create, Order do |order, token|
|
11
|
+
# same user, or both nil
|
12
|
+
order.user == user ||
|
13
|
+
# guest checkout order
|
14
|
+
order.email.present? ||
|
15
|
+
# via API, just like with show and update
|
16
|
+
(order.guest_token.present? && token == order.guest_token)
|
17
|
+
end
|
11
18
|
can [:show, :update], Order, Order.where(user: user) do |order, token|
|
12
19
|
order.user == user || (order.guest_token.present? && token == order.guest_token)
|
13
20
|
end
|
@@ -39,8 +39,7 @@ module Spree
|
|
39
39
|
mattr_reader(*ATTRIBUTES)
|
40
40
|
|
41
41
|
@@address_attributes = [
|
42
|
-
:id, :name, :
|
43
|
-
:address1, :address2, :city, :country_id, :state_id,
|
42
|
+
:id, :name, :address1, :address2, :city, :country_id, :state_id,
|
44
43
|
:zipcode, :phone, :state_name, :country_iso, :alternative_phone, :company,
|
45
44
|
country: [:iso, :name, :iso3, :iso_name],
|
46
45
|
state: [:name, :abbr]
|
@@ -52,7 +51,13 @@ module Spree
|
|
52
51
|
:month, :year, :expiry, :first_name, :last_name, :name
|
53
52
|
]
|
54
53
|
|
55
|
-
@@customer_return_attributes = [
|
54
|
+
@@customer_return_attributes = [
|
55
|
+
:stock_location_id, return_items_attributes: [
|
56
|
+
:id, :inventory_unit_id, :return_authorization_id, :returned, :amount,
|
57
|
+
:reception_status_event, :acceptance_status, :exchange_variant_id,
|
58
|
+
:resellable, :return_reason_id
|
59
|
+
]
|
60
|
+
]
|
56
61
|
|
57
62
|
@@image_attributes = [:alt, :attachment, :position, :viewable_type, :viewable_id]
|
58
63
|
|
@@ -60,16 +65,16 @@ module Spree
|
|
60
65
|
|
61
66
|
@@line_item_attributes = [:id, :variant_id, :quantity]
|
62
67
|
|
63
|
-
@@option_type_attributes = [:name, :presentation, :option_values_attributes]
|
64
|
-
|
65
68
|
@@option_value_attributes = [:name, :presentation]
|
66
69
|
|
70
|
+
@@option_type_attributes = [:name, :presentation, option_values_attributes: option_value_attributes]
|
71
|
+
|
67
72
|
@@payment_attributes = [:amount, :payment_method_id, :payment_method]
|
68
73
|
|
69
74
|
@@product_properties_attributes = [:property_name, :value, :position]
|
70
75
|
|
71
76
|
@@product_attributes = [
|
72
|
-
:name, :description, :available_on, :discontinue_on, :
|
77
|
+
:name, :description, :available_on, :discontinue_on, :meta_description,
|
73
78
|
:meta_keywords, :price, :sku, :deleted_at,
|
74
79
|
:option_values_hash, :weight, :height, :width, :depth,
|
75
80
|
:shipping_category_id, :tax_category_id,
|
@@ -90,7 +95,7 @@ module Spree
|
|
90
95
|
:number, :month, :year, :expiry, :verification_value,
|
91
96
|
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
92
97
|
:gateway_payment_profile_id, :last_digits, :name, :encrypted_data,
|
93
|
-
:
|
98
|
+
:wallet_payment_source_id, address_attributes: address_attributes
|
94
99
|
]
|
95
100
|
|
96
101
|
@@stock_item_attributes = [:variant, :stock_location, :backorderable, :variant_id]
|
@@ -126,8 +131,11 @@ module Spree
|
|
126
131
|
@@variant_attributes = [
|
127
132
|
:name, :presentation, :cost_price, :lock_version,
|
128
133
|
:position, :track_inventory,
|
129
|
-
:product_id, :product, :
|
130
|
-
:weight, :height, :width, :depth, :sku, :cost_currency,
|
134
|
+
:product_id, :product, :price,
|
135
|
+
:weight, :height, :width, :depth, :sku, :cost_currency,
|
136
|
+
:tax_category_id, :shipping_category_id,
|
137
|
+
option_value_ids: [],
|
138
|
+
options: [:name, :value]
|
131
139
|
]
|
132
140
|
|
133
141
|
@@checkout_address_attributes = [
|
@@ -143,61 +151,11 @@ module Spree
|
|
143
151
|
]
|
144
152
|
|
145
153
|
@@checkout_payment_attributes = [
|
146
|
-
:coupon_code,
|
147
154
|
payments_attributes: payment_attributes + [
|
148
155
|
source_attributes: source_attributes
|
149
156
|
]
|
150
157
|
]
|
151
158
|
|
152
159
|
@@checkout_confirm_attributes = []
|
153
|
-
|
154
|
-
def self.checkout_attributes
|
155
|
-
Spree::Deprecation.warn <<-WARN.squish, caller
|
156
|
-
checkout_attributes is deprecated, please use the permitted
|
157
|
-
attributes set for the specific step that needs to be updated.
|
158
|
-
|
159
|
-
E.g. permitted_checkout_address_attributes
|
160
|
-
WARN
|
161
|
-
|
162
|
-
CheckoutAdditionalAttributes.new(
|
163
|
-
checkout_address_attributes +
|
164
|
-
checkout_delivery_attributes +
|
165
|
-
checkout_payment_attributes +
|
166
|
-
checkout_confirm_attributes
|
167
|
-
)
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
class CheckoutAdditionalAttributes < Array
|
172
|
-
def <<(*attributes)
|
173
|
-
super
|
174
|
-
|
175
|
-
inject_attributes_to_all_steps(attributes, :<<)
|
176
|
-
end
|
177
|
-
|
178
|
-
def push(*attributes)
|
179
|
-
super
|
180
|
-
|
181
|
-
inject_attributes_to_all_steps(attributes, :push)
|
182
|
-
end
|
183
|
-
alias append push
|
184
|
-
|
185
|
-
def prepend(*attributes)
|
186
|
-
super
|
187
|
-
|
188
|
-
inject_attributes_to_all_steps(attributes, :prepend)
|
189
|
-
end
|
190
|
-
alias unshift prepend
|
191
|
-
|
192
|
-
private
|
193
|
-
|
194
|
-
def inject_attributes_to_all_steps(attributes, method_name)
|
195
|
-
attributes.each do |attribute|
|
196
|
-
PermittedAttributes.checkout_address_attributes.send(method_name, attribute)
|
197
|
-
PermittedAttributes.checkout_delivery_attributes.send(method_name, attribute)
|
198
|
-
PermittedAttributes.checkout_payment_attributes.send(method_name, attribute)
|
199
|
-
PermittedAttributes.checkout_confirm_attributes.send(method_name, attribute)
|
200
|
-
end
|
201
|
-
end
|
202
160
|
end
|
203
161
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'spree/core/versioned_value'
|
3
4
|
require 'spree/preferences/preferable'
|
4
5
|
|
5
6
|
module Spree::Preferences
|
@@ -29,6 +30,45 @@ module Spree::Preferences
|
|
29
30
|
class Configuration
|
30
31
|
include Spree::Preferences::Preferable
|
31
32
|
|
33
|
+
# @!attribute [r] loaded_defaults
|
34
|
+
# @return [String]
|
35
|
+
# Some configuration defaults can be added or changed when a new Solidus
|
36
|
+
# version is released. Setting this to an older Solidus version allows keeping
|
37
|
+
# backward compatibility until the application code is updated to the new
|
38
|
+
# defaults. Set via {#load_defaults}
|
39
|
+
attr_reader :loaded_defaults
|
40
|
+
|
41
|
+
# @api private
|
42
|
+
attr_reader :load_defaults_called
|
43
|
+
|
44
|
+
def initialize
|
45
|
+
@loaded_defaults = Spree.solidus_version
|
46
|
+
@load_defaults_called = false
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [String] Solidus version from which take defaults when preferences
|
50
|
+
# are not overriden by the user.
|
51
|
+
# @see #loaded_defaults
|
52
|
+
def load_defaults(version)
|
53
|
+
@loaded_defaults = version
|
54
|
+
@load_defaults_called = true
|
55
|
+
reset
|
56
|
+
end
|
57
|
+
|
58
|
+
def check_load_defaults_called(instance_constant_name = nil)
|
59
|
+
return if load_defaults_called || !Spree::Core.has_install_generator_been_run?
|
60
|
+
|
61
|
+
target_name = instance_constant_name || "#{self.class.name}.new"
|
62
|
+
Spree::Deprecation.warn <<~MSG
|
63
|
+
It's recommended that you explicitly load the default configuration for
|
64
|
+
your current Solidus version. You can do it by adding the following call
|
65
|
+
to your Solidus initializer within the #{target_name} block:
|
66
|
+
|
67
|
+
config.load_defaults('#{Spree.solidus_version}')
|
68
|
+
|
69
|
+
MSG
|
70
|
+
end
|
71
|
+
|
32
72
|
# @yield [config] Yields this configuration object to a block
|
33
73
|
def configure
|
34
74
|
yield(self)
|
@@ -79,6 +119,37 @@ module Spree::Preferences
|
|
79
119
|
end
|
80
120
|
end
|
81
121
|
|
122
|
+
def self.inherited(klass)
|
123
|
+
klass.instance_variable_set(:@versioned_preferences, [])
|
124
|
+
class << klass
|
125
|
+
attr_reader :versioned_preferences
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Adds a preference with different default depending on {#loaded_defaults}
|
130
|
+
#
|
131
|
+
# This method is a specialized version of {.preference} that generates a
|
132
|
+
# different default value for different Solidus versions. For instance, in
|
133
|
+
# the example, `foo`'s default was `true` until version 3.0.0.alpha, when it
|
134
|
+
# became `false`:
|
135
|
+
#
|
136
|
+
# @example
|
137
|
+
# versioned_preference :foo, :boolean, initial_value: true, boundaries: { "3.0.0.alpha" => false }
|
138
|
+
#
|
139
|
+
# @see .preference
|
140
|
+
# @see #loaded_defaults
|
141
|
+
# @see Spree::Core::VersionedValue
|
142
|
+
def self.versioned_preference(name, type, initial_value:, boundaries:, **options)
|
143
|
+
@versioned_preferences << name
|
144
|
+
preference(
|
145
|
+
name,
|
146
|
+
type,
|
147
|
+
options.merge(
|
148
|
+
default: by_version(initial_value, boundaries)
|
149
|
+
)
|
150
|
+
)
|
151
|
+
end
|
152
|
+
|
82
153
|
def self.preference(name, type, options = {})
|
83
154
|
super
|
84
155
|
alias_method name.to_s, "preferred_#{name}"
|
@@ -103,5 +174,18 @@ module Spree::Preferences
|
|
103
174
|
class_name
|
104
175
|
end
|
105
176
|
end
|
177
|
+
|
178
|
+
def self.by_version(*args)
|
179
|
+
proc do |loaded_defaults|
|
180
|
+
Spree::Core::VersionedValue.new(*args).call(loaded_defaults)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
private_class_method :by_version
|
184
|
+
|
185
|
+
private
|
186
|
+
|
187
|
+
def context_for_default
|
188
|
+
[loaded_defaults]
|
189
|
+
end
|
106
190
|
end
|
107
191
|
end
|
@@ -10,6 +10,13 @@ module Spree
|
|
10
10
|
#
|
11
11
|
# A class including Preferable must implement #preferences which should return
|
12
12
|
# an object responding to .fetch(key), []=(key, val), and .delete(key).
|
13
|
+
# If #preferences is initialized with `default_preferences` and one of the
|
14
|
+
# preferences is another preference, it will cause a stack level too deep error.
|
15
|
+
# To avoid it do not memoize #preferences.
|
16
|
+
#
|
17
|
+
# It may also define a `#context_for_default` method. It should return an
|
18
|
+
# array with the arguments to be provided to a proc used as the `default:`
|
19
|
+
# keyword for a preference.
|
13
20
|
#
|
14
21
|
# The generated writer method performs typecasting before assignment into the
|
15
22
|
# preferences object.
|
@@ -107,6 +114,8 @@ module Spree
|
|
107
114
|
end
|
108
115
|
|
109
116
|
# @return [Hash{Symbol => Object}] Default for all preferences defined on this class
|
117
|
+
# This may raise an infinite loop error if any of the defaults are
|
118
|
+
# dependent on other preferences defaults.
|
110
119
|
def default_preferences
|
111
120
|
Hash[
|
112
121
|
defined_preferences.map do |preference|
|
@@ -176,6 +185,10 @@ module Spree
|
|
176
185
|
value
|
177
186
|
end
|
178
187
|
end
|
188
|
+
|
189
|
+
def context_for_default
|
190
|
+
[].freeze
|
191
|
+
end
|
179
192
|
end
|
180
193
|
end
|
181
194
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'spree/deprecation'
|
3
4
|
require 'spree/encryptor'
|
4
5
|
|
5
6
|
module Spree::Preferences
|
@@ -26,8 +27,38 @@ module Spree::Preferences
|
|
26
27
|
options[:default] = preference_encryptor.encrypt(options[:default])
|
27
28
|
end
|
28
29
|
|
29
|
-
default =
|
30
|
-
|
30
|
+
default = begin
|
31
|
+
given = options[:default]
|
32
|
+
if ancestors.include?(Spree::Preferences::Configuration) &&
|
33
|
+
given.is_a?(Proc) &&
|
34
|
+
given.lambda? &&
|
35
|
+
given.arity.zero?
|
36
|
+
Spree::Deprecation.warn <<~MSG
|
37
|
+
The arity of a proc given as the default for a preference
|
38
|
+
has changed from 0 to 1 on Solidus 3.1. The Solidus
|
39
|
+
version for the loaded preference defaults is given as the
|
40
|
+
proc's argument from this point on.
|
41
|
+
|
42
|
+
If you don't need to return a different default value
|
43
|
+
depending on the loaded Solidus version, you can change
|
44
|
+
the proc so that it doesn't have lambda semantics (lambdas
|
45
|
+
raise when extra arguments are supplied, while raw procs
|
46
|
+
don't). E.g.:
|
47
|
+
|
48
|
+
preference :foo, :string, default: proc { true }
|
49
|
+
|
50
|
+
If you want to branch on the provided Solidus version, you can do like the following:
|
51
|
+
|
52
|
+
versioned_preference :foo, :string, initial_value: true, boundaries: { "3.2.0" => false }
|
53
|
+
|
54
|
+
MSG
|
55
|
+
->(_default_context) { given.call }
|
56
|
+
elsif given.is_a?(Proc)
|
57
|
+
given
|
58
|
+
else
|
59
|
+
proc { given }
|
60
|
+
end
|
61
|
+
end
|
31
62
|
|
32
63
|
# The defined preferences on a class are all those defined directly on
|
33
64
|
# that class as well as those defined on ancestors.
|
@@ -44,7 +75,7 @@ module Spree::Preferences
|
|
44
75
|
# is a pending preference before going to default
|
45
76
|
define_method preference_getter_method(name) do
|
46
77
|
value = preferences.fetch(name) do
|
47
|
-
default
|
78
|
+
instance_exec(*context_for_default, &default)
|
48
79
|
end
|
49
80
|
value = preference_encryptor.decrypt(value) if preference_encryptor.present?
|
50
81
|
value
|
@@ -60,7 +91,9 @@ module Spree::Preferences
|
|
60
91
|
preferences_will_change! if respond_to?(:preferences_will_change!)
|
61
92
|
end
|
62
93
|
|
63
|
-
define_method preference_default_getter_method(name)
|
94
|
+
define_method preference_default_getter_method(name) do
|
95
|
+
instance_exec(*context_for_default, &default)
|
96
|
+
end
|
64
97
|
|
65
98
|
define_method preference_type_getter_method(name) do
|
66
99
|
type
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Preferences
|
5
|
+
class PreferenceDifferentiator
|
6
|
+
attr_reader :config_class
|
7
|
+
|
8
|
+
def initialize(config_class)
|
9
|
+
@config_class = config_class
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(from:, to:)
|
13
|
+
preferences_from = config_class.new.load_defaults(from)
|
14
|
+
preferences_to = config_class.new.load_defaults(to)
|
15
|
+
config_class.versioned_preferences.reduce({}) do |changes, pref_key|
|
16
|
+
value_from = preferences_from[pref_key]
|
17
|
+
value_to = preferences_to[pref_key]
|
18
|
+
if value_from == value_to
|
19
|
+
changes
|
20
|
+
else
|
21
|
+
changes.merge(
|
22
|
+
pref_key => { from: value_from, to: value_to }
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -7,13 +7,8 @@ module Spree
|
|
7
7
|
attr_reader :preferences
|
8
8
|
|
9
9
|
def initialize(klass, hash)
|
10
|
-
|
11
|
-
hash.
|
12
|
-
if !klass.defined_preferences.include?(key)
|
13
|
-
raise "Preference #{key.inspect} is not defined on #{klass}"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
@preferences = hash
|
10
|
+
@klass = klass
|
11
|
+
@preferences = hash.symbolize_keys
|
17
12
|
end
|
18
13
|
|
19
14
|
def fetch(key, &block)
|
@@ -27,6 +22,8 @@ module Spree
|
|
27
22
|
def to_hash
|
28
23
|
@preferences.deep_dup
|
29
24
|
end
|
25
|
+
|
26
|
+
delegate :keys, to: :@preferences
|
30
27
|
end
|
31
28
|
|
32
29
|
def initialize
|
@@ -36,14 +33,32 @@ module Spree
|
|
36
33
|
end
|
37
34
|
|
38
35
|
def add(klass, name, preferences)
|
39
|
-
|
40
|
-
raise "Static model preference '#{name}' on #{klass} is already defined" if @store[klass.to_s][name]
|
41
|
-
@store[klass.to_s][name] = Definition.new(klass, preferences)
|
36
|
+
@store[klass.to_s][name] = Definition.new(klass.to_s, preferences)
|
42
37
|
end
|
43
38
|
|
44
39
|
def for_class(klass)
|
45
40
|
@store[klass.to_s]
|
46
41
|
end
|
42
|
+
|
43
|
+
def validate!
|
44
|
+
@store.keys.map(&:constantize).each do |klass|
|
45
|
+
validate_for_class!(klass)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def validate_for_class!(klass)
|
52
|
+
for_class(klass).each do |name, preferences|
|
53
|
+
klass_keys = klass.defined_preferences.map(&:to_s)
|
54
|
+
extra_keys = preferences.keys.map(&:to_s) - klass_keys
|
55
|
+
next if extra_keys.empty?
|
56
|
+
|
57
|
+
raise \
|
58
|
+
"Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(', ')} " \
|
59
|
+
"(expected keys: #{klass_keys.sort.join(', ')})"
|
60
|
+
end
|
61
|
+
end
|
47
62
|
end
|
48
63
|
end
|
49
64
|
end
|