solidus_core 2.4.2 → 2.5.0.beta1
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 +5 -5
- data/README.md +1 -5
- data/Rakefile +23 -6
- data/app/helpers/spree/base_helper.rb +15 -10
- data/app/helpers/spree/checkout_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +2 -2
- data/app/mailers/spree/carton_mailer.rb +2 -2
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/mailers/spree/test_mailer.rb +1 -1
- data/app/models/concerns/spree/adjustment_source.rb +17 -11
- data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address.rb +7 -0
- data/app/models/spree/adjustment.rb +6 -2
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/free_shipping.rb +2 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
- data/app/models/spree/calculator/percent_per_item.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/per_item.rb +1 -0
- data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/inventory_unit.rb +8 -2
- data/app/models/spree/log_entry.rb +0 -11
- data/app/models/spree/order.rb +31 -16
- data/app/models/spree/order_contents.rb +0 -14
- data/app/models/spree/order_shipping.rb +0 -5
- data/app/models/spree/order_updater.rb +0 -4
- data/app/models/spree/payment.rb +6 -1
- data/app/models/spree/payment/processing.rb +4 -4
- data/app/models/spree/payment_method.rb +8 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +4 -4
- data/app/models/spree/price.rb +7 -1
- data/app/models/spree/product.rb +34 -6
- data/app/models/spree/product/scopes.rb +2 -2
- data/app/models/spree/promotion.rb +1 -2
- data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/taxon.rb +25 -24
- data/app/models/spree/promotion_action.rb +7 -1
- data/app/models/spree/promotion_chooser.rb +1 -1
- data/app/models/spree/promotion_code.rb +3 -3
- data/app/models/spree/promotion_handler/coupon.rb +8 -29
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/refund.rb +3 -3
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/return_authorization.rb +2 -2
- data/app/models/spree/return_item.rb +3 -3
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- 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/shipment.rb +16 -6
- data/app/models/spree/shipping_method.rb +7 -0
- data/app/models/spree/shipping_rate.rb +6 -6
- data/app/models/spree/shipping_rate_tax.rb +2 -2
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +9 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
- data/app/models/spree/stock/inventory_validator.rb +2 -2
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +2 -2
- data/app/models/spree/stock_item.rb +6 -0
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/store_credit.rb +19 -12
- data/app/models/spree/store_credit_category.rb +1 -1
- data/app/models/spree/store_credit_event.rb +7 -1
- data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
- data/app/models/spree/tax_rate.rb +10 -3
- data/app/models/spree/taxon.rb +14 -4
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/unit_cancel.rb +1 -1
- data/app/models/spree/variant.rb +33 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/pricing_options.rb +1 -1
- data/app/models/spree/variant/scopes.rb +1 -1
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
- data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
- data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
- data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
- data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
- data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
- data/app/views/spree/shared/_error_messages.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.text.erb +2 -2
- data/config/initializers/assets.rb +3 -1
- data/config/locales/en.yml +44 -48
- data/db/default/spree/store_credit.rb +1 -1
- data/db/default/spree/stores.rb +7 -8
- data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
- data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
- data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
- data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
- data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
- data/lib/generators/spree/install/install_generator.rb +10 -5
- data/lib/spree/app_configuration.rb +103 -5
- data/lib/spree/core.rb +3 -2
- data/lib/spree/core/active_merchant_dependencies.rb +11 -0
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/controller_helpers/common.rb +3 -7
- data/lib/spree/core/engine.rb +18 -100
- data/lib/spree/core/environment.rb +3 -3
- data/lib/spree/core/importer/order.rb +0 -1
- data/lib/spree/core/permalinks.rb +9 -15
- data/lib/spree/core/product_filters.rb +5 -3
- data/lib/spree/core/role_configuration.rb +23 -7
- data/lib/spree/core/search/base.rb +16 -13
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/paranoia_deprecations.rb +19 -0
- data/lib/spree/permission_sets.rb +0 -4
- data/lib/spree/permitted_attributes.rb +0 -3
- data/lib/spree/preferences/preferable.rb +70 -34
- data/lib/spree/preferences/preferable_class_methods.rb +22 -0
- data/lib/spree/testing_support/authorization_helpers.rb +2 -0
- data/lib/spree/testing_support/common_rake.rb +0 -1
- data/lib/spree/testing_support/dummy_app.rb +100 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/database.yml +31 -0
- data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
- data/lib/spree/testing_support/factories.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +1 -1
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +5 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
- data/lib/spree/testing_support/factories/price_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- 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/promotion_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
- data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- 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 +1 -1
- 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 +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +1 -7
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -10
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- 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 +2 -4
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/spree/testing_support/preferences.rb +4 -0
- data/lib/spree/testing_support/sequences.rb +3 -12
- data/solidus_core.gemspec +12 -8
- data/spec/helpers/base_helper_spec.rb +19 -3
- data/spec/helpers/products_helper_spec.rb +1 -1
- data/spec/lib/calculated_adjustments_spec.rb +20 -0
- data/spec/lib/i18n_spec.rb +4 -69
- data/spec/lib/search/base_spec.rb +1 -0
- data/spec/lib/search/variant_spec.rb +4 -4
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
- data/spec/lib/spree/core/importer/order_spec.rb +2 -2
- data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +3 -7
- data/spec/mailers/order_mailer_spec.rb +7 -11
- data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
- data/spec/mailers/test_mailer_spec.rb +0 -4
- data/spec/models/spree/ability_spec.rb +2 -1
- data/spec/models/spree/address_spec.rb +32 -19
- data/spec/models/spree/app_configuration_spec.rb +1 -1
- data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
- data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
- data/spec/models/spree/classification_spec.rb +19 -0
- data/spec/models/spree/credit_card_spec.rb +1 -1
- data/spec/models/spree/customer_return_spec.rb +17 -6
- data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
- data/spec/models/spree/exchange_spec.rb +1 -1
- data/spec/models/spree/inventory_unit_spec.rb +3 -7
- data/spec/models/spree/line_item_spec.rb +6 -6
- data/spec/models/spree/option_value_spec.rb +11 -6
- data/spec/models/spree/order/callbacks_spec.rb +2 -2
- data/spec/models/spree/order/checkout_spec.rb +31 -31
- data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
- data/spec/models/spree/order_contents_spec.rb +1 -9
- data/spec/models/spree/order_inventory_spec.rb +2 -2
- data/spec/models/spree/order_mutex_spec.rb +3 -1
- data/spec/models/spree/order_shipping_spec.rb +7 -4
- data/spec/models/spree/order_spec.rb +36 -13
- data/spec/models/spree/order_taxation_spec.rb +7 -7
- data/spec/models/spree/order_updater_spec.rb +6 -4
- data/spec/models/spree/payment/cancellation_spec.rb +1 -1
- data/spec/models/spree/payment_create_spec.rb +2 -2
- data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
- data/spec/models/spree/payment_spec.rb +23 -4
- data/spec/models/spree/preferences/preferable_spec.rb +44 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
- data/spec/models/spree/price_spec.rb +6 -4
- data/spec/models/spree/product/scopes_spec.rb +1 -1
- data/spec/models/spree/product_spec.rb +49 -9
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
- data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
- data/spec/models/spree/promotion_code_spec.rb +31 -19
- data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
- data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
- data/spec/models/spree/promotion_spec.rb +14 -14
- data/spec/models/spree/refund_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
- data/spec/models/spree/return_item_spec.rb +6 -6
- data/spec/models/spree/shipment_spec.rb +14 -10
- data/spec/models/spree/shipping_manifest_spec.rb +22 -9
- data/spec/models/spree/shipping_method_spec.rb +9 -5
- data/spec/models/spree/stock/availability_spec.rb +16 -2
- data/spec/models/spree/stock/estimator_spec.rb +11 -12
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
- data/spec/models/spree/stock/package_spec.rb +3 -2
- data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
- data/spec/models/spree/stock_item_spec.rb +6 -6
- data/spec/models/spree/stock_location_spec.rb +16 -3
- data/spec/models/spree/store_credit_spec.rb +12 -6
- data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
- data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
- data/spec/models/spree/taxon_spec.rb +42 -19
- data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +69 -11
- data/spec/rails_helper.rb +7 -13
- data/spec/spec_helper.rb +3 -12
- data/spec/support/concerns/default_price.rb +1 -1
- data/spec/support/dummy_ability.rb +2 -0
- metadata +144 -73
- data/Gemfile +0 -3
- data/app/models/spree/order_stock_location.rb +0 -15
- data/app/models/spree/stock_transfer.rb +0 -110
- data/app/models/spree/transfer_item.rb +0 -54
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
- data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
- data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
- data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
- data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
- data/lib/spree/testing_support/i18n.rb +0 -97
- data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
- data/spec/models/spree/order_stock_location_spec.rb +0 -18
- data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
- data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
- data/spec/models/spree/stock_transfer_spec.rb +0 -308
- data/spec/models/spree/transfer_item_spec.rb +0 -275
- data/spec/support/test_gateway.rb +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require 'spree/
|
|
1
|
+
require 'spree/core/environment_extension'
|
|
2
2
|
|
|
3
3
|
module Spree
|
|
4
4
|
module Core
|
|
@@ -10,9 +10,9 @@ module Spree
|
|
|
10
10
|
|
|
11
11
|
attr_accessor :calculators, :preferences, :promotions
|
|
12
12
|
|
|
13
|
-
def initialize
|
|
13
|
+
def initialize(spree_config)
|
|
14
14
|
@calculators = Calculators.new
|
|
15
|
-
@preferences =
|
|
15
|
+
@preferences = spree_config
|
|
16
16
|
@promotions = Spree::Promo::Environment.new
|
|
17
17
|
end
|
|
18
18
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'stringex'
|
|
2
|
-
|
|
3
1
|
module Spree
|
|
4
2
|
module Core
|
|
5
3
|
module Permalinks
|
|
@@ -48,24 +46,20 @@ module Spree
|
|
|
48
46
|
end
|
|
49
47
|
|
|
50
48
|
def save_permalink(permalink_value = to_param)
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
permalink_value ||= generate_permalink
|
|
50
|
+
permalink_field = self.class.permalink_field
|
|
51
|
+
|
|
52
|
+
loop do
|
|
53
|
+
other = self.class.where(permalink_field => permalink_value)
|
|
54
|
+
break unless other.exists?
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
other = self.class.where("#{self.class.table_name}.#{field} LIKE ?", "#{permalink_value}%")
|
|
57
|
-
if other.any?
|
|
58
|
-
# Find the existing permalink with the highest number, and increment that number.
|
|
59
|
-
# (If none of the existing permalinks have a number, this will evaluate to 1.)
|
|
60
|
-
number = other.map { |o| o.send(field)[/-(\d+)$/, 1].to_i }.max + 1
|
|
61
|
-
permalink_value += "-#{number}"
|
|
62
|
-
end
|
|
63
|
-
write_attribute(field, permalink_value)
|
|
56
|
+
# Try again with a new value
|
|
57
|
+
permalink_value = generate_permalink
|
|
64
58
|
end
|
|
59
|
+
write_attribute(permalink_field, permalink_value)
|
|
65
60
|
end
|
|
66
61
|
end
|
|
67
62
|
end
|
|
68
63
|
end
|
|
69
64
|
|
|
70
65
|
ActiveRecord::Base.send :include, Spree::Core::Permalinks
|
|
71
|
-
ActiveRecord::Relation.send :include, Spree::Core::Permalinks
|
|
@@ -67,13 +67,13 @@ module Spree
|
|
|
67
67
|
|
|
68
68
|
def self.price_filter
|
|
69
69
|
v = Spree::Price.arel_table
|
|
70
|
-
conds = [[
|
|
70
|
+
conds = [[I18n.t('spree.under_price', price: format_price(10)), v[:amount].lteq(10)],
|
|
71
71
|
["#{format_price(10)} - #{format_price(15)}", v[:amount].in(10..15)],
|
|
72
72
|
["#{format_price(15)} - #{format_price(18)}", v[:amount].in(15..18)],
|
|
73
73
|
["#{format_price(18)} - #{format_price(20)}", v[:amount].in(18..20)],
|
|
74
|
-
[
|
|
74
|
+
[I18n.t('spree.or_over_price', price: format_price(20)), v[:amount].gteq(20)]]
|
|
75
75
|
{
|
|
76
|
-
name:
|
|
76
|
+
name: I18n.t('spree.price_range'),
|
|
77
77
|
scope: :price_range_any,
|
|
78
78
|
conds: Hash[*conds.flatten],
|
|
79
79
|
labels: conds.map { |k, _v| [k, k] }
|
|
@@ -164,6 +164,7 @@ module Spree
|
|
|
164
164
|
# This scope selects products in any of the active taxons or their children.
|
|
165
165
|
#
|
|
166
166
|
def self.taxons_below(taxon)
|
|
167
|
+
Spree::Deprecation.warn "taxons_below is deprecated in solidus_core. Please add it to your own application to continue using it."
|
|
167
168
|
return Spree::Core::ProductFilters.all_taxons if taxon.nil?
|
|
168
169
|
{
|
|
169
170
|
name: 'Taxons under ' + taxon.name,
|
|
@@ -180,6 +181,7 @@ module Spree
|
|
|
180
181
|
#
|
|
181
182
|
# idea: expand the format to allow nesting of labels?
|
|
182
183
|
def self.all_taxons
|
|
184
|
+
Spree::Deprecation.warn "all_taxons is deprecated in solidus_core. Please add it to your own application to continue using it."
|
|
183
185
|
taxons = Spree::Taxonomy.all.map { |t| [t.root] + t.root.descendants }.flatten
|
|
184
186
|
{
|
|
185
187
|
name: 'All taxons',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'singleton'
|
|
2
|
+
require 'spree/core/class_constantizer'
|
|
2
3
|
|
|
3
4
|
module Spree
|
|
4
5
|
# A class responsible for associating {Spree::Role} with a list of permission sets.
|
|
@@ -16,15 +17,30 @@ module Spree
|
|
|
16
17
|
class RoleConfiguration
|
|
17
18
|
# An internal structure for the association between a role and a
|
|
18
19
|
# set of permissions.
|
|
19
|
-
Role
|
|
20
|
+
class Role
|
|
21
|
+
attr_reader :name, :permission_sets
|
|
22
|
+
|
|
23
|
+
def initialize(name, permission_sets)
|
|
24
|
+
@name = name
|
|
25
|
+
@permission_sets = Spree::Core::ClassConstantizer::Set.new
|
|
26
|
+
@permission_sets.concat permission_sets
|
|
27
|
+
end
|
|
28
|
+
end
|
|
20
29
|
|
|
21
|
-
include Singleton
|
|
22
30
|
attr_accessor :roles
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
class << self
|
|
33
|
+
def instance
|
|
34
|
+
Spree::Deprecation.warn "Spree::RoleConfiguration.instance is DEPRECATED use Spree::Config.roles instead"
|
|
35
|
+
Spree::Config.roles
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Yields the instance of the singleton, used for configuration
|
|
39
|
+
# @yield_param instance [Spree::RoleConfiguration]
|
|
40
|
+
def configure
|
|
41
|
+
Spree::Deprecation.warn "Spree::RoleConfiguration.configure is deprecated. Call Spree::Config.roles.assign_permissions instead"
|
|
42
|
+
yield(Spree::Config.roles)
|
|
43
|
+
end
|
|
28
44
|
end
|
|
29
45
|
|
|
30
46
|
# Given a CanCan::Ability, and a user, determine what permissions sets can
|
|
@@ -63,7 +79,7 @@ module Spree
|
|
|
63
79
|
def assign_permissions(role_name, permission_sets)
|
|
64
80
|
name = role_name.to_s
|
|
65
81
|
|
|
66
|
-
roles[name].permission_sets
|
|
82
|
+
roles[name].permission_sets.concat permission_sets
|
|
67
83
|
roles[name]
|
|
68
84
|
end
|
|
69
85
|
end
|
|
@@ -27,16 +27,17 @@ module Spree
|
|
|
27
27
|
|
|
28
28
|
def retrieve_products
|
|
29
29
|
@products = get_base_scope
|
|
30
|
-
curr_page = page || 1
|
|
30
|
+
curr_page = @properties[:page] || 1
|
|
31
31
|
|
|
32
32
|
unless Spree::Config.show_products_without_price
|
|
33
33
|
@products = @products.joins(:prices).merge(Spree::Price.where(pricing_options.search_arguments)).distinct
|
|
34
34
|
end
|
|
35
|
-
@products = @products.page(curr_page).per(per_page)
|
|
35
|
+
@products = @products.page(curr_page).per(@properties[:per_page])
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def method_missing(name)
|
|
39
|
-
if @properties.key?
|
|
39
|
+
if @properties.key?(name)
|
|
40
|
+
Spree::Deprecation.warn "Accessing Searcher's #{name} property using #{self.class.name}##{name} is deprecated without replacement"
|
|
40
41
|
@properties[name]
|
|
41
42
|
else
|
|
42
43
|
super
|
|
@@ -47,8 +48,8 @@ module Spree
|
|
|
47
48
|
|
|
48
49
|
def get_base_scope
|
|
49
50
|
base_scope = Spree::Product.display_includes.available
|
|
50
|
-
base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
|
|
51
|
-
base_scope = get_products_conditions_for(base_scope, keywords)
|
|
51
|
+
base_scope = base_scope.in_taxon(@properties[:taxon]) unless @properties[:taxon].blank?
|
|
52
|
+
base_scope = get_products_conditions_for(base_scope, @properties[:keywords])
|
|
52
53
|
base_scope = add_search_scopes(base_scope)
|
|
53
54
|
base_scope = add_eagerload_scopes(base_scope)
|
|
54
55
|
base_scope
|
|
@@ -71,19 +72,21 @@ module Spree
|
|
|
71
72
|
# `where` constraints affecting joined tables are added to the search;
|
|
72
73
|
# which is the case as soon as a taxon is added to the base scope.
|
|
73
74
|
scope = scope.preload(master: :currently_valid_prices)
|
|
74
|
-
scope = scope.preload(master: :images) if include_images
|
|
75
|
+
scope = scope.preload(master: :images) if @properties[:include_images]
|
|
75
76
|
scope
|
|
76
77
|
end
|
|
77
78
|
|
|
78
79
|
def add_search_scopes(base_scope)
|
|
79
|
-
search
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
base_scope
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
if @properties[:search]
|
|
81
|
+
@properties[:search].each do |name, scope_attribute|
|
|
82
|
+
scope_name = name.to_sym
|
|
83
|
+
if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
|
|
84
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
|
85
|
+
else
|
|
86
|
+
base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
|
|
87
|
+
end
|
|
85
88
|
end
|
|
86
|
-
end
|
|
89
|
+
end
|
|
87
90
|
base_scope
|
|
88
91
|
end
|
|
89
92
|
|
data/lib/spree/core/version.rb
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module ParanoiaDeprecations
|
|
3
|
+
def paranoia_destroy
|
|
4
|
+
Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
|
|
5
|
+
Calling #destroy (or #paranoia_destroy) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
|
|
6
|
+
In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
|
|
7
|
+
WARN
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def paranoia_delete
|
|
12
|
+
Spree::Deprecation.warn <<-WARN.strip_heredoc, caller
|
|
13
|
+
Calling #delete (or #paranoia_delete) on a #{self.class} currently performs a soft-destroy using the paranoia gem.
|
|
14
|
+
In Solidus 3.0, paranoia will be removed, and this will perform a HARD destroy instead. To continue soft-deleting, use #discard instead.
|
|
15
|
+
WARN
|
|
16
|
+
super
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -12,12 +12,8 @@ require 'spree/permission_sets/promotion_management'
|
|
|
12
12
|
require 'spree/permission_sets/report_display'
|
|
13
13
|
require 'spree/permission_sets/restricted_stock_display'
|
|
14
14
|
require 'spree/permission_sets/restricted_stock_management'
|
|
15
|
-
require 'spree/permission_sets/restricted_stock_transfer_display'
|
|
16
|
-
require 'spree/permission_sets/restricted_stock_transfer_management'
|
|
17
15
|
require 'spree/permission_sets/stock_display'
|
|
18
16
|
require 'spree/permission_sets/stock_management'
|
|
19
|
-
require 'spree/permission_sets/stock_transfer_display'
|
|
20
|
-
require 'spree/permission_sets/stock_transfer_management'
|
|
21
17
|
require 'spree/permission_sets/super_user'
|
|
22
18
|
require 'spree/permission_sets/user_display'
|
|
23
19
|
require 'spree/permission_sets/user_management'
|
|
@@ -27,7 +27,6 @@ module Spree
|
|
|
27
27
|
:store_attributes,
|
|
28
28
|
:taxon_attributes,
|
|
29
29
|
:taxonomy_attributes,
|
|
30
|
-
:transfer_item_attributes,
|
|
31
30
|
:user_attributes,
|
|
32
31
|
:variant_attributes
|
|
33
32
|
]
|
|
@@ -116,8 +115,6 @@ module Spree
|
|
|
116
115
|
:meta_description, :meta_keywords, :meta_title, :child_index
|
|
117
116
|
]
|
|
118
117
|
|
|
119
|
-
@@transfer_item_attributes = [:variant_id, :expected_quantity, :received_quantity]
|
|
120
|
-
|
|
121
118
|
# intentionally leaving off email here to prevent privilege escalation
|
|
122
119
|
# by changing a user with higher priveleges' email to one a lower-priveleged
|
|
123
120
|
# admin owns. creating a user with an email is handled separate at the
|
|
@@ -1,43 +1,55 @@
|
|
|
1
|
-
# Preferable allows defining preference accessor methods.
|
|
2
|
-
#
|
|
3
|
-
# A class including Preferable must implement #preferences which should return
|
|
4
|
-
# an object responding to .fetch(key), []=(key, val), and .delete(key).
|
|
5
|
-
#
|
|
6
|
-
# The generated writer method performs typecasting before assignment into the
|
|
7
|
-
# preferences object.
|
|
8
|
-
#
|
|
9
|
-
# Examples:
|
|
10
|
-
#
|
|
11
|
-
# # Spree::Base includes Preferable and defines preferences as a serialized
|
|
12
|
-
# # column.
|
|
13
|
-
# class Settings < Spree::Base
|
|
14
|
-
# preference :color, :string, default: 'red'
|
|
15
|
-
# preference :temperature, :integer, default: 21
|
|
16
|
-
# end
|
|
17
|
-
#
|
|
18
|
-
# s = Settings.new
|
|
19
|
-
# s.preferred_color # => 'red'
|
|
20
|
-
# s.preferred_temperature # => 21
|
|
21
|
-
#
|
|
22
|
-
# s.preferred_color = 'blue'
|
|
23
|
-
# s.preferred_color # => 'blue'
|
|
24
|
-
#
|
|
25
|
-
# # Typecasting is performed on assignment
|
|
26
|
-
# s.preferred_temperature = '24'
|
|
27
|
-
# s.preferred_color # => 24
|
|
28
|
-
#
|
|
29
|
-
# # Modifications have been made to the .preferences hash
|
|
30
|
-
# s.preferences #=> {color: 'blue', temperature: 24}
|
|
31
|
-
#
|
|
32
|
-
# # Save the changes. All handled by activerecord
|
|
33
|
-
# s.save!
|
|
34
|
-
|
|
35
1
|
require 'spree/preferences/preferable_class_methods'
|
|
36
2
|
require 'active_support/concern'
|
|
37
3
|
require 'active_support/core_ext/hash/keys'
|
|
38
4
|
|
|
39
5
|
module Spree
|
|
40
6
|
module Preferences
|
|
7
|
+
# Preferable allows defining preference accessor methods.
|
|
8
|
+
#
|
|
9
|
+
# A class including Preferable must implement #preferences which should return
|
|
10
|
+
# an object responding to .fetch(key), []=(key, val), and .delete(key).
|
|
11
|
+
#
|
|
12
|
+
# The generated writer method performs typecasting before assignment into the
|
|
13
|
+
# preferences object.
|
|
14
|
+
#
|
|
15
|
+
# Examples:
|
|
16
|
+
#
|
|
17
|
+
# # Spree::Base includes Preferable and defines preferences as a serialized
|
|
18
|
+
# # column.
|
|
19
|
+
# class Settings < Spree::Base
|
|
20
|
+
# preference :color, :string, default: 'red'
|
|
21
|
+
# preference :temperature, :integer, default: 21
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
# s = Settings.new
|
|
25
|
+
# s.preferred_color # => 'red'
|
|
26
|
+
# s.preferred_temperature # => 21
|
|
27
|
+
#
|
|
28
|
+
# s.preferred_color = 'blue'
|
|
29
|
+
# s.preferred_color # => 'blue'
|
|
30
|
+
#
|
|
31
|
+
# # Typecasting is performed on assignment
|
|
32
|
+
# s.preferred_temperature = '24'
|
|
33
|
+
# s.preferred_color # => 24
|
|
34
|
+
#
|
|
35
|
+
# # Modifications have been made to the .preferences hash
|
|
36
|
+
# s.preferences #=> {color: 'blue', temperature: 24}
|
|
37
|
+
#
|
|
38
|
+
# # Save the changes. All handled by activerecord
|
|
39
|
+
# s.save!
|
|
40
|
+
#
|
|
41
|
+
# Each preference gets rendered as a form field in Solidus backend.
|
|
42
|
+
#
|
|
43
|
+
# As not all supported preference types are representable as a form field, only
|
|
44
|
+
# some of them get rendered per default. Arrays and Hashes for instance are
|
|
45
|
+
# supported preference field types, but do not represent well as a form field.
|
|
46
|
+
#
|
|
47
|
+
# Overwrite +allowed_admin_form_preference_types+ in your class if you want to
|
|
48
|
+
# provide more fields. If you do so, you also need to provide a preference field
|
|
49
|
+
# partial that lives in:
|
|
50
|
+
#
|
|
51
|
+
# +app/views/spree/admin/shared/preference_fields/+
|
|
52
|
+
#
|
|
41
53
|
module Preferable
|
|
42
54
|
extend ActiveSupport::Concern
|
|
43
55
|
|
|
@@ -101,6 +113,30 @@ module Spree
|
|
|
101
113
|
]
|
|
102
114
|
end
|
|
103
115
|
|
|
116
|
+
# Preference names representable as form fields in Solidus backend
|
|
117
|
+
#
|
|
118
|
+
# Not all preferences are representable as a form field.
|
|
119
|
+
#
|
|
120
|
+
# Arrays and Hashes for instance are supported preference field types,
|
|
121
|
+
# but do not represent well as a form field.
|
|
122
|
+
#
|
|
123
|
+
# As these kind of preferences are mostly developer facing
|
|
124
|
+
# and not admin facing we should not render them.
|
|
125
|
+
#
|
|
126
|
+
# Overwrite +allowed_admin_form_preference_types+ in your class that
|
|
127
|
+
# includes +Spree::Preferable+ if you want to provide more fields.
|
|
128
|
+
# If you do so, you also need to provide a preference field partial
|
|
129
|
+
# that lives in:
|
|
130
|
+
#
|
|
131
|
+
# +app/views/spree/admin/shared/preference_fields/+
|
|
132
|
+
#
|
|
133
|
+
# @return [Array]
|
|
134
|
+
def admin_form_preference_names
|
|
135
|
+
defined_preferences.keep_if do |type|
|
|
136
|
+
preference_type(type).in? self.class.allowed_admin_form_preference_types
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
104
140
|
private
|
|
105
141
|
|
|
106
142
|
def convert_preference_value(value, type)
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
module Spree::Preferences
|
|
2
2
|
module PreferableClassMethods
|
|
3
|
+
DEFAULT_ADMIN_FORM_PREFERENCE_TYPES = %i(
|
|
4
|
+
boolean
|
|
5
|
+
decimal
|
|
6
|
+
integer
|
|
7
|
+
password
|
|
8
|
+
string
|
|
9
|
+
text
|
|
10
|
+
)
|
|
11
|
+
|
|
3
12
|
def defined_preferences
|
|
4
13
|
[]
|
|
5
14
|
end
|
|
@@ -60,5 +69,18 @@ module Spree::Preferences
|
|
|
60
69
|
def preference_type_getter_method(name)
|
|
61
70
|
"preferred_#{name}_type".to_sym
|
|
62
71
|
end
|
|
72
|
+
|
|
73
|
+
# List of preference types allowed as form fields in the Solidus admin
|
|
74
|
+
#
|
|
75
|
+
# Overwrite this method in your class that includes +Spree::Preferable+
|
|
76
|
+
# if you want to provide more fields. If you do so, you also need to provide
|
|
77
|
+
# a preference field partial that lives in:
|
|
78
|
+
#
|
|
79
|
+
# +app/views/spree/admin/shared/preference_fields/+
|
|
80
|
+
#
|
|
81
|
+
# @return [Array]
|
|
82
|
+
def allowed_admin_form_preference_types
|
|
83
|
+
DEFAULT_ADMIN_FORM_PREFERENCE_TYPES
|
|
84
|
+
end
|
|
63
85
|
end
|
|
64
86
|
end
|