solidus_core 2.10.0 → 2.11.0
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/javascripts/spree.js.erb +31 -2
- data/app/controllers/spree/base_controller.rb +1 -0
- data/app/mailers/spree/base_mailer.rb +4 -0
- data/app/mailers/spree/order_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
- data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
- data/app/models/concerns/spree/default_price.rb +1 -1
- data/app/models/concerns/spree/soft_deletable.rb +18 -0
- data/app/models/concerns/spree/user_address_book.rb +86 -32
- data/app/models/concerns/spree/user_methods.rb +3 -2
- data/app/models/spree/ability.rb +34 -10
- data/app/models/spree/address/name.rb +49 -0
- data/app/models/spree/address/state_validator.rb +71 -0
- data/app/models/spree/address.rb +94 -17
- data/app/models/spree/adjustment.rb +1 -1
- data/app/models/spree/base.rb +1 -0
- data/app/models/spree/calculator/default_tax.rb +1 -1
- data/app/models/spree/calculator/percent_per_item.rb +4 -4
- data/app/models/spree/calculator/price_sack.rb +1 -1
- data/app/models/spree/credit_card.rb +2 -2
- data/app/models/spree/customer_return.rb +4 -2
- data/app/models/spree/exchange.rb +1 -1
- data/app/models/spree/image/active_storage_attachment.rb +21 -0
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +13 -4
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/checkout.rb +1 -0
- data/app/models/spree/order.rb +91 -20
- data/app/models/spree/order_inventory.rb +16 -4
- data/app/models/spree/order_merger.rb +6 -4
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_updater.rb +11 -10
- data/app/models/spree/payment/cancellation.rb +3 -3
- data/app/models/spree/payment/processing.rb +54 -30
- data/app/models/spree/payment.rb +3 -3
- data/app/models/spree/payment_method.rb +8 -9
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +2 -8
- data/app/models/spree/product/scopes.rb +10 -5
- data/app/models/spree/product.rb +19 -14
- data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
- data/app/models/spree/promotion.rb +18 -7
- data/app/models/spree/promotion_action.rb +1 -7
- data/app/models/spree/promotion_code.rb +6 -1
- data/app/models/spree/promotion_code_batch.rb +1 -1
- data/app/models/spree/promotion_handler/coupon.rb +2 -2
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/promotion_rule_role.rb +1 -1
- data/app/models/spree/refund.rb +54 -12
- data/app/models/spree/reimbursement.rb +27 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
- data/app/models/spree/return_item.rb +21 -10
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/shipment.rb +2 -2
- data/app/models/spree/shipping_calculator.rb +1 -1
- data/app/models/spree/shipping_manifest.rb +2 -2
- data/app/models/spree/shipping_method.rb +2 -9
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
- data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +1 -3
- data/app/models/spree/stock_item.rb +2 -8
- data/app/models/spree/stock_movement.rb +2 -0
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +1 -7
- data/app/models/spree/store_credit_category.rb +30 -3
- data/app/models/spree/store_credit_event.rb +1 -7
- data/app/models/spree/store_credit_reason.rb +0 -4
- data/app/models/spree/tax/tax_helpers.rb +1 -1
- data/app/models/spree/tax_category.rb +2 -8
- data/app/models/spree/tax_rate.rb +7 -7
- data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/user_address.rb +8 -2
- data/app/models/spree/variant.rb +7 -13
- data/app/models/spree/variant_property_rule.rb +5 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
- data/app/models/spree/zone.rb +1 -1
- data/config/locales/en.yml +44 -5
- data/db/default/spree/countries.rb +1 -1
- data/db/default/spree/states.rb +12 -4
- data/db/default/spree/store_credit.rb +2 -2
- data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
- data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
- data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
- data/lib/generators/solidus/install/install_generator.rb +253 -0
- data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
- data/lib/generators/spree/install/install_generator.rb +7 -189
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
- data/lib/spree/app_configuration.rb +117 -51
- data/lib/spree/awesome_nested_set_override.rb +44 -0
- data/lib/spree/core/controller_helpers/auth.rb +17 -4
- data/lib/spree/core/controller_helpers/current_host.rb +17 -0
- data/lib/spree/core/controller_helpers/order.rb +8 -7
- data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
- data/lib/spree/core/engine.rb +39 -2
- data/lib/spree/core/importer/order.rb +26 -11
- data/lib/spree/core/permalinks.rb +1 -3
- data/lib/spree/core/product_filters.rb +6 -5
- data/lib/spree/core/state_machines/order.rb +249 -0
- data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
- data/lib/spree/core/state_machines.rb +20 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +5 -11
- data/lib/spree/encryptor.rb +25 -0
- data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
- data/lib/spree/event/configuration.rb +11 -6
- data/lib/spree/event/subscriber.rb +38 -18
- data/lib/spree/event/subscriber_registry.rb +92 -0
- data/lib/spree/event.rb +40 -7
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +2 -1
- data/lib/spree/paranoia_deprecations.rb +32 -12
- data/lib/spree/permission_sets/configuration_display.rb +14 -14
- data/lib/spree/permission_sets/default_customer.rb +16 -16
- data/lib/spree/permission_sets/order_display.rb +11 -11
- data/lib/spree/permission_sets/order_management.rb +1 -1
- data/lib/spree/permission_sets/product_display.rb +9 -9
- data/lib/spree/permission_sets/promotion_display.rb +5 -5
- data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
- data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
- data/lib/spree/permission_sets/stock_display.rb +2 -2
- data/lib/spree/permission_sets/stock_management.rb +1 -1
- data/lib/spree/permission_sets/user_display.rb +3 -3
- data/lib/spree/permission_sets/user_management.rb +4 -3
- data/lib/spree/permitted_attributes.rb +79 -9
- data/lib/spree/preferences/preferable.rb +4 -3
- data/lib/spree/preferences/preferable_class_methods.rb +22 -3
- data/lib/spree/testing_support/ability_helpers.rb +9 -9
- data/lib/spree/testing_support/authorization_helpers.rb +1 -0
- data/lib/spree/testing_support/blacklist_urls.rb +23 -0
- data/lib/spree/testing_support/capybara_ext.rb +3 -0
- data/lib/spree/testing_support/common_rake.rb +3 -3
- data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
- data/lib/spree/testing_support/dummy_app.rb +44 -23
- data/lib/spree/testing_support/factories/address_factory.rb +1 -2
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
- data/lib/spree/testing_support/factories/user_factory.rb +4 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/job_helpers.rb +24 -0
- data/lib/spree/testing_support/precompiled_assets.rb +15 -0
- data/lib/spree/testing_support/preferences.rb +3 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
- data/lib/spree/testing_support/translations.rb +25 -0
- data/solidus_core.gemspec +8 -5
- metadata +81 -359
- data/script/rails +0 -10
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -168
- data/spec/helpers/products_helper_spec.rb +0 -202
- data/spec/helpers/taxons_helper_spec.rb +0 -43
- data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
- data/spec/lib/calculated_adjustments_spec.rb +0 -133
- data/spec/lib/i18n_spec.rb +0 -97
- data/spec/lib/search/base_spec.rb +0 -91
- data/spec/lib/search/variant_spec.rb +0 -115
- data/spec/lib/spree/app_configuration_spec.rb +0 -140
- data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
- data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
- data/spec/lib/spree/core/current_store_spec.rb +0 -33
- data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
- data/spec/lib/spree/core/importer/order_spec.rb +0 -484
- data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
- data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
- data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
- data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
- data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
- data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
- data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
- data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
- data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
- data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
- data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
- data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
- data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
- data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
- data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core/version_spec.rb +0 -19
- data/spec/lib/spree/event/subscriber_spec.rb +0 -85
- data/spec/lib/spree/event_spec.rb +0 -130
- data/spec/lib/spree/localized_number_spec.rb +0 -45
- data/spec/lib/spree/migrations_spec.rb +0 -32
- data/spec/lib/spree/money_spec.rb +0 -298
- data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
- data/spec/lib/spree/promo/environment_spec.rb +0 -53
- data/spec/lib/tasks/dummy_task.rake +0 -12
- data/spec/lib/tasks/dummy_task_spec.rb +0 -30
- data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
- data/spec/mailers/carton_mailer_spec.rb +0 -44
- data/spec/mailers/order_mailer_spec.rb +0 -117
- data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
- data/spec/mailers/test_mailer_spec.rb +0 -13
- data/spec/models/spree/ability_spec.rb +0 -279
- data/spec/models/spree/address_spec.rb +0 -399
- data/spec/models/spree/adjustment_reason_spec.rb +0 -11
- data/spec/models/spree/adjustment_spec.rb +0 -339
- data/spec/models/spree/asset_spec.rb +0 -25
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
- data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
- data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
- data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
- data/spec/models/spree/calculator_spec.rb +0 -43
- data/spec/models/spree/carton_spec.rb +0 -145
- data/spec/models/spree/classification_spec.rb +0 -126
- data/spec/models/spree/concerns/display_money_spec.rb +0 -44
- data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
- data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
- data/spec/models/spree/country_spec.rb +0 -154
- data/spec/models/spree/credit_card_spec.rb +0 -373
- data/spec/models/spree/customer_return_spec.rb +0 -294
- data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
- data/spec/models/spree/exchange_spec.rb +0 -76
- data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
- data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
- data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
- data/spec/models/spree/gateway/bogus_simple.rb +0 -14
- data/spec/models/spree/gateway/bogus_spec.rb +0 -14
- data/spec/models/spree/gateway_spec.rb +0 -14
- data/spec/models/spree/image_spec.rb +0 -25
- data/spec/models/spree/inventory_unit_spec.rb +0 -309
- data/spec/models/spree/line_item_spec.rb +0 -240
- data/spec/models/spree/option_type_spec.rb +0 -16
- data/spec/models/spree/option_value_spec.rb +0 -52
- data/spec/models/spree/order/address_spec.rb +0 -52
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -44
- data/spec/models/spree/order/checkout_spec.rb +0 -740
- data/spec/models/spree/order/finalizing_spec.rb +0 -92
- data/spec/models/spree/order/number_generator_spec.rb +0 -47
- data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
- data/spec/models/spree/order/payment_spec.rb +0 -280
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
- data/spec/models/spree/order/state_machine_spec.rb +0 -122
- data/spec/models/spree/order/totals_spec.rb +0 -26
- data/spec/models/spree/order/validations_spec.rb +0 -17
- data/spec/models/spree/order_cancellations_spec.rb +0 -233
- data/spec/models/spree/order_capturing_spec.rb +0 -16
- data/spec/models/spree/order_contents_spec.rb +0 -362
- data/spec/models/spree/order_inventory_spec.rb +0 -285
- data/spec/models/spree/order_merger_spec.rb +0 -162
- data/spec/models/spree/order_mutex_spec.rb +0 -89
- data/spec/models/spree/order_promotion_spec.rb +0 -33
- data/spec/models/spree/order_shipping_spec.rb +0 -247
- data/spec/models/spree/order_spec.rb +0 -1687
- data/spec/models/spree/order_taxation_spec.rb +0 -128
- data/spec/models/spree/order_update_attributes_spec.rb +0 -49
- data/spec/models/spree/order_updater_spec.rb +0 -556
- data/spec/models/spree/payment/cancellation_spec.rb +0 -84
- data/spec/models/spree/payment_create_spec.rb +0 -195
- data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
- data/spec/models/spree/payment_method/check_spec.rb +0 -80
- data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
- data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
- data/spec/models/spree/payment_method_spec.rb +0 -408
- data/spec/models/spree/payment_spec.rb +0 -1270
- data/spec/models/spree/permission_sets/base_spec.rb +0 -14
- data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
- data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
- data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
- data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
- data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
- data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
- data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
- data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
- data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
- data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
- data/spec/models/spree/preference_spec.rb +0 -79
- data/spec/models/spree/preferences/configuration_spec.rb +0 -27
- data/spec/models/spree/preferences/preferable_spec.rb +0 -334
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
- data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
- data/spec/models/spree/preferences/store_spec.rb +0 -40
- data/spec/models/spree/price_spec.rb +0 -150
- data/spec/models/spree/product/scopes_spec.rb +0 -164
- data/spec/models/spree/product_duplicator_spec.rb +0 -92
- data/spec/models/spree/product_filter_spec.rb +0 -28
- data/spec/models/spree/product_property_spec.rb +0 -20
- data/spec/models/spree/product_spec.rb +0 -584
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
- data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
- data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
- data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
- data/spec/models/spree/promotion_action_spec.rb +0 -44
- data/spec/models/spree/promotion_category_spec.rb +0 -19
- data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
- data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
- data/spec/models/spree/promotion_code_spec.rb +0 -206
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
- data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
- data/spec/models/spree/promotion_rule_spec.rb +0 -34
- data/spec/models/spree/promotion_spec.rb +0 -945
- data/spec/models/spree/refund_spec.rb +0 -200
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
- data/spec/models/spree/reimbursement_spec.rb +0 -278
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
- data/spec/models/spree/return_authorization_spec.rb +0 -226
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -785
- data/spec/models/spree/returns_calculator_spec.rb +0 -16
- data/spec/models/spree/shipment_spec.rb +0 -914
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_manifest_spec.rb +0 -110
- data/spec/models/spree/shipping_method_spec.rb +0 -292
- data/spec/models/spree/shipping_rate_spec.rb +0 -154
- data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
- data/spec/models/spree/state_spec.rb +0 -43
- data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
- data/spec/models/spree/stock/availability_spec.rb +0 -143
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
- data/spec/models/spree/stock/content_item_spec.rb +0 -70
- data/spec/models/spree/stock/differentiator_spec.rb +0 -41
- data/spec/models/spree/stock/estimator_spec.rb +0 -241
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
- data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
- data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
- data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/quantifier_spec.rb +0 -113
- data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
- data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
- data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
- data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
- data/spec/models/spree/stock_item_spec.rb +0 -348
- data/spec/models/spree/stock_location_spec.rb +0 -288
- data/spec/models/spree/stock_movement_spec.rb +0 -58
- data/spec/models/spree/stock_quantities_spec.rb +0 -249
- data/spec/models/spree/store_credit_category_spec.rb +0 -19
- data/spec/models/spree/store_credit_event_spec.rb +0 -328
- data/spec/models/spree/store_credit_spec.rb +0 -900
- data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
- data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
- data/spec/models/spree/store_spec.rb +0 -156
- data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
- data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
- data/spec/models/spree/tax/tax_location_spec.rb +0 -79
- data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
- data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
- data/spec/models/spree/tax_category_spec.rb +0 -50
- data/spec/models/spree/tax_rate_spec.rb +0 -317
- data/spec/models/spree/taxon_spec.rb +0 -197
- data/spec/models/spree/taxonomy_spec.rb +0 -15
- data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
- data/spec/models/spree/unit_cancel_spec.rb +0 -126
- data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
- data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
- data/spec/models/spree/user_spec.rb +0 -247
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
- data/spec/models/spree/variant/price_selector_spec.rb +0 -90
- data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
- data/spec/models/spree/variant/scopes_spec.rb +0 -94
- data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
- data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
- data/spec/models/spree/variant_property_rule_spec.rb +0 -85
- data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
- data/spec/models/spree/variant_spec.rb +0 -862
- data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
- data/spec/models/spree/wallet_spec.rb +0 -155
- data/spec/models/spree/zone_spec.rb +0 -248
- data/spec/rails_helper.rb +0 -46
- data/spec/shared_examples/calculator_shared_examples.rb +0 -10
- data/spec/spec_helper.rb +0 -36
- data/spec/support/big_decimal.rb +0 -7
- data/spec/support/concerns/default_price.rb +0 -44
- data/spec/support/concerns/payment_source.rb +0 -66
- data/spec/support/concerns/working_factories.rb +0 -15
- data/spec/support/dummy_ability.rb +0 -7
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
- /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Core
|
|
5
|
+
class StateMachines
|
|
6
|
+
module Order
|
|
7
|
+
def self.included(klass)
|
|
8
|
+
klass.extend ClassMethods
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module ClassMethods
|
|
12
|
+
attr_accessor :previous_states
|
|
13
|
+
attr_writer :next_event_transitions
|
|
14
|
+
attr_writer :checkout_steps
|
|
15
|
+
attr_writer :removed_transitions
|
|
16
|
+
|
|
17
|
+
def checkout_flow(&block)
|
|
18
|
+
if block_given?
|
|
19
|
+
@checkout_flow = block
|
|
20
|
+
define_state_machine!
|
|
21
|
+
else
|
|
22
|
+
@checkout_flow
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def define_state_machine!
|
|
27
|
+
self.checkout_steps = {}
|
|
28
|
+
self.next_event_transitions = []
|
|
29
|
+
self.previous_states = [:cart]
|
|
30
|
+
self.removed_transitions = []
|
|
31
|
+
|
|
32
|
+
# Build the checkout flow using the checkout_flow defined either
|
|
33
|
+
# within the Order class, or a decorator for that class.
|
|
34
|
+
#
|
|
35
|
+
# This method may be called multiple times depending on if the
|
|
36
|
+
# checkout_flow is re-defined in a decorator or not.
|
|
37
|
+
instance_eval(&checkout_flow)
|
|
38
|
+
|
|
39
|
+
klass = self
|
|
40
|
+
|
|
41
|
+
# To avoid multiple occurrences of the same transition being defined
|
|
42
|
+
# On first definition, state_machines will not be defined
|
|
43
|
+
state_machines.clear if respond_to?(:state_machines)
|
|
44
|
+
state_machine :state, initial: :cart, use_transactions: false do
|
|
45
|
+
klass.next_event_transitions.each { |state| transition(state.merge(on: :next)) }
|
|
46
|
+
|
|
47
|
+
# Persist the state on the order
|
|
48
|
+
after_transition do |order, transition|
|
|
49
|
+
order.state = order.state
|
|
50
|
+
order.state_changes.create(
|
|
51
|
+
previous_state: transition.from,
|
|
52
|
+
next_state: transition.to,
|
|
53
|
+
name: 'order',
|
|
54
|
+
user_id: order.user_id
|
|
55
|
+
)
|
|
56
|
+
order.save
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
event :cancel do
|
|
60
|
+
transition to: :canceled, if: :allow_cancel?, from: :complete
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
event :return do
|
|
64
|
+
transition to: :returned, from: [:complete, :awaiting_return], if: :all_inventory_units_returned?
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
event :resume do
|
|
68
|
+
transition to: :resumed, from: :canceled, if: :canceled?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
event :authorize_return do
|
|
72
|
+
transition to: :awaiting_return, from: :complete
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
event :complete do
|
|
76
|
+
transition to: :complete, from: :confirm
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if states[:payment]
|
|
80
|
+
event :payment_failed do
|
|
81
|
+
transition to: :payment, from: :confirm
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
after_transition to: :complete, do: :add_payment_sources_to_wallet
|
|
85
|
+
before_transition to: :payment, do: :add_default_payment_from_wallet
|
|
86
|
+
before_transition to: :payment, do: :ensure_billing_address
|
|
87
|
+
|
|
88
|
+
before_transition to: :confirm, do: :add_store_credit_payments
|
|
89
|
+
|
|
90
|
+
# see also process_payments_before_complete below which needs to
|
|
91
|
+
# be added in the correct sequence.
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
before_transition from: :cart, do: :ensure_line_items_present
|
|
95
|
+
|
|
96
|
+
if states[:address]
|
|
97
|
+
before_transition to: :address, do: :assign_default_user_addresses
|
|
98
|
+
before_transition from: :address, do: :persist_user_address!
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
if states[:delivery]
|
|
102
|
+
before_transition to: :delivery, do: :ensure_shipping_address
|
|
103
|
+
before_transition to: :delivery, do: :create_proposed_shipments
|
|
104
|
+
before_transition to: :delivery, do: :ensure_available_shipping_rates
|
|
105
|
+
before_transition from: :delivery, do: :apply_shipping_promotions
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
before_transition to: :resumed, do: :ensure_line_item_variants_are_not_deleted
|
|
109
|
+
before_transition to: :resumed, do: :validate_line_item_availability
|
|
110
|
+
|
|
111
|
+
# Sequence of before_transition to: :complete
|
|
112
|
+
# calls matter so that we do not process payments
|
|
113
|
+
# until validations have passed
|
|
114
|
+
before_transition to: :complete, do: :validate_line_item_availability
|
|
115
|
+
before_transition to: :complete, do: :ensure_promotions_eligible
|
|
116
|
+
before_transition to: :complete, do: :ensure_line_item_variants_are_not_deleted
|
|
117
|
+
before_transition to: :complete, do: :ensure_inventory_units
|
|
118
|
+
if states[:payment]
|
|
119
|
+
before_transition to: :complete, do: :process_payments_before_complete
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
after_transition to: :complete, do: :finalize!
|
|
123
|
+
after_transition to: :resumed, do: :after_resume
|
|
124
|
+
after_transition to: :canceled, do: :after_cancel
|
|
125
|
+
|
|
126
|
+
after_transition from: any - :cart, to: any - [:confirm, :complete] do |order|
|
|
127
|
+
order.recalculate
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
after_transition do |order, transition|
|
|
131
|
+
order.logger.debug "Order #{order.number} transitioned from #{transition.from} to #{transition.to} via #{transition.event}"
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
after_failure do |order, transition|
|
|
135
|
+
order.logger.debug "Order #{order.number} halted transition on event #{transition.event} state #{transition.from}: #{order.errors.full_messages.join}"
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def go_to_state(name, options = {})
|
|
141
|
+
checkout_steps[name] = options
|
|
142
|
+
previous_states.each do |state|
|
|
143
|
+
add_transition({ from: state, to: name }.merge(options))
|
|
144
|
+
end
|
|
145
|
+
if options[:if]
|
|
146
|
+
previous_states << name
|
|
147
|
+
else
|
|
148
|
+
self.previous_states = [name]
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def insert_checkout_step(name, options = {})
|
|
153
|
+
before = options.delete(:before)
|
|
154
|
+
after = options.delete(:after) unless before
|
|
155
|
+
after = checkout_steps.keys.last unless before || after
|
|
156
|
+
|
|
157
|
+
cloned_steps = checkout_steps.clone
|
|
158
|
+
cloned_removed_transitions = removed_transitions.clone
|
|
159
|
+
checkout_flow do
|
|
160
|
+
cloned_steps.each_pair do |key, value|
|
|
161
|
+
go_to_state(name, options) if key == before
|
|
162
|
+
go_to_state(key, value)
|
|
163
|
+
go_to_state(name, options) if key == after
|
|
164
|
+
end
|
|
165
|
+
cloned_removed_transitions.each do |transition|
|
|
166
|
+
remove_transition(transition)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def remove_checkout_step(name)
|
|
172
|
+
cloned_steps = checkout_steps.clone
|
|
173
|
+
cloned_removed_transitions = removed_transitions.clone
|
|
174
|
+
checkout_flow do
|
|
175
|
+
cloned_steps.each_pair do |key, value|
|
|
176
|
+
go_to_state(key, value) unless key == name
|
|
177
|
+
end
|
|
178
|
+
cloned_removed_transitions.each do |transition|
|
|
179
|
+
remove_transition(transition)
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def remove_transition(options = {})
|
|
185
|
+
removed_transitions << options
|
|
186
|
+
next_event_transitions.delete(find_transition(options))
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def find_transition(options = {})
|
|
190
|
+
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
|
|
191
|
+
|
|
192
|
+
next_event_transitions.detect do |transition|
|
|
193
|
+
transition[options[:from].to_sym] == options[:to].to_sym
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def next_event_transitions
|
|
198
|
+
@next_event_transitions ||= []
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
def checkout_steps
|
|
202
|
+
@checkout_steps ||= {}
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def checkout_step_names
|
|
206
|
+
checkout_steps.keys
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def add_transition(options)
|
|
210
|
+
next_event_transitions << { options.delete(:from) => options.delete(:to) }.merge(options)
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def removed_transitions
|
|
214
|
+
@removed_transitions ||= []
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def checkout_steps
|
|
219
|
+
steps = self.class.checkout_steps.each_with_object([]) { |(step, options), checkout_steps|
|
|
220
|
+
next if options.include?(:if) && !options[:if].call(self)
|
|
221
|
+
|
|
222
|
+
checkout_steps << step
|
|
223
|
+
}.map(&:to_s)
|
|
224
|
+
# Ensure there is always a complete step
|
|
225
|
+
steps << "complete" unless steps.include?("complete")
|
|
226
|
+
steps
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def has_checkout_step?(step)
|
|
230
|
+
step.present? && checkout_steps.include?(step)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def passed_checkout_step?(step)
|
|
234
|
+
has_checkout_step?(step) && checkout_step_index(step) < checkout_step_index(state)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def checkout_step_index(step)
|
|
238
|
+
checkout_steps.index(step).to_i
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def can_go_to_state?(state)
|
|
242
|
+
return false unless has_checkout_step?(self.state) && has_checkout_step?(state)
|
|
243
|
+
|
|
244
|
+
checkout_step_index(state) > checkout_step_index(self.state)
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -19,8 +19,8 @@ module Spree
|
|
|
19
19
|
|
|
20
20
|
included do
|
|
21
21
|
state_machine :reception_status, initial: :awaiting do
|
|
22
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES,
|
|
23
|
-
after_transition to: ::Spree::ReturnItem::COMPLETED_RECEPTION_STATUSES,
|
|
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
24
|
after_transition to: :received, do: :process_inventory_unit!
|
|
25
25
|
|
|
26
26
|
event(:cancel) { transition to: :cancelled, from: :awaiting }
|
|
@@ -9,7 +9,8 @@ module Spree
|
|
|
9
9
|
:return_item_reception,
|
|
10
10
|
:payment,
|
|
11
11
|
:inventory_unit,
|
|
12
|
-
:shipment
|
|
12
|
+
:shipment,
|
|
13
|
+
:order
|
|
13
14
|
|
|
14
15
|
def return_authorization
|
|
15
16
|
@return_authorization ||= begin
|
|
@@ -65,6 +66,24 @@ module Spree
|
|
|
65
66
|
@shipment.constantize
|
|
66
67
|
end
|
|
67
68
|
|
|
69
|
+
def order
|
|
70
|
+
@order ||= begin
|
|
71
|
+
if Spree::Config.use_legacy_order_state_machine
|
|
72
|
+
Spree::Deprecation.warn(
|
|
73
|
+
"Spree::Order state machine defined in Spree::Order::Checkout is deprecated. " \
|
|
74
|
+
"Future versions of Solidus will use Spree::Core::StateMachines::Order}",
|
|
75
|
+
caller
|
|
76
|
+
)
|
|
77
|
+
'Spree::Order::Checkout'
|
|
78
|
+
else
|
|
79
|
+
require 'spree/core/state_machines/order'
|
|
80
|
+
'Spree::Core::StateMachines::Order'
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
@order.constantize
|
|
85
|
+
end
|
|
86
|
+
|
|
68
87
|
def reimbursement
|
|
69
88
|
@reimbursement ||= begin
|
|
70
89
|
require 'spree/core/state_machines/reimbursement'
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
|
@@ -53,17 +53,6 @@ module Spree
|
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
if Gem::Version.new(Rails.version) < Gem::Version.new('5.2')
|
|
57
|
-
warn <<~HEREDOC
|
|
58
|
-
Rails 5.1 (EOL) is deprecated and will not be supported anymore from the next Solidus version.
|
|
59
|
-
Please, upgrade to a more recent Rails version.
|
|
60
|
-
|
|
61
|
-
Read more on upgrading from Rails 5.1 to Rails 5.2 here:
|
|
62
|
-
https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#upgrading-from-rails-5-1-to-rails-5-2
|
|
63
|
-
|
|
64
|
-
HEREDOC
|
|
65
|
-
end
|
|
66
|
-
|
|
67
56
|
require 'spree/core/version'
|
|
68
57
|
|
|
69
58
|
require 'spree/core/active_merchant_dependencies'
|
|
@@ -89,6 +78,7 @@ require 'spree/core/product_duplicator'
|
|
|
89
78
|
require 'spree/core/current_store'
|
|
90
79
|
require 'spree/core/controller_helpers/auth'
|
|
91
80
|
require 'spree/core/controller_helpers/common'
|
|
81
|
+
require 'spree/core/controller_helpers/current_host'
|
|
92
82
|
require 'spree/core/controller_helpers/order'
|
|
93
83
|
require 'spree/core/controller_helpers/payment_parameters'
|
|
94
84
|
require 'spree/core/controller_helpers/pricing'
|
|
@@ -104,3 +94,7 @@ require 'spree/permission_sets'
|
|
|
104
94
|
require 'spree/preferences/store'
|
|
105
95
|
require 'spree/preferences/static_model_preferences'
|
|
106
96
|
require 'spree/preferences/scoped_store'
|
|
97
|
+
|
|
98
|
+
if Rails.gem_version >= Gem::Version.new('6.1.0.alpha')
|
|
99
|
+
require 'spree/awesome_nested_set_override'
|
|
100
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
# Spree::Encryptor is a thin wrapper around ActiveSupport::MessageEncryptor.
|
|
5
|
+
class Encryptor
|
|
6
|
+
# @param key [String] the 256 bits signature key
|
|
7
|
+
def initialize(key)
|
|
8
|
+
@crypt = ActiveSupport::MessageEncryptor.new(key)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Encrypt a value
|
|
12
|
+
# @param value [String] the value to encrypt
|
|
13
|
+
# @return [String] the encrypted value
|
|
14
|
+
def encrypt(value)
|
|
15
|
+
@crypt.encrypt_and_sign(value)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Decrypt an encrypted value
|
|
19
|
+
# @param encrypted_value [String] the value to decrypt
|
|
20
|
+
# @return [String] the decrypted value
|
|
21
|
+
def decrypt(encrypted_value)
|
|
22
|
+
@crypt.decrypt_and_verify(encrypted_value)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -4,6 +4,8 @@ module Spree
|
|
|
4
4
|
module Event
|
|
5
5
|
module Adapters
|
|
6
6
|
module ActiveSupportNotifications
|
|
7
|
+
class InvalidEventNameType < StandardError; end
|
|
8
|
+
|
|
7
9
|
extend self
|
|
8
10
|
|
|
9
11
|
def fire(event_name, opts)
|
|
@@ -29,6 +31,36 @@ module Spree
|
|
|
29
31
|
memo[name] = listeners if listeners.present?
|
|
30
32
|
end
|
|
31
33
|
end
|
|
34
|
+
|
|
35
|
+
# Normalizes the event name according to this specific adapter rules.
|
|
36
|
+
# When the event name is a string or a symbol, if the suffix is missing, then
|
|
37
|
+
# it is added automatically.
|
|
38
|
+
# When the event name is a regexp, due to the huge variability of regexps, adding
|
|
39
|
+
# or not the suffix is developer's responsibility (if you don't, you will subscribe
|
|
40
|
+
# to all internal rails events as well).
|
|
41
|
+
# When the event type is not supported, an error is raised.
|
|
42
|
+
#
|
|
43
|
+
# @param [String, Symbol, Regexp] event_name the event name, with or without the
|
|
44
|
+
# suffix (Spree::Config.events.suffix defaults to `.spree`).
|
|
45
|
+
def normalize_name(event_name)
|
|
46
|
+
case event_name
|
|
47
|
+
when Regexp
|
|
48
|
+
event_name
|
|
49
|
+
when String, Symbol
|
|
50
|
+
name = event_name.to_s
|
|
51
|
+
name.end_with?(suffix) ? name : [name, suffix].join
|
|
52
|
+
else
|
|
53
|
+
raise InvalidEventNameType, "Invalid event name type: #{event_name.class}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# The suffix used for namespacing event names, defaults to
|
|
58
|
+
# `.spree`
|
|
59
|
+
#
|
|
60
|
+
# @see Spree::Event::Configuration#suffix
|
|
61
|
+
def suffix
|
|
62
|
+
Spree::Config.events.suffix
|
|
63
|
+
end
|
|
32
64
|
end
|
|
33
65
|
end
|
|
34
66
|
end
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'spree/core/class_constantizer'
|
|
4
|
-
|
|
5
3
|
module Spree
|
|
6
4
|
module Event
|
|
7
5
|
class Configuration
|
|
6
|
+
def subscriber_registry
|
|
7
|
+
@subscriber_registry ||= Spree::Event::SubscriberRegistry.new
|
|
8
|
+
end
|
|
9
|
+
|
|
8
10
|
def subscribers
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
end
|
|
11
|
+
Spree::Deprecation.warn("`Spree::Config.events.subscribers` is deprecated. Please use `Spree::Config.events.subscriber_registry`.", caller)
|
|
12
|
+
subscriber_registry.send(:registry).keys.map { |module_name| module_name.constantize }
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
attr_writer :adapter, :suffix
|
|
15
|
+
attr_writer :adapter, :suffix, :autoload_subscribers
|
|
16
|
+
|
|
17
|
+
def autoload_subscribers
|
|
18
|
+
@autoload_subscribers.nil? ? true : !!@autoload_subscribers
|
|
19
|
+
end
|
|
15
20
|
|
|
16
21
|
def adapter
|
|
17
22
|
@adapter ||= Spree::Event::Adapters::ActiveSupportNotifications
|
|
@@ -19,13 +19,20 @@ module Spree
|
|
|
19
19
|
# end
|
|
20
20
|
# end
|
|
21
21
|
#
|
|
22
|
-
#
|
|
22
|
+
# # Optional, required only when the subscriber needs to be loaded manually.
|
|
23
|
+
# #
|
|
24
|
+
# # If Spree::Config.events.autoload_subscribers is set to `true` and the module
|
|
25
|
+
# # file matches the pattern `app/subscribers/**/*_subscriber.rb` then it will
|
|
26
|
+
# # be loaded automatically at boot and this line can be removed:
|
|
27
|
+
# EmailSender.activate
|
|
23
28
|
module Subscriber
|
|
24
29
|
def self.included(base)
|
|
25
30
|
base.extend base
|
|
26
31
|
|
|
27
32
|
base.mattr_accessor :event_actions
|
|
28
33
|
base.event_actions = {}
|
|
34
|
+
|
|
35
|
+
Spree::Event.subscriber_registry.register(base)
|
|
29
36
|
end
|
|
30
37
|
|
|
31
38
|
# Declares a method name in the including module that can be subscribed/unsubscribed
|
|
@@ -52,32 +59,45 @@ module Spree
|
|
|
52
59
|
# end
|
|
53
60
|
# end
|
|
54
61
|
def event_action(method_name, event_name: nil)
|
|
55
|
-
|
|
62
|
+
mattr_writer "#{method_name}_handler"
|
|
63
|
+
|
|
64
|
+
define_method "#{method_name}_handler" do
|
|
65
|
+
Spree::Deprecation.warn("#{name}.#{method_name}_handler and #{name}.#{method_name}_handler= from the old events mapping interface are deprecated. Please use the new mapping stored in Spree::Event.subscribers.", caller)
|
|
66
|
+
|
|
67
|
+
class_variable_get("@@#{method_name}_handler")
|
|
68
|
+
end
|
|
69
|
+
|
|
56
70
|
event_actions[method_name] = (event_name || method_name).to_s
|
|
57
71
|
end
|
|
58
72
|
|
|
59
|
-
#
|
|
73
|
+
# Activates all declared event actions to their events. Only actions that are activated
|
|
60
74
|
# will be called when their event fires.
|
|
61
75
|
#
|
|
62
|
-
# @example
|
|
63
|
-
# EmailSender.
|
|
76
|
+
# @example activate all event actions for module 'EmailSender'
|
|
77
|
+
# EmailSender.activate
|
|
78
|
+
def activate
|
|
79
|
+
Spree::Event.subscriber_registry.activate_subscriber(self)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Deactivates all declared event actions (or a single specific one) from their events.
|
|
83
|
+
# This means that when an event fires then none of its unsubscribed event actions will
|
|
84
|
+
# be called.
|
|
85
|
+
# @example deactivate all event actions for module 'EmailSender'
|
|
86
|
+
# EmailSender.deactivate
|
|
87
|
+
# @example deactivate only order_finalized for module 'EmailSender'
|
|
88
|
+
# EmailSender.deactivate(:order_finalized)
|
|
89
|
+
def deactivate(event_action_name = nil)
|
|
90
|
+
Spree::Event.subscriber_registry.deactivate_subscriber(self, event_action_name)
|
|
91
|
+
end
|
|
92
|
+
|
|
64
93
|
def subscribe!
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
send "#{event_action}_handler=", Spree::Event.subscribe(event_name) { |event|
|
|
68
|
-
send event_action, event
|
|
69
|
-
}
|
|
70
|
-
end
|
|
94
|
+
Spree::Deprecation.warn("#{self}.subscribe! is deprecated. Please use `#{self}.activate`.", caller)
|
|
95
|
+
activate
|
|
71
96
|
end
|
|
72
97
|
|
|
73
|
-
# Unsubscribes all declared event actions from their events. This means that when an event
|
|
74
|
-
# fires then none of its unsubscribed event actions will be called.
|
|
75
|
-
# @example unsubscribe all event actions for module 'EmailSender'
|
|
76
|
-
# EmailSender.unsubscribe!
|
|
77
98
|
def unsubscribe!
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
end
|
|
99
|
+
Spree::Deprecation.warn("#{self}.unsubscribe! is deprecated. Please use `#{self}.deactivate`.", caller)
|
|
100
|
+
deactivate
|
|
81
101
|
end
|
|
82
102
|
end
|
|
83
103
|
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Event
|
|
5
|
+
class SubscriberRegistry
|
|
6
|
+
def initialize
|
|
7
|
+
@registry = {}
|
|
8
|
+
@semaphore = Mutex.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def register(subscriber)
|
|
12
|
+
registry[subscriber.name] ||= {}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def activate_autoloadable_subscribers
|
|
16
|
+
require_subscriber_files
|
|
17
|
+
activate_all_subscribers
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def activate_all_subscribers
|
|
21
|
+
registry.each_key { |subscriber_name| activate_subscriber(subscriber_name.constantize) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def deactivate_all_subscribers
|
|
25
|
+
registry.each_key { |subscriber_name| deactivate_subscriber(subscriber_name.constantize) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def activate_subscriber(subscriber)
|
|
29
|
+
return unless registry[subscriber.name]
|
|
30
|
+
|
|
31
|
+
subscriber.event_actions.each do |event_action, event_name|
|
|
32
|
+
@semaphore.synchronize do
|
|
33
|
+
unsafe_deactivate_subscriber(subscriber, event_action)
|
|
34
|
+
|
|
35
|
+
subscription = Spree::Event.subscribe(event_name) { |event| subscriber.send(event_action, event) }
|
|
36
|
+
|
|
37
|
+
# deprecated mappings, to be removed when Solidus 2.10 is not supported anymore:
|
|
38
|
+
subscriber.send("#{event_action}_handler=", subscription)
|
|
39
|
+
|
|
40
|
+
registry[subscriber.name][event_action] = subscription
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def deactivate_subscriber(subscriber, event_action_name = nil)
|
|
46
|
+
@semaphore.synchronize do
|
|
47
|
+
unsafe_deactivate_subscriber(subscriber, event_action_name)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
attr_reader :registry
|
|
54
|
+
|
|
55
|
+
# Loads all Solidus' core and application's event subscribers files.
|
|
56
|
+
# The latter are loaded automatically only when the preference
|
|
57
|
+
# Spree::Config.events.autoload_subscribers is set to a truthy value.
|
|
58
|
+
#
|
|
59
|
+
# Files must be placed under the directory `app/subscribers` and their
|
|
60
|
+
# name must end with `_subscriber.rb`.
|
|
61
|
+
#
|
|
62
|
+
# Loading the files has the side effect of adding their module to the
|
|
63
|
+
# list in Spree::Event.subscribers.
|
|
64
|
+
def require_subscriber_files
|
|
65
|
+
pattern = "app/subscribers/**/*_subscriber.rb"
|
|
66
|
+
|
|
67
|
+
# Load Solidus subscribers
|
|
68
|
+
# rubocop:disable Rails/DynamicFindBy
|
|
69
|
+
solidus_core_dir = Gem::Specification.find_by_name('solidus_core').gem_dir
|
|
70
|
+
# rubocop:enable Rails/DynamicFindBy
|
|
71
|
+
Dir.glob(File.join(solidus_core_dir, pattern)) { |c| require_dependency(c.to_s) }
|
|
72
|
+
|
|
73
|
+
# Load application subscribers, only when the flag is set to true:
|
|
74
|
+
if Spree::Config.events.autoload_subscribers
|
|
75
|
+
Rails.root.glob(pattern) { |c| require_dependency(c.to_s) }
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def unsafe_deactivate_subscriber(subscriber, event_action_name = nil)
|
|
80
|
+
to_unsubscribe = Array.wrap(event_action_name || subscriber.event_actions.keys)
|
|
81
|
+
|
|
82
|
+
to_unsubscribe.each do |event_action|
|
|
83
|
+
if (subscription = registry.dig(subscriber.name, event_action))
|
|
84
|
+
Spree::Event.unsubscribe(subscription)
|
|
85
|
+
|
|
86
|
+
registry[subscriber.name].delete(event_action)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|