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,97 @@
|
|
1
|
+
# This file exists solely to test whether or not there are missing translations
|
2
|
+
# within the code that Spree's test suite covers.
|
3
|
+
#
|
4
|
+
# If there is a translation referenced which has no corresponding key within the
|
5
|
+
# .yml file, then there will be a message output at the end of the suite showing
|
6
|
+
# that.
|
7
|
+
#
|
8
|
+
# If there is a translation within the locale file which *isn't* used in the
|
9
|
+
# test, this will also be shown at the end of the suite run.
|
10
|
+
module Spree
|
11
|
+
class << self
|
12
|
+
attr_accessor :used_translations, :missing_translation_messages,
|
13
|
+
:unused_translations, :unused_translation_messages
|
14
|
+
alias_method :normal_t, :t
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.t(*args)
|
18
|
+
original_args = args.dup
|
19
|
+
options = args.extract_options!
|
20
|
+
self.used_translations ||= []
|
21
|
+
[*args.first].each do |translation_key|
|
22
|
+
key = ([*options[:scope]] << translation_key).join('.')
|
23
|
+
self.used_translations << key
|
24
|
+
end
|
25
|
+
normal_t(*original_args)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.check_missing_translations
|
29
|
+
self.missing_translation_messages = []
|
30
|
+
self.used_translations ||= []
|
31
|
+
used_translations.map { |a| a.split('.') }.each do |translation_keys|
|
32
|
+
root = translations
|
33
|
+
processed_keys = []
|
34
|
+
translation_keys.each do |key|
|
35
|
+
begin
|
36
|
+
root = root.fetch(key.to_sym)
|
37
|
+
processed_keys << key.to_sym
|
38
|
+
rescue KeyError
|
39
|
+
error = "#{(processed_keys << key).join('.')} (#{I18n.locale})"
|
40
|
+
unless Spree.missing_translation_messages.include?(error)
|
41
|
+
Spree.missing_translation_messages << error
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.check_unused_translations
|
49
|
+
self.used_translations ||= []
|
50
|
+
self.unused_translation_messages = []
|
51
|
+
self.unused_translations = []
|
52
|
+
self.load_translations(translations)
|
53
|
+
translation_diff = unused_translations - used_translations
|
54
|
+
translation_diff.each do |translation|
|
55
|
+
Spree.unused_translation_messages << "#{translation} (#{I18n.locale})"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def self.load_translations(hash, root=[])
|
62
|
+
hash.each do |k,v|
|
63
|
+
if v.is_a?(Hash)
|
64
|
+
load_translations(v, root.dup << k)
|
65
|
+
else
|
66
|
+
key = (root + [k]).join('.')
|
67
|
+
self.unused_translations << key
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.translations
|
73
|
+
@translations ||= I18n.backend.send(:translations)[I18n.locale][:spree]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
RSpec.configure do |config|
|
78
|
+
# Need to check here again because this is used in i18n_spec too.
|
79
|
+
if ENV['CHECK_TRANSLATIONS']
|
80
|
+
config.after :suite do
|
81
|
+
Spree.check_missing_translations
|
82
|
+
if Spree.missing_translation_messages.any?
|
83
|
+
puts "\nThere are missing translations within Spree:"
|
84
|
+
puts Spree.missing_translation_messages.sort
|
85
|
+
exit(1)
|
86
|
+
end
|
87
|
+
|
88
|
+
Spree.check_unused_translations
|
89
|
+
if false && Spree.unused_translation_messages.any?
|
90
|
+
puts "\nThere are unused translations within Spree:"
|
91
|
+
puts Spree.unused_translation_messages.sort
|
92
|
+
exit(1)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
@@ -0,0 +1,189 @@
|
|
1
|
+
module Spree
|
2
|
+
module TestingSupport
|
3
|
+
module Microdata
|
4
|
+
# code extracted and modified from 'microdata' gem
|
5
|
+
class Document
|
6
|
+
attr_reader :items, :doc
|
7
|
+
|
8
|
+
def initialize(content)
|
9
|
+
@doc = Nokogiri::HTML(content)
|
10
|
+
@items = extract_items
|
11
|
+
end
|
12
|
+
|
13
|
+
def extract_items
|
14
|
+
itemscopes = @doc.search('//*[@itemscope and not(@itemprop)]')
|
15
|
+
return nil unless itemscopes
|
16
|
+
|
17
|
+
itemscopes.map do |itemscope|
|
18
|
+
Item.new(itemscope)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Item
|
24
|
+
attr_reader :type, :properties, :id
|
25
|
+
|
26
|
+
def initialize(top_node)
|
27
|
+
@top_node = top_node
|
28
|
+
@type = extract_item_type
|
29
|
+
@id = extract_item_id
|
30
|
+
@properties = {}
|
31
|
+
add_item_ref_properties(@top_node)
|
32
|
+
parse_elements(extract_elements(@top_node))
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_hash
|
36
|
+
hash = {}
|
37
|
+
hash[:id] = id if id
|
38
|
+
hash[:type] = type if type
|
39
|
+
hash[:properties] = {}
|
40
|
+
properties.each do |name, values|
|
41
|
+
final_values = values.map do |value|
|
42
|
+
if value.reponds_to?(:to_hash)
|
43
|
+
value.to_hash
|
44
|
+
else
|
45
|
+
value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
hash[:properties][name] = final_values
|
49
|
+
end
|
50
|
+
hash
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def extract_elements(node)
|
56
|
+
node.search('./*')
|
57
|
+
end
|
58
|
+
|
59
|
+
def extract_item_id
|
60
|
+
(value = @top_node.attribute('itemid')) ? value.value : nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def extract_item_type
|
64
|
+
(value = @top_node.attribute('itemtype')) ? value.value.split(' ') : nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_elements(elements)
|
68
|
+
elements.each { |element| parse_element(element) }
|
69
|
+
end
|
70
|
+
|
71
|
+
def parse_element(element)
|
72
|
+
item_scope = element.attribute('itemscope')
|
73
|
+
item_prop = element.attribute('itemprop')
|
74
|
+
internal_elements = extract_elements(element)
|
75
|
+
add_item_prop(element) if item_scope || item_prop
|
76
|
+
parse_elements(internal_elements) if internal_elements && !item_scope
|
77
|
+
end
|
78
|
+
|
79
|
+
# Add an 'itemprop' to the properties
|
80
|
+
def add_item_prop(item_prop)
|
81
|
+
properties = Itemprop.parse(item_prop, @page_url)
|
82
|
+
properties.each { |name, value| (@properties[name] ||= []) << value }
|
83
|
+
end
|
84
|
+
|
85
|
+
# Add any properties referred to by 'itemref'
|
86
|
+
def add_item_ref_properties(element)
|
87
|
+
item_ref = element.attribute('itemref')
|
88
|
+
if item_ref
|
89
|
+
item_ref.value.split(' ').each { |id| parse_elements(find_with_id(id)) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Find an element with a matching id
|
94
|
+
def find_with_id(id)
|
95
|
+
@top_node.search("//*[@id='#{id}']")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
class Itemprop
|
100
|
+
NON_TEXTCONTENT_ELEMENTS = {
|
101
|
+
'a' => 'href', 'area' => 'href',
|
102
|
+
'audio' => 'src', 'embed' => 'src',
|
103
|
+
'iframe' => 'src', 'img' => 'src',
|
104
|
+
'link' => 'href', 'meta' => 'content',
|
105
|
+
'object' => 'data', 'source' => 'src',
|
106
|
+
'time' => 'datetime', 'track' => 'src',
|
107
|
+
'video' => 'src'
|
108
|
+
}.freeze
|
109
|
+
URL_ATTRIBUTES = ['data', 'href', 'src'].freeze
|
110
|
+
|
111
|
+
# A Hash representing the properties.
|
112
|
+
# Hash is of the form {'property name' => 'value'}
|
113
|
+
attr_reader :properties
|
114
|
+
|
115
|
+
# Create a new Itemprop object
|
116
|
+
# [element] The itemprop element to be parsed
|
117
|
+
# [page_url] The url of the page, including filename, used to form
|
118
|
+
# absolute urls
|
119
|
+
def initialize(element, page_url = nil)
|
120
|
+
@element = element
|
121
|
+
@page_url = page_url
|
122
|
+
@properties = extract_properties
|
123
|
+
end
|
124
|
+
|
125
|
+
# Parse the element and return a hash representing the properties.
|
126
|
+
# Hash is of the form {'property name' => 'value'}
|
127
|
+
# [element] The itemprop element to be parsed
|
128
|
+
# [page_url] The url of the page, including filename, used to form
|
129
|
+
# absolute urls
|
130
|
+
def self.parse(element, page_url = nil)
|
131
|
+
new(element, page_url).properties
|
132
|
+
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
def extract_properties
|
137
|
+
prop_names = extract_property_names
|
138
|
+
prop_names.each_with_object({}) do |name, memo|
|
139
|
+
memo[name] = extract_property
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# This returns an empty string if can't form a valid
|
144
|
+
# absolute url as per the Microdata spec.
|
145
|
+
|
146
|
+
def make_absolute_url(url)
|
147
|
+
return url unless URI.parse(url).relative?
|
148
|
+
begin
|
149
|
+
URI.parse(@page_url).merge(url).to_s
|
150
|
+
rescue URI::Error
|
151
|
+
url
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def non_textcontent_element?(element)
|
156
|
+
NON_TEXTCONTENT_ELEMENTS.has_key?(element)
|
157
|
+
end
|
158
|
+
|
159
|
+
def url_attribute?(attribute)
|
160
|
+
URL_ATTRIBUTES.include?(attribute)
|
161
|
+
end
|
162
|
+
|
163
|
+
def extract_property_names
|
164
|
+
itemprop_attr = @element.attribute('itemprop')
|
165
|
+
itemprop_attr ? itemprop_attr.value.split : []
|
166
|
+
end
|
167
|
+
|
168
|
+
def extract_property_value
|
169
|
+
element = @element.name
|
170
|
+
if non_textcontent_element?(element)
|
171
|
+
attribute = NON_TEXTCONTENT_ELEMENTS[element]
|
172
|
+
value = @element.attribute(attribute).value
|
173
|
+
url_attribute?(attribute) ? make_absolute_url(value) : value
|
174
|
+
else
|
175
|
+
@element.inner_text.strip
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def extract_property
|
180
|
+
if @element.attribute('itemscope')
|
181
|
+
Item.new(@element)
|
182
|
+
else
|
183
|
+
extract_property_value
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class OrderWalkthrough
|
2
|
+
def self.up_to(state)
|
3
|
+
# A default store must exist to provide store settings
|
4
|
+
unless Spree::Store.exists?
|
5
|
+
FactoryBot.create(:store)
|
6
|
+
end
|
7
|
+
|
8
|
+
# A payment method must exist for an order to proceed through the Address state
|
9
|
+
unless Spree::PaymentMethod.exists?
|
10
|
+
FactoryBot.create(:check_payment_method)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Need to create a valid zone too...
|
14
|
+
zone = FactoryBot.create(:zone)
|
15
|
+
country = FactoryBot.create(:country)
|
16
|
+
zone.members << Spree::ZoneMember.create(:zoneable => country)
|
17
|
+
country.states << FactoryBot.create(:state, :country => country)
|
18
|
+
|
19
|
+
# A shipping method must exist for rates to be displayed on checkout page
|
20
|
+
unless Spree::ShippingMethod.exists?
|
21
|
+
FactoryBot.create(:shipping_method).tap do |sm|
|
22
|
+
sm.calculator.preferred_amount = 10
|
23
|
+
sm.calculator.preferred_currency = Spree::Config[:currency]
|
24
|
+
sm.calculator.save
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
order = Spree::Order.create!(email: "spree@example.com")
|
29
|
+
add_line_item!(order)
|
30
|
+
order.next!
|
31
|
+
|
32
|
+
end_state_position = states.index(state.to_sym)
|
33
|
+
states[0...end_state_position].each do |state|
|
34
|
+
send(state, order)
|
35
|
+
end
|
36
|
+
|
37
|
+
order
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def self.add_line_item!(order)
|
43
|
+
FactoryBot.create(:line_item, order: order)
|
44
|
+
order.reload
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.address(order)
|
48
|
+
order.bill_address = FactoryBot.create(:address, :country_id => Spree::Zone.global.members.first.zoneable.id)
|
49
|
+
order.ship_address = FactoryBot.create(:address, :country_id => Spree::Zone.global.members.first.zoneable.id)
|
50
|
+
order.next!
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.delivery(order)
|
54
|
+
order.next!
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.payment(order)
|
58
|
+
order.payments.create!(payment_method: Spree::PaymentMethod.first, amount: order.total)
|
59
|
+
# TODO: maybe look at some way of making this payment_state change automatic
|
60
|
+
order.payment_state = 'paid'
|
61
|
+
order.next!
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.complete(order)
|
65
|
+
#noop?
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.states
|
69
|
+
[:address, :delivery, :payment, :complete]
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Spree
|
2
|
+
module TestingSupport
|
3
|
+
module Preferences
|
4
|
+
# Resets all preferences to default values, you can
|
5
|
+
# pass a block to override the defaults with a block
|
6
|
+
#
|
7
|
+
# reset_spree_preferences do |config|
|
8
|
+
# config.track_inventory_levels = false
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
def reset_spree_preferences(&config_block)
|
12
|
+
Spree::Preferences::Store.instance.persistence = false
|
13
|
+
Spree::Preferences::Store.instance.clear_cache
|
14
|
+
|
15
|
+
config = Rails.application.config.spree.preferences
|
16
|
+
configure_spree_preferences &config_block if block_given?
|
17
|
+
end
|
18
|
+
|
19
|
+
def configure_spree_preferences
|
20
|
+
config = Rails.application.config.spree.preferences
|
21
|
+
yield(config) if block_given?
|
22
|
+
end
|
23
|
+
|
24
|
+
def assert_preference_unset(preference)
|
25
|
+
find("#preferences_#{preference}")['checked'].should be false
|
26
|
+
Spree::Config[preference].should be false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
data/lib/spree_core.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'spree/core'
|
data/lib/tasks/core.rake
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
namespace :db do
|
4
|
+
desc %q{Loads a specified fixture file:
|
5
|
+
use rake db:load_file[/absolute/path/to/sample/filename.rb]}
|
6
|
+
|
7
|
+
task :load_file , [:file, :dir] => :environment do |t, args|
|
8
|
+
file = Pathname.new(args.file)
|
9
|
+
|
10
|
+
puts "loading ruby #{file}"
|
11
|
+
require file
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Loads fixtures from the the dir you specify using rake db:load_dir[loadfrom]"
|
15
|
+
task :load_dir , [:dir] => :environment do |t, args|
|
16
|
+
dir = args.dir
|
17
|
+
dir = File.join(Rails.root, "db", dir) if Pathname.new(dir).relative?
|
18
|
+
|
19
|
+
ruby_files = {}
|
20
|
+
Dir.glob(File.join(dir , '**/*.{rb}')).each do |fixture_file|
|
21
|
+
ext = File.extname fixture_file
|
22
|
+
ruby_files[File.basename(fixture_file, '.*')] = fixture_file
|
23
|
+
end
|
24
|
+
ruby_files.sort.each do |fixture , ruby_file|
|
25
|
+
# If file exists within application it takes precendence.
|
26
|
+
if File.exists?(File.join(Rails.root, "db/default/spree", "#{fixture}.rb"))
|
27
|
+
ruby_file = File.expand_path(File.join(Rails.root, "db/default/spree", "#{fixture}.rb"))
|
28
|
+
end
|
29
|
+
# an invoke will only execute the task once
|
30
|
+
Rake::Task["db:load_file"].execute( Rake::TaskArguments.new([:file], [ruby_file]) )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Migrate schema to version 0 and back up again. WARNING: Destroys all data in tables!!"
|
35
|
+
task :remigrate => :environment do
|
36
|
+
require 'highline/import'
|
37
|
+
|
38
|
+
if ENV['SKIP_NAG'] or ENV['OVERWRITE'].to_s.downcase == 'true' or agree("This task will destroy any data in the database. Are you sure you want to \ncontinue? [y/n] ")
|
39
|
+
|
40
|
+
# Drop all tables
|
41
|
+
ActiveRecord::Base.connection.tables.each { |t| ActiveRecord::Base.connection.drop_table t }
|
42
|
+
|
43
|
+
# Migrate upward
|
44
|
+
Rake::Task["db:migrate"].invoke
|
45
|
+
|
46
|
+
# Dump the schema
|
47
|
+
Rake::Task["db:schema:dump"].invoke
|
48
|
+
else
|
49
|
+
say "Task cancelled."
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Bootstrap is: migrating, loading defaults, sample data and seeding (for all extensions) and load_products tasks"
|
55
|
+
task :bootstrap do
|
56
|
+
require 'highline/import'
|
57
|
+
|
58
|
+
# remigrate unless production mode (as saftey check)
|
59
|
+
if %w[demo development test].include? Rails.env
|
60
|
+
if ENV['AUTO_ACCEPT'] or agree("This task will destroy any data in the database. Are you sure you want to \ncontinue? [y/n] ")
|
61
|
+
ENV['SKIP_NAG'] = 'yes'
|
62
|
+
Rake::Task["db:create"].invoke
|
63
|
+
Rake::Task["db:remigrate"].invoke
|
64
|
+
else
|
65
|
+
say "Task cancelled, exiting."
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
else
|
69
|
+
say "NOTE: Bootstrap in production mode will not drop database before migration"
|
70
|
+
Rake::Task["db:migrate"].invoke
|
71
|
+
end
|
72
|
+
|
73
|
+
ActiveRecord::Base.send(:subclasses).each do |model|
|
74
|
+
model.reset_column_information
|
75
|
+
end
|
76
|
+
|
77
|
+
load_defaults = Spree::Country.count == 0
|
78
|
+
unless load_defaults # ask if there are already Countries => default data hass been loaded
|
79
|
+
load_defaults = agree('Countries present, load sample data anyways? [y/n]: ')
|
80
|
+
end
|
81
|
+
if load_defaults
|
82
|
+
Rake::Task["db:seed"].invoke
|
83
|
+
end
|
84
|
+
|
85
|
+
if Rails.env.production? and Spree::Product.count > 0
|
86
|
+
load_sample = agree("WARNING: In Production and products exist in database, load sample data anyways? [y/n]:" )
|
87
|
+
else
|
88
|
+
load_sample = true if ENV['AUTO_ACCEPT']
|
89
|
+
load_sample = agree('Load Sample Data? [y/n]: ') unless load_sample
|
90
|
+
end
|
91
|
+
|
92
|
+
if load_sample
|
93
|
+
# Reload models' attributes in case they were loaded in old migrations with wrong attributes
|
94
|
+
ActiveRecord::Base.descendants.each(&:reset_column_information)
|
95
|
+
Rake::Task["spree_sample:load"].invoke
|
96
|
+
end
|
97
|
+
|
98
|
+
puts "Bootstrap Complete.\n\n"
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
desc "Fix orphan line items after upgrading to Spree 3.1: only needed if you have line items attached to deleted records with Slug (product) and SKU (variant) duplicates of non-deleted records."
|
104
|
+
task :fix_orphan_line_items => :environment do |t, args|
|
105
|
+
def get_input
|
106
|
+
STDOUT.flush
|
107
|
+
input = STDIN.gets.chomp
|
108
|
+
case input.upcase
|
109
|
+
when "Y"
|
110
|
+
return true
|
111
|
+
|
112
|
+
when "N"
|
113
|
+
puts "aborting ....."
|
114
|
+
return false
|
115
|
+
else
|
116
|
+
return true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
puts "WARNING: This task will re-associate any line_items associated with deleted variants to non-deleted variants with matching SKUs. Because other attributes and product associations may switch during the re-association, this may have unintended side-effects. If this task finishes successfully, line items for old order should no longer be orphaned from their varaints. You should run this task after you have already run the db migratoin AddDiscontinuedToProductsAndVariants. If the db migration did not warn you that it was leaving deleted records in place because of duplicate SKUs, then you do not need to run this rake task."
|
121
|
+
puts "Are you sure you want to continue? (Y/n):"
|
122
|
+
|
123
|
+
if get_input
|
124
|
+
puts "looping through all your deleted variants ..."
|
125
|
+
|
126
|
+
# first verify that I can really fix all of your line items
|
127
|
+
|
128
|
+
no_live_variants_found = []
|
129
|
+
variants_to_fix = []
|
130
|
+
|
131
|
+
Spree::Variant.deleted.each do |variant|
|
132
|
+
# check if this variant has any line items at all
|
133
|
+
if !variant.line_items.any?
|
134
|
+
next
|
135
|
+
end
|
136
|
+
|
137
|
+
variants_to_fix << variant
|
138
|
+
dup_variant = Spree::Variant.find_by(sku: variant.sku)
|
139
|
+
if dup_variant
|
140
|
+
# this variant is OK
|
141
|
+
else
|
142
|
+
no_live_variants_found << variant
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if !variants_to_fix.any?
|
147
|
+
abort( "ABORT: You have no deleted variants that are associated to line items. You do not need to run this raks task.")
|
148
|
+
end
|
149
|
+
|
150
|
+
if no_live_variants_found.any?
|
151
|
+
puts "ABORT: Unfortunately, I found some deleted variants in your database that do not have matching non-deleted variants to replace them with. This script can only be used to cleanup deleted variants that have SKUs that match non-deleted variants. To continue, you must either (1) un-delete these variants (hint: mark them 'discontinued' instead) or (2) create new variants with a matching SKU for each variant in the list below."
|
152
|
+
no_live_variants_found.each do |deleted_variant|
|
153
|
+
puts "variant id #{deleted_variant.id} (sku is '#{deleted_variant.sku}') ... no match found"
|
154
|
+
end
|
155
|
+
abort()
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
puts "Ready to fix..."
|
160
|
+
variants_to_fix.each do |variant|
|
161
|
+
dup_variant = Spree::Variant.find_by(sku: variant.sku)
|
162
|
+
puts "Changing all line items for #{variant.sku} variant id #{variant.id} (deleted) to variant id #{dup_variant.id} (not deleted) ..."
|
163
|
+
Spree::LineItem.unscoped.where(variant_id: variant.id).update_all(variant_id: dup_variant.id)
|
164
|
+
end
|
165
|
+
|
166
|
+
puts "DONE ! Your database should no longer have line items that are associated with deleted variants."
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
namespace :email do
|
2
|
+
desc 'Sends test email to specified address - Example: EMAIL=spree@example.com bundle exec rake email:test'
|
3
|
+
task test: :environment do
|
4
|
+
unless ENV['EMAIL'].present?
|
5
|
+
raise ArgumentError, "Must pass EMAIL environment variable. " \
|
6
|
+
"Example: EMAIL=spree@example.com bundle exec rake email:test"
|
7
|
+
end
|
8
|
+
Spree::TestMailer.test_email(ENV['EMAIL']).deliver_now
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
namespace :exchanges do
|
2
|
+
desc %q{Takes unreturned exchanged items and creates a new order to charge
|
3
|
+
the customer for not returning them}
|
4
|
+
task charge_unreturned_items: :environment do
|
5
|
+
|
6
|
+
unreturned_return_items = Spree::ReturnItem.awaiting_return.exchange_processed.joins(:exchange_inventory_unit).where([
|
7
|
+
"spree_inventory_units.created_at < :days_ago AND spree_inventory_units.state = :iu_state",
|
8
|
+
days_ago: Spree::Config[:expedited_exchanges_days_window].days.ago, iu_state: "shipped"
|
9
|
+
]).to_a
|
10
|
+
|
11
|
+
# Determine that a return item has already been deemed unreturned and therefore charged
|
12
|
+
# by the fact that its exchange inventory unit has popped off to a different order
|
13
|
+
unreturned_return_items.select! { |ri| ri.inventory_unit.order_id == ri.exchange_inventory_unit.order_id }
|
14
|
+
|
15
|
+
failed_orders = []
|
16
|
+
|
17
|
+
unreturned_return_items.group_by(&:exchange_shipment).each do |shipment, return_items|
|
18
|
+
begin
|
19
|
+
inventory_units = return_items.map(&:exchange_inventory_unit)
|
20
|
+
|
21
|
+
original_order = shipment.order
|
22
|
+
order_attributes = {
|
23
|
+
bill_address: original_order.bill_address,
|
24
|
+
ship_address: original_order.ship_address,
|
25
|
+
email: original_order.email
|
26
|
+
}
|
27
|
+
order_attributes[:store_id] = original_order.store_id
|
28
|
+
order = Spree::Order.create!(order_attributes)
|
29
|
+
|
30
|
+
order.associate_user!(original_order.user) if original_order.user
|
31
|
+
|
32
|
+
return_items.group_by(&:exchange_variant).map do |variant, variant_return_items|
|
33
|
+
variant_inventory_units = variant_return_items.map(&:exchange_inventory_unit)
|
34
|
+
line_item = Spree::LineItem.create!(variant: variant, quantity: variant_return_items.count, order: order)
|
35
|
+
variant_inventory_units.each { |i| i.update_attributes!(line_item_id: line_item.id, order_id: order.id) }
|
36
|
+
end
|
37
|
+
|
38
|
+
order.reload.update_with_updater!
|
39
|
+
while order.state != order.checkout_steps[-2] && order.next; end
|
40
|
+
|
41
|
+
unless order.payments.present?
|
42
|
+
card_to_reuse = original_order.valid_credit_cards.first
|
43
|
+
card_to_reuse = original_order.user.credit_cards.default.first if !card_to_reuse && original_order.user
|
44
|
+
Spree::Payment.create!(order: order,
|
45
|
+
payment_method_id: card_to_reuse.try(:payment_method_id),
|
46
|
+
source: card_to_reuse,
|
47
|
+
amount: order.total)
|
48
|
+
end
|
49
|
+
|
50
|
+
# the order builds a shipment on its own on transition to delivery, but we want
|
51
|
+
# the original exchange shipment, not the built one
|
52
|
+
order.shipments.destroy_all
|
53
|
+
shipment.update_attributes!(order_id: order.id)
|
54
|
+
order.update_attributes!(state: "confirm")
|
55
|
+
|
56
|
+
order.reload.next!
|
57
|
+
order.update_with_updater!
|
58
|
+
order.finalize!
|
59
|
+
|
60
|
+
failed_orders << order unless order.completed? && order.valid?
|
61
|
+
rescue
|
62
|
+
failed_orders << order
|
63
|
+
end
|
64
|
+
end
|
65
|
+
failure_message = failed_orders.map { |o| "#{o.number} - #{o.errors.full_messages}" }.join(", ")
|
66
|
+
raise UnableToChargeForUnreturnedItems.new(failure_message) if failed_orders.present?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
class UnableToChargeForUnreturnedItems < StandardError; end
|
data/script/rails
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/spree/core/engine', __FILE__)
|
6
|
+
|
7
|
+
require 'rails/all'
|
8
|
+
require 'rails/engine/commands'
|
9
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<!-- shameless -->
|
4
|
+
<head>
|
5
|
+
<title>Jason Ronallo</title>
|
6
|
+
</head>
|
7
|
+
|
8
|
+
<body>
|
9
|
+
<span itemscope itemtype="http://schema.org/Person"
|
10
|
+
itemid="http://ronallo.com#me">
|
11
|
+
<a itemprop="url" href="http://twitter.com/ronallo">
|
12
|
+
<span itemprop="name">Jason Ronallo</span>
|
13
|
+
</a> is the
|
14
|
+
<span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
|
15
|
+
<span itemprop="affiliation" itemscope itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
|
16
|
+
<span itemprop="name">
|
17
|
+
<a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
|
18
|
+
</span>
|
19
|
+
</span>
|
20
|
+
</span>
|
21
|
+
</body>
|
22
|
+
</html>
|