solidus_core 4.1.6 → 4.5.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/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/helpers/spree/base_helper.rb +2 -2
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +1 -1
- data/app/mailers/spree/order_mailer.rb +3 -3
- data/app/mailers/spree/reimbursement_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/named_type.rb +2 -0
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +8 -9
- data/app/models/concerns/spree/user_methods.rb +3 -3
- data/app/models/spree/address.rb +10 -8
- data/app/models/spree/adjustment.rb +15 -65
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/credit_card.rb +12 -9
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +4 -4
- data/app/models/spree/inventory_unit.rb +2 -2
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +22 -4
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/null_promotion_adjuster.rb +13 -0
- data/app/models/spree/null_promotion_advertiser.rb +9 -0
- data/app/models/spree/null_promotion_finder.rb +9 -0
- data/app/models/spree/null_promotion_handler.rb +44 -0
- data/app/models/spree/option_value.rb +1 -0
- data/app/models/spree/order.rb +54 -36
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +6 -4
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +9 -9
- data/app/models/spree/order_taxation.rb +1 -0
- data/app/models/spree/order_updater.rb +19 -40
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment.rb +3 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +3 -1
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/product.rb +13 -9
- data/app/models/spree/refund.rb +3 -1
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +4 -4
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +6 -1
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/return_item.rb +10 -10
- data/app/models/spree/return_reason.rb +6 -1
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +9 -7
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +2 -2
- data/app/models/spree/stock/simple_coordinator.rb +36 -22
- data/app/models/spree/stock_item.rb +1 -0
- data/app/models/spree/stock_location.rb +5 -5
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +17 -15
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_reason.rb +6 -1
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/tax/tax_helpers.rb +12 -1
- data/app/models/spree/tax_calculator/default.rb +3 -3
- data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +7 -3
- data/app/models/spree/taxon.rb +22 -2
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +2 -2
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/variant/scopes.rb +4 -0
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +21 -8
- data/app/models/spree/wallet.rb +2 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
- data/config/locales/en.yml +33 -90
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +1 -1
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
- data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
- data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
- data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
- data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
- data/db/seeds.rb +1 -0
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/install_generator.rb +64 -15
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
- data/lib/generators/solidus/update/update_generator.rb +1 -1
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
- data/lib/spree/app_configuration.rb +102 -67
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -61
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +13 -5
- data/lib/spree/core/environment/calculators.rb +35 -3
- data/lib/spree/core/environment/promotions.rb +25 -4
- data/lib/spree/core/environment_extension.rb +16 -2
- data/lib/spree/core/importer/order.rb +5 -5
- data/lib/spree/core/importer/product.rb +3 -3
- data/lib/spree/core/nested_class_set.rb +28 -0
- data/lib/spree/core/null_promotion_configuration.rb +84 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/variant.rb +2 -2
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -251
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +2 -14
- data/lib/spree/deprecator.rb +9 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +1 -1
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -30
- data/lib/spree/permission_sets/configuration_display.rb +5 -41
- data/lib/spree/permission_sets/configuration_management.rb +5 -40
- data/lib/spree/permission_sets/dashboard_display.rb +5 -14
- data/lib/spree/permission_sets/default_customer.rb +5 -71
- data/lib/spree/permission_sets/order_display.rb +5 -38
- data/lib/spree/permission_sets/order_management.rb +5 -38
- data/lib/spree/permission_sets/product_display.rb +5 -31
- data/lib/spree/permission_sets/product_management.rb +5 -35
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
- data/lib/spree/permission_sets/stock_display.rb +5 -14
- data/lib/spree/permission_sets/stock_management.rb +5 -14
- data/lib/spree/permission_sets/super_user.rb +5 -14
- data/lib/spree/permission_sets/user_display.rb +5 -15
- data/lib/spree/permission_sets/user_management.rb +5 -32
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +21 -9
- data/lib/spree/preferences/configuration.rb +4 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/capybara_ext.rb +11 -1
- data/lib/spree/testing_support/common_rake.rb +1 -0
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +37 -46
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
- data/lib/spree/testing_support/dummy_app.rb +33 -19
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
- data/lib/spree/testing_support/factories/order_factory.rb +13 -24
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +3 -3
- data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
- data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
- data/lib/tasks/colorado_delivery_fee.rake +2 -2
- data/solidus_core.gemspec +7 -10
- metadata +107 -109
- data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
- data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
- data/app/models/spree/calculator/distributed_amount.rb +0 -33
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
- data/app/models/spree/calculator/flexi_rate.rb +0 -22
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
- data/app/models/spree/calculator/tiered_percent.rb +0 -62
- data/app/models/spree/line_item_action.rb +0 -8
- data/app/models/spree/order_promotion.rb +0 -27
- data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
- data/app/models/spree/promotion/rules/first_order.rb +0 -38
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
- data/app/models/spree/promotion/rules/item_total.rb +0 -86
- data/app/models/spree/promotion/rules/nth_order.rb +0 -45
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
- data/app/models/spree/promotion/rules/option_value.rb +0 -50
- data/app/models/spree/promotion/rules/product.rb +0 -86
- data/app/models/spree/promotion/rules/store.rb +0 -26
- data/app/models/spree/promotion/rules/taxon.rb +0 -91
- data/app/models/spree/promotion/rules/user.rb +0 -34
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
- data/app/models/spree/promotion/rules/user_role.rb +0 -45
- data/app/models/spree/promotion.rb +0 -271
- data/app/models/spree/promotion_action.rb +0 -47
- data/app/models/spree/promotion_category.rb +0 -8
- data/app/models/spree/promotion_chooser.rb +0 -34
- data/app/models/spree/promotion_code/batch_builder.rb +0 -64
- data/app/models/spree/promotion_code.rb +0 -54
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -75
- data/app/models/spree/promotion_handler/coupon.rb +0 -123
- data/app/models/spree/promotion_handler/page.rb +0 -26
- data/app/models/spree/promotion_handler/shipping.rb +0 -61
- data/app/models/spree/promotion_rule.rb +0 -55
- data/app/models/spree/promotion_rule_role.rb +0 -8
- data/app/models/spree/promotion_rule_store.rb +0 -10
- data/app/models/spree/promotion_rule_taxon.rb +0 -8
- data/app/models/spree/promotion_rule_user.rb +0 -10
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
- data/bin/rails +0 -13
- data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
- data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
- data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
- data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
- data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
- data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
- data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/permission_sets/promotion_display.rb +0 -25
- data/lib/spree/permission_sets/promotion_management.rb +0 -25
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -18,7 +18,12 @@ Dummy::Application.configure do
|
|
18
18
|
config.eager_load = false
|
19
19
|
|
20
20
|
# Raise exceptions instead of rendering exception templates
|
21
|
-
|
21
|
+
if Rails.gem_version >= Gem::Version.new('7.1')
|
22
|
+
config.action_controller.raise_on_missing_callback_actions = true
|
23
|
+
config.action_dispatch.show_exceptions = :none
|
24
|
+
else
|
25
|
+
config.action_dispatch.show_exceptions = false
|
26
|
+
end
|
22
27
|
|
23
28
|
# Disable request forgery protection in test environment
|
24
29
|
config.action_controller.allow_forgery_protection = false
|
@@ -26,6 +26,7 @@ require 'uri'
|
|
26
26
|
|
27
27
|
module Spree
|
28
28
|
class AppConfiguration < Preferences::Configuration
|
29
|
+
include Spree::Core::EnvironmentExtension
|
29
30
|
# Preferences (alphabetized to more easily lookup particular preferences)
|
30
31
|
|
31
32
|
# @!attribute [rw] address_requires_phone
|
@@ -167,6 +168,13 @@ module Spree
|
|
167
168
|
# @return [String] template to use for layout on the frontend (default: +"spree/layouts/spree_application"+)
|
168
169
|
preference :layout, :string, default: 'spree/layouts/spree_application'
|
169
170
|
|
171
|
+
# !@attribute [rw] line_item_comparison_hooks
|
172
|
+
# @return [Array<Symbol>] An array of methods to call on {Spree::Order} to determine if a line item is equal to another
|
173
|
+
# (default: +[]+)
|
174
|
+
# @example
|
175
|
+
# config.line_item_comparison_hooks << :my_custom_method
|
176
|
+
preference :line_item_comparison_hooks, :array, default: []
|
177
|
+
|
170
178
|
# @!attribute [rw] logo
|
171
179
|
# @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
|
172
180
|
preference :logo, :string, default: 'logo/solidus.svg'
|
@@ -208,6 +216,27 @@ module Spree
|
|
208
216
|
# @return [Integer] Orders to show per-page in the admin (default: +15+)
|
209
217
|
preference :orders_per_page, :integer, default: 15
|
210
218
|
|
219
|
+
# @!attribute [rw] meta_data_validation_enabled
|
220
|
+
# @return [Boolean] Indicates whether validation for customer and admin metadata columns is enabled.
|
221
|
+
# When this is set to true, the following preferences will be used to validate the metadata:
|
222
|
+
# - The maximum number of keys that can be added to the metadata columns (meta_data_max_keys).
|
223
|
+
# - The maximum length of each key in the metadata columns (meta_data_max_key_length).
|
224
|
+
# - The maximum length of each value in the metadata columns (meta_data_max_value_length).
|
225
|
+
# (default: +false+)
|
226
|
+
preference :meta_data_validation_enabled, :boolean, default: false
|
227
|
+
|
228
|
+
# @!attribute [rw] meta_data_max_keys
|
229
|
+
# @return [Integer] Maximum keys that can be allocated in customer and admin metadata column (default: +6+)
|
230
|
+
preference :meta_data_max_keys, :integer, default: 6
|
231
|
+
|
232
|
+
# @!attribute [rw] meta_data_max_key_length
|
233
|
+
# @return [Integer] Maximum length that key can have in customer and admin metadata column (default: +16+)
|
234
|
+
preference :meta_data_max_key_length, :integer, default: 16
|
235
|
+
|
236
|
+
# @!attribute [rw] meta_data_max_value_length
|
237
|
+
# @return [Integer] Maximum length that value can have in customer and admin metadata column (default: +256+)
|
238
|
+
preference :meta_data_max_value_length, :integer, default: 256
|
239
|
+
|
211
240
|
# @!attribute [rw] properties_per_page
|
212
241
|
# @return [Integer] Properties to show per-page in the admin (default: +15+)
|
213
242
|
preference :properties_per_page, :integer, default: 15
|
@@ -216,10 +245,6 @@ module Spree
|
|
216
245
|
# @return [Integer] Products to show per-page in the frontend (default: +12+)
|
217
246
|
preference :products_per_page, :integer, default: 12
|
218
247
|
|
219
|
-
# @!attribute [rw] promotions_per_page
|
220
|
-
# @return [Integer] Promotions to show per-page in the admin (default: +15+)
|
221
|
-
preference :promotions_per_page, :integer, default: 15
|
222
|
-
|
223
248
|
# @!attribute [rw] require_master_price
|
224
249
|
# @return [Boolean] Require a price on the master variant of a product (default: +true+)
|
225
250
|
preference :require_master_price, :boolean, default: true
|
@@ -324,12 +349,6 @@ module Spree
|
|
324
349
|
# Spree::Variant::VatPriceGenerator.
|
325
350
|
class_name_attribute :variant_vat_prices_generator_class, default: 'Spree::Variant::VatPriceGenerator'
|
326
351
|
|
327
|
-
# promotion_chooser_class allows extensions to provide their own PromotionChooser
|
328
|
-
class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
|
329
|
-
|
330
|
-
# promotion_adjuster_class allows extensions to provide their own Promotion Adjuster
|
331
|
-
class_name_attribute :promotion_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator'
|
332
|
-
|
333
352
|
class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
|
334
353
|
|
335
354
|
class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
|
@@ -367,15 +386,6 @@ module Spree
|
|
367
386
|
# Spree::OrderUpdater.
|
368
387
|
class_name_attribute :order_recalculator_class, default: 'Spree::OrderUpdater'
|
369
388
|
|
370
|
-
# Allows providing your own Mailer for promotion code batch mailer.
|
371
|
-
#
|
372
|
-
# @!attribute [rw] promotion_code_batch_mailer_class
|
373
|
-
# @return [ActionMailer::Base] an object that responds to "promotion_code_batch_finished",
|
374
|
-
# and "promotion_code_batch_errored"
|
375
|
-
# (e.g. an ActionMailer with a "promotion_code_batch_finished" method) with the same
|
376
|
-
# signature as Spree::PromotionCodeBatchMailer.promotion_code_batch_finished.
|
377
|
-
class_name_attribute :promotion_code_batch_mailer_class, default: 'Spree::PromotionCodeBatchMailer'
|
378
|
-
|
379
389
|
# Allows providing your own Mailer for reimbursement mailer.
|
380
390
|
#
|
381
391
|
# @!attribute [rw] reimbursement_mailer_class
|
@@ -412,7 +422,7 @@ module Spree
|
|
412
422
|
# @!attribute [rw] order_contents_class
|
413
423
|
# @return [Class] a class with the same public interfaces as
|
414
424
|
# Spree::OrderContents.
|
415
|
-
class_name_attribute :order_contents_class, default: 'Spree::
|
425
|
+
class_name_attribute :order_contents_class, default: 'Spree::SimpleOrderContents'
|
416
426
|
|
417
427
|
# Allows providing your own class for shipping an order.
|
418
428
|
#
|
@@ -448,6 +458,13 @@ module Spree
|
|
448
458
|
# as Spree::Wallet::AddPaymentSourcesToWallet.
|
449
459
|
class_name_attribute :add_payment_sources_to_wallet_class, default: 'Spree::Wallet::AddPaymentSourcesToWallet'
|
450
460
|
|
461
|
+
# Allows providing your own class for recalculating totals on an item.
|
462
|
+
#
|
463
|
+
# @!attribute [rw] item_total_class
|
464
|
+
# @return [Class] a class with the same public interfaces as
|
465
|
+
# Spree::ItemTotal
|
466
|
+
class_name_attribute :item_total_class, default: 'Spree::ItemTotal'
|
467
|
+
|
451
468
|
# Allows providing your own class for calculating taxes on an order.
|
452
469
|
#
|
453
470
|
# This extension point is under development and may change in a future minor release.
|
@@ -540,6 +557,13 @@ module Spree
|
|
540
557
|
# Spree::StoreCreditPrioritizer.
|
541
558
|
class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'
|
542
559
|
|
560
|
+
# Allows finding brand for product.
|
561
|
+
#
|
562
|
+
# @!attribute [rw] brand_selector_class
|
563
|
+
# @return [Class] a class with the same public interfaces as
|
564
|
+
# Spree::TaxonBrandSelector.
|
565
|
+
class_name_attribute :brand_selector_class, default: 'Spree::TaxonBrandSelector'
|
566
|
+
|
543
567
|
# @!attribute [rw] taxon_image_style_default
|
544
568
|
#
|
545
569
|
# Defines which style to default to when style is not provided
|
@@ -569,6 +593,16 @@ module Spree
|
|
569
593
|
# Enumerable of taxons adhering to the present_taxon_class interface
|
570
594
|
class_name_attribute :taxon_attachment_module, default: "Spree::Taxon::ActiveStorageAttachment"
|
571
595
|
|
596
|
+
# Allows changing the default behavior for redirects when a user is not authorized
|
597
|
+
#
|
598
|
+
# @!attribute [rw] unauthorized_redirect_handler_class
|
599
|
+
# @return [Class] a class with the same public interfaces as
|
600
|
+
# Spree::UnauthorizedRedirectHandler.
|
601
|
+
class_name_attribute :unauthorized_redirect_handler_class, default: "Spree::UnauthorizedRedirectHandler"
|
602
|
+
|
603
|
+
# Set of classes that can be promotion adjustment sources
|
604
|
+
add_class_set :adjustment_promotion_source_types, default: []
|
605
|
+
|
572
606
|
# Configures the absolute path that contains the Solidus engine
|
573
607
|
# migrations. This will be checked at app boot to confirm that all Solidus
|
574
608
|
# migrations are installed.
|
@@ -603,6 +637,54 @@ module Spree
|
|
603
637
|
@stock_configuration ||= Spree::Core::StockConfiguration.new
|
604
638
|
end
|
605
639
|
|
640
|
+
# Allows providing your own promotion configuration instance
|
641
|
+
# @!attribute [rw] promotions
|
642
|
+
# @return [Spree::Core::NullPromotionConfiguration] an object that conforms to the API of
|
643
|
+
# the example promotion configuration class Spree::Core::NullPromotionConfiguration.
|
644
|
+
attr_writer :promotions
|
645
|
+
def promotions
|
646
|
+
@promotions ||= Spree::Core::NullPromotionConfiguration.new
|
647
|
+
end
|
648
|
+
|
649
|
+
class << self
|
650
|
+
private
|
651
|
+
|
652
|
+
def promotions_deprecation_message(method, new_method_name = nil)
|
653
|
+
"The `Spree::Config.#{method}` preference is deprecated and will be removed in Solidus 5.0. " \
|
654
|
+
"Use `Spree::Config.promotions.#{new_method_name || method}` instead"
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
658
|
+
def promotion_adjuster_class
|
659
|
+
promotions.order_adjuster_class
|
660
|
+
end
|
661
|
+
|
662
|
+
def promotion_adjuster_class=(klass)
|
663
|
+
promotions.order_adjuster_class = klass
|
664
|
+
end
|
665
|
+
deprecate promotion_adjuster_class: promotions_deprecation_message("promotion_adjuster_class", "order_adjuster_class"), deprecator: Spree.deprecator
|
666
|
+
deprecate "promotion_adjuster_class=": promotions_deprecation_message("promotion_adjuster_class=", "order_adjuster_class="), deprecator: Spree.deprecator
|
667
|
+
|
668
|
+
delegate :promotion_chooser_class, :promotion_chooser_class=, to: :promotions
|
669
|
+
deprecate promotion_chooser_class: promotions_deprecation_message("promotion_chooser_class"), deprecator: Spree.deprecator
|
670
|
+
deprecate "promotion_chooser_class=": promotions_deprecation_message("promotion_chooser_class="), deprecator: Spree.deprecator
|
671
|
+
|
672
|
+
delegate :shipping_promotion_handler_class, :shipping_promotion_handler_class=, to: :promotions
|
673
|
+
deprecate shipping_promotion_handler_class: promotions_deprecation_message("shipping_promotion_handler_class"), deprecator: Spree.deprecator
|
674
|
+
deprecate "shipping_promotion_handler_class=": promotions_deprecation_message("shipping_promotion_handler_class="), deprecator: Spree.deprecator
|
675
|
+
|
676
|
+
delegate :coupon_code_handler_class, :coupon_code_handler_class=, to: :promotions
|
677
|
+
deprecate coupon_code_handler_class: promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
|
678
|
+
deprecate "coupon_code_handler_class=": promotions_deprecation_message("coupon_code_handler_class"), deprecator: Spree.deprecator
|
679
|
+
|
680
|
+
delegate :promotion_code_batch_mailer_class, :promotion_code_batch_mailer_class=, to: :promotions
|
681
|
+
deprecate promotion_code_batch_mailer_class: promotions_deprecation_message("promotion_code_batch_mailer_class"), deprecator: Spree.deprecator
|
682
|
+
deprecate "promotion_code_batch_mailer_class=": promotions_deprecation_message("promotion_code_batch_mailer_class="), deprecator: Spree.deprecator
|
683
|
+
|
684
|
+
delegate :preferred_promotions_per_page, :preferred_promotions_per_page=, to: :promotions
|
685
|
+
deprecate preferred_promotions_per_page: promotions_deprecation_message("preferred_promotions_per_page"), deprecator: Spree.deprecator
|
686
|
+
deprecate "preferred_promotions_per_page=": promotions_deprecation_message("preferred_promotions_per_page="), deprecator: Spree.deprecator
|
687
|
+
|
606
688
|
def roles
|
607
689
|
@roles ||= Spree::RoleConfiguration.new.tap do |roles|
|
608
690
|
roles.assign_permissions :default, ['Spree::PermissionSets::DefaultCustomer']
|
@@ -618,27 +700,6 @@ module Spree
|
|
618
700
|
|
619
701
|
def environment
|
620
702
|
@environment ||= Spree::Core::Environment.new(self).tap do |env|
|
621
|
-
env.calculators.promotion_actions_create_adjustments = %w[
|
622
|
-
Spree::Calculator::FlatPercentItemTotal
|
623
|
-
Spree::Calculator::FlatRate
|
624
|
-
Spree::Calculator::FlexiRate
|
625
|
-
Spree::Calculator::TieredPercent
|
626
|
-
Spree::Calculator::TieredFlatRate
|
627
|
-
]
|
628
|
-
|
629
|
-
env.calculators.promotion_actions_create_item_adjustments = %w[
|
630
|
-
Spree::Calculator::DistributedAmount
|
631
|
-
Spree::Calculator::FlatRate
|
632
|
-
Spree::Calculator::FlexiRate
|
633
|
-
Spree::Calculator::PercentOnLineItem
|
634
|
-
Spree::Calculator::TieredPercent
|
635
|
-
]
|
636
|
-
|
637
|
-
env.calculators.promotion_actions_create_quantity_adjustments = %w[
|
638
|
-
Spree::Calculator::PercentOnLineItem
|
639
|
-
Spree::Calculator::FlatRate
|
640
|
-
]
|
641
|
-
|
642
703
|
env.calculators.shipping_methods = %w[
|
643
704
|
Spree::Calculator::Shipping::FlatPercentItemTotal
|
644
705
|
Spree::Calculator::Shipping::FlatRate
|
@@ -659,32 +720,6 @@ module Spree
|
|
659
720
|
Spree::PaymentMethod::Check
|
660
721
|
]
|
661
722
|
|
662
|
-
env.promotions.rules = %w[
|
663
|
-
Spree::Promotion::Rules::ItemTotal
|
664
|
-
Spree::Promotion::Rules::Product
|
665
|
-
Spree::Promotion::Rules::User
|
666
|
-
Spree::Promotion::Rules::FirstOrder
|
667
|
-
Spree::Promotion::Rules::UserLoggedIn
|
668
|
-
Spree::Promotion::Rules::OneUsePerUser
|
669
|
-
Spree::Promotion::Rules::Taxon
|
670
|
-
Spree::Promotion::Rules::NthOrder
|
671
|
-
Spree::Promotion::Rules::OptionValue
|
672
|
-
Spree::Promotion::Rules::FirstRepeatPurchaseSince
|
673
|
-
Spree::Promotion::Rules::UserRole
|
674
|
-
Spree::Promotion::Rules::Store
|
675
|
-
]
|
676
|
-
|
677
|
-
env.promotions.actions = %w[
|
678
|
-
Spree::Promotion::Actions::CreateAdjustment
|
679
|
-
Spree::Promotion::Actions::CreateItemAdjustments
|
680
|
-
Spree::Promotion::Actions::CreateQuantityAdjustments
|
681
|
-
Spree::Promotion::Actions::FreeShipping
|
682
|
-
]
|
683
|
-
|
684
|
-
env.promotions.shipping_actions = %w[
|
685
|
-
Spree::Promotion::Actions::FreeShipping
|
686
|
-
]
|
687
|
-
|
688
723
|
env.stock_splitters = %w[
|
689
724
|
Spree::Stock::Splitter::ShippingCategory
|
690
725
|
Spree::Stock::Splitter::Backordered
|
@@ -1,63 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module Auth
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
|
11
|
-
# @!attribute [rw] unauthorized_redirect
|
12
|
-
# @!scope class
|
13
|
-
# Extension point for overriding behaviour of access denied errors.
|
14
|
-
# Default behaviour is to redirect back or to "/unauthorized" with a flash
|
15
|
-
# message.
|
16
|
-
# @return [Proc] action to take when access denied error is raised.
|
17
|
-
|
18
|
-
included do
|
19
|
-
before_action :set_guest_token
|
20
|
-
helper_method :spree_current_user
|
21
|
-
|
22
|
-
class_attribute :unauthorized_redirect
|
23
|
-
self.unauthorized_redirect = -> do
|
24
|
-
flash[:error] = I18n.t('spree.authorization_failure')
|
25
|
-
redirect_back(fallback_location: "/unauthorized")
|
26
|
-
end
|
27
|
-
|
28
|
-
rescue_from CanCan::AccessDenied do
|
29
|
-
instance_exec(&unauthorized_redirect)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# Needs to be overriden so that we use Spree's Ability rather than anyone else's.
|
34
|
-
def current_ability
|
35
|
-
@current_ability ||= Spree::Ability.new(spree_current_user)
|
36
|
-
end
|
37
|
-
|
38
|
-
def redirect_back_or_default(default)
|
39
|
-
redirect_to(session["spree_user_return_to"] || default)
|
40
|
-
session["spree_user_return_to"] = nil
|
41
|
-
end
|
42
|
-
|
43
|
-
def set_guest_token
|
44
|
-
unless cookies.signed[:guest_token].present?
|
45
|
-
cookies.permanent.signed[:guest_token] = Spree::Config[:guest_token_cookie_options].merge(
|
46
|
-
value: SecureRandom.urlsafe_base64(nil, false),
|
47
|
-
httponly: true
|
48
|
-
)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def store_location
|
53
|
-
Spree::UserLastUrlStorer.new(self).store_location
|
54
|
-
end
|
55
|
-
|
56
|
-
# Auth extensions are expected to define it, otherwise it's a no-op
|
57
|
-
def spree_current_user
|
58
|
-
defined?(super) ? super : nil
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,82 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module Common
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
included do
|
11
|
-
helper_method :title
|
12
|
-
helper_method :title=
|
13
|
-
helper_method :accurate_title
|
14
|
-
|
15
|
-
layout :get_layout
|
16
|
-
|
17
|
-
before_action :set_user_language
|
18
|
-
end
|
19
|
-
|
20
|
-
protected
|
21
|
-
|
22
|
-
# can be used in views as well as controllers.
|
23
|
-
# e.g. <% self.title = 'This is a custom title for this view' %>
|
24
|
-
attr_writer :title
|
25
|
-
|
26
|
-
def title
|
27
|
-
title_string = @title.present? ? @title : accurate_title
|
28
|
-
if title_string.present?
|
29
|
-
if Spree::Config[:always_put_site_name_in_title]
|
30
|
-
[title_string, default_title].join(' - ')
|
31
|
-
else
|
32
|
-
title_string
|
33
|
-
end
|
34
|
-
else
|
35
|
-
default_title
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def default_title
|
40
|
-
current_store.name
|
41
|
-
end
|
42
|
-
|
43
|
-
# this is a hook for subclasses to provide title
|
44
|
-
def accurate_title
|
45
|
-
current_store.seo_title
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def set_user_language_locale_key
|
51
|
-
:locale
|
52
|
-
end
|
53
|
-
|
54
|
-
def set_user_language
|
55
|
-
available_locales = Spree.i18n_available_locales
|
56
|
-
locale = [
|
57
|
-
params[:locale],
|
58
|
-
session[set_user_language_locale_key],
|
59
|
-
(config_locale if respond_to?(:config_locale, true)),
|
60
|
-
I18n.default_locale
|
61
|
-
].detect do |candidate|
|
62
|
-
candidate &&
|
63
|
-
available_locales.include?(candidate.to_sym)
|
64
|
-
end
|
65
|
-
session[set_user_language_locale_key] = locale
|
66
|
-
I18n.locale = locale
|
67
|
-
Carmen.i18n_backend.locale = locale
|
68
|
-
end
|
69
|
-
|
70
|
-
# Returns which layout to render.
|
71
|
-
#
|
72
|
-
# You can set the layout you want to render inside your Spree configuration with the +:layout+ option.
|
73
|
-
#
|
74
|
-
# Default layout is: +app/views/spree/layouts/spree_application+
|
75
|
-
#
|
76
|
-
def get_layout
|
77
|
-
Spree::Config[:layout]
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|
@@ -1,88 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
module Order
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
include ControllerHelpers::Pricing
|
11
|
-
|
12
|
-
included do
|
13
|
-
helper_method :current_order
|
14
|
-
end
|
15
|
-
|
16
|
-
# The current incomplete order from the guest_token for use in cart and during checkout
|
17
|
-
def current_order(options = {})
|
18
|
-
should_create = options[:create_order_if_necessary] || false
|
19
|
-
should_build = options[:build_order_if_necessary] || should_create
|
20
|
-
|
21
|
-
return @current_order if @current_order
|
22
|
-
|
23
|
-
@current_order = find_order_by_token_or_user(lock: options[:lock])
|
24
|
-
|
25
|
-
if should_build && (@current_order.nil? || @current_order.completed?)
|
26
|
-
@current_order = Spree::Order.new(new_order_params)
|
27
|
-
@current_order.user ||= spree_current_user
|
28
|
-
# See issue https://github.com/spree/spree/issues/3346 for reasons why this line is here
|
29
|
-
@current_order.created_by ||= spree_current_user
|
30
|
-
@current_order.save! if should_create
|
31
|
-
end
|
32
|
-
|
33
|
-
if @current_order
|
34
|
-
@current_order.record_ip_address(ip_address)
|
35
|
-
return @current_order
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def associate_user
|
40
|
-
@order ||= current_order
|
41
|
-
if spree_current_user && @order
|
42
|
-
@order.associate_user!(spree_current_user) if @order.user.blank? || @order.email.blank?
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def set_current_order
|
47
|
-
if spree_current_user && current_order
|
48
|
-
spree_current_user.orders.by_store(current_store).incomplete.where('id != ?', current_order.id).find_each do |order|
|
49
|
-
current_order.merge!(order, spree_current_user)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def ip_address
|
55
|
-
request.remote_ip
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def last_incomplete_order
|
61
|
-
@last_incomplete_order ||= spree_current_user.last_incomplete_spree_order(store: current_store)
|
62
|
-
end
|
63
|
-
|
64
|
-
def current_order_params
|
65
|
-
{ currency: current_pricing_options.currency, guest_token: cookies.signed[:guest_token], store_id: current_store.id, user_id: spree_current_user.try(:id) }
|
66
|
-
end
|
67
|
-
|
68
|
-
def new_order_params
|
69
|
-
current_order_params.merge(last_ip_address: ip_address)
|
70
|
-
end
|
71
|
-
|
72
|
-
def find_order_by_token_or_user(options = {})
|
73
|
-
should_lock = options[:lock] || false
|
74
|
-
|
75
|
-
# Find any incomplete orders for the guest_token
|
76
|
-
order = Spree::Order.incomplete.lock(should_lock).find_by(current_order_params)
|
77
|
-
|
78
|
-
# Find any incomplete orders for the current user
|
79
|
-
if order.nil? && spree_current_user
|
80
|
-
order = last_incomplete_order
|
81
|
-
end
|
82
|
-
|
83
|
-
order
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
3
|
+
Spree.deprecator.warn(
|
4
|
+
<<~MSG
|
5
|
+
The file "#{__FILE__}" does not need to be `require`d any longer, it is now autoloaded.
|
6
|
+
MSG
|
7
|
+
)
|