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
@@ -19,7 +19,7 @@ module Spree
|
|
19
19
|
@store = @order.store
|
20
20
|
subject = (options[:resend] ? "[#{t('spree.resend').upcase}] " : '')
|
21
21
|
subject += "#{@store.name} #{t('spree.shipment_mailer.shipped_email.subject')} ##{@order.number}"
|
22
|
-
mail(to: @order.email, from: from_address(@store), subject:
|
22
|
+
mail(to: @order.email, from: from_address(@store), subject:)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
@store = @order.store
|
8
8
|
subject = build_subject(t('.subject'), resend)
|
9
9
|
|
10
|
-
mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject:
|
10
|
+
mail(to: @order.email, bcc: bcc_address(@store), from: from_address(@store), subject:)
|
11
11
|
end
|
12
12
|
|
13
13
|
def cancel_email(order, resend = false)
|
@@ -15,7 +15,7 @@ module Spree
|
|
15
15
|
@store = @order.store
|
16
16
|
subject = build_subject(t('.subject'), resend)
|
17
17
|
|
18
|
-
mail(to: @order.email, from: from_address(@store), subject:
|
18
|
+
mail(to: @order.email, from: from_address(@store), subject:)
|
19
19
|
end
|
20
20
|
|
21
21
|
def inventory_cancellation_email(order, inventory_units, resend = false)
|
@@ -23,7 +23,7 @@ module Spree
|
|
23
23
|
@store = @order.store
|
24
24
|
subject = build_subject(t('spree.order_mailer.inventory_cancellation.subject'), resend)
|
25
25
|
|
26
|
-
mail(to: @order.email, from: from_address(@store), subject:
|
26
|
+
mail(to: @order.email, from: from_address(@store), subject:)
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
store = @reimbursement.order.store
|
8
8
|
subject = (resend ? "[#{t('spree.resend').upcase}] " : '')
|
9
9
|
subject += "#{store.name} #{t('.subject')} ##{@reimbursement.order.number}"
|
10
|
-
mail(to: @reimbursement.order.email, from: from_address(store), subject:
|
10
|
+
mail(to: @reimbursement.order.email, from: from_address(store), subject:)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -4,14 +4,16 @@ require 'mini_magick'
|
|
4
4
|
|
5
5
|
module Spree
|
6
6
|
module ActiveStorageAdapter
|
7
|
-
#
|
7
|
+
# Decorates ActiveStorage attachment to add methods expected by Solidus'
|
8
8
|
# Paperclip-oriented attachment support.
|
9
9
|
class Attachment
|
10
10
|
delegate_missing_to :@attachment
|
11
11
|
|
12
|
+
attr_reader :attachment
|
13
|
+
|
12
14
|
def initialize(attachment, styles: {})
|
13
15
|
@attachment = attachment
|
14
|
-
@
|
16
|
+
@transformations = styles_to_transformations(styles)
|
15
17
|
end
|
16
18
|
|
17
19
|
def exists?
|
@@ -27,11 +29,13 @@ module Spree
|
|
27
29
|
end
|
28
30
|
|
29
31
|
def variant(style = nil)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
transformation = @transformations[style] || default_transformation(width, height)
|
33
|
+
|
34
|
+
@attachment.variant({
|
35
|
+
saver: {
|
36
|
+
strip: true
|
37
|
+
}
|
38
|
+
}.merge(transformation)).processed
|
35
39
|
end
|
36
40
|
|
37
41
|
def height
|
@@ -55,14 +59,29 @@ module Spree
|
|
55
59
|
analyze unless analyzed?
|
56
60
|
|
57
61
|
@attachment.metadata
|
62
|
+
rescue ActiveStorage::FileNotFoundError => error
|
63
|
+
logger.error("#{error} - Image id: #{attachment.record.id} is corrupted or cannot be found")
|
64
|
+
|
65
|
+
{ identified: nil, width: nil, height: nil, analyzed: true }
|
58
66
|
end
|
59
67
|
|
60
|
-
def
|
61
|
-
styles.transform_values
|
68
|
+
def styles_to_transformations(styles)
|
69
|
+
styles.transform_values(&method(:imagemagick_to_image_processing_definition))
|
70
|
+
end
|
71
|
+
|
72
|
+
def imagemagick_to_image_processing_definition(definition)
|
73
|
+
width_height = definition.split('x').map(&:to_i)
|
74
|
+
|
75
|
+
case definition[-1].to_sym
|
76
|
+
when :^
|
77
|
+
{ resize_to_fill: width_height }
|
78
|
+
else
|
79
|
+
default_transformation(*width_height)
|
80
|
+
end
|
62
81
|
end
|
63
82
|
|
64
|
-
def
|
65
|
-
|
83
|
+
def default_transformation(width, height)
|
84
|
+
{ resize_to_limit: [width, height] }
|
66
85
|
end
|
67
86
|
end
|
68
87
|
end
|
@@ -7,23 +7,6 @@ module Spree
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
include Spree::ActiveStorageAdapter::Normalization
|
9
9
|
|
10
|
-
included do
|
11
|
-
next if Rails.gem_version >= Gem::Version.new('6.1.0.alpha')
|
12
|
-
|
13
|
-
abort <<~MESSAGE
|
14
|
-
Configuration Error: Solidus ActiveStorage attachment adpater requires Rails >= 6.1.0.
|
15
|
-
|
16
|
-
Spree::Config.image_attachment_module preference is set to #{Spree::Config.image_attachment_module}
|
17
|
-
Spree::Config.taxon_attachment_module preference is set to #{Spree::Config.taxon_attachment_module}
|
18
|
-
Rails version is #{Rails.gem_version}
|
19
|
-
|
20
|
-
To solve the problem you can upgrade to a Rails version greater than or equal to 6.1.0
|
21
|
-
or use legacy Paperclip attachment adapter by editing `config/initialiers/spree/rb`:
|
22
|
-
config.image_attachment_module = 'Spree::Image::PaperclipAttachment'
|
23
|
-
config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
|
24
|
-
MESSAGE
|
25
|
-
end
|
26
|
-
|
27
10
|
class_methods do
|
28
11
|
attr_reader :attachment_name
|
29
12
|
attr_reader :attachment_definition
|
@@ -51,7 +34,7 @@ module Spree
|
|
51
34
|
method_name = attachment_name
|
52
35
|
override = Module.new do
|
53
36
|
define_method method_name do |*args|
|
54
|
-
attachment = Attachment.new(super(), styles:
|
37
|
+
attachment = Attachment.new(super(), styles:)
|
55
38
|
if args.empty?
|
56
39
|
attachment
|
57
40
|
else
|
@@ -5,20 +5,40 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
delegate :display_price, :display_amount, :price, to: :default_price, allow_nil: true
|
9
|
+
delegate :price=, to: :default_price_or_build
|
10
|
+
|
11
|
+
# @see Spree::Variant::PricingOptions.default_price_attributes
|
12
|
+
def self.default_price_attributes
|
13
|
+
Spree::Config.default_pricing_options.desired_attributes
|
14
|
+
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
# Returns {#default_price} or builds it from {Spree::Variant.default_price_attributes}
|
18
|
+
#
|
19
|
+
# @return [Spree::Price, nil]
|
20
|
+
# @see Spree::Variant.default_price_attributes
|
21
|
+
def default_price_or_build
|
22
|
+
default_price ||
|
23
|
+
prices.build(self.class.default_price_attributes)
|
18
24
|
end
|
19
25
|
|
20
|
-
|
21
|
-
|
26
|
+
# Select from {#prices} the one to be considered as the default
|
27
|
+
#
|
28
|
+
# This method works with the in-memory association, so non-persisted prices
|
29
|
+
# are taken into account.
|
30
|
+
#
|
31
|
+
# A price is a candidate to be considered as the default when it meets
|
32
|
+
# {Spree::Variant.default_price_attributes} criteria. When more than one candidate is
|
33
|
+
# found, non-persisted records take preference. When more than one persisted
|
34
|
+
# candidate exists, the one most recently updated is taken or, in case of
|
35
|
+
# race condition, the one with higher id.
|
36
|
+
#
|
37
|
+
# @return [Spree::Price, nil]
|
38
|
+
# @see Spree::Variant.default_price_attributes
|
39
|
+
def default_price
|
40
|
+
price_selector.price_for_options(Spree::Config.default_pricing_options)
|
41
|
+
end
|
22
42
|
|
23
43
|
def has_default_price?
|
24
44
|
default_price.present? && !default_price.discarded?
|
@@ -24,7 +24,7 @@ module Spree
|
|
24
24
|
money_method = { money_method => {} } unless money_method.is_a? Hash
|
25
25
|
money_method.each do |method_name, opts|
|
26
26
|
define_method("display_#{method_name}") do
|
27
|
-
default_opts = respond_to?(:currency) ? { currency:
|
27
|
+
default_opts = respond_to?(:currency) ? { currency: } : {}
|
28
28
|
Spree::Money.new(send(method_name), default_opts.merge(opts))
|
29
29
|
end
|
30
30
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Metadata
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
attribute :customer_metadata, :json, default: {}
|
9
|
+
attribute :admin_metadata, :json, default: {}
|
10
|
+
|
11
|
+
validate :validate_metadata_limits, if: :validate_metadata_enabled?
|
12
|
+
end
|
13
|
+
|
14
|
+
class_methods do
|
15
|
+
def meta_data_columns
|
16
|
+
%i[customer_metadata admin_metadata]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def validate_metadata_enabled?
|
23
|
+
Spree::Config.meta_data_validation_enabled
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate_metadata_limits
|
27
|
+
self.class.meta_data_columns.each { |column| validate_metadata_column(column) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_metadata_column(column)
|
31
|
+
config = Spree::Config
|
32
|
+
metadata = send(column)
|
33
|
+
|
34
|
+
return if metadata.nil?
|
35
|
+
|
36
|
+
# Check for maximum number of keys
|
37
|
+
validate_metadata_keys_count(metadata, column, config.meta_data_max_keys)
|
38
|
+
|
39
|
+
# Check for maximum key and value size
|
40
|
+
metadata.each do |key, value|
|
41
|
+
validate_metadata_key(key, column, config.meta_data_max_key_length)
|
42
|
+
validate_metadata_value(key, value, column, config.meta_data_max_value_length)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_metadata_keys_count(metadata, column, max_keys)
|
47
|
+
return unless metadata.keys.count > max_keys
|
48
|
+
|
49
|
+
errors.add(column, "must not have more than #{max_keys} keys")
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate_metadata_key(key, column, max_key_length)
|
53
|
+
return unless key.to_s.length > max_key_length
|
54
|
+
|
55
|
+
errors.add(column, "key '#{key}' exceeds #{max_key_length} characters")
|
56
|
+
end
|
57
|
+
|
58
|
+
def validate_metadata_value(key, value, column, max_value_length)
|
59
|
+
return unless value.to_s.length > max_value_length
|
60
|
+
|
61
|
+
errors.add(column, "value for key '#{key}' exceeds #{max_value_length} characters")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -5,6 +5,8 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
+
Spree.deprecator.warn "Spree::NamedType is deprecated. Please set scopes and validations locally instead.", caller
|
9
|
+
|
8
10
|
scope :active, -> { where(active: true) }
|
9
11
|
default_scope -> { order(arel_table[:name].lower) }
|
10
12
|
|
@@ -18,8 +18,8 @@ module Spree
|
|
18
18
|
|
19
19
|
def property_name=(name)
|
20
20
|
unless name.blank?
|
21
|
-
unless property = Spree::Property.find_by(name:
|
22
|
-
property = Spree::Property.create(name
|
21
|
+
unless property = Spree::Property.find_by(name:)
|
22
|
+
property = Spree::Property.create(name:, presentation: name)
|
23
23
|
end
|
24
24
|
self.property = property
|
25
25
|
end
|
@@ -3,20 +3,24 @@
|
|
3
3
|
module Spree::RansackableAttributes
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
included do
|
6
|
-
class_attribute :
|
7
|
-
class_attribute :
|
8
|
-
|
6
|
+
class_attribute :allowed_ransackable_associations, default: []
|
7
|
+
class_attribute :allowed_ransackable_attributes, default: []
|
8
|
+
class_attribute :allowed_ransackable_scopes, default: []
|
9
9
|
class_attribute :default_ransackable_attributes
|
10
10
|
self.default_ransackable_attributes = %w[id]
|
11
11
|
end
|
12
12
|
|
13
13
|
class_methods do
|
14
14
|
def ransackable_associations(*_args)
|
15
|
-
|
15
|
+
allowed_ransackable_associations
|
16
16
|
end
|
17
17
|
|
18
18
|
def ransackable_attributes(*_args)
|
19
|
-
default_ransackable_attributes |
|
19
|
+
default_ransackable_attributes | allowed_ransackable_attributes
|
20
|
+
end
|
21
|
+
|
22
|
+
def ransackable_scopes(*_args)
|
23
|
+
allowed_ransackable_scopes
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
@@ -5,7 +5,7 @@ module Spree
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
has_many :user_addresses,
|
8
|
+
has_many :user_addresses, foreign_key: "user_id", class_name: "Spree::UserAddress" do
|
9
9
|
def find_first_by_address_values(address_attrs)
|
10
10
|
detect { |ua| ua.address == Spree::Address.new(address_attrs) }
|
11
11
|
end
|
@@ -22,7 +22,7 @@ module Spree
|
|
22
22
|
end
|
23
23
|
|
24
24
|
if user_address.persisted?
|
25
|
-
user_address.update!(column_for_default => true
|
25
|
+
user_address.update!(column_for_default => true)
|
26
26
|
else
|
27
27
|
user_address.write_attribute(column_for_default, true)
|
28
28
|
end
|
@@ -37,6 +37,9 @@ module Spree
|
|
37
37
|
|
38
38
|
has_one :default_user_ship_address, ->{ default_shipping }, class_name: 'Spree::UserAddress', foreign_key: 'user_id'
|
39
39
|
has_one :ship_address, through: :default_user_ship_address, source: :address
|
40
|
+
|
41
|
+
accepts_nested_attributes_for :ship_address
|
42
|
+
accepts_nested_attributes_for :bill_address
|
40
43
|
end
|
41
44
|
|
42
45
|
# saves address in address book
|
@@ -104,13 +107,20 @@ module Spree
|
|
104
107
|
return new_address unless new_address.valid?
|
105
108
|
|
106
109
|
first_one = user_addresses.empty?
|
110
|
+
user_address = prepare_user_address(new_address)
|
107
111
|
|
108
112
|
if address_attributes[:id].present? && new_address.id != address_attributes[:id]
|
113
|
+
if ship_address&.id == address_attributes[:id].to_i
|
114
|
+
user_addresses.mark_default(user_address, address_type: :shipping)
|
115
|
+
end
|
116
|
+
|
117
|
+
if bill_address&.id == address_attributes[:id].to_i
|
118
|
+
user_addresses.mark_default(user_address, address_type: :billing)
|
119
|
+
end
|
109
120
|
remove_from_address_book(address_attributes[:id])
|
110
121
|
end
|
111
122
|
|
112
|
-
user_address
|
113
|
-
user_addresses.mark_default(user_address, address_type: address_type) if default || first_one
|
123
|
+
user_addresses.mark_default(user_address, address_type:) if default || first_one
|
114
124
|
|
115
125
|
if persisted?
|
116
126
|
user_address.save!
|
@@ -130,18 +140,18 @@ module Spree
|
|
130
140
|
end
|
131
141
|
|
132
142
|
def mark_default_ship_address(address)
|
133
|
-
user_addresses.mark_default(user_addresses.find_by(address:
|
143
|
+
user_addresses.mark_default(user_addresses.find_by(address:))
|
134
144
|
end
|
135
145
|
|
136
146
|
def mark_default_bill_address(address)
|
137
|
-
user_addresses.mark_default(user_addresses.find_by(address:
|
147
|
+
user_addresses.mark_default(user_addresses.find_by(address:), address_type: :billing)
|
138
148
|
end
|
139
149
|
|
140
150
|
def remove_from_address_book(address_id)
|
141
|
-
user_address = user_addresses.find_by(address_id:
|
151
|
+
user_address = user_addresses.find_by(address_id:)
|
142
152
|
if user_address
|
143
153
|
remove_user_address_reference(address_id)
|
144
|
-
user_address.
|
154
|
+
user_address.destroy!
|
145
155
|
else
|
146
156
|
false
|
147
157
|
end
|
@@ -150,10 +160,9 @@ module Spree
|
|
150
160
|
private
|
151
161
|
|
152
162
|
def prepare_user_address(new_address)
|
153
|
-
user_address = user_addresses.
|
163
|
+
user_address = user_addresses.find_first_by_address_values(new_address.attributes)
|
154
164
|
user_address ||= user_addresses.build
|
155
165
|
user_address.address = new_address
|
156
|
-
user_address.archived = false
|
157
166
|
user_address
|
158
167
|
end
|
159
168
|
|
@@ -18,7 +18,7 @@ module Spree
|
|
18
18
|
has_many :stock_locations, through: :user_stock_locations
|
19
19
|
|
20
20
|
has_many :spree_orders, foreign_key: "user_id", class_name: "Spree::Order"
|
21
|
-
has_many :orders, foreign_key: "user_id", class_name: "Spree::Order"
|
21
|
+
has_many :orders, foreign_key: "user_id", class_name: "Spree::Order"
|
22
22
|
|
23
23
|
has_many :store_credits, -> { includes(:credit_type) }, foreign_key: "user_id", class_name: "Spree::StoreCredit"
|
24
24
|
has_many :store_credit_events, through: :store_credits
|
@@ -27,12 +27,13 @@ module Spree
|
|
27
27
|
has_many :wallet_payment_sources, foreign_key: 'user_id', class_name: 'Spree::WalletPaymentSource', inverse_of: :user
|
28
28
|
|
29
29
|
after_create :auto_generate_spree_api_key
|
30
|
+
before_destroy :check_for_deletion
|
30
31
|
|
31
32
|
include Spree::RansackableAttributes unless included_modules.include?(Spree::RansackableAttributes)
|
32
33
|
|
33
34
|
ransack_alias :name, :addresses_name
|
34
|
-
self.
|
35
|
-
self.
|
35
|
+
self.allowed_ransackable_associations = %w[addresses spree_roles]
|
36
|
+
self.allowed_ransackable_attributes = %w[name id email created_at]
|
36
37
|
end
|
37
38
|
|
38
39
|
def wallet
|
@@ -57,7 +58,7 @@ module Spree
|
|
57
58
|
def last_incomplete_spree_order(store: nil, only_frontend_viewable: true)
|
58
59
|
self_orders = orders
|
59
60
|
self_orders = self_orders.where(frontend_viewable: true) if only_frontend_viewable
|
60
|
-
self_orders = self_orders.where(store:
|
61
|
+
self_orders = self_orders.where(store:) if store
|
61
62
|
self_orders = self_orders.where('updated_at > ?', Spree::Config.completable_order_updated_cutoff_days.days.ago) if Spree::Config.completable_order_updated_cutoff_days
|
62
63
|
self_orders = self_orders.where('created_at > ?', Spree::Config.completable_order_created_cutoff_days.days.ago) if Spree::Config.completable_order_created_cutoff_days
|
63
64
|
last_order = self_orders.order(:created_at).last
|
@@ -72,9 +73,42 @@ module Spree
|
|
72
73
|
|
73
74
|
def display_available_store_credit_total(currency:)
|
74
75
|
Spree::Money.new(
|
75
|
-
available_store_credit_total(currency:
|
76
|
-
currency
|
76
|
+
available_store_credit_total(currency:),
|
77
|
+
currency:,
|
77
78
|
)
|
78
79
|
end
|
80
|
+
|
81
|
+
# Restrict to delete users with existing orders
|
82
|
+
#
|
83
|
+
# Override this in your user model class to add another logic.
|
84
|
+
#
|
85
|
+
# Ie. to allow to delete users with incomplete orders add:
|
86
|
+
#
|
87
|
+
# orders.complete.none?
|
88
|
+
#
|
89
|
+
def can_be_deleted?
|
90
|
+
orders.none?
|
91
|
+
end
|
92
|
+
|
93
|
+
# Updates the roles in keeping with the given ability's permissions
|
94
|
+
#
|
95
|
+
# Roles that are not accessible to the given ability will be ignored. It
|
96
|
+
# also ensure not to remove non accessible roles when assigning new
|
97
|
+
# accessible ones.
|
98
|
+
#
|
99
|
+
# @param given_roles [Spree::Role]
|
100
|
+
# @param ability [Spree::Ability]
|
101
|
+
def update_spree_roles(given_roles, ability:)
|
102
|
+
accessible_roles = Spree::Role.accessible_by(ability)
|
103
|
+
non_accessible_roles = Spree::Role.all - accessible_roles
|
104
|
+
new_accessible_roles = given_roles - non_accessible_roles
|
105
|
+
self.spree_roles = spree_roles - accessible_roles + new_accessible_roles
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def check_for_deletion
|
111
|
+
raise ActiveRecord::DeleteRestrictionError unless can_be_deleted?
|
112
|
+
end
|
79
113
|
end
|
80
114
|
end
|
data/app/models/spree/address.rb
CHANGED
@@ -26,10 +26,12 @@ module Spree
|
|
26
26
|
DB_ONLY_ATTRS = %w(id updated_at created_at).freeze
|
27
27
|
TAXATION_ATTRS = %w(state_id country_id zipcode).freeze
|
28
28
|
|
29
|
-
self.
|
29
|
+
self.allowed_ransackable_attributes = %w[name]
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
unless ActiveRecord::Relation.method_defined? :with_values # Rails 7.1+
|
32
|
+
scope :with_values, ->(attributes) do
|
33
|
+
where(value_attributes(attributes))
|
34
|
+
end
|
33
35
|
end
|
34
36
|
|
35
37
|
# @return [Address] an address with default attributes
|
@@ -95,14 +97,14 @@ module Spree
|
|
95
97
|
# @return [Hash] an ActiveMerchant compatible address hash
|
96
98
|
def active_merchant_hash
|
97
99
|
{
|
98
|
-
name
|
99
|
-
address1
|
100
|
-
address2
|
101
|
-
city
|
100
|
+
name:,
|
101
|
+
address1:,
|
102
|
+
address2:,
|
103
|
+
city:,
|
102
104
|
state: state_text,
|
103
105
|
zip: zipcode,
|
104
106
|
country: country.try(:iso),
|
105
|
-
phone:
|
107
|
+
phone:
|
106
108
|
}
|
107
109
|
end
|
108
110
|
|
@@ -130,7 +132,7 @@ module Spree
|
|
130
132
|
# @return [Country] setter that sets self.country to the Country with a matching 2 letter iso
|
131
133
|
# @raise [ActiveRecord::RecordNotFound] if country with the iso doesn't exist
|
132
134
|
def country_iso=(iso)
|
133
|
-
self.country = Spree::Country.find_by!(iso:
|
135
|
+
self.country = Spree::Country.find_by!(iso:)
|
134
136
|
end
|
135
137
|
|
136
138
|
def country_iso
|