solidus_core 4.6.2 → 4.7.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/Rakefile +13 -13
- data/app/controllers/spree/base_controller.rb +2 -2
- data/app/helpers/spree/base_helper.rb +24 -24
- data/app/helpers/spree/checkout_helper.rb +7 -7
- data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
- data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
- data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
- data/app/helpers/spree/products_helper.rb +5 -5
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +3 -3
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +4 -4
- data/app/models/concerns/spree/display_money.rb +2 -2
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/preferences/persistable.rb +1 -1
- data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
- data/app/models/concerns/spree/soft_deletable.rb +2 -1
- data/app/models/concerns/spree/state_change_tracking.rb +1 -1
- data/app/models/concerns/spree/user_address_book.rb +12 -12
- data/app/models/concerns/spree/user_methods.rb +9 -9
- data/app/models/concerns/spree/user_reporting.rb +1 -0
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address/name.rb +1 -1
- data/app/models/spree/address.rb +7 -7
- data/app/models/spree/adjustment.rb +11 -10
- data/app/models/spree/adjustment_reason.rb +2 -2
- data/app/models/spree/billing_integration.rb +2 -2
- data/app/models/spree/calculator/default_tax.rb +2 -2
- data/app/models/spree/calculator/flat_fee.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +2 -2
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
- data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
- data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
- data/app/models/spree/calculator/shipping/per_item.rb +3 -3
- data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
- data/app/models/spree/calculator.rb +31 -6
- data/app/models/spree/carton.rb +4 -4
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +27 -27
- data/app/models/spree/customer_return.rb +5 -4
- data/app/models/spree/distributed_amounts_handler.rb +1 -1
- data/app/models/spree/fulfilment_changer.rb +22 -22
- data/app/models/spree/image/active_storage_attachment.rb +2 -2
- data/app/models/spree/image/paperclip_attachment.rb +8 -8
- data/app/models/spree/in_memory_order_updater.rb +262 -0
- data/app/models/spree/inventory_unit.rb +11 -11
- data/app/models/spree/item_total.rb +1 -1
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +21 -11
- data/app/models/spree/log_entry.rb +3 -3
- data/app/models/spree/mergeable_orders_finder.rb +44 -0
- data/app/models/spree/money.rb +2 -1
- data/app/models/spree/null_promotion_adjuster.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/number_generator.rb +1 -1
- data/app/models/spree/order.rb +66 -64
- data/app/models/spree/order_cancellations.rb +1 -3
- data/app/models/spree/order_inventory.rb +5 -8
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_updater.rb +59 -37
- data/app/models/spree/payment/cancellation.rb +2 -2
- data/app/models/spree/payment/processing.rb +22 -22
- data/app/models/spree/payment.rb +25 -25
- data/app/models/spree/payment_capture_event.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
- data/app/models/spree/payment_method/check.rb +3 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
- data/app/models/spree/payment_method/store_credit.rb +13 -13
- data/app/models/spree/payment_method.rb +12 -11
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
- data/app/models/spree/permission_sets/default_customer.rb +1 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +7 -6
- data/app/models/spree/product/scopes.rb +23 -23
- data/app/models/spree/product.rb +37 -41
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +3 -3
- data/app/models/spree/refund.rb +10 -10
- data/app/models/spree/refund_reason.rb +2 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement.rb +8 -8
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +2 -2
- data/app/models/spree/return_authorization.rb +7 -6
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
- data/app/models/spree/return_item.rb +31 -30
- data/app/models/spree/return_reason.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +37 -29
- data/app/models/spree/shipping_method.rb +9 -9
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +12 -10
- data/app/models/spree/shipping_rate_tax.rb +5 -4
- data/app/models/spree/simple_order_contents.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock/availability.rb +9 -9
- data/app/models/spree/stock/availability_validator.rb +3 -3
- data/app/models/spree/stock/differentiator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +4 -4
- data/app/models/spree/stock/inventory_validator.rb +1 -1
- data/app/models/spree/stock/package.rb +3 -3
- data/app/models/spree/stock_item.rb +5 -5
- data/app/models/spree/stock_location.rb +6 -6
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +2 -2
- data/app/models/spree/store.rb +3 -3
- data/app/models/spree/store_credit.rb +30 -29
- data/app/models/spree/store_credit_category.rb +2 -2
- data/app/models/spree/store_credit_event.rb +6 -6
- data/app/models/spree/store_credit_reason.rb +1 -1
- data/app/models/spree/store_credit_type.rb +3 -3
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/store_selector/legacy.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +1 -0
- data/app/models/spree/tax/order_tax.rb +1 -0
- data/app/models/spree/tax_category.rb +3 -3
- data/app/models/spree/tax_rate.rb +5 -5
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- 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 +16 -17
- data/app/models/spree/taxon_brand_selector.rb +3 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
- data/app/models/spree/unit_cancel.rb +4 -4
- data/app/models/spree/user_address.rb +3 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
- data/app/models/spree/user_last_url_storer.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +25 -25
- data/app/models/spree/variant_property_rule.rb +2 -2
- data/app/models/spree/variant_property_rule_condition.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet/default_payment_builder.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +18 -18
- data/app/models/spree/zone_member.rb +1 -1
- data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/db_query_matchers.rb +9 -0
- data/config/initializers/friendly_id.rb +2 -2
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/money.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/db/default/spree/countries.rb +7 -7
- data/db/default/spree/return_reasons.rb +11 -11
- data/db/default/spree/stock_locations.rb +1 -1
- data/db/default/spree/store_credit.rb +3 -4
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -5
- data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
- data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
- data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
- data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
- data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
- data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
- data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
- data/db/seeds.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +1 -1
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
- data/lib/generators/solidus/install/install_generator.rb +51 -51
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
- data/lib/generators/solidus/update/update_generator.rb +29 -29
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
- data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
- data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
- data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
- data/lib/solidus_core.rb +1 -1
- data/lib/spree/app_configuration.rb +59 -47
- data/lib/spree/bus.rb +1 -1
- data/lib/spree/config.rb +1 -1
- data/lib/spree/core/active_merchant_dependencies.rb +8 -8
- data/lib/spree/core/class_constantizer.rb +1 -1
- data/lib/spree/core/engine.rb +15 -15
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/environment_extension.rb +2 -2
- data/lib/spree/core/importer/order.rb +15 -15
- data/lib/spree/core/importer/product.rb +4 -4
- data/lib/spree/core/importer.rb +2 -2
- data/lib/spree/core/null_promotion_configuration.rb +7 -7
- data/lib/spree/core/permalinks.rb +1 -1
- data/lib/spree/core/product_filters.rb +94 -93
- data/lib/spree/core/role_configuration.rb +3 -3
- data/lib/spree/core/search/base.rb +5 -6
- data/lib/spree/core/search/variant.rb +3 -3
- data/lib/spree/core/stock_configuration.rb +10 -49
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +3 -3
- data/lib/spree/core/versioned_value.rb +4 -6
- data/lib/spree/core.rb +49 -49
- data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/deprecator.rb +2 -2
- data/lib/spree/i18n.rb +2 -2
- data/lib/spree/localized_number.rb +3 -3
- data/lib/spree/manipulative_query_monitor.rb +19 -0
- data/lib/spree/migrations.rb +2 -2
- data/lib/spree/permitted_attributes.rb +10 -10
- data/lib/spree/preferences/configuration.rb +5 -5
- data/lib/spree/preferences/preferable.rb +8 -10
- data/lib/spree/preferences/preferable_class_methods.rb +16 -16
- data/lib/spree/preferences/preference_differentiator.rb +1 -1
- data/lib/spree/preferences/scoped_store.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/preferences/store.rb +6 -6
- data/lib/spree/testing_support/ability_helpers.rb +30 -30
- data/lib/spree/testing_support/authorization_helpers.rb +6 -5
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +1 -1
- data/lib/spree/testing_support/capybara_driver.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +12 -12
- data/lib/spree/testing_support/common_rake.rb +17 -16
- data/lib/spree/testing_support/dummy_ability.rb +1 -1
- data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
- data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +34 -34
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +12 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +3 -3
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +16 -16
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
- data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
- data/lib/spree/testing_support/factories/store_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/flaky.rb +3 -2
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +7 -7
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/rake.rb +1 -1
- data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
- data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
- data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
- data/lib/spree/testing_support/translations.rb +1 -1
- data/lib/spree_core.rb +1 -1
- data/lib/tasks/payment_method.rake +2 -2
- data/solidus_core.gemspec +49 -49
- metadata +60 -54
data/lib/spree/deprecation.rb
CHANGED
data/lib/spree/deprecator.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "active_support/deprecation"
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
6
|
def self.deprecator
|
|
7
|
-
@deprecator ||= ActiveSupport::Deprecation.new(
|
|
7
|
+
@deprecator ||= ActiveSupport::Deprecation.new("5.0", "Solidus")
|
|
8
8
|
end
|
|
9
9
|
end
|
data/lib/spree/i18n.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "i18n"
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
6
|
def self.i18n_available_locales
|
|
7
7
|
I18n.available_locales.select do |locale|
|
|
8
|
-
I18n.t(
|
|
8
|
+
I18n.t("spree.i18n.this_file_language", locale:, fallback: false, default: nil)
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -14,14 +14,14 @@ module Spree
|
|
|
14
14
|
|
|
15
15
|
# I18n.t('number.currency.format.delimiter') could be useful here, but is
|
|
16
16
|
# unnecessary as it is stripped by the non_number_characters gsub.
|
|
17
|
-
separator = I18n.t(:
|
|
17
|
+
separator = I18n.t(:"number.currency.format.separator")
|
|
18
18
|
non_number_characters = /[^0-9\-#{separator}]/
|
|
19
19
|
|
|
20
20
|
# strip everything else first
|
|
21
|
-
number = number.gsub(non_number_characters,
|
|
21
|
+
number = number.gsub(non_number_characters, "")
|
|
22
22
|
|
|
23
23
|
# then replace the locale-specific decimal separator with the standard separator if necessary
|
|
24
|
-
number = number.gsub(separator,
|
|
24
|
+
number = number.gsub(separator, ".") unless separator == "."
|
|
25
25
|
|
|
26
26
|
# Handle empty string for ruby 2.4 compatibility
|
|
27
27
|
BigDecimal(number.presence || 0)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
class ManipulativeQueryMonitor
|
|
5
|
+
def self.call(&block)
|
|
6
|
+
counter = ::DBQueryMatchers::QueryCounter.new({matches: [/^\ *(INSERT|UPDATE|DELETE\ FROM)/]})
|
|
7
|
+
ActiveSupport::Notifications.subscribed(counter.to_proc,
|
|
8
|
+
"sql.active_record",
|
|
9
|
+
&block)
|
|
10
|
+
if counter.count > 0
|
|
11
|
+
message = "Detected #{counter.count} manipulative queries. #{counter.log.join(", ")}\n"
|
|
12
|
+
|
|
13
|
+
message += caller.select { |line| line.include?(Rails.root.to_s) || line.include?("solidus") }.join("\n")
|
|
14
|
+
|
|
15
|
+
Rails.logger.warn(message)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
data/lib/spree/migrations.rb
CHANGED
|
@@ -25,12 +25,12 @@ module Spree
|
|
|
25
25
|
def check
|
|
26
26
|
return unless File.directory?(app_dir)
|
|
27
27
|
return if missing_migrations.empty?
|
|
28
|
-
return if ENV[
|
|
28
|
+
return if ENV["SOLIDUS_SKIP_MIGRATIONS_CHECK"]
|
|
29
29
|
|
|
30
30
|
prefix = "[WARNING #{engine_name.capitalize}]"
|
|
31
31
|
warn <<~WARN
|
|
32
32
|
#{prefix} Missing migrations.
|
|
33
|
-
#{missing_migrations.map {|m| "#{prefix} - #{m}"}.join("\n")}
|
|
33
|
+
#{missing_migrations.map { |m| "#{prefix} - #{m}" }.join("\n")}
|
|
34
34
|
#{prefix}
|
|
35
35
|
#{prefix} Run `bin/rails railties:install:migrations` to get them.
|
|
36
36
|
#{prefix} You can silence this warning by setting the `SOLIDUS_SKIP_MIGRATIONS_CHECK` environment variable.
|
|
@@ -89,13 +89,13 @@ module Spree
|
|
|
89
89
|
@@property_attributes = [:name, :presentation]
|
|
90
90
|
|
|
91
91
|
@@return_authorization_attributes = [:memo, :stock_location_id, :return_reason_id,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
customer_metadata: {},
|
|
93
|
+
return_items_attributes: [
|
|
94
|
+
:inventory_unit_id,
|
|
95
|
+
:exchange_variant_id,
|
|
96
|
+
:return_reason_id,
|
|
97
|
+
:preferred_reimbursement_type_id
|
|
98
|
+
]]
|
|
99
99
|
|
|
100
100
|
@@shipment_attributes = [
|
|
101
101
|
:special_instructions, :stock_location_id, :id, :tracking,
|
|
@@ -123,9 +123,9 @@ module Spree
|
|
|
123
123
|
]
|
|
124
124
|
|
|
125
125
|
@@store_attributes = [:name, :url, :seo_title, :meta_keywords,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
:meta_description, :default_currency,
|
|
127
|
+
:mail_from_address, :cart_tax_country_iso,
|
|
128
|
+
:bcc_email, :reverse_charge_status]
|
|
129
129
|
|
|
130
130
|
@@taxonomy_attributes = [:name]
|
|
131
131
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "spree/core/versioned_value"
|
|
4
|
+
require "spree/preferences/preferable"
|
|
5
5
|
|
|
6
6
|
module Spree::Preferences
|
|
7
7
|
# This takes the preferrable methods and adds some
|
|
@@ -107,10 +107,10 @@ module Spree::Preferences
|
|
|
107
107
|
set(default_preferences)
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
alias_method :[], :get_preference
|
|
111
|
+
alias_method :[]=, :set_preference
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
alias_method :get, :get_preference
|
|
114
114
|
|
|
115
115
|
# @param preferences [Hash] a hash of preferences to set
|
|
116
116
|
def set(preferences)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
3
|
+
require "spree/preferences/preferable_class_methods"
|
|
4
|
+
require "active_support/concern"
|
|
5
|
+
require "active_support/core_ext/hash/keys"
|
|
6
6
|
|
|
7
7
|
module Spree
|
|
8
8
|
module Preferences
|
|
@@ -117,11 +117,9 @@ module Spree
|
|
|
117
117
|
# This may raise an infinite loop error if any of the defaults are
|
|
118
118
|
# dependent on other preferences defaults.
|
|
119
119
|
def default_preferences
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
end
|
|
124
|
-
]
|
|
120
|
+
defined_preferences.map do |preference|
|
|
121
|
+
[preference, preference_default(preference)]
|
|
122
|
+
end.to_h
|
|
125
123
|
end
|
|
126
124
|
|
|
127
125
|
# Preference names representable as form fields in Solidus backend
|
|
@@ -165,8 +163,8 @@ module Spree
|
|
|
165
163
|
value.to_i
|
|
166
164
|
when :boolean
|
|
167
165
|
if !value ||
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
value.to_s =~ /\A(f|false|0|^)\Z/i ||
|
|
167
|
+
(value.respond_to?(:empty?) && value.empty?)
|
|
170
168
|
false
|
|
171
169
|
else
|
|
172
170
|
true
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "spree/encryptor"
|
|
4
4
|
|
|
5
5
|
module Spree::Preferences
|
|
6
6
|
module PreferableClassMethods
|
|
7
|
-
DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i
|
|
7
|
+
DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i[
|
|
8
8
|
boolean
|
|
9
9
|
decimal
|
|
10
10
|
integer
|
|
@@ -12,7 +12,7 @@ module Spree::Preferences
|
|
|
12
12
|
string
|
|
13
13
|
text
|
|
14
14
|
encrypted_string
|
|
15
|
-
|
|
15
|
+
]
|
|
16
16
|
|
|
17
17
|
def defined_preferences
|
|
18
18
|
[]
|
|
@@ -27,13 +27,13 @@ module Spree::Preferences
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
default = begin
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
given = options[:default]
|
|
31
|
+
if given.is_a?(Proc)
|
|
32
|
+
given
|
|
33
|
+
else
|
|
34
|
+
proc { given }
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
37
|
|
|
38
38
|
# The defined preferences on a class are all those defined directly on
|
|
39
39
|
# that class as well as those defined on ancestors.
|
|
@@ -76,25 +76,25 @@ module Spree::Preferences
|
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def preference_getter_method(name)
|
|
79
|
-
"preferred_#{name}"
|
|
79
|
+
:"preferred_#{name}"
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
def preference_setter_method(name)
|
|
83
|
-
|
|
83
|
+
:"preferred_#{name}="
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
def preference_default_getter_method(name)
|
|
87
|
-
"preferred_#{name}_default"
|
|
87
|
+
:"preferred_#{name}_default"
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def preference_type_getter_method(name)
|
|
91
|
-
"preferred_#{name}_type"
|
|
91
|
+
:"preferred_#{name}_type"
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
def preference_encryptor(options)
|
|
95
95
|
key = options[:encryption_key] ||
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
ENV["SOLIDUS_PREFERENCES_MASTER_KEY"] ||
|
|
97
|
+
Rails.application.credentials.secret_key_base
|
|
98
98
|
|
|
99
99
|
Spree::Encryptor.new(key)
|
|
100
100
|
end
|
|
@@ -26,11 +26,11 @@ module Spree::Preferences
|
|
|
26
26
|
private
|
|
27
27
|
|
|
28
28
|
def key_for(key)
|
|
29
|
-
[rails_cache_id, @prefix, key, @suffix].compact.join(
|
|
29
|
+
[rails_cache_id, @prefix, key, @suffix].compact.join("/")
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def rails_cache_id
|
|
33
|
-
ENV[
|
|
33
|
+
ENV["RAILS_CACHE_ID"]
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
end
|
|
@@ -55,8 +55,8 @@ module Spree
|
|
|
55
55
|
next if extra_keys.empty?
|
|
56
56
|
|
|
57
57
|
raise \
|
|
58
|
-
"Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(
|
|
59
|
-
"(expected keys: #{klass_keys.sort.join(
|
|
58
|
+
"Unexpected keys found for #{klass} under #{name}: #{extra_keys.sort.join(", ")} " \
|
|
59
|
+
"(expected keys: #{klass_keys.sort.join(", ")})"
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Use singleton class Spree::Preferences::Store.instance to access
|
|
4
4
|
#
|
|
5
5
|
|
|
6
|
-
require
|
|
6
|
+
require "singleton"
|
|
7
7
|
|
|
8
8
|
module Spree::Preferences
|
|
9
9
|
class StoreInstance
|
|
@@ -35,19 +35,19 @@ module Spree::Preferences
|
|
|
35
35
|
# has been cleared from the cache
|
|
36
36
|
|
|
37
37
|
# does it exist in the database?
|
|
38
|
-
if preference = Spree::Preference.find_by(key:)
|
|
38
|
+
val = if (preference = Spree::Preference.find_by(key:))
|
|
39
39
|
# it does exist
|
|
40
|
-
|
|
40
|
+
preference.value
|
|
41
41
|
else
|
|
42
42
|
# use the fallback value
|
|
43
|
-
|
|
43
|
+
yield
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# Cache either the value from the db or the fallback value.
|
|
47
47
|
# This avoids hitting the db with subsequent queries.
|
|
48
48
|
@cache.write(key, val)
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
val
|
|
51
51
|
else
|
|
52
52
|
yield
|
|
53
53
|
end
|
|
@@ -77,7 +77,7 @@ module Spree::Preferences
|
|
|
77
77
|
return unless should_persist?
|
|
78
78
|
|
|
79
79
|
preference = Spree::Preference.find_by(key: cache_key)
|
|
80
|
-
preference
|
|
80
|
+
preference&.destroy
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def should_persist?
|
|
@@ -1,107 +1,107 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
RSpec.shared_examples_for
|
|
4
|
-
it
|
|
3
|
+
RSpec.shared_examples_for "access granted" do
|
|
4
|
+
it "should allow show" do
|
|
5
5
|
expect(ability).to be_able_to(:show, resource, token) if token
|
|
6
6
|
expect(ability).to be_able_to(:show, resource) unless token
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
it
|
|
9
|
+
it "should allow create" do
|
|
10
10
|
expect(ability).to be_able_to(:create, resource, token) if token
|
|
11
11
|
expect(ability).to be_able_to(:create, resource) unless token
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
it
|
|
14
|
+
it "should allow update" do
|
|
15
15
|
expect(ability).to be_able_to(:update, resource, token) if token
|
|
16
16
|
expect(ability).to be_able_to(:update, resource) unless token
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
RSpec.shared_examples_for
|
|
21
|
-
it
|
|
20
|
+
RSpec.shared_examples_for "access denied" do
|
|
21
|
+
it "should not allow show" do
|
|
22
22
|
expect(ability).to_not be_able_to(:show, resource)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
it
|
|
25
|
+
it "should not allow create" do
|
|
26
26
|
expect(ability).to_not be_able_to(:create, resource)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
it
|
|
29
|
+
it "should not allow update" do
|
|
30
30
|
expect(ability).to_not be_able_to(:update, resource)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
RSpec.shared_examples_for
|
|
35
|
-
it
|
|
34
|
+
RSpec.shared_examples_for "admin granted" do
|
|
35
|
+
it "should allow admin" do
|
|
36
36
|
expect(ability).to be_able_to(:admin, resource, token) if token
|
|
37
37
|
expect(ability).to be_able_to(:admin, resource) unless token
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
RSpec.shared_examples_for
|
|
42
|
-
it
|
|
41
|
+
RSpec.shared_examples_for "admin denied" do
|
|
42
|
+
it "should not allow admin" do
|
|
43
43
|
expect(ability).to_not be_able_to(:admin, resource)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
RSpec.shared_examples_for
|
|
48
|
-
it
|
|
47
|
+
RSpec.shared_examples_for "index allowed" do
|
|
48
|
+
it "should allow index" do
|
|
49
49
|
expect(ability).to be_able_to(:index, resource)
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
RSpec.shared_examples_for
|
|
54
|
-
it
|
|
53
|
+
RSpec.shared_examples_for "no index allowed" do
|
|
54
|
+
it "should not allow index" do
|
|
55
55
|
expect(ability).to_not be_able_to(:index, resource)
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
RSpec.shared_examples_for
|
|
60
|
-
it
|
|
59
|
+
RSpec.shared_examples_for "create only" do
|
|
60
|
+
it "should allow create" do
|
|
61
61
|
expect(ability).to be_able_to(:create, resource)
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
it
|
|
64
|
+
it "should not allow show" do
|
|
65
65
|
expect(ability).to_not be_able_to(:show, resource)
|
|
66
66
|
end
|
|
67
67
|
|
|
68
|
-
it
|
|
68
|
+
it "should not allow update" do
|
|
69
69
|
expect(ability).to_not be_able_to(:update, resource)
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
it
|
|
72
|
+
it "should not allow index" do
|
|
73
73
|
expect(ability).to_not be_able_to(:index, resource)
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
RSpec.shared_examples_for
|
|
78
|
-
it
|
|
77
|
+
RSpec.shared_examples_for "read only" do
|
|
78
|
+
it "should not allow create" do
|
|
79
79
|
expect(ability).to_not be_able_to(:create, resource)
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
it
|
|
82
|
+
it "should not allow update" do
|
|
83
83
|
expect(ability).to_not be_able_to(:update, resource)
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
-
it
|
|
86
|
+
it "should allow index" do
|
|
87
87
|
expect(ability).to be_able_to(:index, resource)
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
RSpec.shared_examples_for
|
|
92
|
-
it
|
|
91
|
+
RSpec.shared_examples_for "update only" do
|
|
92
|
+
it "should not allow create" do
|
|
93
93
|
expect(ability).to_not be_able_to(:create, resource)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
-
it
|
|
96
|
+
it "should not allow show" do
|
|
97
97
|
expect(ability).to_not be_able_to(:show, resource)
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
it
|
|
100
|
+
it "should allow update" do
|
|
101
101
|
expect(ability).to be_able_to(:update, resource)
|
|
102
102
|
end
|
|
103
103
|
|
|
104
|
-
it
|
|
104
|
+
it "should not allow index" do
|
|
105
105
|
expect(ability).to_not be_able_to(:index, resource)
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "cancan"
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
6
|
module TestingSupport
|
|
7
7
|
module AuthorizationHelpers
|
|
8
8
|
module CustomAbility
|
|
9
9
|
def build_ability(&block)
|
|
10
|
-
block ||= proc{ |_u| can :manage, :all }
|
|
10
|
+
block ||= proc { |_u| can :manage, :all }
|
|
11
11
|
Class.new do
|
|
12
12
|
include CanCan::Ability
|
|
13
|
+
|
|
13
14
|
define_method(:initialize, block)
|
|
14
15
|
end
|
|
15
16
|
end
|
|
@@ -41,9 +42,9 @@ module Spree
|
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
before do
|
|
44
|
-
allow(Spree.user_class).to receive(:find_by)
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
allow(Spree.user_class).to receive(:find_by)
|
|
46
|
+
.with(hash_including(:spree_api_key))
|
|
47
|
+
.and_return(Spree.user_class.new)
|
|
47
48
|
end
|
|
48
49
|
end
|
|
49
50
|
|
|
@@ -6,4 +6,4 @@ require "capybara-screenshot"
|
|
|
6
6
|
Capybara::Screenshot.register_driver(:selenium_headless) do |driver, path|
|
|
7
7
|
driver.browser.save_screenshot(path)
|
|
8
8
|
end
|
|
9
|
-
Capybara.javascript_driver = (ENV[
|
|
9
|
+
Capybara.javascript_driver = (ENV["CAPYBARA_DRIVER"] || :selenium_headless).to_sym
|
|
@@ -8,7 +8,7 @@ module Spree
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def eventually_fill_in(field, options = {})
|
|
11
|
-
expect(page).to have_css(
|
|
11
|
+
expect(page).to have_css("#" + field)
|
|
12
12
|
fill_in field, options
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -42,7 +42,7 @@ module Spree
|
|
|
42
42
|
}.merge(options)
|
|
43
43
|
label = find_label_by_text(options[:from])
|
|
44
44
|
within label.first(:xpath, ".//..") do
|
|
45
|
-
options[:from] = "##{find(
|
|
45
|
+
options[:from] = "##{find(".select2-container")["id"]}"
|
|
46
46
|
end
|
|
47
47
|
select2_search_without_selection(options[:search], from: options[:from])
|
|
48
48
|
select_select2_result(value) if options[:select]
|
|
@@ -65,14 +65,14 @@ module Spree
|
|
|
65
65
|
# document. Can be used to 'escape' from within the context of another within
|
|
66
66
|
# block.
|
|
67
67
|
def within_entire_page(&block)
|
|
68
|
-
within(:xpath,
|
|
68
|
+
within(:xpath, "//body", &block)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
def select2(value, options)
|
|
72
72
|
label = find_label_by_text(options[:from])
|
|
73
73
|
|
|
74
74
|
within label.first(:xpath, ".//..") do
|
|
75
|
-
options[:from] = "##{find(
|
|
75
|
+
options[:from] = "##{find(".select2-container")["id"]}"
|
|
76
76
|
end
|
|
77
77
|
targetted_select2(value, options)
|
|
78
78
|
end
|
|
@@ -89,16 +89,16 @@ module Spree
|
|
|
89
89
|
|
|
90
90
|
def targetted_select2(value, options)
|
|
91
91
|
# find select2 element and click it
|
|
92
|
-
find(options[:from]).find(
|
|
92
|
+
find(options[:from]).find("a").click
|
|
93
93
|
select_select2_result(value)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
def select_select2_result(value)
|
|
97
97
|
# results are in a div appended to the end of the document
|
|
98
98
|
within_entire_page do
|
|
99
|
-
expect(page).to have_selector(
|
|
99
|
+
expect(page).to have_selector(".select2-result-label", visible: true)
|
|
100
100
|
find("div.select2-result-label", text: /#{Regexp.escape(value)}/i, match: :prefer_exact).click
|
|
101
|
-
expect(page).not_to have_selector(
|
|
101
|
+
expect(page).not_to have_selector(".select2-result-label")
|
|
102
102
|
end
|
|
103
103
|
end
|
|
104
104
|
|
|
@@ -108,17 +108,17 @@ module Spree
|
|
|
108
108
|
# We need to select labels which are not .select2-offscreen, as select2
|
|
109
109
|
# makes a duplicate label with the same text, and we want to be sure to
|
|
110
110
|
# find the original.
|
|
111
|
-
find(
|
|
111
|
+
find("label:not(.select2-offscreen)", text: /#{Regexp.escape(text)}/i, match: :one)
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
-
def dialog(parent:
|
|
114
|
+
def dialog(parent: "body", **options)
|
|
115
115
|
within(parent) do
|
|
116
|
-
find(
|
|
116
|
+
find("dialog", visible: :all, **options)
|
|
117
117
|
end
|
|
118
118
|
end
|
|
119
119
|
|
|
120
120
|
def turbo_frame_modal
|
|
121
|
-
dialog(parent: find(
|
|
121
|
+
dialog(parent: find("turbo-frame", visible: :all))
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
124
|
end
|
|
@@ -144,4 +144,4 @@ RSpec.configure do |c|
|
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# A workaround for https://github.com/rspec/rspec-rails/issues/1897
|
|
147
|
-
Capybara.server = :puma, {
|
|
147
|
+
Capybara.server = :puma, {Silent: true}
|