spree_core 2.1.12 → 2.2.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 +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
|