spree_core 3.2.9 → 3.3.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/number_as_param.rb +9 -0
- data/app/models/concerns/spree/user_address.rb +4 -2
- data/app/models/concerns/spree/user_methods.rb +2 -3
- data/app/models/spree/ability.rb +1 -2
- data/app/models/spree/address.rb +1 -1
- data/app/models/spree/base.rb +2 -0
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/percent_per_item.rb +4 -3
- data/app/models/spree/calculator/returns/default_refund_amount.rb +16 -14
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +26 -21
- data/app/models/spree/customer_return.rb +2 -2
- data/app/models/spree/exchange.rb +7 -2
- data/app/models/spree/image.rb +1 -1
- data/app/models/spree/inventory_unit.rb +39 -3
- data/app/models/spree/line_item.rb +2 -7
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_type_prototype.rb +1 -1
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/option_value_variant.rb +3 -0
- data/app/models/spree/order.rb +82 -81
- data/app/models/spree/order/checkout.rb +23 -33
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/payments.rb +1 -1
- data/app/models/spree/order/store_credit.rb +6 -1
- data/app/models/spree/order_contents.rb +14 -2
- data/app/models/spree/order_inventory.rb +64 -60
- data/app/models/spree/payment.rb +8 -13
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment_method.rb +4 -2
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/preferences/preferable.rb +1 -1
- data/app/models/spree/product.rb +1 -1
- data/app/models/spree/product/scopes.rb +2 -2
- data/app/models/spree/promotion.rb +2 -2
- data/app/models/spree/promotion/rules/option_value.rb +13 -5
- data/app/models/spree/promotion_rule_user.rb +1 -1
- data/app/models/spree/property_prototype.rb +1 -1
- data/app/models/spree/prototype_taxon.rb +1 -1
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +2 -1
- data/app/models/spree/reimbursement_type.rb +1 -1
- data/app/models/spree/return_authorization.rb +1 -0
- data/app/models/spree/return_item.rb +35 -9
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +63 -64
- data/app/models/spree/shipment_handler.rb +1 -1
- data/app/models/spree/shipping_category.rb +1 -1
- data/app/models/spree/shipping_method.rb +12 -10
- data/app/models/spree/state_change.rb +1 -1
- data/app/models/spree/stock/adjuster.rb +35 -14
- data/app/models/spree/stock/availability_validator.rb +1 -1
- data/app/models/spree/stock/content_item.rb +9 -8
- data/app/models/spree/stock/coordinator.rb +3 -9
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +10 -9
- data/app/models/spree/stock/package.rb +6 -6
- data/app/models/spree/stock/packer.rb +8 -15
- data/app/models/spree/stock/prioritizer.rb +13 -10
- data/app/models/spree/stock/splitter/weight.rb +62 -10
- data/app/models/spree/stock_item.rb +42 -29
- data/app/models/spree/stock_location.rb +5 -1
- data/app/models/spree/stock_movement.rb +1 -2
- data/app/models/spree/stock_transfer.rb +2 -3
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +9 -6
- data/app/models/spree/store_credit_category.rb +1 -1
- data/app/models/spree/tax_category.rb +1 -1
- data/app/models/spree/tax_rate.rb +1 -1
- data/app/models/spree/taxon.rb +5 -2
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/tracker.rb +1 -1
- data/app/models/spree/variant.rb +4 -3
- data/app/models/spree/zone.rb +19 -21
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +61 -0
- data/config/locales/en.yml +7 -6
- data/db/migrate/20130807024301_upgrade_adjustments.rb +6 -0
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +6 -0
- data/db/migrate/20161125065505_add_quantity_to_inventory_units.rb +5 -0
- data/db/migrate/20170119122701_add_original_return_item_id_to_spree_inventory_units.rb +29 -0
- data/db/migrate/20170315152755_add_unique_index_on_number_to_spree_orders.rb +16 -0
- data/db/migrate/20170316154338_add_unique_index_on_number_to_spree_stock_transfer.rb +16 -0
- data/db/migrate/20170316205511_add_unique_index_on_number_to_spree_shipment.rb +16 -0
- data/db/migrate/20170320134043_add_unique_index_on_number_to_spree_payments.rb +17 -0
- data/db/migrate/20170320142750_add_unique_index_on_number_to_spree_return_authorizations.rb +16 -0
- data/db/migrate/20170320145040_add_unique_index_on_number_to_spree_customer_returns.rb +16 -0
- data/db/migrate/20170320145518_add_unique_index_on_number_to_spree_reimbursements.rb +16 -0
- data/db/migrate/20170323151450_add_missing_unique_indexes_for_unique_attributes.rb +37 -0
- data/db/migrate/20170329110859_add_index_on_stock_location_to_spree_customer_returns.rb +5 -0
- data/db/migrate/20170329113917_add_index_on_prototype_to_spree_option_type_prototype.rb +19 -0
- data/db/migrate/20170330082155_add_indexes_to_spree_option_value_variant.rb +19 -0
- data/db/migrate/20170330132215_add_index_on_promotion_id_to_order_promotions.rb +5 -0
- data/db/migrate/20170331101758_add_indexes_for_property_prototype.rb +20 -0
- data/db/migrate/20170331103334_add_index_for_prototype_id_to_prototype_taxons.rb +5 -0
- data/db/migrate/20170331110454_add_indexes_to_refunds.rb +6 -0
- data/db/migrate/20170331111757_add_indexes_to_reimbursement_credits.rb +6 -0
- data/db/migrate/20170331115246_add_indexes_to_return_authorizations.rb +6 -0
- data/db/migrate/20170331120125_add_indexes_to_return_items.rb +11 -0
- data/db/migrate/20170331121725_add_index_to_role_users.rb +18 -0
- data/db/migrate/20170331123625_add_index_to_shipping_method_categories.rb +5 -0
- data/db/migrate/20170331123832_add_index_to_shipping_method_zones.rb +20 -0
- data/db/migrate/20170331124251_add_index_to_spree_shipping_rates.rb +6 -0
- data/db/migrate/20170331124513_add_index_to_spree_stock_items.rb +5 -0
- data/db/migrate/20170331124924_add_index_to_spree_stock_movement.rb +5 -0
- data/db/migrate/20170413211707_change_indexes_on_friendly_id_slugs.rb +10 -0
- data/lib/generators/spree/install/install_generator.rb +41 -36
- data/lib/spree/core.rb +0 -1
- data/lib/spree/core/engine.rb +3 -3
- data/lib/spree/core/importer/order.rb +23 -19
- data/lib/spree/core/number_generator.rb +3 -5
- data/lib/spree/core/product_duplicator.rb +7 -3
- data/lib/spree/core/search/base.rb +1 -0
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +1 -15
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/testing_support/common_rake.rb +0 -2
- data/lib/spree/testing_support/factories.rb +3 -3
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_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 +1 -1
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/options_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +7 -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_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/prototype_factory.rb +1 -1
- data/lib/spree/testing_support/factories/refund_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/role_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -1
- data/lib/spree/testing_support/factories/state_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
- 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/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 +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tag_factory.rb +1 -1
- 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 +2 -2
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tracker_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_member_factory.rb +1 -1
- data/lib/spree/testing_support/microdata.rb +3 -0
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/tasks/exchanges.rake +8 -10
- data/spec/helpers/base_helper_spec.rb +200 -0
- data/spec/helpers/products_helper_spec.rb +289 -0
- data/spec/lib/calculated_adjustments_spec.rb +7 -0
- data/spec/lib/i18n_spec.rb +123 -0
- data/spec/lib/search/base_spec.rb +86 -0
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +103 -0
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +110 -0
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +72 -0
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
- data/spec/lib/spree/core/importer/order_spec.rb +607 -0
- data/spec/lib/spree/core/number_generator_spec.rb +139 -0
- data/spec/lib/spree/core/token_generator_spec.rb +24 -0
- data/spec/lib/spree/core/validators/email_spec.rb +54 -0
- data/spec/lib/spree/core_spec.rb +23 -0
- data/spec/lib/spree/localized_number_spec.rb +54 -0
- data/spec/lib/spree/migrations_spec.rb +36 -0
- data/spec/lib/spree/money_spec.rb +122 -0
- data/spec/lib/tasks/exchanges_spec.rb +136 -0
- data/spec/mailers/order_mailer_spec.rb +122 -0
- data/spec/mailers/reimbursement_mailer_spec.rb +52 -0
- data/spec/mailers/shipment_mailer_spec.rb +81 -0
- data/spec/mailers/test_mailer_spec.rb +38 -0
- data/spec/models/spree/ability_spec.rb +251 -0
- data/spec/models/spree/address_spec.rb +402 -0
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +26 -0
- data/spec/models/spree/adjustment_spec.rb +189 -0
- data/spec/models/spree/app_configuration_spec.rb +26 -0
- data/spec/models/spree/asset_spec.rb +28 -0
- data/spec/models/spree/calculator/default_tax_spec.rb +152 -0
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
- data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
- data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +47 -0
- data/spec/models/spree/calculator/shipping.rb +8 -0
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +29 -0
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +40 -0
- data/spec/models/spree/calculator/tiered_percent_spec.rb +51 -0
- data/spec/models/spree/calculator_spec.rb +69 -0
- data/spec/models/spree/classification_spec.rb +93 -0
- data/spec/models/spree/concerns/display_money_spec.rb +43 -0
- data/spec/models/spree/concerns/user_methods_spec.rb +82 -0
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
- data/spec/models/spree/country_spec.rb +55 -0
- data/spec/models/spree/credit_card_spec.rb +328 -0
- data/spec/models/spree/customer_return_spec.rb +240 -0
- data/spec/models/spree/exchange_spec.rb +75 -0
- data/spec/models/spree/gateway/bogus_simple.rb +20 -0
- data/spec/models/spree/gateway/bogus_spec.rb +13 -0
- data/spec/models/spree/gateway_spec.rb +61 -0
- data/spec/models/spree/image_spec.rb +8 -0
- data/spec/models/spree/inventory_unit_spec.rb +256 -0
- data/spec/models/spree/line_item_spec.rb +348 -0
- data/spec/models/spree/option_type_prototype_spec.rb +9 -0
- data/spec/models/spree/option_type_spec.rb +14 -0
- data/spec/models/spree/option_value_spec.rb +18 -0
- data/spec/models/spree/order/address_spec.rb +50 -0
- data/spec/models/spree/order/adjustments_spec.rb +29 -0
- data/spec/models/spree/order/callbacks_spec.rb +42 -0
- data/spec/models/spree/order/checkout_spec.rb +770 -0
- data/spec/models/spree/order/currency_updater_spec.rb +32 -0
- data/spec/models/spree/order/finalizing_spec.rb +114 -0
- data/spec/models/spree/order/helpers_spec.rb +5 -0
- data/spec/models/spree/order/payment_spec.rb +214 -0
- data/spec/models/spree/order/risk_assessment_spec.rb +84 -0
- data/spec/models/spree/order/shipments_spec.rb +43 -0
- data/spec/models/spree/order/state_machine_spec.rb +212 -0
- data/spec/models/spree/order/store_credit_spec.rb +457 -0
- data/spec/models/spree/order/tax_spec.rb +84 -0
- data/spec/models/spree/order/totals_spec.rb +24 -0
- data/spec/models/spree/order/updating_spec.rb +18 -0
- data/spec/models/spree/order/validations_spec.rb +15 -0
- data/spec/models/spree/order_contents_spec.rb +332 -0
- data/spec/models/spree/order_inventory_spec.rb +247 -0
- data/spec/models/spree/order_merger_spec.rb +135 -0
- data/spec/models/spree/order_spec.rb +1067 -0
- data/spec/models/spree/order_updater_spec.rb +305 -0
- data/spec/models/spree/payment/gateway_options_spec.rb +127 -0
- data/spec/models/spree/payment/store_credit_spec.rb +60 -0
- data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
- data/spec/models/spree/payment_method_spec.rb +108 -0
- data/spec/models/spree/payment_spec.rb +922 -0
- data/spec/models/spree/preference_spec.rb +80 -0
- data/spec/models/spree/preferences/configuration_spec.rb +30 -0
- data/spec/models/spree/preferences/preferable_spec.rb +344 -0
- data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
- data/spec/models/spree/preferences/store_spec.rb +46 -0
- data/spec/models/spree/price_spec.rb +128 -0
- data/spec/models/spree/product/scopes_spec.rb +174 -0
- data/spec/models/spree/product_duplicator_spec.rb +102 -0
- data/spec/models/spree/product_filter_spec.rb +26 -0
- data/spec/models/spree/product_option_type_spec.rb +9 -0
- data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
- data/spec/models/spree/product_property_spec.rb +26 -0
- data/spec/models/spree/product_spec.rb +626 -0
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +113 -0
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +148 -0
- data/spec/models/spree/promotion/actions/create_line_items_spec.rb +86 -0
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +36 -0
- data/spec/models/spree/promotion/rules/country_spec.rb +36 -0
- data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
- data/spec/models/spree/promotion/rules/item_total_spec.rb +282 -0
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
- data/spec/models/spree/promotion/rules/option_value_spec.rb +90 -0
- data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
- data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
- data/spec/models/spree/promotion/rules/user_spec.rb +45 -0
- data/spec/models/spree/promotion_action_spec.rb +10 -0
- data/spec/models/spree/promotion_category_spec.rb +17 -0
- data/spec/models/spree/promotion_handler/cart_spec.rb +102 -0
- data/spec/models/spree/promotion_handler/coupon_spec.rb +323 -0
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +48 -0
- data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
- data/spec/models/spree/promotion_rule_spec.rb +29 -0
- data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
- data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
- data/spec/models/spree/promotion_spec.rb +674 -0
- data/spec/models/spree/property_prototype_spec.rb +9 -0
- data/spec/models/spree/property_spec.rb +5 -0
- data/spec/models/spree/prototype_spec.rb +5 -0
- data/spec/models/spree/prototype_taxon_spec.rb +9 -0
- data/spec/models/spree/refund_reason_spec.rb +20 -0
- data/spec/models/spree/refund_spec.rb +195 -0
- data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
- data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
- data/spec/models/spree/reimbursement_spec.rb +188 -0
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +63 -0
- data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +55 -0
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
- data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
- data/spec/models/spree/return_authorization_spec.rb +230 -0
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +61 -0
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
- data/spec/models/spree/return_item_spec.rb +734 -0
- data/spec/models/spree/returns_calculator_spec.rb +14 -0
- data/spec/models/spree/role_spec.rb +7 -0
- data/spec/models/spree/shipment_spec.rb +744 -0
- data/spec/models/spree/shipping_calculator_spec.rb +45 -0
- data/spec/models/spree/shipping_category_spec.rb +19 -0
- data/spec/models/spree/shipping_method_spec.rb +125 -0
- data/spec/models/spree/shipping_rate_spec.rb +140 -0
- data/spec/models/spree/state_spec.rb +29 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +42 -0
- data/spec/models/spree/stock/content_item_spec.rb +31 -0
- data/spec/models/spree/stock/coordinator_spec.rb +61 -0
- data/spec/models/spree/stock/differentiator_spec.rb +39 -0
- data/spec/models/spree/stock/estimator_spec.rb +202 -0
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +37 -0
- data/spec/models/spree/stock/package_spec.rb +182 -0
- data/spec/models/spree/stock/packer_spec.rb +70 -0
- data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
- data/spec/models/spree/stock/quantifier_spec.rb +126 -0
- data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
- data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +47 -0
- data/spec/models/spree/stock/splitter/weight_spec.rb +32 -0
- data/spec/models/spree/stock_item_spec.rb +465 -0
- data/spec/models/spree/stock_location_spec.rb +243 -0
- data/spec/models/spree/stock_movement_spec.rb +120 -0
- data/spec/models/spree/stock_transfer_spec.rb +50 -0
- data/spec/models/spree/store_credit_event_spec.rb +101 -0
- data/spec/models/spree/store_credit_spec.rb +798 -0
- data/spec/models/spree/store_spec.rb +78 -0
- data/spec/models/spree/tax_category_spec.rb +32 -0
- data/spec/models/spree/tax_rate_spec.rb +561 -0
- data/spec/models/spree/taxon_spec.rb +93 -0
- data/spec/models/spree/taxonomy_spec.rb +18 -0
- data/spec/models/spree/tracker_spec.rb +21 -0
- data/spec/models/spree/user_spec.rb +203 -0
- data/spec/models/spree/variant_spec.rb +818 -0
- data/spec/models/spree/zone_member_spec.rb +38 -0
- data/spec/models/spree/zone_spec.rb +472 -0
- data/spec/spec_helper.rb +82 -0
- data/spec/support/big_decimal.rb +5 -0
- data/spec/support/concerns/adjustment_source.rb +23 -0
- data/spec/support/concerns/default_price.rb +37 -0
- data/spec/support/rake.rb +13 -0
- data/spec/support/test_gateway.rb +2 -0
- data/spree_core.gemspec +13 -13
- metadata +252 -45
- data/app/models/concerns/spree/user_api_authentication.rb +0 -19
- data/app/models/spree/calculator/free_shipping.rb +0 -23
- data/config/initializers/premailer_rails.rb +0 -3
- data/config/initializers/user_class_extensions.rb +0 -10
- data/spec/fixtures/microdata.html +0 -22
- data/spec/fixtures/microdata_itemref.html +0 -15
- data/spec/fixtures/microdata_no_itemscope.html +0 -20
@@ -13,7 +13,7 @@ module Spree
|
|
13
13
|
has_many :prototypes, through: :option_type_prototypes, class_name: 'Spree::Prototype'
|
14
14
|
|
15
15
|
with_options presence: true do
|
16
|
-
validates :name, uniqueness: { allow_blank: true }
|
16
|
+
validates :name, uniqueness: { case_sensitive: false, allow_blank: true }
|
17
17
|
validates :presentation
|
18
18
|
end
|
19
19
|
|
@@ -4,6 +4,6 @@ module Spree
|
|
4
4
|
belongs_to :prototype, class_name: 'Spree::Prototype'
|
5
5
|
|
6
6
|
validates :prototype, :option_type, presence: true
|
7
|
-
validates :prototype_id, uniqueness: { scope: :option_type_id }
|
7
|
+
validates :prototype_id, uniqueness: { scope: :option_type_id }
|
8
8
|
end
|
9
9
|
end
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
has_many :variants, through: :option_value_variants, class_name: 'Spree::Variant'
|
8
8
|
|
9
9
|
with_options presence: true do
|
10
|
-
validates :name, uniqueness: { scope: :option_type_id
|
10
|
+
validates :name, uniqueness: { scope: :option_type_id }
|
11
11
|
validates :presentation
|
12
12
|
end
|
13
13
|
|
@@ -2,5 +2,8 @@ module Spree
|
|
2
2
|
class OptionValueVariant < Spree::Base
|
3
3
|
belongs_to :option_value, class_name: 'Spree::OptionValue'
|
4
4
|
belongs_to :variant, class_name: 'Spree::Variant'
|
5
|
+
|
6
|
+
validates :option_value, :variant, presence: true
|
7
|
+
validates :option_value_id, uniqueness: { scope: :variant_id }
|
5
8
|
end
|
6
9
|
end
|
data/app/models/spree/order.rb
CHANGED
@@ -6,15 +6,14 @@ module Spree
|
|
6
6
|
PAYMENT_STATES = %w(balance_due credit_owed failed paid void)
|
7
7
|
SHIPMENT_STATES = %w(backorder canceled partial pending ready shipped)
|
8
8
|
|
9
|
-
extend FriendlyId
|
10
|
-
friendly_id :number, slug_column: :number, use: :slugged
|
11
|
-
|
12
9
|
include Spree::Order::Checkout
|
13
10
|
include Spree::Order::CurrencyUpdater
|
14
11
|
include Spree::Order::Payments
|
15
12
|
include Spree::Order::StoreCredit
|
16
13
|
include Spree::Core::NumberGenerator.new(prefix: 'R')
|
17
14
|
include Spree::Core::TokenGenerator
|
15
|
+
|
16
|
+
include NumberAsParam
|
18
17
|
|
19
18
|
extend Spree::DisplayMoney
|
20
19
|
money_methods :outstanding_balance, :item_total, :adjustment_total,
|
@@ -46,7 +45,7 @@ module Spree
|
|
46
45
|
checkout_flow do
|
47
46
|
go_to_state :address
|
48
47
|
go_to_state :delivery
|
49
|
-
go_to_state :payment, if: ->(order) { order.payment_required? }
|
48
|
+
go_to_state :payment, if: ->(order) { order.payment? || order.payment_required? }
|
50
49
|
go_to_state :confirm, if: ->(order) { order.confirmation_required? }
|
51
50
|
go_to_state :complete
|
52
51
|
remove_transition from: :delivery, to: :confirm
|
@@ -59,21 +58,23 @@ module Spree
|
|
59
58
|
attr_accessor :temporary_address, :temporary_credit_card
|
60
59
|
|
61
60
|
if Spree.user_class
|
62
|
-
belongs_to :user, class_name: Spree.user_class.to_s
|
63
|
-
belongs_to :created_by, class_name: Spree.user_class.to_s
|
64
|
-
belongs_to :approver, class_name: Spree.user_class.to_s
|
65
|
-
belongs_to :canceler, class_name: Spree.user_class.to_s
|
61
|
+
belongs_to :user, class_name: Spree.user_class.to_s, optional: true
|
62
|
+
belongs_to :created_by, class_name: Spree.user_class.to_s, optional: true
|
63
|
+
belongs_to :approver, class_name: Spree.user_class.to_s, optional: true
|
64
|
+
belongs_to :canceler, class_name: Spree.user_class.to_s, optional: true
|
66
65
|
else
|
67
|
-
belongs_to :user
|
68
|
-
belongs_to :created_by
|
69
|
-
belongs_to :approver
|
70
|
-
belongs_to :canceler
|
66
|
+
belongs_to :user, optional: true
|
67
|
+
belongs_to :created_by, optional: true
|
68
|
+
belongs_to :approver, optional: true
|
69
|
+
belongs_to :canceler, optional: true
|
71
70
|
end
|
72
71
|
|
73
|
-
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address'
|
72
|
+
belongs_to :bill_address, foreign_key: :bill_address_id, class_name: 'Spree::Address',
|
73
|
+
optional: true
|
74
74
|
alias_attribute :billing_address, :bill_address
|
75
75
|
|
76
|
-
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address'
|
76
|
+
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address',
|
77
|
+
optional: true
|
77
78
|
alias_attribute :shipping_address, :ship_address
|
78
79
|
|
79
80
|
belongs_to :store, class_name: 'Spree::Store'
|
@@ -87,10 +88,9 @@ module Spree
|
|
87
88
|
end
|
88
89
|
has_many :reimbursements, inverse_of: :order
|
89
90
|
has_many :line_item_adjustments, through: :line_items, source: :adjustments
|
90
|
-
has_many :shipment_adjustments, through: :shipments, source: :adjustments
|
91
91
|
has_many :inventory_units, inverse_of: :order
|
92
|
-
has_many :products, through: :variants
|
93
92
|
has_many :variants, through: :line_items
|
93
|
+
has_many :products, through: :variants
|
94
94
|
has_many :refunds, through: :payments
|
95
95
|
has_many :all_adjustments,
|
96
96
|
class_name: 'Spree::Adjustment',
|
@@ -106,11 +106,12 @@ module Spree
|
|
106
106
|
pluck(:state).uniq
|
107
107
|
end
|
108
108
|
end
|
109
|
+
has_many :shipment_adjustments, through: :shipments, source: :adjustments
|
109
110
|
|
110
111
|
accepts_nested_attributes_for :line_items
|
111
112
|
accepts_nested_attributes_for :bill_address
|
112
113
|
accepts_nested_attributes_for :ship_address
|
113
|
-
accepts_nested_attributes_for :payments
|
114
|
+
accepts_nested_attributes_for :payments, reject_if: :credit_card_nil_payment?
|
114
115
|
accepts_nested_attributes_for :shipments
|
115
116
|
|
116
117
|
# Needs to happen before save_permalink is called
|
@@ -159,13 +160,13 @@ module Spree
|
|
159
160
|
# Use this method in other gems that wish to register their own custom logic
|
160
161
|
# that should be called after Order#update
|
161
162
|
def self.register_update_hook(hook)
|
162
|
-
|
163
|
+
update_hooks.add(hook)
|
163
164
|
end
|
164
165
|
|
165
166
|
# Use this method in other gems that wish to register their own custom logic
|
166
167
|
# that should be called when determining if two line items are equal.
|
167
168
|
def self.register_line_item_comparison_hook(hook)
|
168
|
-
|
169
|
+
line_item_comparison_hooks.add(hook)
|
169
170
|
end
|
170
171
|
|
171
172
|
# For compatiblity with Calculator::PriceSack
|
@@ -241,10 +242,10 @@ module Spree
|
|
241
242
|
end
|
242
243
|
|
243
244
|
def clone_billing_address
|
244
|
-
if bill_address
|
245
|
+
if bill_address && ship_address.nil?
|
245
246
|
self.ship_address = bill_address.clone
|
246
247
|
else
|
247
|
-
|
248
|
+
ship_address.attributes = bill_address.attributes.except('id', 'updated_at', 'created_at')
|
248
249
|
end
|
249
250
|
true
|
250
251
|
end
|
@@ -255,7 +256,7 @@ module Spree
|
|
255
256
|
end
|
256
257
|
|
257
258
|
def all_inventory_units_returned?
|
258
|
-
inventory_units.all?
|
259
|
+
inventory_units.all?(&:returned?)
|
259
260
|
end
|
260
261
|
|
261
262
|
def contents
|
@@ -267,8 +268,8 @@ module Spree
|
|
267
268
|
self.user = user
|
268
269
|
self.email = user.email if override_email
|
269
270
|
self.created_by ||= user
|
270
|
-
self.bill_address ||= user.bill_address
|
271
|
-
self.ship_address ||= user.ship_address
|
271
|
+
self.bill_address ||= user.bill_address
|
272
|
+
self.ship_address ||= user.ship_address
|
272
273
|
|
273
274
|
changes = slice(:user_id, :email, :created_by_id, :bill_address_id, :ship_address_id)
|
274
275
|
|
@@ -283,10 +284,10 @@ module Spree
|
|
283
284
|
end
|
284
285
|
|
285
286
|
def find_line_item_by_variant(variant, options = {})
|
286
|
-
line_items.detect
|
287
|
-
|
288
|
-
|
289
|
-
|
287
|
+
line_items.detect do |line_item|
|
288
|
+
line_item.variant_id == variant.id &&
|
289
|
+
line_item_options_match(line_item, options)
|
290
|
+
end
|
290
291
|
end
|
291
292
|
|
292
293
|
# This method enables extensions to participate in the
|
@@ -301,9 +302,9 @@ module Spree
|
|
301
302
|
def line_item_options_match(line_item, options)
|
302
303
|
return true unless options
|
303
304
|
|
304
|
-
|
305
|
-
|
306
|
-
|
305
|
+
line_item_comparison_hooks.all? do |hook|
|
306
|
+
send(hook, line_item, options)
|
307
|
+
end
|
307
308
|
end
|
308
309
|
|
309
310
|
# Creates new tax charges if there are any applicable rates. If prices already
|
@@ -323,17 +324,20 @@ module Spree
|
|
323
324
|
def outstanding_balance
|
324
325
|
if canceled?
|
325
326
|
-1 * payment_total
|
326
|
-
elsif refunds.
|
327
|
-
|
328
|
-
|
329
|
-
|
327
|
+
elsif !reimbursements.includes(:refunds).empty?
|
328
|
+
reimbursed = reimbursements.includes(:refunds).inject(0) do |sum, reimbursement|
|
329
|
+
sum + reimbursement.refunds.sum(:amount)
|
330
|
+
end
|
331
|
+
# If reimbursement has happened add it back to total to prevent balance_due payment state
|
332
|
+
# See: https://github.com/spree/spree/issues/6229
|
333
|
+
total - (payment_total + reimbursed)
|
330
334
|
else
|
331
335
|
total - payment_total
|
332
336
|
end
|
333
337
|
end
|
334
338
|
|
335
339
|
def outstanding_balance?
|
336
|
-
|
340
|
+
outstanding_balance != 0
|
337
341
|
end
|
338
342
|
|
339
343
|
def name
|
@@ -343,7 +347,7 @@ module Spree
|
|
343
347
|
end
|
344
348
|
|
345
349
|
def can_ship?
|
346
|
-
|
350
|
+
complete? || resumed? || awaiting_return? || returned?
|
347
351
|
end
|
348
352
|
|
349
353
|
def credit_cards
|
@@ -360,7 +364,7 @@ module Spree
|
|
360
364
|
# Called after transition to complete state when payments will have been processed
|
361
365
|
def finalize!
|
362
366
|
# lock all adjustments (coupon promotions, etc.)
|
363
|
-
all_adjustments.each
|
367
|
+
all_adjustments.each(&:close)
|
364
368
|
|
365
369
|
# update payment and shipment(s) states, and save
|
366
370
|
updater.update_payment_state
|
@@ -408,7 +412,7 @@ module Spree
|
|
408
412
|
# Check to see if any line item variants are discontinued.
|
409
413
|
# If so add error and restart checkout.
|
410
414
|
def ensure_line_item_variants_are_not_discontinued
|
411
|
-
if line_items.any?{ |li| !li.variant || li.variant.discontinued? }
|
415
|
+
if line_items.any? { |li| !li.variant || li.variant.discontinued? }
|
412
416
|
restart_checkout_flow
|
413
417
|
errors.add(:base, Spree.t(:discontinued_variants_present))
|
414
418
|
false
|
@@ -452,21 +456,25 @@ module Spree
|
|
452
456
|
def state_changed(name)
|
453
457
|
state = "#{name}_state"
|
454
458
|
if persisted?
|
455
|
-
old_state =
|
456
|
-
new_state =
|
459
|
+
old_state = send("#{state}_was")
|
460
|
+
new_state = send(state)
|
457
461
|
unless old_state == new_state
|
458
|
-
|
462
|
+
state_changes.create(
|
459
463
|
previous_state: old_state,
|
460
464
|
next_state: new_state,
|
461
465
|
name: name,
|
462
|
-
user_id:
|
466
|
+
user_id: user_id
|
463
467
|
)
|
464
468
|
end
|
465
469
|
end
|
466
470
|
end
|
467
471
|
|
468
472
|
def coupon_code=(code)
|
469
|
-
@coupon_code =
|
473
|
+
@coupon_code = begin
|
474
|
+
code.strip.downcase
|
475
|
+
rescue
|
476
|
+
nil
|
477
|
+
end
|
470
478
|
end
|
471
479
|
|
472
480
|
def can_add_coupon?
|
@@ -479,7 +487,12 @@ module Spree
|
|
479
487
|
|
480
488
|
def create_proposed_shipments
|
481
489
|
all_adjustments.shipping.delete_all
|
482
|
-
|
490
|
+
|
491
|
+
shipment_ids = shipments.map(&:id)
|
492
|
+
StateChange.where(stateful_type: "Spree::Shipment", stateful_id: shipment_ids).delete_all
|
493
|
+
ShippingRate.where(shipment_id: shipment_ids).delete_all
|
494
|
+
|
495
|
+
shipments.delete_all
|
483
496
|
|
484
497
|
# Inventory Units which are not associated to any shipment (unshippable)
|
485
498
|
# and are not returned or shipped should be deleted
|
@@ -501,19 +514,19 @@ module Spree
|
|
501
514
|
# to delivery again so that proper updated shipments are created.
|
502
515
|
# e.g. customer goes back from payment step and changes order items
|
503
516
|
def ensure_updated_shipments
|
504
|
-
if shipments.any? && !
|
505
|
-
|
506
|
-
|
517
|
+
if shipments.any? && !completed?
|
518
|
+
shipments.destroy_all
|
519
|
+
update_column(:shipment_total, 0)
|
507
520
|
restart_checkout_flow
|
508
521
|
end
|
509
522
|
end
|
510
523
|
|
511
524
|
def restart_checkout_flow
|
512
|
-
|
525
|
+
update_columns(
|
513
526
|
state: 'cart',
|
514
527
|
updated_at: Time.current,
|
515
528
|
)
|
516
|
-
|
529
|
+
next! if !line_items.empty?
|
517
530
|
end
|
518
531
|
|
519
532
|
def refresh_shipment_rates(shipping_method_filter = ShippingMethod::DISPLAY_ON_FRONT_END)
|
@@ -531,13 +544,13 @@ module Spree
|
|
531
544
|
end
|
532
545
|
|
533
546
|
def is_risky?
|
534
|
-
payments.risky.
|
547
|
+
!payments.risky.empty?
|
535
548
|
end
|
536
549
|
|
537
550
|
def canceled_by(user)
|
538
|
-
|
551
|
+
transaction do
|
539
552
|
cancel!
|
540
|
-
|
553
|
+
update_columns(
|
541
554
|
canceler_id: user.id,
|
542
555
|
canceled_at: Time.current,
|
543
556
|
)
|
@@ -545,9 +558,9 @@ module Spree
|
|
545
558
|
end
|
546
559
|
|
547
560
|
def approved_by(user)
|
548
|
-
|
561
|
+
transaction do
|
549
562
|
approve!
|
550
|
-
|
563
|
+
update_columns(
|
551
564
|
approver_id: user.id,
|
552
565
|
approved_at: Time.current,
|
553
566
|
)
|
@@ -555,7 +568,7 @@ module Spree
|
|
555
568
|
end
|
556
569
|
|
557
570
|
def approved?
|
558
|
-
!!
|
571
|
+
!!approved_at
|
559
572
|
end
|
560
573
|
|
561
574
|
def can_approve?
|
@@ -576,7 +589,7 @@ module Spree
|
|
576
589
|
update_column(:considered_risky, false)
|
577
590
|
end
|
578
591
|
|
579
|
-
def reload(options=nil)
|
592
|
+
def reload(options = nil)
|
580
593
|
remove_instance_variable(:@tax_zone) if defined?(@tax_zone)
|
581
594
|
super
|
582
595
|
end
|
@@ -604,36 +617,20 @@ module Spree
|
|
604
617
|
end
|
605
618
|
alias_method :fully_discounted, :fully_discounted?
|
606
619
|
|
607
|
-
def payments_attributes=(attributes)
|
608
|
-
validate_payments_attributes(attributes)
|
609
|
-
super(attributes)
|
610
|
-
end
|
611
|
-
|
612
|
-
def validate_payments_attributes(attributes)
|
613
|
-
# Ensure the payment methods specified are allowed for this user
|
614
|
-
payment_methods = Spree::PaymentMethod.where(id: available_payment_methods.map(&:id))
|
615
|
-
attributes.each do |payment_attributes|
|
616
|
-
payment_method_id = payment_attributes[:payment_method_id]
|
617
|
-
|
618
|
-
# raise RecordNotFound unless it is an allowed payment method
|
619
|
-
payment_methods.find(payment_method_id) if payment_method_id
|
620
|
-
end
|
621
|
-
end
|
622
|
-
|
623
620
|
private
|
624
621
|
|
625
622
|
def link_by_email
|
626
|
-
self.email = user.email if
|
623
|
+
self.email = user.email if user
|
627
624
|
end
|
628
625
|
|
629
626
|
# Determine if email is required (we don't want validation errors before we hit the checkout)
|
630
627
|
def require_email
|
631
|
-
true unless new_record?
|
628
|
+
true unless new_record? || ['cart', 'address'].include?(state)
|
632
629
|
end
|
633
630
|
|
634
631
|
def ensure_line_items_present
|
635
632
|
unless line_items.present?
|
636
|
-
errors.add(:base, Spree.t(:there_are_no_items_for_this_order))
|
633
|
+
errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) && (return false)
|
637
634
|
end
|
638
635
|
end
|
639
636
|
|
@@ -642,19 +639,19 @@ module Spree
|
|
642
639
|
# After this point, order redirects back to 'address' state and asks user to pick a proper address
|
643
640
|
# Therefore, shipments are not necessary at this point.
|
644
641
|
shipments.destroy_all
|
645
|
-
errors.add(:base, Spree.t(:items_cannot_be_shipped))
|
642
|
+
errors.add(:base, Spree.t(:items_cannot_be_shipped)) && (return false)
|
646
643
|
end
|
647
644
|
end
|
648
645
|
|
649
646
|
def after_cancel
|
650
|
-
shipments.each
|
651
|
-
payments.completed.each
|
647
|
+
shipments.each(&:cancel!)
|
648
|
+
payments.completed.each(&:cancel!)
|
652
649
|
|
653
650
|
# Free up authorized store credits
|
654
651
|
payments.store_credits.pending.each(&:void!)
|
655
652
|
|
656
653
|
send_cancel_email
|
657
|
-
|
654
|
+
update_with_updater!
|
658
655
|
end
|
659
656
|
|
660
657
|
def send_cancel_email
|
@@ -662,7 +659,7 @@ module Spree
|
|
662
659
|
end
|
663
660
|
|
664
661
|
def after_resume
|
665
|
-
shipments.each
|
662
|
+
shipments.each(&:resume!)
|
666
663
|
consider_risk
|
667
664
|
end
|
668
665
|
|
@@ -681,5 +678,9 @@ module Spree
|
|
681
678
|
def collect_payment_methods
|
682
679
|
PaymentMethod.available_on_front_end.select { |pm| pm.available_for_order?(self) }
|
683
680
|
end
|
681
|
+
|
682
|
+
def credit_card_nil_payment?(attributes)
|
683
|
+
payments.store_credits.present? && attributes[:amount].to_f.zero?
|
684
|
+
end
|
684
685
|
end
|
685
686
|
end
|
@@ -15,12 +15,9 @@ module Spree
|
|
15
15
|
self.removed_transitions ||= []
|
16
16
|
|
17
17
|
def self.checkout_flow(&block)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
else
|
22
|
-
@checkout_flow
|
23
|
-
end
|
18
|
+
return @checkout_flow unless block_given?
|
19
|
+
@checkout_flow = block
|
20
|
+
define_state_machine!
|
24
21
|
end
|
25
22
|
|
26
23
|
def self.define_state_machine!
|
@@ -46,7 +43,6 @@ module Spree
|
|
46
43
|
|
47
44
|
# Persist the state on the order
|
48
45
|
after_transition do |order, transition|
|
49
|
-
order.state = order.state
|
50
46
|
order.state_changes.create(
|
51
47
|
previous_state: transition.from,
|
52
48
|
next_state: transition.to,
|
@@ -62,7 +58,7 @@ module Spree
|
|
62
58
|
|
63
59
|
event :return do
|
64
60
|
transition to: :returned,
|
65
|
-
from: [:complete, :awaiting_return, :canceled, :
|
61
|
+
from: [:complete, :awaiting_return, :canceled, :resumed],
|
66
62
|
if: :all_inventory_units_returned?
|
67
63
|
end
|
68
64
|
|
@@ -125,14 +121,9 @@ module Spree
|
|
125
121
|
|
126
122
|
def self.go_to_state(name, options = {})
|
127
123
|
self.checkout_steps[name] = options
|
128
|
-
previous_states.each
|
129
|
-
|
130
|
-
|
131
|
-
if options[:if]
|
132
|
-
previous_states << name
|
133
|
-
else
|
134
|
-
self.previous_states = [name]
|
135
|
-
end
|
124
|
+
self.previous_states.each { |state| add_transition({ from: state, to: name }.merge(options)) }
|
125
|
+
return self.previous_states << name if options[:if]
|
126
|
+
self.previous_states = [name]
|
136
127
|
end
|
137
128
|
|
138
129
|
def self.insert_checkout_step(name, options = {})
|
@@ -226,7 +217,11 @@ module Spree
|
|
226
217
|
# rails would slice parameters containg ruby objects, apparently
|
227
218
|
existing_card_id = @updating_params[:order] ? @updating_params[:order].delete(:existing_card) : nil
|
228
219
|
|
229
|
-
attributes =
|
220
|
+
attributes = if @updating_params[:order]
|
221
|
+
@updating_params[:order].permit(permitted_params).delete_if { |_k, v| v.nil? }
|
222
|
+
else
|
223
|
+
{}
|
224
|
+
end
|
230
225
|
|
231
226
|
if existing_card_id.present?
|
232
227
|
credit_card = CreditCard.find existing_card_id
|
@@ -263,34 +258,29 @@ module Spree
|
|
263
258
|
end
|
264
259
|
|
265
260
|
def clone_billing
|
266
|
-
|
267
|
-
|
268
|
-
end
|
261
|
+
return unless !bill_address_id && user.bill_address.try(:valid?)
|
262
|
+
self.bill_address = user.bill_address.try(:clone)
|
269
263
|
end
|
270
264
|
|
271
265
|
def clone_shipping
|
272
|
-
|
273
|
-
|
274
|
-
end
|
266
|
+
return unless !ship_address_id && user.ship_address.try(:valid?)
|
267
|
+
self.ship_address = user.ship_address.try(:clone)
|
275
268
|
end
|
276
269
|
|
277
270
|
def persist_user_address!
|
278
|
-
|
279
|
-
|
280
|
-
end
|
271
|
+
return unless !temporary_address && user && user.respond_to?(:persist_order_address) && bill_address_id
|
272
|
+
user.persist_order_address(self)
|
281
273
|
end
|
282
274
|
|
283
275
|
def persist_user_credit_card
|
284
|
-
|
285
|
-
|
286
|
-
end
|
276
|
+
return unless !temporary_credit_card && user_id && valid_credit_cards.present?
|
277
|
+
valid_credit_cards.first.update(user_id: user_id, default: true)
|
287
278
|
end
|
288
279
|
|
289
280
|
def assign_default_credit_card
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
end
|
281
|
+
return unless payments.from_credit_card.size.empty? && user_has_valid_default_card? && payment_required?
|
282
|
+
cc = user.default_credit_card
|
283
|
+
payments.create!(payment_method_id: cc.payment_method_id, source: cc, amount: total)
|
294
284
|
end
|
295
285
|
|
296
286
|
def user_has_valid_default_card?
|