solidus_core 3.0.0 → 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/README.md +1 -2
- data/Rakefile +7 -2
- data/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/controllers/spree/base_controller.rb +1 -3
- data/app/helpers/spree/base_helper.rb +3 -3
- 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/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
- 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/helpers/spree/products_helper.rb +2 -2
- 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/attachment.rb +30 -11
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
- data/app/models/concerns/spree/default_price.rb +30 -10
- 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/ransackable_attributes.rb +9 -5
- data/app/models/concerns/spree/user_address_book.rb +19 -10
- data/app/models/concerns/spree/user_methods.rb +40 -6
- data/app/models/spree/address.rb +11 -9
- data/app/models/spree/adjustment.rb +15 -76
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/flat_fee.rb +21 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +3 -3
- 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/country.rb +1 -1
- data/app/models/spree/credit_card.rb +13 -10
- data/app/models/spree/customer_return.rb +6 -3
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +56 -29
- 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/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 +26 -8
- data/app/models/spree/log_entry.rb +98 -1
- 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_type.rb +1 -1
- data/app/models/spree/option_value.rb +4 -3
- data/app/models/spree/order/number_generator.rb +7 -1
- data/app/models/spree/order.rb +143 -96
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +7 -5
- data/app/models/spree/order_merger.rb +5 -7
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +15 -19
- data/app/models/spree/order_taxation.rb +7 -4
- data/app/models/spree/order_update_attributes.rb +3 -1
- data/app/models/spree/order_updater.rb +25 -63
- data/app/models/spree/payment/processing.rb +60 -57
- data/app/models/spree/payment.rb +14 -27
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
- data/app/models/spree/payment_method/credit_card.rb +0 -4
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +29 -10
- 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/price.rb +3 -3
- data/app/models/spree/product/scopes.rb +23 -10
- data/app/models/spree/product.rb +30 -23
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/refund.rb +13 -3
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +6 -6
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
- 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 +3 -1
- data/app/models/spree/return_item.rb +13 -15
- 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 +12 -10
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
- data/app/models/spree/state.rb +1 -1
- 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/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/quantifier.rb +12 -8
- data/app/models/spree/stock/simple_coordinator.rb +38 -28
- data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
- data/app/models/spree/stock_item.rb +2 -1
- data/app/models/spree/stock_location.rb +7 -7
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +31 -16
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_prioritizer.rb +17 -0
- 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/item_tax.rb +3 -2
- data/app/models/spree/tax/order_tax.rb +3 -1
- data/app/models/spree/tax/tax_helpers.rb +14 -3
- data/app/models/spree/tax/tax_location.rb +4 -7
- data/app/models/spree/tax_calculator/default.rb +32 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +14 -1
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +25 -3
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +4 -3
- 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/user_last_url_storer/rules/authentication_rule.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +25 -8
- 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 +64 -37
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet.rb +2 -2
- data/app/models/spree/zone.rb +1 -1
- data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
- data/app/views/layouts/spree/base_mailer.html.erb +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/i18n-tasks.yml +134 -0
- data/config/locales/en.yml +439 -338
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +2 -2
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
- 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/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -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/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
- data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
- 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 +5 -1
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -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/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -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 +5 -0
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
- data/lib/generators/solidus/install/install_generator.rb +210 -156
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
- 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 +124 -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 +1 -2
- data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
- data/lib/spree/app_configuration.rb +220 -71
- data/lib/spree/bus.rb +11 -0
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -69
- 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 -165
- 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 +49 -16
- 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 +6 -6
- 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_duplicator.rb +1 -1
- data/lib/spree/core/product_filters.rb +2 -2
- data/lib/spree/core/search/base.rb +18 -9
- 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 -247
- 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/stock_configuration.rb +18 -0
- data/lib/spree/core/validators/email.rb +2 -4
- data/lib/spree/core/version.rb +5 -1
- data/lib/spree/core/versioned_value.rb +75 -0
- data/lib/spree/core.rb +40 -16
- data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
- data/lib/spree/deprecation.rb +3 -51
- 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/migration_helpers.rb +3 -3
- data/lib/spree/migrations.rb +13 -11
- 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 -23
- data/lib/spree/permission_sets/configuration_management.rb +5 -23
- data/lib/spree/permission_sets/dashboard_display.rb +5 -9
- data/lib/spree/permission_sets/default_customer.rb +5 -35
- data/lib/spree/permission_sets/order_display.rb +5 -19
- data/lib/spree/permission_sets/order_management.rb +5 -20
- data/lib/spree/permission_sets/product_display.rb +5 -17
- data/lib/spree/permission_sets/product_management.rb +5 -19
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
- data/lib/spree/permission_sets/stock_display.rb +5 -10
- data/lib/spree/permission_sets/stock_management.rb +5 -10
- data/lib/spree/permission_sets/super_user.rb +5 -9
- data/lib/spree/permission_sets/user_display.rb +5 -11
- data/lib/spree/permission_sets/user_management.rb +5 -23
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +35 -14
- data/lib/spree/preferences/configuration.rb +88 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/preferable.rb +13 -0
- data/lib/spree/preferences/preferable_class_methods.rb +12 -4
- data/lib/spree/preferences/preference_differentiator.rb +29 -0
- data/lib/spree/preferences/static_model_preferences.rb +25 -10
- data/lib/spree/preferences/store.rb +2 -2
- 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 +11 -1
- data/lib/spree/testing_support/common_rake.rb +76 -23
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +39 -28
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
- data/lib/spree/testing_support/dummy_app.rb +71 -42
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +9 -13
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
- data/lib/spree/testing_support/factories/country_factory.rb +1 -7
- data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
- data/lib/spree/testing_support/factories/image_factory.rb +0 -5
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
- data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
- data/lib/spree/testing_support/factories/order_factory.rb +19 -38
- data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
- data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
- data/lib/spree/testing_support/factories/price_factory.rb +0 -7
- data/lib/spree/testing_support/factories/product_factory.rb +5 -13
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
- data/lib/spree/testing_support/factories/property_factory.rb +0 -5
- data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
- data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/role_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
- data/lib/spree/testing_support/factories/state_factory.rb +8 -10
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
- data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
- data/lib/spree/testing_support/factories/store_factory.rb +0 -5
- data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
- data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
- data/lib/spree/testing_support/factories/user_factory.rb +6 -9
- data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
- data/lib/spree/testing_support/factory_bot.rb +6 -29
- data/lib/spree/testing_support/flaky.rb +22 -0
- data/lib/spree/testing_support/order_walkthrough.rb +7 -6
- data/lib/spree/testing_support/sequences.rb +0 -5
- 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/spree/testing_support/silence_deprecations.rb +9 -0
- data/lib/spree/user_class_handle.rb +2 -2
- data/lib/tasks/colorado_delivery_fee.rake +28 -0
- data/lib/tasks/payment_method.rake +29 -0
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- data/solidus_core.gemspec +18 -8
- metadata +233 -117
- 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 -77
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
- 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 -53
- 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 -74
- data/app/models/spree/promotion/rules/store.rb +0 -22
- data/app/models/spree/promotion/rules/taxon.rb +0 -87
- data/app/models/spree/promotion/rules/user.rb +0 -30
- 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 -284
- data/app/models/spree/promotion_action.rb +0 -43
- 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 -50
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -55
- 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/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/app/subscribers/spree/mailer_subscriber.rb +0 -25
- 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/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/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/dummy/templates/rails/script/rails +0 -6
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
- data/lib/spree/event/configuration.rb +0 -25
- data/lib/spree/event/subscriber.rb +0 -86
- data/lib/spree/event/subscriber_registry.rb +0 -94
- data/lib/spree/event.rb +0 -119
- data/lib/spree/permission_sets/promotion_display.rb +0 -15
- data/lib/spree/permission_sets/promotion_management.rb +0 -15
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
- data/lib/spree/testing_support/factories.rb +0 -11
- data/lib/spree/testing_support.rb +0 -31
- data/lib/tasks/upgrade.rake +0 -15
|
@@ -1,51 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
# for each event the following instance methods are dynamically implemented:
|
|
10
|
-
# #<event_name>
|
|
11
|
-
# #<event_name>!
|
|
12
|
-
# #can_<event_name>?
|
|
13
|
-
#
|
|
14
|
-
# for each state the following instance methods are implemented:
|
|
15
|
-
# #<state_name>?
|
|
16
|
-
#
|
|
17
|
-
module AcceptanceStatus
|
|
18
|
-
extend ActiveSupport::Concern
|
|
19
|
-
|
|
20
|
-
included do
|
|
21
|
-
state_machine :acceptance_status, initial: :pending do
|
|
22
|
-
event :attempt_accept do
|
|
23
|
-
transition to: :accepted, from: :accepted
|
|
24
|
-
transition to: :accepted, from: :pending, if: ->(return_item) { return_item.eligible_for_return? }
|
|
25
|
-
transition to: :manual_intervention_required, from: :pending, if: ->(return_item) { return_item.requires_manual_intervention? }
|
|
26
|
-
transition to: :rejected, from: :pending
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# bypasses eligibility checks
|
|
30
|
-
event :accept do
|
|
31
|
-
transition to: :accepted, from: [:accepted, :pending, :manual_intervention_required]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# bypasses eligibility checks
|
|
35
|
-
event :reject do
|
|
36
|
-
transition to: :rejected, from: [:accepted, :pending, :manual_intervention_required]
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# bypasses eligibility checks
|
|
40
|
-
event :require_manual_intervention do
|
|
41
|
-
transition to: :manual_intervention_required, from: [:accepted, :pending, :manual_intervention_required]
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
after_transition any => any, do: :persist_acceptance_status_errors
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
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,42 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
# for each event the following instance methods are dynamically implemented:
|
|
10
|
-
# #<event_name>
|
|
11
|
-
# #<event_name>!
|
|
12
|
-
# #can_<event_name>?
|
|
13
|
-
#
|
|
14
|
-
# for each state the following instance methods are implemented:
|
|
15
|
-
# #<state_name>?
|
|
16
|
-
#
|
|
17
|
-
module ReceptionStatus
|
|
18
|
-
extend ActiveSupport::Concern
|
|
19
|
-
|
|
20
|
-
included do
|
|
21
|
-
state_machine :reception_status, initial: :awaiting do
|
|
22
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :attempt_accept, if: :can_attempt_accept?
|
|
23
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES, do: :check_unexchange
|
|
24
|
-
after_transition to: :received, do: :process_inventory_unit!
|
|
25
|
-
|
|
26
|
-
event(:cancel) { transition to: :cancelled, from: :awaiting }
|
|
27
|
-
|
|
28
|
-
event(:receive) { transition to: :received, from: ::Spree::ReturnItem::INTERMEDIATE_RECEPTION_STATUSES + [:awaiting] }
|
|
29
|
-
event(:unexchange) { transition to: :unexchanged, from: [:awaiting] }
|
|
30
|
-
event(:give) { transition to: :given_to_customer, from: :awaiting }
|
|
31
|
-
event(:lost) { transition to: :lost_in_transit, from: :awaiting }
|
|
32
|
-
event(:wrong_item_shipped) { transition to: :shipped_wrong_item, from: :awaiting }
|
|
33
|
-
event(:short_shipped) { transition to: :short_shipped, from: :awaiting }
|
|
34
|
-
event(:in_transit) { transition to: :in_transit, from: :awaiting }
|
|
35
|
-
event(:expired) { transition to: :expired, from: :awaiting }
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
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,58 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
# for each event the following instance methods are dynamically implemented:
|
|
9
|
-
# #<event_name>
|
|
10
|
-
# #<event_name>!
|
|
11
|
-
# #can_<event_name>?
|
|
12
|
-
#
|
|
13
|
-
# for each state the following instance methods are implemented:
|
|
14
|
-
# #<state_name>?
|
|
15
|
-
#
|
|
16
|
-
module Shipment
|
|
17
|
-
extend ActiveSupport::Concern
|
|
18
|
-
|
|
19
|
-
included do
|
|
20
|
-
state_machine initial: :pending, use_transactions: false do
|
|
21
|
-
event :ready do
|
|
22
|
-
transition from: :pending, to: :shipped, if: :can_transition_from_pending_to_shipped?
|
|
23
|
-
transition from: :pending, to: :ready, if: :can_transition_from_pending_to_ready?
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
event :pend do
|
|
27
|
-
transition from: :ready, to: :pending
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
event :ship do
|
|
31
|
-
transition from: [:ready, :canceled], to: :shipped
|
|
32
|
-
end
|
|
33
|
-
after_transition to: :shipped, do: :after_ship
|
|
34
|
-
|
|
35
|
-
event :cancel do
|
|
36
|
-
transition to: :canceled, from: [:pending, :ready]
|
|
37
|
-
end
|
|
38
|
-
after_transition to: :canceled, do: :after_cancel
|
|
39
|
-
|
|
40
|
-
event :resume do
|
|
41
|
-
transition from: :canceled, to: :ready, if: :can_transition_from_canceled_to_ready?
|
|
42
|
-
transition from: :canceled, to: :pending
|
|
43
|
-
end
|
|
44
|
-
after_transition from: :canceled, to: [:pending, :ready, :shipped], do: :after_resume
|
|
45
|
-
|
|
46
|
-
after_transition do |shipment, transition|
|
|
47
|
-
shipment.state_changes.create!(
|
|
48
|
-
previous_state: transition.from,
|
|
49
|
-
next_state: transition.to,
|
|
50
|
-
name: 'shipment'
|
|
51
|
-
)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
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
|
+
)
|
|
@@ -2,87 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
module Core
|
|
5
|
-
class StateMachines
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
require 'spree/core/state_machines/inventory_unit'
|
|
54
|
-
'Spree::Core::StateMachines::InventoryUnit'
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
@inventory_unit.constantize
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def shipment
|
|
61
|
-
@shipment ||= begin
|
|
62
|
-
require 'spree/core/state_machines/shipment'
|
|
63
|
-
'Spree::Core::StateMachines::Shipment'
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
@shipment.constantize
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def order
|
|
70
|
-
@order ||= begin
|
|
71
|
-
require 'spree/core/state_machines/order'
|
|
72
|
-
'Spree::Core::StateMachines::Order'
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
@order.constantize
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def reimbursement
|
|
79
|
-
@reimbursement ||= begin
|
|
80
|
-
require 'spree/core/state_machines/reimbursement'
|
|
81
|
-
'Spree::Core::StateMachines::Reimbursement'
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
@reimbursement.constantize
|
|
85
|
-
end
|
|
5
|
+
class StateMachines < Spree::Preferences::Configuration
|
|
6
|
+
# State Machine module for Reimbursements
|
|
7
|
+
#
|
|
8
|
+
# @!attribute [rw] reimbursement
|
|
9
|
+
# @return [Module] a module that implements the state machine for the `Spree::Reimbursement` model.
|
|
10
|
+
class_name_attribute :reimbursement, default: "Spree::Core::StateMachines::Reimbursement"
|
|
11
|
+
|
|
12
|
+
# State Machine module for Return Authorizations
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [rw] return_authorization
|
|
15
|
+
# @return [Module] a module that implements the state machine for the `Spree::ReturnAuthorization` model.
|
|
16
|
+
class_name_attribute :return_authorization, default: "Spree::Core::StateMachines::ReturnAuthorization"
|
|
17
|
+
|
|
18
|
+
# State Machine module for Return Item Acceptances
|
|
19
|
+
#
|
|
20
|
+
# @!attribute [rw] return_item_acceptance
|
|
21
|
+
# @return [Module] a module that implements the acceptance part of the state machine for the `Spree::ReturnItem` model.
|
|
22
|
+
class_name_attribute :return_item_acceptance, default: "Spree::Core::StateMachines::ReturnItem::AcceptanceStatus"
|
|
23
|
+
|
|
24
|
+
# State Machine module for Return Item Receptions
|
|
25
|
+
#
|
|
26
|
+
# @!attribute [rw] return_item_reception
|
|
27
|
+
# @return [Module] a module that implements the reception part of the state machine for the `Spree::ReturnItem` model.
|
|
28
|
+
class_name_attribute :return_item_reception, default: "Spree::Core::StateMachines::ReturnItem::ReceptionStatus"
|
|
29
|
+
|
|
30
|
+
# State Machine module for Payments
|
|
31
|
+
#
|
|
32
|
+
# @!attribute [rw] payment
|
|
33
|
+
# @return [Module] a module that implements the state machine for the `Spree::Payment` model.
|
|
34
|
+
class_name_attribute :payment, default: "Spree::Core::StateMachines::Payment"
|
|
35
|
+
|
|
36
|
+
# State Machine module for Inventory Units
|
|
37
|
+
#
|
|
38
|
+
# @!attribute [rw] inventory_unit
|
|
39
|
+
# @return [Module] a module that implements the state machine for the `Spree::InventoryUnit` model.
|
|
40
|
+
class_name_attribute :inventory_unit, default: "Spree::Core::StateMachines::InventoryUnit"
|
|
41
|
+
|
|
42
|
+
# State Machine module for Shipments
|
|
43
|
+
#
|
|
44
|
+
# @!attribute [rw] shipment
|
|
45
|
+
# @return [Module] a module that implements the state machine for the `Spree::Shipment` model.
|
|
46
|
+
class_name_attribute :shipment, default: "Spree::Core::StateMachines::Shipment"
|
|
47
|
+
|
|
48
|
+
# State Machine module for Orders
|
|
49
|
+
#
|
|
50
|
+
# @!attribute [rw] order
|
|
51
|
+
# @return [Module] a module that implements the state machine for the `Spree::Order` model.
|
|
52
|
+
class_name_attribute :order, default: "Spree::Core::StateMachines::Order"
|
|
86
53
|
end
|
|
87
54
|
end
|
|
88
55
|
end
|
|
@@ -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,9 @@ module Spree
|
|
|
12
12
|
# end
|
|
13
13
|
#
|
|
14
14
|
class EmailValidator < ActiveModel::EachValidator
|
|
15
|
-
EMAIL_REGEXP = /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/
|
|
16
|
-
|
|
17
15
|
def validate_each(record, attribute, value)
|
|
18
|
-
unless
|
|
19
|
-
record.errors.add(attribute, :invalid, { value:
|
|
16
|
+
unless Spree::Config.default_email_regexp.match? value
|
|
17
|
+
record.errors.add(attribute, :invalid, **{ value: }.merge!(options))
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
20
|
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 = "4.5.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
|
+
'4.4'
|
|
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
|
@@ -9,25 +9,27 @@ require "active_record/railtie"
|
|
|
9
9
|
require "active_storage/engine"
|
|
10
10
|
require "sprockets/railtie"
|
|
11
11
|
|
|
12
|
+
require 'active_support/deprecation'
|
|
13
|
+
require 'spree/deprecated_instance_variable_proxy'
|
|
14
|
+
require 'spree/deprecator'
|
|
12
15
|
require 'acts_as_list'
|
|
13
16
|
require 'awesome_nested_set'
|
|
14
17
|
require 'cancan'
|
|
15
18
|
require 'friendly_id'
|
|
16
19
|
require 'kaminari/activerecord'
|
|
17
|
-
require 'mail'
|
|
18
20
|
require 'monetize'
|
|
19
21
|
require 'paperclip'
|
|
20
22
|
require 'ransack'
|
|
21
23
|
require 'state_machines-activerecord'
|
|
22
24
|
|
|
23
|
-
require 'spree/deprecation'
|
|
24
|
-
|
|
25
25
|
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
|
26
26
|
# invalid state of a Payment. In the future this should be removed.
|
|
27
27
|
StateMachines::Machine.ignore_method_conflicts = true
|
|
28
28
|
|
|
29
29
|
module Spree
|
|
30
|
-
|
|
30
|
+
autoload :Deprecation, 'spree/deprecation'
|
|
31
|
+
|
|
32
|
+
mattr_accessor :user_class, default: 'Spree::LegacyUser'
|
|
31
33
|
|
|
32
34
|
def self.user_class
|
|
33
35
|
if @@user_class.is_a?(Class)
|
|
@@ -37,6 +39,20 @@ module Spree
|
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
|
|
42
|
+
def self.user_class_name
|
|
43
|
+
@@user_class
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Load the same version defaults for all available Solidus components
|
|
47
|
+
#
|
|
48
|
+
# @see Spree::Preferences::Configuration#load_defaults
|
|
49
|
+
def self.load_defaults(version)
|
|
50
|
+
Spree::Config.load_defaults(version)
|
|
51
|
+
Spree::Frontend::Config.load_defaults(version) if defined?(Spree::Frontend::Config)
|
|
52
|
+
Spree::Backend::Config.load_defaults(version) if defined?(Spree::Backend::Config)
|
|
53
|
+
Spree::Api::Config.load_defaults(version) if defined?(Spree::Api::Config)
|
|
54
|
+
end
|
|
55
|
+
|
|
40
56
|
# Used to configure Spree.
|
|
41
57
|
#
|
|
42
58
|
# Example:
|
|
@@ -52,6 +68,24 @@ module Spree
|
|
|
52
68
|
end
|
|
53
69
|
|
|
54
70
|
module Core
|
|
71
|
+
# @api private
|
|
72
|
+
def self.has_install_generator_been_run?(rails_paths: Rails.application.paths, initializer_name: 'spree.rb', dummy_app_name: 'DummyApp::Application')
|
|
73
|
+
does_spree_initializer_exist?(rails_paths, initializer_name) ||
|
|
74
|
+
running_solidus_test_suite_with_dummy_app?(dummy_app_name)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.running_solidus_test_suite_with_dummy_app?(dummy_app_name)
|
|
78
|
+
Rails.env.test? && Rails.application.class.name == dummy_app_name
|
|
79
|
+
end
|
|
80
|
+
private_class_method :running_solidus_test_suite_with_dummy_app?
|
|
81
|
+
|
|
82
|
+
def self.does_spree_initializer_exist?(rails_paths, initializer_name)
|
|
83
|
+
rails_paths['config/initializers'].any? do |path|
|
|
84
|
+
File.exist?(Pathname.new(path).join(initializer_name))
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
private_class_method :does_spree_initializer_exist?
|
|
88
|
+
|
|
55
89
|
class GatewayError < RuntimeError; end
|
|
56
90
|
end
|
|
57
91
|
end
|
|
@@ -66,31 +100,21 @@ require 'spree/core/environment/promotions'
|
|
|
66
100
|
require 'spree/core/environment'
|
|
67
101
|
require 'spree/migrations'
|
|
68
102
|
require 'spree/migration_helpers'
|
|
69
|
-
require 'spree/
|
|
103
|
+
require 'spree/bus'
|
|
70
104
|
require 'spree/core/engine'
|
|
71
105
|
|
|
72
106
|
require 'spree/i18n'
|
|
73
107
|
require 'spree/localized_number'
|
|
74
|
-
require 'spree/money'
|
|
75
108
|
require 'spree/permitted_attributes'
|
|
76
109
|
|
|
77
110
|
require 'spree/core/importer'
|
|
78
111
|
require 'spree/core/permalinks'
|
|
79
112
|
require 'spree/core/product_duplicator'
|
|
80
|
-
require 'spree/core/controller_helpers/auth'
|
|
81
|
-
require 'spree/core/controller_helpers/common'
|
|
82
|
-
require 'spree/core/controller_helpers/current_host'
|
|
83
|
-
require 'spree/core/controller_helpers/order'
|
|
84
|
-
require 'spree/core/controller_helpers/payment_parameters'
|
|
85
|
-
require 'spree/core/controller_helpers/pricing'
|
|
86
|
-
require 'spree/core/controller_helpers/search'
|
|
87
|
-
require 'spree/core/controller_helpers/store'
|
|
88
|
-
require 'spree/core/controller_helpers/strong_parameters'
|
|
89
113
|
require 'spree/core/role_configuration'
|
|
90
114
|
require 'spree/core/state_machines'
|
|
91
115
|
require 'spree/core/stock_configuration'
|
|
116
|
+
require 'spree/core/null_promotion_configuration'
|
|
92
117
|
require 'spree/core/validators/email'
|
|
93
|
-
require 'spree/permission_sets'
|
|
94
118
|
require 'spree/user_class_handle'
|
|
95
119
|
|
|
96
120
|
require 'spree/preferences/store'
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/deprecation'
|
|
4
|
+
|
|
5
|
+
module Spree
|
|
6
|
+
# This DeprecatedInstanceVariableProxy transforms instance variable to
|
|
7
|
+
# deprecated instance variable.
|
|
8
|
+
#
|
|
9
|
+
# It differs from ActiveSupport::DeprecatedInstanceVariableProxy since
|
|
10
|
+
# it allows to define a custom message.
|
|
11
|
+
#
|
|
12
|
+
# class Example
|
|
13
|
+
# def initialize(deprecator)
|
|
14
|
+
# @request = Spree::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator, "Please, do not use this thing.")
|
|
15
|
+
# @_request = :a_request
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
# def request
|
|
19
|
+
# @_request
|
|
20
|
+
# end
|
|
21
|
+
#
|
|
22
|
+
# def old_request
|
|
23
|
+
# @request
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# When someone execute any method on @request variable this will trigger
|
|
28
|
+
# +warn+ method on +deprecator_instance+ and will fetch <tt>@_request</tt>
|
|
29
|
+
# variable via +request+ method and execute the same method on non-proxy
|
|
30
|
+
# instance variable.
|
|
31
|
+
#
|
|
32
|
+
# Default deprecator is <tt>Spree.deprecator</tt>.
|
|
33
|
+
class DeprecatedInstanceVariableProxy < ActiveSupport::Deprecation::DeprecationProxy
|
|
34
|
+
def initialize(instance, method_or_var, var = "@#{method}", deprecator = Spree.deprecator, message = nil)
|
|
35
|
+
@instance = instance
|
|
36
|
+
@method_or_var = method_or_var
|
|
37
|
+
@var = var
|
|
38
|
+
@deprecator = deprecator
|
|
39
|
+
@message = message
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def target
|
|
45
|
+
return @instance.instance_variable_get(@method_or_var) if @instance.instance_variable_defined?(@method_or_var)
|
|
46
|
+
|
|
47
|
+
@instance.__send__(@method_or_var)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def warn(callstack, called, args)
|
|
51
|
+
message = @message || "#{@var} is deprecated! Call #{@method_or_var}.#{called} instead of #{@var}.#{called}."
|
|
52
|
+
message = [message, "Args: #{args.inspect}"].join(" ") unless args.empty?
|
|
53
|
+
|
|
54
|
+
@deprecator.warn(message, callstack)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
data/lib/spree/deprecation.rb
CHANGED
|
@@ -1,57 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require '
|
|
3
|
+
require 'spree/core'
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
|
-
Deprecation =
|
|
6
|
+
Deprecation = Spree.deprecator
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
# deprecated instance variable.
|
|
10
|
-
#
|
|
11
|
-
# It differs from ActiveSupport::DeprecatedInstanceVariableProxy since
|
|
12
|
-
# it allows to define a custom message.
|
|
13
|
-
#
|
|
14
|
-
# class Example
|
|
15
|
-
# def initialize(deprecator)
|
|
16
|
-
# @request = Spree::DeprecatedInstanceVariableProxy.new(self, :request, :@request, deprecator, "Please, do not use this thing.")
|
|
17
|
-
# @_request = :a_request
|
|
18
|
-
# end
|
|
19
|
-
#
|
|
20
|
-
# def request
|
|
21
|
-
# @_request
|
|
22
|
-
# end
|
|
23
|
-
#
|
|
24
|
-
# def old_request
|
|
25
|
-
# @request
|
|
26
|
-
# end
|
|
27
|
-
# end
|
|
28
|
-
#
|
|
29
|
-
# When someone execute any method on @request variable this will trigger
|
|
30
|
-
# +warn+ method on +deprecator_instance+ and will fetch <tt>@_request</tt>
|
|
31
|
-
# variable via +request+ method and execute the same method on non-proxy
|
|
32
|
-
# instance variable.
|
|
33
|
-
#
|
|
34
|
-
# Default deprecator is <tt>Spree::Deprecation</tt>.
|
|
35
|
-
class DeprecatedInstanceVariableProxy < ActiveSupport::Deprecation::DeprecationProxy
|
|
36
|
-
def initialize(instance, method, var = "@#{method}", deprecator = Spree::Deprecation, message = nil)
|
|
37
|
-
@instance = instance
|
|
38
|
-
@method = method
|
|
39
|
-
@var = var
|
|
40
|
-
@deprecator = deprecator
|
|
41
|
-
@message = message
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def target
|
|
47
|
-
@instance.__send__(@method)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def warn(callstack, called, args)
|
|
51
|
-
message = @message || "#{@var} is deprecated! Call #{@method}.#{called} instead of #{@var}.#{called}."
|
|
52
|
-
message = [message, "Args: #{args.inspect}"].join(" ")
|
|
53
|
-
|
|
54
|
-
@deprecator.warn(message, callstack)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
8
|
+
Spree.deprecator.warn "Spree::Deprecation is deprecated. Please use Spree.deprecator instead.", caller(2)
|
|
57
9
|
end
|