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,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module PromotionHandler
|
5
|
-
class Page
|
6
|
-
attr_reader :order, :path
|
7
|
-
|
8
|
-
def initialize(order, path)
|
9
|
-
@order = order
|
10
|
-
@path = path.gsub(/\A\//, '')
|
11
|
-
end
|
12
|
-
|
13
|
-
def activate
|
14
|
-
if promotion && promotion.eligible?(order)
|
15
|
-
promotion.activate(order: order)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def promotion
|
22
|
-
@promotion ||= Spree::Promotion.active.find_by(path: path)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module PromotionHandler
|
5
|
-
# Used for activating promotions with shipping rules
|
6
|
-
class Shipping
|
7
|
-
attr_reader :order
|
8
|
-
attr_accessor :error, :success
|
9
|
-
|
10
|
-
def initialize(order)
|
11
|
-
@order = order
|
12
|
-
end
|
13
|
-
|
14
|
-
def activate
|
15
|
-
connected_promotions.each do |order_promotion|
|
16
|
-
if order_promotion.promotion.eligible?(order)
|
17
|
-
order_promotion.promotion.activate(
|
18
|
-
order: order,
|
19
|
-
promotion_code: order_promotion.promotion_code,
|
20
|
-
)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
not_connected_automatic_promotions.each do |promotion|
|
25
|
-
if promotion.eligible?(order)
|
26
|
-
promotion.activate(order: order)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def not_connected_automatic_promotions
|
34
|
-
automatic_promotions - connected_promotions.map(&:promotion)
|
35
|
-
end
|
36
|
-
|
37
|
-
def automatic_promotions
|
38
|
-
@automatic_promotions ||= active_shipping_promotions.
|
39
|
-
where(apply_automatically: true).
|
40
|
-
to_a.
|
41
|
-
uniq
|
42
|
-
end
|
43
|
-
|
44
|
-
def connected_promotions
|
45
|
-
@connected_promotions ||= order.order_promotions.
|
46
|
-
joins(:promotion).
|
47
|
-
includes(:promotion).
|
48
|
-
merge(active_shipping_promotions).
|
49
|
-
to_a.
|
50
|
-
uniq
|
51
|
-
end
|
52
|
-
|
53
|
-
def active_shipping_promotions
|
54
|
-
Spree::Promotion.all.
|
55
|
-
active.
|
56
|
-
joins(:promotion_actions).
|
57
|
-
merge(Spree::PromotionAction.shipping)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spree/preferences/persistable'
|
4
|
-
|
5
|
-
module Spree
|
6
|
-
# Base class for all promotion rules
|
7
|
-
class PromotionRule < Spree::Base
|
8
|
-
include Spree::Preferences::Persistable
|
9
|
-
|
10
|
-
belongs_to :promotion, class_name: 'Spree::Promotion', inverse_of: :promotion_rules, optional: true
|
11
|
-
|
12
|
-
scope :of_type, ->(type) { where(type: type) }
|
13
|
-
|
14
|
-
validates :promotion, presence: true
|
15
|
-
validate :unique_per_promotion, on: :create
|
16
|
-
|
17
|
-
def self.for(promotable)
|
18
|
-
all.select { |rule| rule.applicable?(promotable) }
|
19
|
-
end
|
20
|
-
|
21
|
-
def applicable?(_promotable)
|
22
|
-
raise NotImplementedError, "applicable? should be implemented in a sub-class of Spree::PromotionRule"
|
23
|
-
end
|
24
|
-
|
25
|
-
def eligible?(_promotable, _options = {})
|
26
|
-
raise NotImplementedError, "eligible? should be implemented in a sub-class of Spree::PromotionRule"
|
27
|
-
end
|
28
|
-
|
29
|
-
# This states if a promotion can be applied to the specified line item
|
30
|
-
# It is true by default, but can be overridden by promotion rules to provide conditions
|
31
|
-
def actionable?(_line_item)
|
32
|
-
true
|
33
|
-
end
|
34
|
-
|
35
|
-
def eligibility_errors
|
36
|
-
@eligibility_errors ||= ActiveModel::Errors.new(self)
|
37
|
-
end
|
38
|
-
|
39
|
-
def to_partial_path
|
40
|
-
"spree/admin/promotions/rules/#{model_name.element}"
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
def unique_per_promotion
|
46
|
-
if Spree::PromotionRule.exists?(promotion_id: promotion_id, type: self.class.name)
|
47
|
-
errors[:base] << "Promotion already contains this rule type"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def eligibility_error_message(key, options = {})
|
52
|
-
I18n.t(key, **{ scope: [:spree, :eligibility_errors, :messages] }.merge(options))
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
class PromotionRuleStore < Spree::Base
|
5
|
-
self.table_name = "spree_promotion_rules_stores"
|
6
|
-
|
7
|
-
belongs_to :promotion_rule, class_name: "Spree::PromotionRule", optional: true
|
8
|
-
belongs_to :store, class_name: "Spree::Store", optional: true
|
9
|
-
end
|
10
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
class PromotionRuleUser < Spree::Base
|
5
|
-
self.table_name = 'spree_promotion_rules_users'
|
6
|
-
|
7
|
-
belongs_to :promotion_rule, class_name: 'Spree::PromotionRule', optional: true
|
8
|
-
belongs_to :user, class_name: Spree::UserClassHandle.new, optional: true
|
9
|
-
end
|
10
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module Tax
|
5
|
-
# Used to build shipping rate taxes
|
6
|
-
class ShippingRateTaxer
|
7
|
-
# Build shipping rate taxes for a shipping rate
|
8
|
-
# Modifies the passed-in shipping rate with associated shipping rate taxes.
|
9
|
-
# @param [Spree::ShippingRate] shipping_rate The shipping rate to add taxes to.
|
10
|
-
# This parameter will be modified.
|
11
|
-
# @return [Spree::ShippingRate] The shipping rate with associated tax objects
|
12
|
-
def tax(shipping_rate)
|
13
|
-
taxes = Spree::Config.shipping_rate_tax_calculator_class.new(shipping_rate.order).calculate(shipping_rate)
|
14
|
-
taxes.each do |tax|
|
15
|
-
shipping_rate.taxes.build(
|
16
|
-
amount: tax.amount,
|
17
|
-
tax_rate: tax.tax_rate
|
18
|
-
)
|
19
|
-
end
|
20
|
-
shipping_rate
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spree/event/subscriber'
|
4
|
-
|
5
|
-
module Spree
|
6
|
-
module MailerSubscriber
|
7
|
-
include Spree::Event::Subscriber
|
8
|
-
|
9
|
-
event_action :order_finalized
|
10
|
-
event_action :send_reimbursement_email, event_name: :reimbursement_reimbursed
|
11
|
-
|
12
|
-
def order_finalized(event)
|
13
|
-
order = event.payload[:order]
|
14
|
-
unless order.confirmation_delivered?
|
15
|
-
Spree::Config.order_mailer_class.confirm_email(order).deliver_later
|
16
|
-
order.update_column(:confirmation_delivered, true)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def send_reimbursement_email(event)
|
21
|
-
reimbursement = event.payload[:reimbursement]
|
22
|
-
Spree::Config.reimbursement_mailer_class.reimbursement_email(reimbursement.id).deliver_later
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreateSpreePromotionCodeBatch < ActiveRecord::Migration[5.0]
|
4
|
-
def change
|
5
|
-
create_table :spree_promotion_code_batches do |t|
|
6
|
-
t.references :promotion, null: false, index: true
|
7
|
-
t.string :base_code, null: false
|
8
|
-
t.integer :number_of_codes, null: false
|
9
|
-
t.string :email
|
10
|
-
t.string :error
|
11
|
-
t.string :state, default: "pending"
|
12
|
-
t.timestamps precision: 6
|
13
|
-
end
|
14
|
-
|
15
|
-
add_foreign_key(
|
16
|
-
:spree_promotion_code_batches,
|
17
|
-
:spree_promotions,
|
18
|
-
column: :promotion_id
|
19
|
-
)
|
20
|
-
|
21
|
-
add_column(
|
22
|
-
:spree_promotion_codes,
|
23
|
-
:promotion_code_batch_id,
|
24
|
-
:integer
|
25
|
-
)
|
26
|
-
|
27
|
-
add_foreign_key(
|
28
|
-
:spree_promotion_codes,
|
29
|
-
:spree_promotion_code_batches,
|
30
|
-
column: :promotion_code_batch_id
|
31
|
-
)
|
32
|
-
|
33
|
-
add_index(
|
34
|
-
:spree_promotion_codes,
|
35
|
-
:promotion_code_batch_id
|
36
|
-
)
|
37
|
-
end
|
38
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class CreatePromotionRuleStores < ActiveRecord::Migration[5.1]
|
4
|
-
def change
|
5
|
-
create_table :spree_promotion_rules_stores do |t|
|
6
|
-
t.references :store, null: false
|
7
|
-
t.references :promotion_rule, null: false
|
8
|
-
|
9
|
-
t.timestamps
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'solidus/migrations/promotions_with_code_handlers'
|
4
|
-
|
5
|
-
class RemoveCodeFromSpreePromotions < ActiveRecord::Migration[5.1]
|
6
|
-
class Promotion < ActiveRecord::Base
|
7
|
-
self.table_name = "spree_promotions"
|
8
|
-
self.ignored_columns = %w(type)
|
9
|
-
end
|
10
|
-
|
11
|
-
def up
|
12
|
-
promotions_with_code = Promotion.where.not(code: [nil, ''])
|
13
|
-
|
14
|
-
if promotions_with_code.any?
|
15
|
-
# You have some promotions with "code" field present! This is not good
|
16
|
-
# since we are going to remove that column.
|
17
|
-
#
|
18
|
-
self.class.promotions_with_code_handler.new(self, promotions_with_code).call
|
19
|
-
end
|
20
|
-
|
21
|
-
remove_index :spree_promotions, name: :index_spree_promotions_on_code
|
22
|
-
remove_column :spree_promotions, :code
|
23
|
-
end
|
24
|
-
|
25
|
-
def down
|
26
|
-
add_column :spree_promotions, :code, :string
|
27
|
-
add_index :spree_promotions, :code, name: :index_spree_promotions_on_code
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.promotions_with_code_handler
|
31
|
-
# We propose different approaches, just pick the one that you prefer or
|
32
|
-
# write your custom one.
|
33
|
-
#
|
34
|
-
# The fist one (raising an exception) is the default but you can
|
35
|
-
# comment/uncomment the one then better fits you needs or use a
|
36
|
-
# custom class or callable object.
|
37
|
-
#
|
38
|
-
Solidus::Migrations::PromotionWithCodeHandlers::RaiseException
|
39
|
-
# Solidus::Migrations::PromotionWithCodeHandlers::MoveToSpreePromotionCode
|
40
|
-
# Solidus::Migrations::PromotionWithCodeHandlers::DoNothing
|
41
|
-
end
|
42
|
-
end
|
data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into including all the files listed below.
|
2
|
-
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
|
3
|
-
// be included in the compiled file accessible from http://example.com/assets/application.js
|
4
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
5
|
-
// the compiled file.
|
6
|
-
//
|
7
|
-
//= require jquery
|
8
|
-
//= require rails-ujs
|
9
|
-
//= require spree/frontend
|
10
|
-
//= require_tree .
|
data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
3
|
-
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
4
|
-
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
5
|
-
*
|
6
|
-
*= require spree/frontend
|
7
|
-
*= require_self
|
8
|
-
*= require_tree .
|
9
|
-
*/
|
@@ -1,6 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
-
|
4
|
-
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
-
require File.expand_path('../../config/boot', __FILE__)
|
6
|
-
require 'rails/commands'
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solidus
|
4
|
-
module Migrations
|
5
|
-
module PromotionWithCodeHandlers
|
6
|
-
class PromotionCode < Spree::Base
|
7
|
-
self.table_name = "spree_promotion_codes"
|
8
|
-
end
|
9
|
-
|
10
|
-
class Base
|
11
|
-
attr_reader :migration_context, :promotions
|
12
|
-
|
13
|
-
def initialize(migration_context, promotions)
|
14
|
-
@migration_context = migration_context
|
15
|
-
@promotions = promotions
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class RaiseException < Base
|
20
|
-
def call
|
21
|
-
# Please note that this will block the current migration and rollback all
|
22
|
-
# the previous ones run with the same "rails db:migrate" command.
|
23
|
-
#
|
24
|
-
raise StandardError, "You are trying to drop 'code' column from "\
|
25
|
-
"spree_promotions table but you have at least one record with that "\
|
26
|
-
"column filled. Please take care of that or you could lose data. See:" \
|
27
|
-
"\n" \
|
28
|
-
"https://github.com/solidusio/solidus/pull/3028"\
|
29
|
-
"\n"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class MoveToSpreePromotionCode < Base
|
34
|
-
def call
|
35
|
-
# This is another possible approach, it will convert Spree::Promotion#code
|
36
|
-
# to a Spree::PromotionCode before removing the `code` field.
|
37
|
-
#
|
38
|
-
# NOTE: promotion codes will be downcased and stripped
|
39
|
-
promotions.find_each do |promotion|
|
40
|
-
normalized_code = promotion.code.downcase.strip
|
41
|
-
|
42
|
-
PromotionCode.find_or_create_by!(
|
43
|
-
value: normalized_code,
|
44
|
-
promotion_id: promotion.id
|
45
|
-
) do
|
46
|
-
migration_context.say "Creating Spree::PromotionCode with value "\
|
47
|
-
"'#{normalized_code}' for Spree::Promotion with id '#{promotion.id}'"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
class DoNothing < Base
|
54
|
-
def call
|
55
|
-
# This approach will delete all codes without taking any action. At
|
56
|
-
# least we could print a message to track what we are deleting.
|
57
|
-
#
|
58
|
-
promotions.find_each do |promotion|
|
59
|
-
migration_context.say "Code '#{promotion.code}' is going to be removed "\
|
60
|
-
"from Spree::Promotion with id '#{promotion.id}'"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module Event
|
5
|
-
module Adapters
|
6
|
-
module ActiveSupportNotifications
|
7
|
-
class InvalidEventNameType < StandardError; end
|
8
|
-
|
9
|
-
extend self
|
10
|
-
|
11
|
-
def fire(event_name, opts)
|
12
|
-
ActiveSupport::Notifications.instrument event_name, opts do
|
13
|
-
yield opts if block_given?
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def subscribe(event_name)
|
18
|
-
ActiveSupport::Notifications.subscribe event_name do |*args|
|
19
|
-
event = ActiveSupport::Notifications::Event.new(*args)
|
20
|
-
yield event
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def unsubscribe(subscriber_or_name)
|
25
|
-
ActiveSupport::Notifications.unsubscribe(subscriber_or_name)
|
26
|
-
end
|
27
|
-
|
28
|
-
def listeners_for(names)
|
29
|
-
names.each_with_object({}) do |name, memo|
|
30
|
-
listeners = ActiveSupport::Notifications.notifier.listeners_for(name)
|
31
|
-
memo[name] = listeners if listeners.present?
|
32
|
-
end
|
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
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module Event
|
5
|
-
class Configuration
|
6
|
-
def subscriber_registry
|
7
|
-
@subscriber_registry ||= Spree::Event::SubscriberRegistry.new
|
8
|
-
end
|
9
|
-
|
10
|
-
attr_writer :adapter, :suffix, :autoload_subscribers
|
11
|
-
|
12
|
-
def autoload_subscribers
|
13
|
-
@autoload_subscribers.nil? ? true : !!@autoload_subscribers
|
14
|
-
end
|
15
|
-
|
16
|
-
def adapter
|
17
|
-
@adapter ||= Spree::Event::Adapters::ActiveSupportNotifications
|
18
|
-
end
|
19
|
-
|
20
|
-
def suffix
|
21
|
-
@suffix ||= '.spree'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spree
|
4
|
-
module Event
|
5
|
-
# This module simplifies adding and removing subscriptions to {Spree::Event} events.
|
6
|
-
# Here's a complete example:
|
7
|
-
# module EmailSender
|
8
|
-
# include Spree::Event::Subscriber
|
9
|
-
#
|
10
|
-
# event_action :order_finalized
|
11
|
-
# event_action :confirm_reimbursement, event_name: :reimbursement_reimbursed
|
12
|
-
#
|
13
|
-
# def order_finalized(event)
|
14
|
-
# Mailer.send_email(event.payload[:order])
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
# def confirm_reimbursement(event)
|
18
|
-
# Mailer.send_email(event.payload[:reimbursement])
|
19
|
-
# end
|
20
|
-
# end
|
21
|
-
#
|
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
|
28
|
-
module Subscriber
|
29
|
-
def self.included(base)
|
30
|
-
base.extend base
|
31
|
-
|
32
|
-
base.mattr_accessor :event_actions
|
33
|
-
base.event_actions = {}
|
34
|
-
|
35
|
-
Spree::Event.subscriber_registry.register(base)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Declares a method name in the including module that can be subscribed/unsubscribed
|
39
|
-
# to an event.
|
40
|
-
#
|
41
|
-
# @param method_name [String, Symbol] the method that will be called when the subscribed event is fired
|
42
|
-
# @param event_name [String, Symbol] the name of the event to be subscribed
|
43
|
-
#
|
44
|
-
# @example Declares 'send_email' as an event action that can subscribe the event 'order_finalized'
|
45
|
-
# module EmailSender
|
46
|
-
# event_action :send_email, event_name: :order_finalized
|
47
|
-
#
|
48
|
-
# def send_email(event)
|
49
|
-
# Mailer.send_email(event.payload[:order])
|
50
|
-
# end
|
51
|
-
# end
|
52
|
-
#
|
53
|
-
# @example Same as above, but the method name is same as the event name:
|
54
|
-
# module EmailSender
|
55
|
-
# event_action :order_completed
|
56
|
-
#
|
57
|
-
# def order_completed(event)
|
58
|
-
# Mailer.send_email(event.payload[:order])
|
59
|
-
# end
|
60
|
-
# end
|
61
|
-
def event_action(method_name, event_name: nil)
|
62
|
-
event_actions[method_name] = (event_name || method_name).to_s
|
63
|
-
end
|
64
|
-
|
65
|
-
# Activates all declared event actions to their events. Only actions that are activated
|
66
|
-
# will be called when their event fires.
|
67
|
-
#
|
68
|
-
# @example activate all event actions for module 'EmailSender'
|
69
|
-
# EmailSender.activate
|
70
|
-
def activate
|
71
|
-
Spree::Event.subscriber_registry.activate_subscriber(self)
|
72
|
-
end
|
73
|
-
|
74
|
-
# Deactivates all declared event actions (or a single specific one) from their events.
|
75
|
-
# This means that when an event fires then none of its unsubscribed event actions will
|
76
|
-
# be called.
|
77
|
-
# @example deactivate all event actions for module 'EmailSender'
|
78
|
-
# EmailSender.deactivate
|
79
|
-
# @example deactivate only order_finalized for module 'EmailSender'
|
80
|
-
# EmailSender.deactivate(:order_finalized)
|
81
|
-
def deactivate(event_action_name = nil)
|
82
|
-
Spree::Event.subscriber_registry.deactivate_subscriber(self, event_action_name)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|