spree_core 2.1.12 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +4 -7
- data/app/helpers/spree/products_helper.rb +11 -9
- data/app/helpers/spree/store_helper.rb +5 -0
- data/app/models/spree/ability.rb +4 -0
- data/app/models/spree/address.rb +6 -6
- data/app/models/spree/adjustment.rb +40 -61
- data/app/models/spree/app_configuration.rb +1 -14
- data/app/models/spree/calculator.rb +12 -4
- data/app/models/spree/calculator/default_tax.rb +42 -38
- data/app/models/spree/calculator/flat_percent_item_total.rb +2 -4
- data/app/models/spree/calculator/free_shipping.rb +5 -2
- data/app/models/spree/calculator/percent_on_line_item.rb +15 -0
- data/app/models/spree/calculator/percent_per_item.rb +3 -0
- data/app/models/spree/classification.rb +3 -2
- data/app/models/spree/credit_card.rb +7 -25
- data/app/models/spree/gateway/bogus.rb +5 -5
- data/app/models/spree/gateway/bogus_simple.rb +0 -8
- data/app/models/spree/image.rb +0 -9
- data/app/models/spree/inventory_unit.rb +10 -4
- data/app/models/spree/item_adjustments.rb +65 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +33 -13
- data/app/models/spree/option_type.rb +2 -2
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/order.rb +109 -89
- data/app/models/spree/order/checkout.rb +48 -0
- data/app/models/spree/order_contents.rb +72 -37
- data/app/models/spree/order_inventory.rb +65 -68
- data/app/models/spree/order_populator.rb +3 -17
- data/app/models/spree/order_updater.rb +63 -44
- data/app/models/spree/payment.rb +20 -5
- data/app/models/spree/payment/processing.rb +19 -25
- data/app/models/spree/payment_capture_event.rb +9 -0
- data/app/models/spree/payment_method/check.rb +0 -2
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product.rb +14 -16
- data/app/models/spree/product/scopes.rb +4 -6
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +2 -2
- data/app/models/spree/promotion.rb +71 -50
- data/app/models/spree/promotion/actions/create_adjustment.rb +31 -32
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +83 -0
- data/app/models/spree/promotion/actions/free_shipping.rb +36 -0
- data/app/models/spree/promotion/rules/first_order.rb +4 -0
- data/app/models/spree/promotion/rules/item_total.rb +5 -1
- data/app/models/spree/promotion/rules/product.rb +4 -0
- data/app/models/spree/promotion/rules/user.rb +5 -6
- data/app/models/spree/promotion/rules/user_logged_in.rb +4 -0
- data/app/models/spree/promotion_action.rb +1 -5
- data/app/models/spree/promotion_handler/cart.rb +38 -0
- data/app/models/spree/promotion_handler/coupon.rb +76 -0
- data/app/models/spree/promotion_handler/free_shipping.rb +31 -0
- data/app/models/spree/promotion_handler/page.rb +24 -0
- data/app/models/spree/promotion_rule.rb +15 -7
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/return_authorization.rb +7 -1
- data/app/models/spree/shipment.rb +113 -49
- data/app/models/spree/shipping_calculator.rb +4 -5
- data/app/models/spree/shipping_category.rb +2 -2
- data/app/models/spree/shipping_method.rb +12 -6
- data/app/models/spree/shipping_rate.rb +27 -7
- data/app/models/spree/stock/availability_validator.rb +1 -1
- data/app/models/spree/stock/estimator.rb +13 -1
- data/app/models/spree/stock/package.rb +11 -7
- data/app/models/spree/stock/packer.rb +3 -3
- data/app/models/spree/stock/quantifier.rb +9 -1
- data/app/models/spree/stock_item.rb +11 -6
- data/app/models/spree/stock_movement.rb +1 -2
- data/app/models/spree/tax_category.rb +6 -1
- data/app/models/spree/tax_rate.rb +57 -49
- data/app/models/spree/taxon.rb +10 -5
- data/app/models/spree/taxonomy.rb +5 -2
- data/app/models/spree/variant.rb +33 -16
- data/app/models/spree/zone.rb +24 -24
- data/app/views/spree/shared/_routes.html.erb +3 -0
- data/config/locales/en.yml +42 -26
- data/db/migrate/20130213191427_create_default_stock.rb +3 -3
- 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/20130417120035_update_adjustment_states.rb +2 -2
- data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +1 -1
- data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
- data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +0 -5
- data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +7 -5
- data/db/migrate/20130807024301_upgrade_adjustments.rb +39 -0
- data/db/migrate/20130807024302_rename_adjustment_fields.rb +17 -0
- data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +5 -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/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +8 -0
- data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
- data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.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 +7 -3
- data/db/migrate/20131107132123_add_tax_category_to_variants.rb +6 -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/20131127001002_add_position_to_classifications.rb +5 -0
- data/db/migrate/20131211112807_create_spree_orders_promotions.rb +8 -0
- data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +5 -0
- data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +5 -0
- data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +6 -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/20140205120320_create_spree_payment_capture_events.rb +12 -0
- data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +5 -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/lib/generators/spree/dummy/dummy_generator.rb +1 -6
- data/lib/generators/spree/install/install_generator.rb +6 -6
- data/lib/generators/spree/install/templates/{app/assets/javascripts/admin → vendor/assets/javascripts/spree/backend}/all.js +3 -3
- data/lib/generators/spree/install/templates/{app/assets/javascripts/store → vendor/assets/javascripts/spree/frontend}/all.js +3 -3
- data/lib/generators/spree/install/templates/{app/assets/stylesheets/store → vendor/assets/stylesheets/spree/backend}/all.css +3 -3
- data/lib/generators/spree/install/templates/{app/assets/stylesheets/admin → vendor/assets/stylesheets/spree/frontend}/all.css +3 -3
- data/lib/spree/core.rb +21 -8
- data/lib/spree/core/calculated_adjustments.rb +0 -40
- data/lib/spree/core/controller_helpers.rb +5 -0
- data/lib/spree/core/controller_helpers/auth.rb +2 -2
- data/lib/spree/core/controller_helpers/common.rb +0 -5
- data/lib/spree/core/controller_helpers/order.rb +8 -9
- data/lib/spree/core/engine.rb +10 -17
- data/lib/spree/core/permalinks.rb +1 -1
- data/lib/spree/core/product_duplicator.rb +3 -8
- data/lib/spree/core/user_address.rb +1 -1
- data/lib/spree/core/validators/email.rb +23 -1
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/money.rb +1 -1
- data/lib/spree/permitted_attributes.rb +2 -2
- data/lib/spree/testing_support/caching.rb +47 -0
- data/lib/spree/testing_support/factories/adjustment_factory.rb +11 -2
- data/lib/spree/testing_support/factories/credit_card_factory.rb +2 -1
- data/lib/spree/testing_support/factories/order_factory.rb +10 -5
- data/lib/spree/testing_support/factories/payment_factory.rb +2 -2
- data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -3
- data/lib/spree/testing_support/factories/promotion_factory.rb +16 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +8 -4
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +1 -3
- data/lib/spree/testing_support/factories/stock_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +1 -1
- data/lib/tasks/core.rake +2 -2
- data/vendor/assets/fonts/FontAwesome.otf +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.eot +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.svg +399 -0
- data/vendor/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/vendor/assets/fonts/fontawesome-webfont.woff +0 -0
- data/vendor/assets/stylesheets/font-awesome.scss +1475 -0
- metadata +73 -44
- data/app/assets/javascripts/admin/handlebar_extensions.js +0 -9
- data/app/helpers/spree/admin/adjustments_helper.rb +0 -26
- data/app/helpers/spree/admin/images_helper.rb +0 -18
- data/app/helpers/spree/promotion_rules_helper.rb +0 -13
- data/app/models/spree/activator.rb +0 -29
- data/app/models/spree/calculator/per_item.rb +0 -41
- data/app/models/spree/stock/remaining_packer.rb +0 -22
- data/app/views/spree/payments/_payment.html.erb +0 -18
- data/db/migrate/20131118041203_add_tax_total_to_spree_orders.rb +0 -5
- data/db/migrate/20131118043021_add_order_id_to_spree_adjustments.rb +0 -6
- data/db/migrate/20131118074808_add_included_to_spree_adjustments.rb +0 -5
- data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +0 -5
- data/lib/spree/core/gateway_error.rb +0 -5
- data/lib/spree/core/preference_rescue.rb +0 -25
- data/lib/spree/core/s3_support.rb +0 -25
- data/lib/spree/promo/coupon_applicator.rb +0 -71
- data/lib/spree/testing_support/factories/activator_factory.rb +0 -8
@@ -20,46 +20,6 @@ module Spree
|
|
20
20
|
self.calculator = klass.new if klass && !self.calculator.is_a?(klass)
|
21
21
|
end
|
22
22
|
|
23
|
-
# Creates a new adjustment for the target object (which is any class that has_many :adjustments) and
|
24
|
-
# sets amount based on the calculator as applied to the calculable argument (Order, LineItems[], Shipment, etc.)
|
25
|
-
# By default the adjustment will not be considered mandatory
|
26
|
-
def create_adjustment(label, target, calculable, mandatory=false, state="closed")
|
27
|
-
# Adjustment calculations done on Spree::Shipment objects MUST
|
28
|
-
# be done on their to_package'd variants instead
|
29
|
-
# It's only the package that contains the correct information.
|
30
|
-
# See https://github.com/spree/spree_active_shipping/pull/96 et. al
|
31
|
-
old_calculable = calculable
|
32
|
-
calculable = calculable.to_package if calculable.is_a?(Spree::Shipment)
|
33
|
-
amount = compute_amount(calculable)
|
34
|
-
return if amount == 0 && !mandatory
|
35
|
-
target.adjustments.create(
|
36
|
-
:amount => amount,
|
37
|
-
:source => old_calculable,
|
38
|
-
:originator => self,
|
39
|
-
:label => label,
|
40
|
-
:mandatory => mandatory,
|
41
|
-
:state => state
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
# Updates the amount of the adjustment using our Calculator and calling the +compute+ method with the +calculable+
|
46
|
-
# referenced passed to the method.
|
47
|
-
def update_adjustment(adjustment, calculable)
|
48
|
-
# Adjustment calculations done on Spree::Shipment objects MUST
|
49
|
-
# be done on their to_package'd variants instead
|
50
|
-
# It's only the package that contains the correct information.
|
51
|
-
# See https://github.com/spree/spree_active_shipping/pull/96 et. al
|
52
|
-
calculable = calculable.to_package if calculable.is_a?(Spree::Shipment)
|
53
|
-
adjustment.update_column(:amount, compute_amount(calculable))
|
54
|
-
end
|
55
|
-
|
56
|
-
# Calculate the amount to be used when creating an adjustment
|
57
|
-
# NOTE: May be overriden by classes where this module is included into.
|
58
|
-
# Such as Spree::Promotion::Action::CreateAdjustment.
|
59
|
-
def compute_amount(calculable)
|
60
|
-
self.calculator.compute(calculable)
|
61
|
-
end
|
62
|
-
|
63
23
|
private
|
64
24
|
def self.model_name_without_spree_namespace
|
65
25
|
self.to_s.tableize.gsub('/', '_').sub('spree_', '')
|
@@ -8,7 +8,7 @@ module Spree
|
|
8
8
|
helper_method :try_spree_current_user
|
9
9
|
|
10
10
|
rescue_from CanCan::AccessDenied do |exception|
|
11
|
-
|
11
|
+
unauthorized
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -20,7 +20,7 @@ module Spree
|
|
20
20
|
# Redirect as appropriate when an access request fails. The default action is to redirect to the login screen.
|
21
21
|
# Override this method in your controllers if you want to have special behavior in case the user is not authorized
|
22
22
|
# to access the requested action. For example, a popup window might simply close itself.
|
23
|
-
def
|
23
|
+
def unauthorized
|
24
24
|
if try_spree_current_user
|
25
25
|
flash[:error] = Spree.t(:authorization_failure)
|
26
26
|
redirect_to '/unauthorized'
|
@@ -14,11 +14,6 @@ module Spree
|
|
14
14
|
|
15
15
|
protected
|
16
16
|
|
17
|
-
# Convenience method for firing instrumentation events with the default payload hash
|
18
|
-
def fire_event(name, extra_payload = {})
|
19
|
-
ActiveSupport::Notifications.instrument(name, default_notification_payload.merge(extra_payload))
|
20
|
-
end
|
21
|
-
|
22
17
|
# Creates the hash that is sent as the payload for all notifications. Specific notifications will
|
23
18
|
# add additional keys as appropriate. Override this method if you need additional data when
|
24
19
|
# responding to a notification
|
@@ -4,16 +4,23 @@ module Spree
|
|
4
4
|
module Order
|
5
5
|
def self.included(base)
|
6
6
|
base.class_eval do
|
7
|
+
helper_method :simple_current_order
|
7
8
|
helper_method :current_order
|
8
9
|
helper_method :current_currency
|
9
10
|
before_filter :set_current_order
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
14
|
+
# Used in the link_to_cart helper.
|
15
|
+
def simple_current_order
|
16
|
+
@order ||= Spree::Order.find_by(id: session[:order_id], currency: current_currency)
|
17
|
+
end
|
18
|
+
|
13
19
|
# The current incomplete order from the session for use in cart and during checkout
|
14
20
|
def current_order(options = {})
|
15
21
|
options[:create_order_if_necessary] ||= false
|
16
22
|
options[:lock] ||= false
|
23
|
+
|
17
24
|
return @current_order if @current_order
|
18
25
|
|
19
26
|
if session[:order_id]
|
@@ -47,14 +54,6 @@ module Spree
|
|
47
54
|
@order.associate_user!(try_spree_current_user) if @order.user.blank? || @order.email.blank?
|
48
55
|
end
|
49
56
|
|
50
|
-
# This will trigger any "first order" promotions to be triggered
|
51
|
-
# Assuming of course that this session variable was set correctly in
|
52
|
-
# the authentication provider's registrations controller
|
53
|
-
if session[:spree_user_signup] && @order
|
54
|
-
fire_event('spree.user.signup', user: try_spree_current_user, order: @order)
|
55
|
-
session[:spree_user_signup] = nil
|
56
|
-
end
|
57
|
-
|
58
57
|
session[:guest_token] = nil
|
59
58
|
end
|
60
59
|
|
@@ -74,7 +73,7 @@ module Spree
|
|
74
73
|
end
|
75
74
|
|
76
75
|
def ip_address
|
77
|
-
request.
|
76
|
+
request.env['HTTP_X_REAL_IP'] || request.env['REMOTE_ADDR']
|
78
77
|
end
|
79
78
|
end
|
80
79
|
end
|
data/lib/spree/core/engine.rb
CHANGED
@@ -4,18 +4,6 @@ module Spree
|
|
4
4
|
isolate_namespace Spree
|
5
5
|
engine_name 'spree'
|
6
6
|
|
7
|
-
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
-
|
9
|
-
config.after_initialize do
|
10
|
-
ActiveSupport::Notifications.subscribe(/^spree\./) do |*args|
|
11
|
-
event_name, start_time, end_time, id, payload = args
|
12
|
-
Activator.active.event_name_starts_with(event_name).each do |activator|
|
13
|
-
payload[:event_name] = event_name
|
14
|
-
activator.activate(payload)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
7
|
initializer "spree.environment", :before => :load_config_initializers do |app|
|
20
8
|
app.config.spree = Spree::Core::Environment.new
|
21
9
|
Spree::Config = app.config.spree.preferences #legacy access
|
@@ -71,9 +59,11 @@ module Spree
|
|
71
59
|
Spree::Calculator::FlatPercentItemTotal,
|
72
60
|
Spree::Calculator::FlatRate,
|
73
61
|
Spree::Calculator::FlexiRate,
|
74
|
-
|
75
|
-
|
76
|
-
|
62
|
+
]
|
63
|
+
|
64
|
+
app.config.spree.calculators.add_class('promotion_actions_create_item_adjustments')
|
65
|
+
app.config.spree.calculators.promotion_actions_create_item_adjustments = [
|
66
|
+
Spree::Calculator::PercentOnLineItem
|
77
67
|
]
|
78
68
|
end
|
79
69
|
|
@@ -91,8 +81,11 @@ module Spree
|
|
91
81
|
end
|
92
82
|
|
93
83
|
initializer 'spree.promo.register.promotions.actions' do |app|
|
94
|
-
app.config.spree.promotions.actions = [
|
95
|
-
|
84
|
+
app.config.spree.promotions.actions = [
|
85
|
+
Promotion::Actions::CreateAdjustment,
|
86
|
+
Promotion::Actions::CreateItemAdjustments,
|
87
|
+
Promotion::Actions::CreateLineItems,
|
88
|
+
Promotion::Actions::FreeShipping]
|
96
89
|
end
|
97
90
|
|
98
91
|
# filter sensitive information during logging
|
@@ -2,12 +2,8 @@ module Spree
|
|
2
2
|
class ProductDuplicator
|
3
3
|
attr_accessor :product
|
4
4
|
|
5
|
-
|
6
|
-
mattr_accessor :clone_images_default
|
7
|
-
|
8
|
-
def initialize(product, include_images = @@clone_images_default)
|
5
|
+
def initialize(product)
|
9
6
|
@product = product
|
10
|
-
@include_images = include_images
|
11
7
|
end
|
12
8
|
|
13
9
|
def duplicate
|
@@ -27,7 +23,6 @@ module Spree
|
|
27
23
|
def duplicate_product
|
28
24
|
product.dup.tap do |new_product|
|
29
25
|
new_product.name = "COPY OF #{product.name}"
|
30
|
-
new_product.permalink = "copy-of-#{product.permalink}"
|
31
26
|
new_product.taxons = product.taxons
|
32
27
|
new_product.created_at = nil
|
33
28
|
new_product.deleted_at = nil
|
@@ -43,7 +38,7 @@ module Spree
|
|
43
38
|
master.dup.tap do |new_master|
|
44
39
|
new_master.sku = "COPY OF #{master.sku}"
|
45
40
|
new_master.deleted_at = nil
|
46
|
-
new_master.images = master.images.map { |image| duplicate_image image }
|
41
|
+
new_master.images = master.images.map { |image| duplicate_image image }
|
47
42
|
new_master.price = master.price
|
48
43
|
new_master.currency = master.currency
|
49
44
|
end
|
@@ -53,7 +48,7 @@ module Spree
|
|
53
48
|
new_variant = variant.dup
|
54
49
|
new_variant.sku = "COPY OF #{new_variant.sku}"
|
55
50
|
new_variant.deleted_at = nil
|
56
|
-
new_variant.option_values = variant.option_values.map { |option_value| option_value}
|
51
|
+
new_variant.option_values = variant.option_values.map { |option_value| option_value.dup}
|
57
52
|
new_variant
|
58
53
|
end
|
59
54
|
|
@@ -1,7 +1,29 @@
|
|
1
|
+
# Borrowed from http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/
|
2
|
+
# Mentioned in tweet here: https://twitter.com/_sohara/status/177120126083141633
|
3
|
+
require 'mail'
|
1
4
|
class EmailValidator < ActiveModel::EachValidator
|
2
5
|
def validate_each(record,attribute,value)
|
3
|
-
unless value
|
6
|
+
unless valid?(value)
|
4
7
|
record.errors.add(attribute, :invalid, {:value => value}.merge!(options))
|
5
8
|
end
|
6
9
|
end
|
10
|
+
|
11
|
+
def valid?(email)
|
12
|
+
begin
|
13
|
+
m = Mail::Address.new(email)
|
14
|
+
# We must check that value contains a domain and that value is an email address
|
15
|
+
r = m.domain && m.address == email
|
16
|
+
t = m.__send__(:tree)
|
17
|
+
# We need to dig into treetop
|
18
|
+
# A valid domain must have dot_atom_text elements size > 1
|
19
|
+
# user@localhost is excluded
|
20
|
+
# treetop must respond to domain
|
21
|
+
# We exclude valid email values like <user@localhost.com>
|
22
|
+
# Hence we use m.__send__(tree).domain
|
23
|
+
r &&= (t.domain.dot_atom_text.elements.size > 1)
|
24
|
+
rescue Exception => e
|
25
|
+
r = false
|
26
|
+
end
|
27
|
+
r
|
28
|
+
end
|
7
29
|
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/money.rb
CHANGED
@@ -30,7 +30,7 @@ module Spree
|
|
30
30
|
|
31
31
|
# Check the first character for a currency symbol, alternatively get it
|
32
32
|
# from the stated currency string
|
33
|
-
c = if ::
|
33
|
+
c = if ::Money.assume_from_symbol && i =~ /^(\$|€|£)/
|
34
34
|
case i
|
35
35
|
when /^\$/ then "USD"
|
36
36
|
when /^€/ then "EUR"
|
@@ -27,7 +27,7 @@ module Spree
|
|
27
27
|
mattr_reader *ATTRIBUTES
|
28
28
|
|
29
29
|
@@address_attributes = [
|
30
|
-
:
|
30
|
+
:firstname, :lastname, :address1, :address2,
|
31
31
|
:city, :country_id, :state_id, :zipcode, :phone,
|
32
32
|
:state_name, :alternative_phone, :company,
|
33
33
|
:country => [:iso, :name, :iso3, :iso_name],
|
@@ -68,7 +68,7 @@ module Spree
|
|
68
68
|
# month / year may be provided by some sources, or others may elect to use one field
|
69
69
|
@@source_attributes = [
|
70
70
|
:number, :month, :year, :expiry, :verification_value,
|
71
|
-
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
71
|
+
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
72
72
|
:gateway_payment_profile_id, :last_digits, :name]
|
73
73
|
|
74
74
|
@@stock_item_attributes = [:variant, :stock_location, :backorderable, :variant_id]
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Spree
|
2
|
+
module TestingSupport
|
3
|
+
module Caching
|
4
|
+
def cache_writes
|
5
|
+
@cache_write_events
|
6
|
+
end
|
7
|
+
|
8
|
+
def assert_written_to_cache(key)
|
9
|
+
unless @cache_write_events.detect { |event| event[:key].starts_with?(key) }
|
10
|
+
fail %Q{Expected to find #{key} in the cache, but didn't.
|
11
|
+
|
12
|
+
Cache writes:
|
13
|
+
#{@cache_write_events.join("\n")}
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def clear_cache_events
|
19
|
+
@cache_read_events = []
|
20
|
+
@cache_write_events = []
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
RSpec.configure do |config|
|
27
|
+
config.include Spree::TestingSupport::Caching, :caching => true
|
28
|
+
|
29
|
+
config.before(:each, :caching => true) do
|
30
|
+
ActionController::Base.perform_caching = true
|
31
|
+
|
32
|
+
ActiveSupport::Notifications.subscribe("read_fragment.action_controller") do |event, start_time, finish_time, _, details|
|
33
|
+
@cache_read_events ||= []
|
34
|
+
@cache_read_events << details
|
35
|
+
end
|
36
|
+
|
37
|
+
ActiveSupport::Notifications.subscribe("write_fragment.action_controller") do |event, start_time, finish_time, _, details|
|
38
|
+
@cache_write_events ||= []
|
39
|
+
@cache_write_events << details
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
config.after(:each, :caching => true) do
|
44
|
+
ActionController::Base.perform_caching = false
|
45
|
+
Rails.cache.clear
|
46
|
+
end
|
47
|
+
end
|
@@ -3,15 +3,24 @@ FactoryGirl.define do
|
|
3
3
|
association(:adjustable, factory: :order)
|
4
4
|
amount 100.0
|
5
5
|
label 'Shipping'
|
6
|
-
association(:source, factory: :
|
6
|
+
association(:source, factory: :tax_rate)
|
7
7
|
eligible true
|
8
8
|
end
|
9
9
|
|
10
|
-
factory :
|
10
|
+
factory :tax_adjustment, class: Spree::Adjustment do
|
11
11
|
association(:adjustable, factory: :line_item)
|
12
12
|
amount 10.0
|
13
13
|
label 'VAT 5%'
|
14
14
|
association(:source, factory: :tax_rate)
|
15
15
|
eligible true
|
16
|
+
|
17
|
+
after(:create) do |adjustment|
|
18
|
+
# Set correct tax category, so that adjustment amount is not 0
|
19
|
+
if adjustment.adjustable.is_a?(Spree::LineItem)
|
20
|
+
adjustment.source.tax_category = adjustment.adjustable.tax_category
|
21
|
+
adjustment.source.save
|
22
|
+
adjustment.update!
|
23
|
+
end
|
24
|
+
end
|
16
25
|
end
|
17
26
|
end
|
@@ -21,20 +21,27 @@ FactoryGirl.define do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
after(:create) do |order, evaluator|
|
24
|
+
create_list(:line_item, evaluator.line_items_count, order: order)
|
25
|
+
order.line_items.reload
|
26
|
+
|
24
27
|
create(:shipment, order: order)
|
25
28
|
order.shipments.reload
|
26
29
|
|
27
|
-
create_list(:line_item, evaluator.line_items_count, order: order)
|
28
|
-
order.line_items.reload
|
29
30
|
order.update!
|
30
31
|
end
|
31
32
|
|
32
33
|
factory :completed_order_with_totals do
|
33
34
|
state 'complete'
|
34
|
-
completed_at { Time.now }
|
35
35
|
|
36
36
|
after(:create) do |order|
|
37
37
|
order.refresh_shipment_rates
|
38
|
+
order.update_column(:completed_at, Time.now)
|
39
|
+
end
|
40
|
+
|
41
|
+
factory :completed_order_with_pending_payment do
|
42
|
+
after(:create) do |order|
|
43
|
+
create(:payment, amount: order.total, order: order)
|
44
|
+
end
|
38
45
|
end
|
39
46
|
|
40
47
|
factory :order_ready_to_ship do
|
@@ -52,8 +59,6 @@ FactoryGirl.define do
|
|
52
59
|
|
53
60
|
factory :shipped_order do
|
54
61
|
after(:create) do |order|
|
55
|
-
order.update_totals # To ensure we have the right total
|
56
|
-
create(:payment, amount: order.total, order: order, state: 'completed')
|
57
62
|
order.shipments.each do |shipment|
|
58
63
|
shipment.inventory_units.each { |u| u.update_column('state', 'shipped') }
|
59
64
|
shipment.update_column('state', 'shipped')
|
@@ -1,7 +1,7 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
factory :payment, class: Spree::Payment do
|
3
3
|
amount 45.75
|
4
|
-
association(:payment_method, factory: :
|
4
|
+
association(:payment_method, factory: :credit_card_payment_method)
|
5
5
|
association(:source, factory: :credit_card)
|
6
6
|
order
|
7
7
|
state 'checkout'
|
@@ -10,7 +10,7 @@ FactoryGirl.define do
|
|
10
10
|
|
11
11
|
factory :check_payment, class: Spree::Payment do
|
12
12
|
amount 45.75
|
13
|
-
payment_method
|
13
|
+
association(:payment_method, factory: :check_payment_method)
|
14
14
|
order
|
15
15
|
end
|
16
16
|
end
|