goca-spree-core 3.1.14.rails.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/LICENSE +26 -0
- data/Rakefile +15 -0
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/assets/images/noimage/large.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/product.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/assets/javascripts/spree.js.coffee.erb +59 -0
- data/app/controllers/spree/base_controller.rb +15 -0
- data/app/helpers/spree/base_helper.rb +123 -0
- data/app/helpers/spree/products_helper.rb +91 -0
- data/app/mailers/spree/base_mailer.rb +27 -0
- data/app/mailers/spree/order_mailer.rb +17 -0
- data/app/mailers/spree/reimbursement_mailer.rb +10 -0
- data/app/mailers/spree/shipment_mailer.rb +10 -0
- data/app/mailers/spree/test_mailer.rb +8 -0
- data/app/models/concerns/spree/adjustment_source.rb +53 -0
- data/app/models/concerns/spree/calculated_adjustments.rb +34 -0
- data/app/models/concerns/spree/default_price.rb +40 -0
- data/app/models/concerns/spree/display_money.rb +32 -0
- data/app/models/concerns/spree/named_type.rb +12 -0
- data/app/models/concerns/spree/ransackable_attributes.rb +24 -0
- data/app/models/concerns/spree/user_address.rb +30 -0
- data/app/models/concerns/spree/user_api_authentication.rb +19 -0
- data/app/models/concerns/spree/user_methods.rb +57 -0
- data/app/models/concerns/spree/user_payment_source.rb +19 -0
- data/app/models/concerns/spree/user_reporting.rb +22 -0
- data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
- data/app/models/friendly_id/slug_decorator.rb +3 -0
- data/app/models/spree/ability.rb +80 -0
- data/app/models/spree/address.rb +145 -0
- data/app/models/spree/adjustable/adjuster/base.rb +25 -0
- data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
- data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
- data/app/models/spree/adjustable/adjustments_updater.rb +47 -0
- data/app/models/spree/adjustable/promotion_accumulator.rb +75 -0
- data/app/models/spree/adjustment.rb +104 -0
- data/app/models/spree/app_configuration.rb +74 -0
- data/app/models/spree/asset.rb +6 -0
- data/app/models/spree/base.rb +24 -0
- data/app/models/spree/calculator/default_tax.rb +59 -0
- data/app/models/spree/calculator/flat_percent_item_total.rb +22 -0
- data/app/models/spree/calculator/flat_rate.rb +20 -0
- data/app/models/spree/calculator/flexi_rate.rb +33 -0
- data/app/models/spree/calculator/free_shipping.rb +22 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +15 -0
- data/app/models/spree/calculator/percent_per_item.rb +50 -0
- data/app/models/spree/calculator/price_sack.rb +29 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +36 -0
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +22 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +18 -0
- data/app/models/spree/calculator/shipping/flexi_rate.rb +35 -0
- data/app/models/spree/calculator/shipping/per_item.rb +22 -0
- data/app/models/spree/calculator/shipping/price_sack.rb +28 -0
- data/app/models/spree/calculator/tiered_flat_rate.rb +37 -0
- data/app/models/spree/calculator/tiered_percent.rb +44 -0
- data/app/models/spree/calculator.rb +47 -0
- data/app/models/spree/classification.rb +15 -0
- data/app/models/spree/country.rb +40 -0
- data/app/models/spree/credit_card.rb +166 -0
- data/app/models/spree/customer_return.rb +67 -0
- data/app/models/spree/exchange.rb +46 -0
- data/app/models/spree/gateway/bogus.rb +91 -0
- data/app/models/spree/gateway/bogus_simple.rb +26 -0
- data/app/models/spree/gateway.rb +80 -0
- data/app/models/spree/image.rb +43 -0
- data/app/models/spree/inventory_unit.rb +105 -0
- data/app/models/spree/legacy_user.rb +13 -0
- data/app/models/spree/line_item.rb +158 -0
- data/app/models/spree/log_entry.rb +17 -0
- data/app/models/spree/option_type.rb +32 -0
- data/app/models/spree/option_type_prototype.rb +9 -0
- data/app/models/spree/option_value.rb +26 -0
- data/app/models/spree/option_value_variant.rb +6 -0
- data/app/models/spree/order/checkout.rb +336 -0
- data/app/models/spree/order/currency_updater.rb +40 -0
- data/app/models/spree/order/payments.rb +66 -0
- data/app/models/spree/order/store_credit.rb +96 -0
- data/app/models/spree/order.rb +685 -0
- data/app/models/spree/order_contents.rb +120 -0
- data/app/models/spree/order_inventory.rb +103 -0
- data/app/models/spree/order_merger.rb +65 -0
- data/app/models/spree/order_promotion.rb +6 -0
- data/app/models/spree/order_updater.rb +177 -0
- data/app/models/spree/payment/gateway_options.rb +90 -0
- data/app/models/spree/payment/processing.rb +175 -0
- data/app/models/spree/payment.rb +276 -0
- data/app/models/spree/payment_capture_event.rb +9 -0
- data/app/models/spree/payment_method/check.rb +43 -0
- data/app/models/spree/payment_method/store_credit.rb +130 -0
- data/app/models/spree/payment_method.rb +71 -0
- data/app/models/spree/preference.rb +5 -0
- data/app/models/spree/preferences/configuration.rb +71 -0
- data/app/models/spree/preferences/preferable.rb +133 -0
- data/app/models/spree/preferences/preferable_class_methods.rb +51 -0
- data/app/models/spree/preferences/scoped_store.rb +33 -0
- data/app/models/spree/preferences/store.rb +98 -0
- data/app/models/spree/price.rb +53 -0
- data/app/models/spree/product/scopes.rb +271 -0
- data/app/models/spree/product.rb +384 -0
- data/app/models/spree/product_option_type.rb +12 -0
- data/app/models/spree/product_promotion_rule.rb +9 -0
- data/app/models/spree/product_property.rb +28 -0
- data/app/models/spree/promotion/actions/create_adjustment.rb +21 -0
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +24 -0
- data/app/models/spree/promotion/actions/create_line_items.rb +62 -0
- data/app/models/spree/promotion/actions/free_shipping.rb +18 -0
- data/app/models/spree/promotion/rules/first_order.rb +37 -0
- data/app/models/spree/promotion/rules/item_total.rb +61 -0
- data/app/models/spree/promotion/rules/one_use_per_user.rb +24 -0
- data/app/models/spree/promotion/rules/option_value.rb +50 -0
- data/app/models/spree/promotion/rules/product.rb +65 -0
- data/app/models/spree/promotion/rules/taxon.rb +70 -0
- data/app/models/spree/promotion/rules/user.rb +30 -0
- data/app/models/spree/promotion/rules/user_logged_in.rb +18 -0
- data/app/models/spree/promotion.rb +198 -0
- data/app/models/spree/promotion_action.rb +25 -0
- data/app/models/spree/promotion_action_line_item.rb +6 -0
- data/app/models/spree/promotion_category.rb +6 -0
- data/app/models/spree/promotion_handler/cart.rb +51 -0
- data/app/models/spree/promotion_handler/coupon.rb +107 -0
- data/app/models/spree/promotion_handler/free_shipping.rb +33 -0
- data/app/models/spree/promotion_handler/page.rb +24 -0
- data/app/models/spree/promotion_rule.rb +43 -0
- data/app/models/spree/promotion_rule_taxon.rb +9 -0
- data/app/models/spree/promotion_rule_user.rb +9 -0
- data/app/models/spree/property.rb +23 -0
- data/app/models/spree/property_prototype.rb +9 -0
- data/app/models/spree/prototype.rb +14 -0
- data/app/models/spree/prototype_taxon.rb +9 -0
- data/app/models/spree/refund.rb +89 -0
- data/app/models/spree/refund_reason.rb +13 -0
- data/app/models/spree/reimbursement/credit.rb +25 -0
- data/app/models/spree/reimbursement/reimbursement_type_engine.rb +56 -0
- data/app/models/spree/reimbursement/reimbursement_type_validator.rb +15 -0
- data/app/models/spree/reimbursement.rb +164 -0
- data/app/models/spree/reimbursement_performer.rb +43 -0
- data/app/models/spree/reimbursement_tax_calculator.rb +44 -0
- data/app/models/spree/reimbursement_type/credit.rb +13 -0
- data/app/models/spree/reimbursement_type/exchange.rb +9 -0
- data/app/models/spree/reimbursement_type/original_payment.rb +13 -0
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +67 -0
- data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
- data/app/models/spree/reimbursement_type.rb +16 -0
- data/app/models/spree/return_authorization.rb +98 -0
- data/app/models/spree/return_authorization_reason.rb +7 -0
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +24 -0
- data/app/models/spree/return_item/eligibility_validator/default.rb +30 -0
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +16 -0
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +17 -0
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +16 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +34 -0
- data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +9 -0
- data/app/models/spree/return_item.rb +236 -0
- data/app/models/spree/returns_calculator.rb +8 -0
- data/app/models/spree/role.rb +8 -0
- data/app/models/spree/role_user.rb +6 -0
- data/app/models/spree/shipment.rb +419 -0
- data/app/models/spree/shipment_handler.rb +43 -0
- data/app/models/spree/shipping_calculator.rb +22 -0
- data/app/models/spree/shipping_category.rb +11 -0
- data/app/models/spree/shipping_method.rb +69 -0
- data/app/models/spree/shipping_method_category.rb +6 -0
- data/app/models/spree/shipping_method_zone.rb +6 -0
- data/app/models/spree/shipping_rate.rb +44 -0
- data/app/models/spree/state.rb +41 -0
- data/app/models/spree/state_change.rb +10 -0
- data/app/models/spree/stock/adjuster.rb +27 -0
- data/app/models/spree/stock/availability_validator.rb +30 -0
- data/app/models/spree/stock/content_item.rb +54 -0
- data/app/models/spree/stock/coordinator.rb +65 -0
- data/app/models/spree/stock/differentiator.rb +44 -0
- data/app/models/spree/stock/estimator.rb +70 -0
- data/app/models/spree/stock/inventory_unit_builder.rb +22 -0
- data/app/models/spree/stock/package.rb +104 -0
- data/app/models/spree/stock/packer.rb +48 -0
- data/app/models/spree/stock/prioritizer.rb +47 -0
- data/app/models/spree/stock/quantifier.rb +29 -0
- data/app/models/spree/stock/splitter/backordered.rb +23 -0
- data/app/models/spree/stock/splitter/base.rb +28 -0
- data/app/models/spree/stock/splitter/shipping_category.rb +32 -0
- data/app/models/spree/stock/splitter/weight.rb +34 -0
- data/app/models/spree/stock_item.rb +90 -0
- data/app/models/spree/stock_location.rb +115 -0
- data/app/models/spree/stock_movement.rb +35 -0
- data/app/models/spree/stock_transfer.rb +50 -0
- data/app/models/spree/store.rb +48 -0
- data/app/models/spree/store_credit.rb +252 -0
- data/app/models/spree/store_credit_category.rb +22 -0
- data/app/models/spree/store_credit_event.rb +38 -0
- data/app/models/spree/store_credit_type.rb +6 -0
- data/app/models/spree/tax_category.rb +18 -0
- data/app/models/spree/tax_rate.rb +110 -0
- data/app/models/spree/taxon.rb +102 -0
- data/app/models/spree/taxonomy.rb +24 -0
- data/app/models/spree/tracker.rb +19 -0
- data/app/models/spree/validations/db_maximum_length_validator.rb +23 -0
- data/app/models/spree/variant.rb +312 -0
- data/app/models/spree/zone.rb +190 -0
- data/app/models/spree/zone_member.rb +12 -0
- data/app/validators/db_maximum_length_validator.rb +11 -0
- data/app/views/layouts/spree/base_mailer.html.erb +41 -0
- data/app/views/spree/admin/orders/customer_details/_autocomplete.js.erb +19 -0
- data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
- data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
- data/app/views/spree/order_mailer/_total.html.erb +8 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +30 -0
- data/app/views/spree/order_mailer/cancel_email.text.erb +16 -0
- data/app/views/spree/order_mailer/confirm_email.html.erb +70 -0
- data/app/views/spree/order_mailer/confirm_email.text.erb +38 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +22 -0
- data/app/views/spree/shared/_base_mailer_footer.html.erb +20 -0
- data/app/views/spree/shared/_base_mailer_header.html.erb +29 -0
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
- data/app/views/spree/shared/_error_messages.html.erb +11 -0
- data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +41 -0
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +16 -0
- data/app/views/spree/test_mailer/test_email.html.erb +40 -0
- data/app/views/spree/test_mailer/test_email.text.erb +4 -0
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/friendly_id.rb +88 -0
- data/config/initializers/premailer_assets.rb +1 -0
- data/config/initializers/premailer_rails.rb +3 -0
- data/config/initializers/user_class_extensions.rb +10 -0
- data/config/locales/en.yml +1499 -0
- data/config/routes.rb +8 -0
- data/db/default/spree/countries.rb +29 -0
- data/db/default/spree/default_reimbursement_type.rb +1 -0
- data/db/default/spree/roles.rb +2 -0
- data/db/default/spree/states.rb +28 -0
- data/db/default/spree/stores.rb +9 -0
- data/db/default/spree/zones.rb +11 -0
- data/db/migrate/20120831092320_spree_one_two.rb +481 -0
- data/db/migrate/20120831092359_spree_promo_one_two.rb +45 -0
- data/db/migrate/20120905145253_add_tax_rate_label.rb +5 -0
- data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +5 -0
- data/db/migrate/20120929093553_remove_unused_preference_columns.rb +8 -0
- data/db/migrate/20121009142519_add_lock_version_to_variant.rb +5 -0
- data/db/migrate/20121010142909_add_states_required_to_countries.rb +5 -0
- data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +6 -0
- data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +11 -0
- data/db/migrate/20121031162139_split_prices_from_variants.rb +31 -0
- data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +9 -0
- data/db/migrate/20121107184631_add_currency_to_line_items.rb +5 -0
- data/db/migrate/20121107194006_add_currency_to_orders.rb +5 -0
- data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +5 -0
- data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +5 -0
- data/db/migrate/20121124203911_add_position_to_taxonomies.rb +5 -0
- data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +5 -0
- data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +6 -0
- data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +9 -0
- data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +6 -0
- data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +5 -0
- data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +9 -0
- data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +5 -0
- data/db/migrate/20130211190146_create_spree_stock_items.rb +14 -0
- data/db/migrate/20130211191120_create_spree_stock_locations.rb +11 -0
- data/db/migrate/20130213191427_create_default_stock.rb +33 -0
- data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +5 -0
- data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +5 -0
- data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +5 -0
- data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +6 -0
- data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +6 -0
- data/db/migrate/20130228210442_create_shipping_method_zone.rb +21 -0
- data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +5 -0
- data/db/migrate/20130301162924_create_shipping_method_categories.rb +13 -0
- data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20130304162240_create_spree_shipping_rates.rb +24 -0
- data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +7 -0
- data/db/migrate/20130305143310_create_stock_movements.rb +12 -0
- data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +22 -0
- data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +5 -0
- data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +5 -0
- data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +5 -0
- data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +8 -0
- data/db/migrate/20130319062004_change_orders_total_precision.rb +8 -0
- data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +7 -0
- data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +7 -0
- data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +7 -0
- data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +7 -0
- data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +15 -0
- data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +9 -0
- data/db/migrate/20130326175857_add_stock_location_to_rma.rb +5 -0
- data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +15 -0
- data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +9 -0
- data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +14 -0
- data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +5 -0
- data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +13 -0
- data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +5 -0
- data/db/migrate/20130417120035_update_adjustment_states.rb +16 -0
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +15 -0
- data/db/migrate/20130418125341_create_spree_stock_transfers.rb +14 -0
- data/db/migrate/20130423110707_drop_products_count_on_hand.rb +5 -0
- data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +5 -0
- data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +23 -0
- data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +5 -0
- data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +5 -0
- data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +5 -0
- data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +5 -0
- data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +5 -0
- data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +9 -0
- data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +9 -0
- data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +6 -0
- data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +5 -0
- data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +7 -0
- data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +6 -0
- data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +5 -0
- data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +6 -0
- data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +5 -0
- data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +5 -0
- data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +5 -0
- data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +10 -0
- data/db/migrate/20130806022521_drop_spree_mail_methods.rb +12 -0
- data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +8 -0
- data/db/migrate/20130807024301_upgrade_adjustments.rb +40 -0
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +14 -0
- data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +5 -0
- data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +5 -0
- data/db/migrate/20130813140619_expand_order_number_size.rb +9 -0
- data/db/migrate/20130813232134_rename_activators_to_promotions.rb +5 -0
- data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +5 -0
- data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +5 -0
- data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +16 -0
- data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +8 -0
- data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +15 -0
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +19 -0
- data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +5 -0
- data/db/migrate/20130909115621_change_states_required_for_countries.rb +9 -0
- data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +5 -0
- data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +5 -0
- data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +7 -0
- data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +16 -0
- data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +5 -0
- data/db/migrate/20131107132123_add_tax_category_to_variants.rb +6 -0
- data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +5 -0
- data/db/migrate/20131118043959_add_included_to_adjustments.rb +5 -0
- data/db/migrate/20131118050234_rename_tax_total_fields.rb +11 -0
- data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +21 -0
- data/db/migrate/20131120234456_add_updated_at_to_variants.rb +5 -0
- data/db/migrate/20131127001002_add_position_to_classifications.rb +5 -0
- data/db/migrate/20131211112807_create_spree_orders_promotions.rb +8 -0
- data/db/migrate/20131211192741_unique_shipping_method_categories.rb +24 -0
- data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +5 -0
- data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +8 -0
- data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +5 -0
- data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +5 -0
- data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +6 -0
- data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +5 -0
- data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +6 -0
- data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +5 -0
- data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +5 -0
- data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +12 -0
- data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +5 -0
- data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +11 -0
- data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +5 -0
- data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +5 -0
- data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +6 -0
- data/db/migrate/20140213184916_add_more_indexes.rb +13 -0
- data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +5 -0
- data/db/migrate/20140227112348_add_preference_store_to_everything.rb +8 -0
- data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +13 -0
- data/db/migrate/20140309023735_migrate_old_preferences.rb +23 -0
- data/db/migrate/20140309024355_create_spree_stores.rb +25 -0
- data/db/migrate/20140309033438_create_store_from_preferences.rb +37 -0
- data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +6 -0
- data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +8 -0
- data/db/migrate/20140331100557_add_additional_store_fields.rb +8 -0
- data/db/migrate/20140410141842_add_many_missing_indexes.rb +18 -0
- data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +66 -0
- data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +5 -0
- data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +8 -0
- data/db/migrate/20140518174634_add_token_to_spree_orders.rb +5 -0
- data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +29 -0
- data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +10 -0
- data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +6 -0
- data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +6 -0
- data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +5 -0
- data/db/migrate/20140625214618_create_spree_refunds.rb +12 -0
- data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +12 -0
- data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +5 -0
- data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +10 -0
- data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +55 -0
- data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +7 -0
- data/db/migrate/20140710190048_drop_return_authorization_amount.rb +5 -0
- data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +28 -0
- data/db/migrate/20140713140527_create_spree_refund_reasons.rb +14 -0
- data/db/migrate/20140713142214_rename_return_authorization_reason.rb +5 -0
- data/db/migrate/20140715182625_create_spree_promotion_categories.rb +11 -0
- data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +9 -0
- data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +6 -0
- data/db/migrate/20140717155155_create_default_refund_reason.rb +9 -0
- data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +7 -0
- data/db/migrate/20140718133010_create_spree_customer_returns.rb +9 -0
- data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +6 -0
- data/db/migrate/20140718195325_create_friendly_id_slugs.rb +15 -0
- data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +5 -0
- data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +13 -0
- data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +15 -0
- data/db/migrate/20140725131539_create_spree_reimbursements.rb +21 -0
- data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +5 -0
- data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +7 -0
- data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +5 -0
- data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +20 -0
- data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +10 -0
- data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +5 -0
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +10 -0
- data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +9 -0
- data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +10 -0
- data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +7 -0
- data/db/migrate/20140911173301_add_kind_to_zone.rb +11 -0
- data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +5 -0
- data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +6 -0
- data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +5 -0
- data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +6 -0
- data/db/migrate/20141009204607_add_store_id_to_orders.rb +8 -0
- data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +8 -0
- data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +5 -0
- data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +13 -0
- data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +13 -0
- data/db/migrate/20141105213646_update_classifications_positions.rb +9 -0
- data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +5 -0
- data/db/migrate/20141215232040_remove_token_permissions_table.rb +6 -0
- data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
- data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
- data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +5 -0
- data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
- data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
- data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
- data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
- data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
- data/db/migrate/20150122145607_add_resellable_to_return_items.rb +5 -0
- data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +5 -0
- data/db/migrate/20150128032538_remove_environment_from_tracker.rb +6 -0
- data/db/migrate/20150128060325_remove_spree_configurations.rb +16 -0
- data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +13 -0
- data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +9 -0
- data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +67 -0
- data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
- data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
- data/db/migrate/20150515211137_fix_adjustment_order_id.rb +70 -0
- data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
- data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +6 -0
- data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +16 -0
- data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
- data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
- data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +6 -0
- data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
- data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
- data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
- data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
- data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
- data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
- data/db/migrate/20160219165458_add_indexes.rb +14 -0
- data/db/seeds.rb +5 -0
- data/lib/generators/spree/custom_user/custom_user_generator.rb +56 -0
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +36 -0
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +1 -0
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +140 -0
- data/lib/generators/spree/dummy/templates/initializers/custom_user.rb +1 -0
- data/lib/generators/spree/dummy/templates/initializers/devise.rb +3 -0
- data/lib/generators/spree/dummy/templates/rails/application.rb +10 -0
- data/lib/generators/spree/dummy/templates/rails/boot.rb +6 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +72 -0
- data/lib/generators/spree/dummy/templates/rails/routes.rb +2 -0
- data/lib/generators/spree/dummy/templates/rails/script/rails +6 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +35 -0
- data/lib/generators/spree/install/install_generator.rb +233 -0
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +18 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +17 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +17 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +16 -0
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +16 -0
- data/lib/spree/core/controller_helpers/auth.rb +84 -0
- data/lib/spree/core/controller_helpers/common.rb +74 -0
- data/lib/spree/core/controller_helpers/order.rb +103 -0
- data/lib/spree/core/controller_helpers/respond_with.rb +65 -0
- data/lib/spree/core/controller_helpers/search.rb +14 -0
- data/lib/spree/core/controller_helpers/store.rb +51 -0
- data/lib/spree/core/controller_helpers/strong_parameters.rb +42 -0
- data/lib/spree/core/delegate_belongs_to.rb +95 -0
- data/lib/spree/core/engine.rb +134 -0
- data/lib/spree/core/environment/calculators.rb +12 -0
- data/lib/spree/core/environment.rb +15 -0
- data/lib/spree/core/environment_extension.rb +25 -0
- data/lib/spree/core/importer/order.rb +284 -0
- data/lib/spree/core/importer/product.rb +62 -0
- data/lib/spree/core/importer.rb +9 -0
- data/lib/spree/core/number_generator.rb +52 -0
- data/lib/spree/core/product_duplicator.rb +74 -0
- data/lib/spree/core/product_filters.rb +194 -0
- data/lib/spree/core/routes.rb +46 -0
- data/lib/spree/core/search/base.rb +102 -0
- data/lib/spree/core/token_generator.rb +22 -0
- data/lib/spree/core/validators/email.rb +11 -0
- data/lib/spree/core/version.rb +5 -0
- data/lib/spree/core.rb +96 -0
- data/lib/spree/i18n/base.rb +17 -0
- data/lib/spree/i18n/initializer.rb +1 -0
- data/lib/spree/i18n.rb +37 -0
- data/lib/spree/localized_number.rb +22 -0
- data/lib/spree/migrations.rb +77 -0
- data/lib/spree/money.rb +61 -0
- data/lib/spree/permitted_attributes.rb +115 -0
- data/lib/spree/promo/environment.rb +9 -0
- data/lib/spree/responder.rb +45 -0
- data/lib/spree/testing_support/ability_helpers.rb +105 -0
- data/lib/spree/testing_support/authorization_helpers.rb +63 -0
- data/lib/spree/testing_support/bar_ability.rb +14 -0
- data/lib/spree/testing_support/caching.rb +47 -0
- data/lib/spree/testing_support/capybara_ext.rb +179 -0
- data/lib/spree/testing_support/common_rake.rb +39 -0
- data/lib/spree/testing_support/controller_requests.rb +93 -0
- data/lib/spree/testing_support/extension_rake.rb +10 -0
- data/lib/spree/testing_support/factories/address_factory.rb +22 -0
- data/lib/spree/testing_support/factories/adjustment_factory.rb +26 -0
- data/lib/spree/testing_support/factories/calculator_factory.rb +20 -0
- data/lib/spree/testing_support/factories/country_factory.rb +9 -0
- data/lib/spree/testing_support/factories/credit_card_factory.rb +10 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +31 -0
- data/lib/spree/testing_support/factories/image_factory.rb +5 -0
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +10 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +12 -0
- data/lib/spree/testing_support/factories/options_factory.rb +13 -0
- data/lib/spree/testing_support/factories/order_factory.rb +91 -0
- data/lib/spree/testing_support/factories/payment_factory.rb +28 -0
- data/lib/spree/testing_support/factories/payment_method_factory.rb +23 -0
- data/lib/spree/testing_support/factories/price_factory.rb +7 -0
- data/lib/spree/testing_support/factories/product_factory.rb +36 -0
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +6 -0
- data/lib/spree/testing_support/factories/product_property_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/promotion_factory.rb +52 -0
- data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
- data/lib/spree/testing_support/factories/property_factory.rb +6 -0
- data/lib/spree/testing_support/factories/prototype_factory.rb +11 -0
- data/lib/spree/testing_support/factories/refund_factory.rb +22 -0
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +16 -0
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +7 -0
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +20 -0
- data/lib/spree/testing_support/factories/return_item_factory.rb +14 -0
- data/lib/spree/testing_support/factories/role_factory.rb +9 -0
- data/lib/spree/testing_support/factories/shipment_factory.rb +23 -0
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +5 -0
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +21 -0
- data/lib/spree/testing_support/factories/state_factory.rb +13 -0
- data/lib/spree/testing_support/factories/stock_factory.rb +31 -0
- data/lib/spree/testing_support/factories/stock_item_factory.rb +9 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +28 -0
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +11 -0
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
- data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
- data/lib/spree/testing_support/factories/store_factory.rb +8 -0
- data/lib/spree/testing_support/factories/tax_category_factory.rb +6 -0
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +8 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +7 -0
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +5 -0
- data/lib/spree/testing_support/factories/tracker_factory.rb +6 -0
- data/lib/spree/testing_support/factories/user_factory.rb +22 -0
- data/lib/spree/testing_support/factories/variant_factory.rb +39 -0
- data/lib/spree/testing_support/factories/zone_factory.rb +25 -0
- data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
- data/lib/spree/testing_support/factories.rb +19 -0
- data/lib/spree/testing_support/flash.rb +27 -0
- data/lib/spree/testing_support/i18n.rb +97 -0
- data/lib/spree/testing_support/microdata.rb +189 -0
- data/lib/spree/testing_support/order_walkthrough.rb +72 -0
- data/lib/spree/testing_support/preferences.rb +31 -0
- data/lib/spree/testing_support/url_helpers.rb +9 -0
- data/lib/spree_core.rb +1 -0
- data/lib/tasks/core.rake +169 -0
- data/lib/tasks/email.rake +10 -0
- data/lib/tasks/exchanges.rake +70 -0
- data/script/rails +9 -0
- data/spec/fixtures/microdata.html +22 -0
- data/spec/fixtures/microdata_itemref.html +15 -0
- data/spec/fixtures/microdata_no_itemscope.html +20 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spree_core.gemspec +47 -0
- data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
- data/vendor/assets/javascripts/jquery.payment.js +652 -0
- data/vendor/assets/javascripts/jsuri.js +2 -0
- data/vendor/assets/stylesheets/normalize.css +375 -0
- data/vendor/assets/stylesheets/skeleton.css +242 -0
- metadata +971 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module Importer
|
4
|
+
class Product
|
5
|
+
attr_reader :product, :product_attrs, :variants_attrs, :options_attrs
|
6
|
+
|
7
|
+
def initialize(product, product_params, options = {})
|
8
|
+
@product = product || Spree::Product.new(product_params)
|
9
|
+
|
10
|
+
@product_attrs = product_params
|
11
|
+
@variants_attrs = options[:variants_attrs] || []
|
12
|
+
@options_attrs = options[:options_attrs] || []
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
if product.save
|
17
|
+
variants_attrs.each do |variant_attribute|
|
18
|
+
# make sure the product is assigned before the options=
|
19
|
+
product.variants.create({ product: product }.merge(variant_attribute))
|
20
|
+
end
|
21
|
+
|
22
|
+
set_up_options
|
23
|
+
end
|
24
|
+
|
25
|
+
product
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
if product.update_attributes(product_attrs)
|
30
|
+
variants_attrs.each do |variant_attribute|
|
31
|
+
# update the variant if the id is present in the payload
|
32
|
+
if variant_attribute['id'].present?
|
33
|
+
product.variants.find(variant_attribute['id'].to_i).update_attributes(variant_attribute)
|
34
|
+
else
|
35
|
+
# make sure the product is assigned before the options=
|
36
|
+
product.variants.create({ product: product }.merge(variant_attribute))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
set_up_options
|
41
|
+
end
|
42
|
+
|
43
|
+
product
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def set_up_options
|
48
|
+
options_attrs.each do |name|
|
49
|
+
option_type = Spree::OptionType.where(name: name).first_or_initialize do |option_type|
|
50
|
+
option_type.presentation = name
|
51
|
+
option_type.save!
|
52
|
+
end
|
53
|
+
|
54
|
+
unless product.option_types.include?(option_type)
|
55
|
+
product.option_types << option_type
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
class NumberGenerator < Module
|
4
|
+
BASE = 10
|
5
|
+
DEFAULT_LENGTH = 9
|
6
|
+
NUMBERS = (0..9).to_a.freeze
|
7
|
+
LETTERS = ('A'..'Z').to_a.freeze
|
8
|
+
|
9
|
+
attr_accessor :prefix, :length
|
10
|
+
|
11
|
+
def initialize(options)
|
12
|
+
@random = Random.new
|
13
|
+
@prefix = options.fetch(:prefix)
|
14
|
+
@length = options.fetch(:length, DEFAULT_LENGTH)
|
15
|
+
@candidates = NUMBERS + (options[:letters] ? LETTERS : [])
|
16
|
+
end
|
17
|
+
|
18
|
+
def included(host)
|
19
|
+
generator_method = method(:generate_permalink)
|
20
|
+
generator_instance = self
|
21
|
+
|
22
|
+
host.class_eval do
|
23
|
+
validates(:number, presence: true, uniqueness: { allow_blank: true })
|
24
|
+
|
25
|
+
before_validation do |instance|
|
26
|
+
instance.number ||= generator_method.call(host)
|
27
|
+
end
|
28
|
+
|
29
|
+
define_singleton_method(:number_generator) { generator_instance }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def generate_permalink(host)
|
36
|
+
length = @length
|
37
|
+
|
38
|
+
loop do
|
39
|
+
candidate = new_candidate(length)
|
40
|
+
return candidate unless host.exists?(number: candidate)
|
41
|
+
|
42
|
+
# If over half of all possible options are taken add another digit.
|
43
|
+
length += 1 if host.count > Rational(BASE**length, 2)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def new_candidate(length)
|
48
|
+
@prefix + length.times.map { @candidates.sample(random: @random) }.join
|
49
|
+
end
|
50
|
+
end # Permalink
|
51
|
+
end # Core
|
52
|
+
end # Spree
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Spree
|
2
|
+
class ProductDuplicator
|
3
|
+
attr_accessor :product
|
4
|
+
|
5
|
+
@@clone_images_default = true
|
6
|
+
mattr_accessor :clone_images_default
|
7
|
+
|
8
|
+
def initialize(product, include_images = @@clone_images_default)
|
9
|
+
@product = product
|
10
|
+
@include_images = include_images
|
11
|
+
end
|
12
|
+
|
13
|
+
def duplicate
|
14
|
+
new_product = duplicate_product
|
15
|
+
|
16
|
+
# don't dup the actual variants, just the characterising types
|
17
|
+
new_product.option_types = product.option_types if product.has_variants?
|
18
|
+
|
19
|
+
# allow site to do some customization
|
20
|
+
new_product.send(:duplicate_extra, product) if new_product.respond_to?(:duplicate_extra)
|
21
|
+
new_product.save!
|
22
|
+
new_product
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
|
27
|
+
def duplicate_product
|
28
|
+
product.dup.tap do |new_product|
|
29
|
+
new_product.name = "COPY OF #{product.name}"
|
30
|
+
new_product.taxons = product.taxons
|
31
|
+
new_product.created_at = nil
|
32
|
+
new_product.deleted_at = nil
|
33
|
+
new_product.updated_at = nil
|
34
|
+
new_product.product_properties = reset_properties
|
35
|
+
new_product.master = duplicate_master
|
36
|
+
new_product.variants = product.variants.map { |variant| duplicate_variant variant }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def duplicate_master
|
41
|
+
master = product.master
|
42
|
+
master.dup.tap do |new_master|
|
43
|
+
new_master.sku = "COPY OF #{master.sku}"
|
44
|
+
new_master.deleted_at = nil
|
45
|
+
new_master.images = master.images.map { |image| duplicate_image image } if @include_images
|
46
|
+
new_master.price = master.price
|
47
|
+
new_master.currency = master.currency
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def duplicate_variant(variant)
|
52
|
+
new_variant = variant.dup
|
53
|
+
new_variant.sku = "COPY OF #{new_variant.sku}"
|
54
|
+
new_variant.deleted_at = nil
|
55
|
+
new_variant.option_values = variant.option_values.map { |option_value| option_value}
|
56
|
+
new_variant
|
57
|
+
end
|
58
|
+
|
59
|
+
def duplicate_image(image)
|
60
|
+
new_image = image.dup
|
61
|
+
new_image.assign_attributes(:attachment => image.attachment.clone)
|
62
|
+
new_image
|
63
|
+
end
|
64
|
+
|
65
|
+
def reset_properties
|
66
|
+
product.product_properties.map do |prop|
|
67
|
+
prop.dup.tap do |new_prop|
|
68
|
+
new_prop.created_at = nil
|
69
|
+
new_prop.updated_at = nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
# THIS FILE SHOULD BE OVER-RIDDEN IN YOUR SITE EXTENSION!
|
4
|
+
# the exact code probably won't be useful, though you're welcome to modify and reuse
|
5
|
+
# the current contents are mainly for testing and documentation
|
6
|
+
|
7
|
+
# To override this file...
|
8
|
+
# 1) Make a copy of it in your sites local /lib/spree folder
|
9
|
+
# 2) Add it to the config load path, or require it in an initializer, e.g...
|
10
|
+
#
|
11
|
+
# # config/initializers/spree.rb
|
12
|
+
# require 'spree/core/product_filters'
|
13
|
+
#
|
14
|
+
|
15
|
+
# set up some basic filters for use with products
|
16
|
+
#
|
17
|
+
# Each filter has two parts
|
18
|
+
# * a parametrized named scope which expects a list of labels
|
19
|
+
# * an object which describes/defines the filter
|
20
|
+
#
|
21
|
+
# The filter description has three components
|
22
|
+
# * a name, for displaying on pages
|
23
|
+
# * a named scope which will 'execute' the filter
|
24
|
+
# * a mapping of presentation labels to the relevant condition (in the context of the named scope)
|
25
|
+
# * an optional list of labels and values (for use with object selection - see taxons examples below)
|
26
|
+
#
|
27
|
+
# The named scopes here have a suffix '_any', following Ransack's convention for a
|
28
|
+
# scope which returns results which match any of the inputs. This is purely a convention,
|
29
|
+
# but might be a useful reminder.
|
30
|
+
#
|
31
|
+
# When creating a form, the name of the checkbox group for a filter F should be
|
32
|
+
# the name of F's scope with [] appended, eg "price_range_any[]", and for
|
33
|
+
# each label you should have a checkbox with the label as its value. On submission,
|
34
|
+
# Rails will send the action a hash containing (among other things) an array named
|
35
|
+
# after the scope whose values are the active labels.
|
36
|
+
#
|
37
|
+
# Ransack will then convert this array to a call to the named scope with the array
|
38
|
+
# contents, and the named scope will build a query with the disjunction of the conditions
|
39
|
+
# relating to the labels, all relative to the scope's context.
|
40
|
+
#
|
41
|
+
# The details of how/when filters are used is a detail for specific models (eg products
|
42
|
+
# or taxons), eg see the taxon model/controller.
|
43
|
+
|
44
|
+
# See specific filters below for concrete examples.
|
45
|
+
module ProductFilters
|
46
|
+
# Example: filtering by price
|
47
|
+
# The named scope just maps incoming labels onto their conditions, and builds the conjunction
|
48
|
+
# 'price' is in the base scope's context (ie, "select foo from products where ...") so
|
49
|
+
# we can access the field right away
|
50
|
+
# The filter identifies which scope to use, then sets the conditions for each price range
|
51
|
+
#
|
52
|
+
# If user checks off three different price ranges then the argument passed to
|
53
|
+
# below scope would be something like ["$10 - $15", "$15 - $18", "$18 - $20"]
|
54
|
+
#
|
55
|
+
Spree::Product.add_search_scope :price_range_any do |*opts|
|
56
|
+
conds = opts.map {|o| Spree::Core::ProductFilters.price_filter[:conds][o]}.reject { |c| c.nil? }
|
57
|
+
scope = conds.shift
|
58
|
+
conds.each do |new_scope|
|
59
|
+
scope = scope.or(new_scope)
|
60
|
+
end
|
61
|
+
Spree::Product.joins(master: :default_price).where(scope)
|
62
|
+
end
|
63
|
+
|
64
|
+
def ProductFilters.format_price(amount)
|
65
|
+
Spree::Money.new(amount)
|
66
|
+
end
|
67
|
+
|
68
|
+
def ProductFilters.price_filter
|
69
|
+
v = Spree::Price.arel_table
|
70
|
+
conds = [ [ Spree.t(:under_price, price: format_price(10)) , v[:amount].lteq(10)],
|
71
|
+
[ "#{format_price(10)} - #{format_price(15)}" , v[:amount].in(10..15)],
|
72
|
+
[ "#{format_price(15)} - #{format_price(18)}" , v[:amount].in(15..18)],
|
73
|
+
[ "#{format_price(18)} - #{format_price(20)}" , v[:amount].in(18..20)],
|
74
|
+
[ Spree.t(:or_over_price, price: format_price(20)) , v[:amount].gteq(20)]]
|
75
|
+
{
|
76
|
+
name: Spree.t(:price_range),
|
77
|
+
scope: :price_range_any,
|
78
|
+
conds: Hash[*conds.flatten],
|
79
|
+
labels: conds.map { |k,v| [k, k] }
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# Example: filtering by possible brands
|
85
|
+
#
|
86
|
+
# First, we define the scope. Two interesting points here: (a) we run our conditions
|
87
|
+
# in the scope where the info for the 'brand' property has been loaded; and (b)
|
88
|
+
# because we may want to filter by other properties too, we give this part of the
|
89
|
+
# query a unique name (which must be used in the associated conditions too).
|
90
|
+
#
|
91
|
+
# Secondly, the filter. Instead of a static list of values, we pull out all existing
|
92
|
+
# brands from the db, and then build conditions which test for string equality on
|
93
|
+
# the (uniquely named) field "p_brand.value". There's also a test for brand info
|
94
|
+
# being blank: note that this relies on with_property doing a left outer join
|
95
|
+
# rather than an inner join.
|
96
|
+
Spree::Product.add_search_scope :brand_any do |*opts|
|
97
|
+
conds = opts.map {|o| ProductFilters.brand_filter[:conds][o]}.reject { |c| c.nil? }
|
98
|
+
scope = conds.shift
|
99
|
+
conds.each do |new_scope|
|
100
|
+
scope = scope.or(new_scope)
|
101
|
+
end
|
102
|
+
Spree::Product.with_property('brand').where(scope)
|
103
|
+
end
|
104
|
+
|
105
|
+
def ProductFilters.brand_filter
|
106
|
+
brand_property = Spree::Property.find_by(name: 'brand')
|
107
|
+
brands = brand_property ? Spree::ProductProperty.where(property_id: brand_property.id).pluck(:value).uniq.map(&:to_s) : []
|
108
|
+
pp = Spree::ProductProperty.arel_table
|
109
|
+
conds = Hash[*brands.map { |b| [b, pp[:value].eq(b)] }.flatten]
|
110
|
+
{
|
111
|
+
name: 'Brands',
|
112
|
+
scope: :brand_any,
|
113
|
+
conds: conds,
|
114
|
+
labels: (brands.sort).map { |k| [k, k] }
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
# Example: a parameterized filter
|
119
|
+
# The filter above may show brands which aren't applicable to the current taxon,
|
120
|
+
# so this one only shows the brands that are relevant to a particular taxon and
|
121
|
+
# its descendants.
|
122
|
+
#
|
123
|
+
# We don't have to give a new scope since the conditions here are a subset of the
|
124
|
+
# more general filter, so decoding will still work - as long as the filters on a
|
125
|
+
# page all have unique names (ie, you can't use the two brand filters together
|
126
|
+
# if they use the same scope). To be safe, the code uses a copy of the scope.
|
127
|
+
#
|
128
|
+
# HOWEVER: what happens if we want a more precise scope? we can't pass
|
129
|
+
# parametrized scope names to Ransack, only atomic names, so couldn't ask
|
130
|
+
# for taxon T's customized filter to be used. BUT: we can arrange for the form
|
131
|
+
# to pass back a hash instead of an array, where the key acts as the (taxon)
|
132
|
+
# parameter and value is its label array, and then get a modified named scope
|
133
|
+
# to get its conditions from a particular filter.
|
134
|
+
#
|
135
|
+
# The brand-finding code can be simplified if a few more named scopes were added to
|
136
|
+
# the product properties model.
|
137
|
+
Spree::Product.add_search_scope :selective_brand_any do |*opts|
|
138
|
+
Spree::Product.brand_any(*opts)
|
139
|
+
end
|
140
|
+
|
141
|
+
def ProductFilters.selective_brand_filter(taxon = nil)
|
142
|
+
taxon ||= Spree::Taxonomy.first.root
|
143
|
+
brand_property = Spree::Property.find_by(name: 'brand')
|
144
|
+
scope = Spree::ProductProperty.where(property: brand_property).
|
145
|
+
joins(product: :taxons).
|
146
|
+
where("#{Spree::Taxon.table_name}.id" => [taxon] + taxon.descendants)
|
147
|
+
brands = scope.pluck(:value).uniq
|
148
|
+
{
|
149
|
+
name: 'Applicable Brands',
|
150
|
+
scope: :selective_brand_any,
|
151
|
+
labels: brands.sort.map { |k| [k, k] }
|
152
|
+
}
|
153
|
+
end
|
154
|
+
|
155
|
+
# Provide filtering on the immediate children of a taxon
|
156
|
+
#
|
157
|
+
# This doesn't fit the pattern of the examples above, so there's a few changes.
|
158
|
+
# Firstly, it uses an existing scope which was not built for filtering - and so
|
159
|
+
# has no need of a conditions mapping, and secondly, it has a mapping of name
|
160
|
+
# to the argument type expected by the other scope.
|
161
|
+
#
|
162
|
+
# This technique is useful for filtering on objects (by passing ids) or with a
|
163
|
+
# scope that can be used directly (eg. testing only ever on a single property).
|
164
|
+
#
|
165
|
+
# This scope selects products in any of the active taxons or their children.
|
166
|
+
#
|
167
|
+
def ProductFilters.taxons_below(taxon)
|
168
|
+
return Spree::Core::ProductFilters.all_taxons if taxon.nil?
|
169
|
+
{
|
170
|
+
name: 'Taxons under ' + taxon.name,
|
171
|
+
scope: :taxons_id_in_tree_any,
|
172
|
+
labels: taxon.children.sort_by(&:position).map { |t| [t.name, t.id] },
|
173
|
+
conds: nil
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
# Filtering by the list of all taxons
|
178
|
+
#
|
179
|
+
# Similar idea as above, but we don't want the descendants' products, hence
|
180
|
+
# it uses one of the auto-generated scopes from Ransack.
|
181
|
+
#
|
182
|
+
# idea: expand the format to allow nesting of labels?
|
183
|
+
def ProductFilters.all_taxons
|
184
|
+
taxons = Spree::Taxonomy.all.map { |t| [t.root] + t.root.descendants }.flatten
|
185
|
+
{
|
186
|
+
name: 'All taxons',
|
187
|
+
scope: :taxons_id_equals_any,
|
188
|
+
labels: taxons.sort_by(&:name).map { |t| [t.name, t.id] },
|
189
|
+
conds: nil # not needed
|
190
|
+
}
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
def self.add_routes(&block)
|
5
|
+
@spree_routes ||= []
|
6
|
+
|
7
|
+
# Anything that causes the application's routes to be reloaded,
|
8
|
+
# will cause this method to be called more than once
|
9
|
+
# i.e. https://github.com/plataformatec/devise/blob/31971e69e6a1bcf6c7f01eaaa44f227c4af5d4d2/lib/devise/rails.rb#L14
|
10
|
+
# In the case of Devise, this *only* happens in the production env
|
11
|
+
# This coupled with Rails 4's insistence that routes are not drawn twice,
|
12
|
+
# poses quite a serious problem.
|
13
|
+
#
|
14
|
+
# This is mainly why this whole file exists in the first place.
|
15
|
+
#
|
16
|
+
# Thus we need to make sure that the routes aren't drawn twice.
|
17
|
+
unless @spree_routes.include?(block)
|
18
|
+
@spree_routes << block
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.append_routes(&block)
|
23
|
+
@append_routes ||= []
|
24
|
+
# See comment in add_routes.
|
25
|
+
unless @append_routes.include?(block)
|
26
|
+
@append_routes << block
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.draw_routes(&block)
|
31
|
+
@spree_routes ||= []
|
32
|
+
@append_routes ||= []
|
33
|
+
eval_block(block) if block_given?
|
34
|
+
@spree_routes.each { |r| eval_block(&r) }
|
35
|
+
@append_routes.each { |r| eval_block(&r) }
|
36
|
+
# # Clear out routes so that they aren't drawn twice.
|
37
|
+
@spree_routes = []
|
38
|
+
@append_routes = []
|
39
|
+
end
|
40
|
+
|
41
|
+
def eval_block(&block)
|
42
|
+
Spree::Core::Engine.routes.send :eval_block, block
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module Search
|
4
|
+
class Base
|
5
|
+
attr_accessor :properties
|
6
|
+
attr_accessor :current_user
|
7
|
+
attr_accessor :current_currency
|
8
|
+
|
9
|
+
def initialize(params)
|
10
|
+
self.current_currency = Spree::Config[:currency]
|
11
|
+
@properties = {}
|
12
|
+
prepare(params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve_products
|
16
|
+
@products = get_base_scope
|
17
|
+
curr_page = page || 1
|
18
|
+
|
19
|
+
unless Spree::Config.show_products_without_price
|
20
|
+
@products = @products.where("spree_prices.amount IS NOT NULL").
|
21
|
+
where("spree_prices.currency" => current_currency)
|
22
|
+
end
|
23
|
+
@products = @products.page(curr_page).per(per_page)
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(name)
|
27
|
+
if @properties.has_key? name
|
28
|
+
@properties[name]
|
29
|
+
else
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
def get_base_scope
|
36
|
+
base_scope = Spree::Product.spree_base_scopes.active
|
37
|
+
base_scope = base_scope.in_taxon(taxon) unless taxon.blank?
|
38
|
+
base_scope = get_products_conditions_for(base_scope, keywords)
|
39
|
+
base_scope = add_search_scopes(base_scope)
|
40
|
+
base_scope = add_eagerload_scopes(base_scope)
|
41
|
+
base_scope
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_eagerload_scopes scope
|
45
|
+
# TL;DR Switch from `preload` to `includes` as soon as Rails starts honoring
|
46
|
+
# `order` clauses on `has_many` associations when a `where` constraint
|
47
|
+
# affecting a joined table is present (see
|
48
|
+
# https://github.com/rails/rails/issues/6769).
|
49
|
+
#
|
50
|
+
# Ideally this would use `includes` instead of `preload` calls, leaving it
|
51
|
+
# up to Rails whether associated objects should be fetched in one big join
|
52
|
+
# or multiple independent queries. However as of Rails 4.1.8 any `order`
|
53
|
+
# defined on `has_many` associations are ignored when Rails builds a join
|
54
|
+
# query.
|
55
|
+
#
|
56
|
+
# Would we use `includes` in this particular case, Rails would do
|
57
|
+
# separate queries most of the time but opt for a join as soon as any
|
58
|
+
# `where` constraints affecting joined tables are added to the search;
|
59
|
+
# which is the case as soon as a taxon is added to the base scope.
|
60
|
+
scope = scope.preload(master: :prices)
|
61
|
+
scope = scope.preload(master: :images) if include_images
|
62
|
+
scope
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_search_scopes(base_scope)
|
66
|
+
search.each do |name, scope_attribute|
|
67
|
+
scope_name = name.to_sym
|
68
|
+
if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
|
69
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
70
|
+
else
|
71
|
+
base_scope = base_scope.merge(Spree::Product.ransack({scope_name => scope_attribute}).result)
|
72
|
+
end
|
73
|
+
end if search.is_a?(Hash)
|
74
|
+
base_scope
|
75
|
+
end
|
76
|
+
|
77
|
+
# method should return new scope based on base_scope
|
78
|
+
def get_products_conditions_for(base_scope, query)
|
79
|
+
unless query.blank?
|
80
|
+
base_scope = base_scope.like_any([:name, :description], query.split)
|
81
|
+
end
|
82
|
+
base_scope
|
83
|
+
end
|
84
|
+
|
85
|
+
def prepare(params)
|
86
|
+
@properties[:taxon] = params[:taxon].blank? ? nil : Spree::Taxon.find(params[:taxon])
|
87
|
+
@properties[:keywords] = params[:keywords]
|
88
|
+
@properties[:search] = params[:search]
|
89
|
+
@properties[:include_images] = params[:include_images]
|
90
|
+
|
91
|
+
per_page = params[:per_page].to_i
|
92
|
+
@properties[:per_page] = per_page > 0 ? per_page : Spree::Config[:products_per_page]
|
93
|
+
if params[:page].respond_to?(:to_i)
|
94
|
+
@properties[:page] = (params[:page].to_i <= 0) ? 1 : params[:page].to_i
|
95
|
+
else
|
96
|
+
@properties[:page] = 1
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module TokenGenerator
|
4
|
+
def generate_guest_token(model_class = Spree::Order)
|
5
|
+
loop do
|
6
|
+
token = "#{random_token}#{unique_ending}"
|
7
|
+
break token unless model_class.exists?(guest_token: token)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def random_token
|
14
|
+
SecureRandom.urlsafe_base64(nil, false)
|
15
|
+
end
|
16
|
+
|
17
|
+
def unique_ending
|
18
|
+
(Time.now.to_f * 1000).to_i
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class EmailValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attribute, value)
|
3
|
+
unless value =~ %r{\A(([A-Za-z0-9]+_+)|
|
4
|
+
([A-Za-z0-9]+\-+)|
|
5
|
+
([A-Za-z0-9]+\.+)|
|
6
|
+
([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|
|
7
|
+
(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}\z}xi
|
8
|
+
record.errors.add(attribute, :invalid, { value: value }.merge!(options))
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/spree/core.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'rails/all'
|
2
|
+
require 'active_merchant'
|
3
|
+
require 'acts_as_list'
|
4
|
+
require 'awesome_nested_set'
|
5
|
+
require 'cancan'
|
6
|
+
require 'friendly_id'
|
7
|
+
require 'font-awesome-rails'
|
8
|
+
require 'kaminari'
|
9
|
+
require 'mail'
|
10
|
+
require 'monetize'
|
11
|
+
require 'paperclip'
|
12
|
+
require 'paranoia'
|
13
|
+
require 'premailer/rails'
|
14
|
+
require 'ransack'
|
15
|
+
require 'responders'
|
16
|
+
require 'state_machines-activerecord'
|
17
|
+
|
18
|
+
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
19
|
+
# invalid state of a Payment. In the future this should be removed.
|
20
|
+
StateMachines::Machine.ignore_method_conflicts = true
|
21
|
+
|
22
|
+
module Spree
|
23
|
+
|
24
|
+
mattr_accessor :user_class
|
25
|
+
|
26
|
+
def self.user_class
|
27
|
+
if @@user_class.is_a?(Class)
|
28
|
+
raise "Spree.user_class MUST be a String or Symbol object, not a Class object."
|
29
|
+
elsif @@user_class.is_a?(String) || @@user_class.is_a?(Symbol)
|
30
|
+
@@user_class.to_s.constantize
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.admin_path
|
35
|
+
Spree::Config[:admin_path]
|
36
|
+
end
|
37
|
+
|
38
|
+
# Used to configure admin_path for Spree
|
39
|
+
#
|
40
|
+
# Example:
|
41
|
+
#
|
42
|
+
# write the following line in `config/initializers/spree.rb`
|
43
|
+
# Spree.admin_path = '/custom-path'
|
44
|
+
|
45
|
+
def self.admin_path=(path)
|
46
|
+
Spree::Config[:admin_path] = path
|
47
|
+
end
|
48
|
+
|
49
|
+
# Used to configure Spree.
|
50
|
+
#
|
51
|
+
# Example:
|
52
|
+
#
|
53
|
+
# Spree.config do |config|
|
54
|
+
# config.track_inventory_levels = false
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# This method is defined within the core gem on purpose.
|
58
|
+
# Some people may only wish to use the Core part of Spree.
|
59
|
+
def self.config(&block)
|
60
|
+
yield(Spree::Config)
|
61
|
+
end
|
62
|
+
|
63
|
+
module Core
|
64
|
+
autoload :ProductFilters, "spree/core/product_filters"
|
65
|
+
autoload :TokenGenerator, "spree/core/token_generator"
|
66
|
+
|
67
|
+
class GatewayError < RuntimeError; end
|
68
|
+
class DestroyWithOrdersError < StandardError; end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
require 'spree/core/version'
|
73
|
+
|
74
|
+
require 'spree/core/environment_extension'
|
75
|
+
require 'spree/core/environment/calculators'
|
76
|
+
require 'spree/core/environment'
|
77
|
+
require 'spree/core/number_generator'
|
78
|
+
require 'spree/promo/environment'
|
79
|
+
require 'spree/migrations'
|
80
|
+
require 'spree/core/engine'
|
81
|
+
|
82
|
+
require 'spree/i18n'
|
83
|
+
require 'spree/localized_number'
|
84
|
+
require 'spree/money'
|
85
|
+
require 'spree/permitted_attributes'
|
86
|
+
|
87
|
+
require 'spree/core/delegate_belongs_to'
|
88
|
+
require 'spree/core/importer'
|
89
|
+
require 'spree/core/product_duplicator'
|
90
|
+
require 'spree/core/controller_helpers/auth'
|
91
|
+
require 'spree/core/controller_helpers/common'
|
92
|
+
require 'spree/core/controller_helpers/order'
|
93
|
+
require 'spree/core/controller_helpers/respond_with'
|
94
|
+
require 'spree/core/controller_helpers/search'
|
95
|
+
require 'spree/core/controller_helpers/store'
|
96
|
+
require 'spree/core/controller_helpers/strong_parameters'
|