spree_core 2.2.0 → 2.2.1
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/LICENSE +26 -0
- data/app/helpers/spree/taxons_helper.rb +2 -2
- data/app/models/concerns/spree/user_api_authentication.rb +13 -0
- data/app/models/concerns/spree/user_reporting.rb +27 -0
- data/app/models/spree/adjustment.rb +3 -2
- data/app/models/spree/app_configuration.rb +1 -0
- data/app/models/spree/calculator/default_tax.rb +5 -1
- data/app/models/spree/calculator.rb +2 -2
- data/app/models/spree/credit_card.rb +11 -5
- data/app/models/spree/gateway.rb +25 -0
- data/app/models/spree/item_adjustments.rb +2 -0
- data/app/models/spree/legacy_user.rb +2 -3
- data/app/models/spree/line_item.rb +7 -0
- data/app/models/spree/order/checkout.rb +19 -7
- data/app/models/spree/order/currency_updater.rb +40 -0
- data/app/models/spree/order.rb +19 -3
- data/app/models/spree/order_updater.rb +1 -1
- data/app/models/spree/payment.rb +5 -2
- data/app/models/spree/payment_method.rb +1 -0
- data/app/models/spree/product/scopes.rb +13 -17
- data/app/models/spree/product.rb +10 -2
- data/app/models/spree/promotion/actions/free_shipping.rb +4 -2
- data/app/models/spree/promotion/rules/product.rb +0 -9
- data/app/models/spree/promotion.rb +1 -1
- data/app/models/spree/shipment.rb +19 -14
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/shipping_rate.rb +15 -9
- data/app/models/spree/stock/estimator.rb +4 -1
- data/app/models/spree/stock_location.rb +1 -0
- data/app/models/spree/tax_rate.rb +81 -7
- data/config/initializers/user_class_extensions.rb +3 -0
- data/config/locales/en.yml +26 -0
- data/db/default/spree/countries.rb +2 -1
- data/db/migrate/20130213191427_create_default_stock.rb +3 -3
- 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/20130802022321_migrate_tax_categories_to_line_items.rb +5 -7
- data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +13 -0
- data/lib/generators/spree/dummy/templates/rails/database.yml +6 -6
- data/lib/spree/core/controller_helpers/auth.rb +10 -1
- data/lib/spree/core/controller_helpers/order.rb +1 -1
- data/lib/spree/core/controller_helpers/respond_with.rb +6 -1
- data/lib/spree/core/importer/order.rb +168 -0
- data/lib/spree/core/importer.rb +8 -0
- data/lib/spree/core/product_duplicator.rb +1 -1
- data/lib/spree/core/user_address.rb +2 -0
- data/lib/spree/core/user_payment_source.rb +20 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +4 -0
- data/lib/spree/migrations.rb +1 -1
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +23 -1
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -6
- data/lib/spree/testing_support/factories/order_factory.rb +8 -8
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +3 -1
- data/lib/spree/testing_support/factories/user_factory.rb +5 -0
- metadata +11 -3
@@ -0,0 +1,168 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module Importer
|
4
|
+
class Order
|
5
|
+
|
6
|
+
def self.import(user, params)
|
7
|
+
begin
|
8
|
+
ensure_country_id_from_params params[:ship_address_attributes]
|
9
|
+
ensure_state_id_from_params params[:ship_address_attributes]
|
10
|
+
ensure_country_id_from_params params[:bill_address_attributes]
|
11
|
+
ensure_state_id_from_params params[:bill_address_attributes]
|
12
|
+
|
13
|
+
order = Spree::Order.create!
|
14
|
+
order.associate_user!(user)
|
15
|
+
|
16
|
+
create_shipments_from_params(params.delete(:shipments_attributes), order)
|
17
|
+
create_line_items_from_params(params.delete(:line_items_attributes),order)
|
18
|
+
create_adjustments_from_params(params.delete(:adjustments_attributes), order)
|
19
|
+
create_payments_from_params(params.delete(:payments_attributes), order)
|
20
|
+
|
21
|
+
if(completed_at = params.delete(:completed_at))
|
22
|
+
order.completed_at = completed_at
|
23
|
+
order.state = 'complete'
|
24
|
+
end
|
25
|
+
|
26
|
+
order.update_attributes!(params)
|
27
|
+
order.reload
|
28
|
+
rescue Exception => e
|
29
|
+
order.destroy if order && order.persisted?
|
30
|
+
raise e.message
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.create_shipments_from_params(shipments_hash, order)
|
35
|
+
return [] unless shipments_hash
|
36
|
+
shipments_hash.each do |s|
|
37
|
+
begin
|
38
|
+
shipment = order.shipments.build
|
39
|
+
shipment.tracking = s[:tracking]
|
40
|
+
shipment.stock_location = Spree::StockLocation.find_by_name!(s[:stock_location])
|
41
|
+
|
42
|
+
inventory_units = s[:inventory_units] || []
|
43
|
+
inventory_units.each do |iu|
|
44
|
+
ensure_variant_id_from_params(iu)
|
45
|
+
|
46
|
+
unit = shipment.inventory_units.build
|
47
|
+
unit.order = order
|
48
|
+
unit.variant_id = iu[:variant_id]
|
49
|
+
end
|
50
|
+
|
51
|
+
shipment.save!
|
52
|
+
|
53
|
+
shipping_method = Spree::ShippingMethod.find_by_name!(s[:shipping_method])
|
54
|
+
shipment.shipping_rates.create!(:shipping_method => shipping_method,
|
55
|
+
:cost => s[:cost])
|
56
|
+
rescue Exception => e
|
57
|
+
raise "Order import shipments: #{e.message} #{s}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.create_line_items_from_params(line_items_hash, order)
|
63
|
+
return {} unless line_items_hash
|
64
|
+
line_items_hash.each_key do |k|
|
65
|
+
begin
|
66
|
+
line_item = line_items_hash[k]
|
67
|
+
ensure_variant_id_from_params(line_item)
|
68
|
+
|
69
|
+
extra_params = line_item.except(:variant_id, :quantity)
|
70
|
+
line_item = order.contents.add(Spree::Variant.find(line_item[:variant_id]), line_item[:quantity])
|
71
|
+
line_item.update_attributes(extra_params) unless extra_params.empty?
|
72
|
+
rescue Exception => e
|
73
|
+
raise "Order import line items: #{e.message} #{line_item}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.create_adjustments_from_params(adjustments, order)
|
79
|
+
return [] unless adjustments
|
80
|
+
adjustments.each do |a|
|
81
|
+
begin
|
82
|
+
adjustment = order.adjustments.build(:amount => a[:amount].to_f,
|
83
|
+
:label => a[:label])
|
84
|
+
adjustment.save!
|
85
|
+
adjustment.close!
|
86
|
+
rescue Exception => e
|
87
|
+
raise "Order import adjustments: #{e.message} #{a}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.create_payments_from_params(payments_hash, order)
|
93
|
+
return [] unless payments_hash
|
94
|
+
payments_hash.each do |p|
|
95
|
+
begin
|
96
|
+
payment = order.payments.build
|
97
|
+
payment.amount = p[:amount].to_f
|
98
|
+
payment.state = p.fetch(:state, 'completed')
|
99
|
+
payment.payment_method = Spree::PaymentMethod.find_by_name!(p[:payment_method])
|
100
|
+
payment.save!
|
101
|
+
rescue Exception => e
|
102
|
+
raise "Order import payments: #{e.message} #{p}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.ensure_variant_id_from_params(hash)
|
108
|
+
begin
|
109
|
+
unless hash[:variant_id].present?
|
110
|
+
hash[:variant_id] = Spree::Variant.active.find_by_sku!(hash[:sku]).id
|
111
|
+
hash.delete(:sku)
|
112
|
+
end
|
113
|
+
rescue Exception => e
|
114
|
+
raise "Ensure order import variant: #{e.message} #{hash}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def self.ensure_country_id_from_params(address)
|
119
|
+
return if address.nil? or address[:country_id].present? or address[:country].nil?
|
120
|
+
|
121
|
+
begin
|
122
|
+
search = {}
|
123
|
+
if name = address[:country]['name']
|
124
|
+
search[:name] = name
|
125
|
+
elsif iso_name = address[:country]['iso_name']
|
126
|
+
search[:iso_name] = iso_name.upcase
|
127
|
+
elsif iso = address[:country]['iso']
|
128
|
+
search[:iso] = iso.upcase
|
129
|
+
elsif iso3 = address[:country]['iso3']
|
130
|
+
search[:iso3] = iso3.upcase
|
131
|
+
end
|
132
|
+
|
133
|
+
address.delete(:country)
|
134
|
+
address[:country_id] = Spree::Country.where(search).first!.id
|
135
|
+
|
136
|
+
rescue Exception => e
|
137
|
+
raise "Ensure order import address country: #{e.message} #{search}"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.ensure_state_id_from_params(address)
|
142
|
+
return if address.nil? or address[:state_id].present? or address[:state].nil?
|
143
|
+
|
144
|
+
begin
|
145
|
+
search = {}
|
146
|
+
if name = address[:state]['name']
|
147
|
+
search[:name] = name
|
148
|
+
elsif abbr = address[:state]['abbr']
|
149
|
+
search[:abbr] = abbr.upcase
|
150
|
+
end
|
151
|
+
|
152
|
+
address.delete(:state)
|
153
|
+
search[:country_id] = address[:country_id]
|
154
|
+
|
155
|
+
if state = Spree::State.where(search).first
|
156
|
+
address[:state_id] = state.id
|
157
|
+
else
|
158
|
+
address[:state_name] = search[:name] || search[:abbr]
|
159
|
+
end
|
160
|
+
rescue Exception => e
|
161
|
+
raise "Ensure order import address state: #{e.message} #{search}"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -48,7 +48,7 @@ module Spree
|
|
48
48
|
new_variant = variant.dup
|
49
49
|
new_variant.sku = "COPY OF #{new_variant.sku}"
|
50
50
|
new_variant.deleted_at = nil
|
51
|
-
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}
|
52
52
|
new_variant
|
53
53
|
end
|
54
54
|
|
@@ -10,6 +10,8 @@ module Spree
|
|
10
10
|
belongs_to :ship_address, foreign_key: :ship_address_id, class_name: 'Spree::Address'
|
11
11
|
alias_attribute :shipping_address, :ship_address
|
12
12
|
|
13
|
+
accepts_nested_attributes_for :ship_address, :bill_address
|
14
|
+
|
13
15
|
def persist_order_address(order)
|
14
16
|
b_address = self.bill_address || self.build_bill_address
|
15
17
|
b_address.attributes = order.bill_address.attributes.except('id', 'updated_at', 'created_at')
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spree
|
2
|
+
module Core
|
3
|
+
module UserPaymentSource
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
has_many :credit_cards, class_name: "Spree::CreditCard", foreign_key: :user_id
|
8
|
+
|
9
|
+
def payment_sources
|
10
|
+
credit_cards.with_payment_profile
|
11
|
+
end
|
12
|
+
|
13
|
+
def drop_payment_source(source)
|
14
|
+
gateway = source.payment_method
|
15
|
+
gateway.disable_customer_profile(source)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
@@ -41,6 +41,7 @@ module Spree
|
|
41
41
|
autoload :ProductFilters, "spree/core/product_filters"
|
42
42
|
|
43
43
|
class GatewayError < RuntimeError; end
|
44
|
+
class DestroyWithOrdersError < StandardError; end
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
@@ -61,6 +62,7 @@ require 'spree/money'
|
|
61
62
|
|
62
63
|
require 'spree/permitted_attributes'
|
63
64
|
require 'spree/core/user_address'
|
65
|
+
require 'spree/core/user_payment_source'
|
64
66
|
require 'spree/core/delegate_belongs_to'
|
65
67
|
require 'spree/core/permalinks'
|
66
68
|
require 'spree/core/token_resource'
|
@@ -70,3 +72,5 @@ require 'spree/core/controller_helpers'
|
|
70
72
|
require 'spree/core/controller_helpers/strong_parameters'
|
71
73
|
require 'spree/core/controller_helpers/ssl'
|
72
74
|
require 'spree/core/controller_helpers/search'
|
75
|
+
|
76
|
+
require 'spree/core/importer'
|
data/lib/spree/migrations.rb
CHANGED
@@ -30,7 +30,7 @@ module Spree
|
|
30
30
|
|
31
31
|
unless (engine_migrations.sort - engine_in_app.sort).empty?
|
32
32
|
puts "[#{engine_name.capitalize} WARNING] Missing migrations." \
|
33
|
-
"Run `bundle exec rake railties:install:migrations` to get them.\n\n"
|
33
|
+
" Run `bundle exec rake railties:install:migrations` to get them.\n\n"
|
34
34
|
true
|
35
35
|
end
|
36
36
|
end
|
@@ -69,7 +69,7 @@ module Spree
|
|
69
69
|
@@source_attributes = [
|
70
70
|
:number, :month, :year, :expiry, :verification_value,
|
71
71
|
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
72
|
-
:gateway_payment_profile_id, :last_digits, :name]
|
72
|
+
:gateway_payment_profile_id, :last_digits, :name, :encrypted_data]
|
73
73
|
|
74
74
|
@@stock_item_attributes = [:variant, :stock_location, :backorderable, :variant_id]
|
75
75
|
|
@@ -103,12 +103,34 @@ module CapybaraExt
|
|
103
103
|
|
104
104
|
def wait_for_ajax
|
105
105
|
counter = 0
|
106
|
-
while page.evaluate_script("$.active
|
106
|
+
while page.evaluate_script("typeof($) === 'undefined' || $.active > 0")
|
107
107
|
counter += 1
|
108
108
|
sleep(0.1)
|
109
109
|
raise "AJAX request took longer than 5 seconds." if counter >= 50
|
110
110
|
end
|
111
111
|
end
|
112
|
+
|
113
|
+
def accept_alert
|
114
|
+
if page.driver === Capybara::Selenium::Driver
|
115
|
+
yield
|
116
|
+
page.driver.browser.switch_to.alert.accept
|
117
|
+
else
|
118
|
+
page.evaluate_script('window.confirm = function() { return true; }')
|
119
|
+
yield
|
120
|
+
end
|
121
|
+
end
|
122
|
+
def dismiss_alert
|
123
|
+
if page.driver === Capybara::Selenium::Driver
|
124
|
+
yield
|
125
|
+
page.driver.browser.switch_to.alert.dismiss
|
126
|
+
else
|
127
|
+
page.evaluate_script('window.confirm = function() { return false; }')
|
128
|
+
yield
|
129
|
+
|
130
|
+
# Restore existing default
|
131
|
+
page.evaluate_script('window.confirm = function() { return true; }')
|
132
|
+
end
|
133
|
+
end
|
112
134
|
end
|
113
135
|
|
114
136
|
Capybara.configure do |config|
|
@@ -1,10 +1,5 @@
|
|
1
|
-
# allows credit card info to be saved to the database which is needed for factories to work properly
|
2
|
-
class TestCard < Spree::CreditCard
|
3
|
-
def remove_readonly_attributes(attributes) attributes; end
|
4
|
-
end
|
5
|
-
|
6
1
|
FactoryGirl.define do
|
7
|
-
factory :credit_card, class:
|
2
|
+
factory :credit_card, class: Spree::CreditCard do
|
8
3
|
verification_value 123
|
9
4
|
month 12
|
10
5
|
year { Time.now.year }
|
@@ -55,17 +55,17 @@ FactoryGirl.define do
|
|
55
55
|
end
|
56
56
|
order.reload
|
57
57
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
factory :shipped_order do
|
59
|
+
after(:create) do |order|
|
60
|
+
order.shipments.each do |shipment|
|
61
|
+
shipment.inventory_units.each { |u| u.update_column('state', 'shipped') }
|
62
|
+
shipment.update_column('state', 'shipped')
|
63
|
+
end
|
64
|
+
order.reload
|
65
65
|
end
|
66
|
-
order.reload
|
67
66
|
end
|
68
67
|
end
|
68
|
+
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -4,7 +4,9 @@ FactoryGirl.define do
|
|
4
4
|
name 'UPS Ground'
|
5
5
|
|
6
6
|
before(:create) do |shipping_method, evaluator|
|
7
|
-
shipping_method.shipping_categories
|
7
|
+
if shipping_method.shipping_categories.empty?
|
8
|
+
shipping_method.shipping_categories << (Spree::ShippingCategory.first || create(:shipping_category))
|
9
|
+
end
|
8
10
|
end
|
9
11
|
|
10
12
|
factory :shipping_method, class: Spree::ShippingMethod do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -282,6 +282,7 @@ executables: []
|
|
282
282
|
extensions: []
|
283
283
|
extra_rdoc_files: []
|
284
284
|
files:
|
285
|
+
- LICENSE
|
285
286
|
- app/assets/images/logo/spree_50.png
|
286
287
|
- app/assets/images/noimage/large.png
|
287
288
|
- app/assets/images/noimage/mini.png
|
@@ -299,6 +300,8 @@ files:
|
|
299
300
|
- app/mailers/spree/order_mailer.rb
|
300
301
|
- app/mailers/spree/shipment_mailer.rb
|
301
302
|
- app/mailers/spree/test_mailer.rb
|
303
|
+
- app/models/concerns/spree/user_api_authentication.rb
|
304
|
+
- app/models/concerns/spree/user_reporting.rb
|
302
305
|
- app/models/spree/ability.rb
|
303
306
|
- app/models/spree/address.rb
|
304
307
|
- app/models/spree/adjustment.rb
|
@@ -337,6 +340,7 @@ files:
|
|
337
340
|
- app/models/spree/option_value.rb
|
338
341
|
- app/models/spree/order.rb
|
339
342
|
- app/models/spree/order/checkout.rb
|
343
|
+
- app/models/spree/order/currency_updater.rb
|
340
344
|
- app/models/spree/order_contents.rb
|
341
345
|
- app/models/spree/order_inventory.rb
|
342
346
|
- app/models/spree/order_populator.rb
|
@@ -556,6 +560,7 @@ files:
|
|
556
560
|
- db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb
|
557
561
|
- db/migrate/20140213184916_add_more_indexes.rb
|
558
562
|
- db/migrate/20140219060952_add_considered_risky_to_orders.rb
|
563
|
+
- db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb
|
559
564
|
- db/seeds.rb
|
560
565
|
- lib/generators/spree/custom_user/custom_user_generator.rb
|
561
566
|
- lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt
|
@@ -590,6 +595,8 @@ files:
|
|
590
595
|
- lib/spree/core/environment.rb
|
591
596
|
- lib/spree/core/environment/calculators.rb
|
592
597
|
- lib/spree/core/environment_extension.rb
|
598
|
+
- lib/spree/core/importer.rb
|
599
|
+
- lib/spree/core/importer/order.rb
|
593
600
|
- lib/spree/core/mail_interceptor.rb
|
594
601
|
- lib/spree/core/mail_method.rb
|
595
602
|
- lib/spree/core/mail_settings.rb
|
@@ -600,6 +607,7 @@ files:
|
|
600
607
|
- lib/spree/core/search/base.rb
|
601
608
|
- lib/spree/core/token_resource.rb
|
602
609
|
- lib/spree/core/user_address.rb
|
610
|
+
- lib/spree/core/user_payment_source.rb
|
603
611
|
- lib/spree/core/validators/email.rb
|
604
612
|
- lib/spree/core/version.rb
|
605
613
|
- lib/spree/i18n.rb
|
@@ -707,7 +715,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
707
715
|
version: '0'
|
708
716
|
requirements: []
|
709
717
|
rubyforge_project:
|
710
|
-
rubygems_version: 2.2.
|
718
|
+
rubygems_version: 2.2.2
|
711
719
|
signing_key:
|
712
720
|
specification_version: 4
|
713
721
|
summary: The bare bones necessary for Spree.
|