spree_core 3.7.0.rc2 → 3.7.0.rc3
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/finders/spree/line_items/find_by_variant.rb +1 -1
- data/app/helpers/spree/base_helper.rb +2 -2
- data/app/models/spree/app_dependencies.rb +73 -0
- data/app/models/spree/order.rb +1 -1
- data/app/models/spree/order_contents.rb +16 -6
- data/app/models/spree/order_merger.rb +3 -1
- data/app/models/spree/promotion/actions/create_line_items.rb +9 -5
- data/app/models/spree/promotion_handler/coupon.rb +1 -1
- data/app/services/spree/cart/add_item.rb +2 -2
- data/app/services/spree/cart/create.rb +1 -1
- data/app/services/spree/cart/remove_item.rb +4 -2
- data/app/services/spree/cart/remove_line_item.rb +3 -1
- data/app/services/spree/cart/set_quantity.rb +1 -1
- data/app/services/spree/checkout/advance.rb +1 -1
- data/app/services/spree/checkout/complete.rb +1 -1
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +13 -1
- data/lib/spree/core/controller_helpers/auth.rb +1 -1
- data/lib/spree/core/engine.rb +10 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +15 -0
- data/lib/spree/dependencies_helper.rb +11 -0
- data/lib/spree/testing_support/capybara_ext.rb +3 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d67e4411295bf73afd62309af2b92174e0cbf53d5fde6cb708556176ca7e061
|
4
|
+
data.tar.gz: 779f22575add68337aa6e33ecff55452776c125a3f587d4cf481743d294ab9a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47b6cf3807d3cf870548cb82aae5ceaf7d9befe5e41a784ff63cb319126c5aa4c58a250a12b2de2666f65b3d7b850e9a996173cb1160d36caa483372c35d2bbd
|
7
|
+
data.tar.gz: 513adfbb880c88d13db7aaf1b60bb1d624195c030e6205279fea2f82b4cc2d6fd7303189d8c826927c27584052eda38321753b032b9c31d6e021bcd16cfb5dc9
|
@@ -5,7 +5,7 @@ module Spree
|
|
5
5
|
order.line_items.detect do |line_item|
|
6
6
|
next unless line_item.variant_id == variant.id
|
7
7
|
|
8
|
-
|
8
|
+
Spree::Dependencies.cart_compare_line_items_service.constantize.call(order: order, line_item: line_item, options: options).value
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Spree
|
2
2
|
module BaseHelper
|
3
3
|
def available_countries
|
4
|
-
checkout_zone = Zone.find_by(name: Spree::Config[:checkout_zone])
|
4
|
+
checkout_zone = Spree::Zone.find_by(name: Spree::Config[:checkout_zone])
|
5
5
|
|
6
6
|
countries = if checkout_zone && checkout_zone.kind == 'country'
|
7
7
|
checkout_zone.country_list
|
8
8
|
else
|
9
|
-
Country.all
|
9
|
+
Spree::Country.all
|
10
10
|
end
|
11
11
|
|
12
12
|
countries.collect do |country|
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Spree
|
2
|
+
class AppDependencies
|
3
|
+
include Spree::DependenciesHelper
|
4
|
+
|
5
|
+
INJECTION_POINTS = [
|
6
|
+
:ability_class,
|
7
|
+
:cart_create_service, :cart_add_item_service, :cart_remove_item_service,
|
8
|
+
:cart_remove_line_item_service, :cart_set_item_quantity_service, :cart_recalculate_service,
|
9
|
+
:cart_update_service, :checkout_next_service, :checkout_advance_service, :checkout_update_service,
|
10
|
+
:checkout_complete_service, :checkout_add_store_credit_service,
|
11
|
+
:checkout_remove_store_credit_service, :checkout_get_shipping_rates_service,
|
12
|
+
:coupon_handler, :country_finder, :current_order_finder, :credit_card_finder,
|
13
|
+
:completed_order_finder, :order_sorter, :cart_compare_line_items_service, :collection_paginator, :products_sorter,
|
14
|
+
:products_finder, :taxon_finder, :line_item_by_variant_finder
|
15
|
+
].freeze
|
16
|
+
|
17
|
+
attr_accessor *INJECTION_POINTS
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
set_default_abitily
|
21
|
+
set_default_services
|
22
|
+
set_default_finders
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def set_default_abitily
|
28
|
+
@ability_class = 'Spree::Ability'
|
29
|
+
end
|
30
|
+
|
31
|
+
def set_default_services
|
32
|
+
# cart
|
33
|
+
@cart_compare_line_items_service = 'Spree::CompareLineItems'
|
34
|
+
@cart_create_service = 'Spree::Cart::Create'
|
35
|
+
@cart_add_item_service = 'Spree::Cart::AddItem'
|
36
|
+
@cart_update_service = 'Spree::Cart::Update'
|
37
|
+
@cart_recalculate_service = 'Spree::Cart::Recalculate'
|
38
|
+
@cart_remove_item_service = 'Spree::Cart::RemoveItem'
|
39
|
+
@cart_remove_line_item_service = 'Spree::Cart::RemoveLineItem'
|
40
|
+
@cart_set_item_quantity_service = 'Spree::Cart::SetQuantity'
|
41
|
+
|
42
|
+
# checkout
|
43
|
+
@checkout_next_service = 'Spree::Checkout::Next'
|
44
|
+
@checkout_advance_service = 'Spree::Checkout::Advance'
|
45
|
+
@checkout_update_service = 'Spree::Checkout::Update'
|
46
|
+
@checkout_complete_service = 'Spree::Checkout::Complete'
|
47
|
+
@checkout_add_store_credit_service = 'Spree::Checkout::AddStoreCredit'
|
48
|
+
@checkout_remove_store_credit_service = 'Spree::Checkout::RemoveStoreCredit'
|
49
|
+
@checkout_get_shipping_rates_service = 'Spree::Checkout::GetShippingRates'
|
50
|
+
|
51
|
+
# sorter
|
52
|
+
@order_sorter = 'Spree::Orders::Sort'
|
53
|
+
@products_sorter = 'Spree::Products::Sort'
|
54
|
+
|
55
|
+
# paginator
|
56
|
+
@collection_paginator = 'Spree::Shared::Paginate'
|
57
|
+
|
58
|
+
# coupons
|
59
|
+
# TODO: we should split this service into 2 seperate - Add and Remove
|
60
|
+
@coupon_handler = 'Spree::PromotionHandler::Coupon'
|
61
|
+
end
|
62
|
+
|
63
|
+
def set_default_finders
|
64
|
+
@country_finder = 'Spree::Countries::Find'
|
65
|
+
@current_order_finder = 'Spree::Orders::FindCurrent'
|
66
|
+
@completed_order_finder = 'Spree::Orders::FindComplete'
|
67
|
+
@credit_card_finder = 'Spree::CreditCards::Find'
|
68
|
+
@products_finder = 'Spree::Products::Find'
|
69
|
+
@taxon_finder = 'Spree::Taxons::Find'
|
70
|
+
@line_item_by_variant_finder = 'Spree::LineItems::FindByVariant'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/app/models/spree/order.rb
CHANGED
@@ -335,7 +335,7 @@ module Spree
|
|
335
335
|
EOS
|
336
336
|
return true unless options
|
337
337
|
|
338
|
-
|
338
|
+
Spree::Dependencies.cart_compare_line_items_service.constantize.new.call(order: self, line_item: line_item, options: options).value
|
339
339
|
end
|
340
340
|
|
341
341
|
# Creates new tax charges if there are any applicable rates. If prices already
|
@@ -8,20 +8,29 @@ module Spree
|
|
8
8
|
|
9
9
|
def add(variant, quantity = 1, options = {})
|
10
10
|
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
11
|
-
OrderContents#add method is deprecated and will be removed in Spree 4.0.
|
11
|
+
OrderContents#add method is deprecated and will be removed in Spree 4.0.
|
12
|
+
Please use Spree::Dependencies.cart_add_item_service
|
12
13
|
to add items to cart.
|
13
14
|
EOS
|
14
15
|
|
15
|
-
Spree::
|
16
|
+
Spree::Dependencies.cart_add_item_service.constantize.call(order: order,
|
17
|
+
variant: variant,
|
18
|
+
quantity: quantity,
|
19
|
+
options: options).value
|
16
20
|
end
|
17
21
|
|
18
22
|
def remove(variant, quantity = 1, options = {})
|
19
23
|
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
20
|
-
OrderContents#remove method is deprecated and will be removed in Spree 4.0.
|
24
|
+
OrderContents#remove method is deprecated and will be removed in Spree 4.0.
|
25
|
+
Please use Spree::Dependencies.cart_remove_item_service
|
21
26
|
service to remove item from cart.
|
22
27
|
EOS
|
23
28
|
|
24
|
-
Spree::Cart::RemoveItem
|
29
|
+
# change this dependencies to Spree::Cart::RemoveItem
|
30
|
+
Spree::Dependencies.cart_remove_item_service.constantize.call(order: order,
|
31
|
+
variant: variant,
|
32
|
+
quantity: quantity,
|
33
|
+
options: options).value
|
25
34
|
end
|
26
35
|
|
27
36
|
def remove_line_item(line_item, options = {})
|
@@ -34,11 +43,12 @@ module Spree
|
|
34
43
|
|
35
44
|
def update_cart(params)
|
36
45
|
ActiveSupport::Deprecation.warn(<<-EOS, caller)
|
37
|
-
OrderContents#update_cart method is deprecated and will be removed in Spree 4.0.
|
46
|
+
OrderContents#update_cart method is deprecated and will be removed in Spree 4.0.
|
47
|
+
Spree::Dependencies.cart_update_service
|
38
48
|
service to update cart.
|
39
49
|
EOS
|
40
50
|
|
41
|
-
Spree::
|
51
|
+
Spree::Dependencies.cart_update_service.constantize.call(order: order, params: params).value
|
42
52
|
end
|
43
53
|
end
|
44
54
|
end
|
@@ -29,7 +29,9 @@ module Spree
|
|
29
29
|
def find_matching_line_item(other_order_line_item)
|
30
30
|
order.line_items.detect do |my_li|
|
31
31
|
my_li.variant == other_order_line_item.variant &&
|
32
|
-
|
32
|
+
Spree::Dependencies.cart_compare_line_items_service.constantize.new.call(order: order,
|
33
|
+
line_item: my_li,
|
34
|
+
options: other_order_line_item.serializable_hash).value
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -42,10 +42,12 @@ module Spree
|
|
42
42
|
action_taken = false
|
43
43
|
promotion_action_line_items.each do |item|
|
44
44
|
current_quantity = order.quantity_of(item.variant)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
45
|
+
next unless current_quantity < item.quantity && item_available?(item)
|
46
|
+
|
47
|
+
line_item = Spree::Dependencies.cart_add_item_service.constantize.call(order: order,
|
48
|
+
variant: item.variant,
|
49
|
+
quantity: item.quantity - current_quantity).value
|
50
|
+
action_taken = true if line_item.try(:valid?)
|
49
51
|
end
|
50
52
|
action_taken
|
51
53
|
end
|
@@ -63,7 +65,9 @@ module Spree
|
|
63
65
|
line_item = order.find_line_item_by_variant(item.variant)
|
64
66
|
next unless line_item.present?
|
65
67
|
|
66
|
-
Spree::
|
68
|
+
Spree::Dependencies.cart_remove_item_service.constantize.call(order: order,
|
69
|
+
variant: item.variant,
|
70
|
+
quantity: (item.quantity || 1))
|
67
71
|
action_taken = true
|
68
72
|
end
|
69
73
|
|
@@ -76,7 +76,7 @@ module Spree
|
|
76
76
|
line_item = order.find_line_item_by_variant(item.variant)
|
77
77
|
next if line_item.blank?
|
78
78
|
|
79
|
-
|
79
|
+
Spree::Dependencies.cart_remove_item_service(order: order, item: item.variant, quantity: item.quantity)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
6
6
|
def call(order:, variant:, quantity: nil, options: {})
|
7
7
|
ApplicationRecord.transaction do
|
8
8
|
run :add_to_line_item
|
9
|
-
run Spree::
|
9
|
+
run Spree::Dependencies.cart_recalculate_service.constantize
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -16,7 +16,7 @@ module Spree
|
|
16
16
|
options ||= {}
|
17
17
|
quantity ||= 1
|
18
18
|
|
19
|
-
line_item = Spree::
|
19
|
+
line_item = Spree::Dependencies.line_item_by_variant_finder.constantize.new.execute(order: order, variant: variant, options: options)
|
20
20
|
|
21
21
|
line_item_created = line_item.nil?
|
22
22
|
if line_item.nil?
|
@@ -9,7 +9,9 @@ module Spree
|
|
9
9
|
|
10
10
|
ActiveRecord::Base.transaction do
|
11
11
|
line_item = remove_from_line_item(order: order, variant: variant, quantity: quantity, options: options)
|
12
|
-
Spree::
|
12
|
+
Spree::Dependencies.cart_recalculate_service.constantize.call(line_item: line_item,
|
13
|
+
order: order,
|
14
|
+
options: options)
|
13
15
|
success(line_item)
|
14
16
|
end
|
15
17
|
end
|
@@ -17,7 +19,7 @@ module Spree
|
|
17
19
|
private
|
18
20
|
|
19
21
|
def remove_from_line_item(order:, variant:, quantity:, options:)
|
20
|
-
line_item = Spree::
|
22
|
+
line_item = Spree::Dependencies.line_item_by_variant_finder.constantize.new.execute(order: order, variant: variant, options: options)
|
21
23
|
|
22
24
|
raise ActiveRecord::RecordNotFound if line_item.nil?
|
23
25
|
|
@@ -7,7 +7,9 @@ module Spree
|
|
7
7
|
options ||= {}
|
8
8
|
ActiveRecord::Base.transaction do
|
9
9
|
line_item.destroy!
|
10
|
-
Spree::
|
10
|
+
Spree::Dependencies.cart_recalculate_service.constantize.new.call(order: order,
|
11
|
+
line_item: line_item,
|
12
|
+
options: options)
|
11
13
|
end
|
12
14
|
success(line_item)
|
13
15
|
end
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
prepend Spree::ServiceModule::Base
|
5
5
|
|
6
6
|
def call(order:)
|
7
|
-
Spree::
|
7
|
+
Spree::Dependencies.checkout_next_service.constantize.call(order: order) until cannot_make_transition?(order)
|
8
8
|
success(order)
|
9
9
|
end
|
10
10
|
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
prepend Spree::ServiceModule::Base
|
5
5
|
|
6
6
|
def call(order:)
|
7
|
-
Spree::
|
7
|
+
Spree::Dependencies.checkout_next_service.constantize.call(order: order) until cannot_make_transition?(order)
|
8
8
|
|
9
9
|
if order.reload.complete?
|
10
10
|
success(order)
|
@@ -15,4 +15,16 @@ Spree.config do |config|
|
|
15
15
|
# config.track_inventory_levels = false
|
16
16
|
end
|
17
17
|
|
18
|
-
|
18
|
+
# Configure Spree Dependencies
|
19
|
+
#
|
20
|
+
# Note: If a dependency is set here it will NOT be stored within the cache & database upon initialization.
|
21
|
+
# Just removing an entry from this initializer will make the dependency value go away.
|
22
|
+
#
|
23
|
+
Spree.dependencies do |dependencies|
|
24
|
+
# Example:
|
25
|
+
# Uncomment to change the default Service handling adding Items to Cart
|
26
|
+
# dependencies.cart_add_item_service = 'MyNewAwesomeService'
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
Spree.user_class = <%= (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]).inspect %>
|
@@ -16,7 +16,7 @@ module Spree
|
|
16
16
|
|
17
17
|
# Needs to be overriden so that we use Spree's Ability rather than anyone else's.
|
18
18
|
def current_ability
|
19
|
-
@current_ability ||= Spree::
|
19
|
+
@current_ability ||= Spree::Dependencies.ability_class.constantize.new(try_spree_current_user)
|
20
20
|
end
|
21
21
|
|
22
22
|
def redirect_back_or_default(default)
|
data/lib/spree/core/engine.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module Spree
|
2
2
|
module Core
|
3
3
|
class Engine < ::Rails::Engine
|
4
|
-
Environment = Struct.new(:calculators,
|
4
|
+
Environment = Struct.new(:calculators,
|
5
|
+
:preferences,
|
6
|
+
:dependencies,
|
7
|
+
:payment_methods,
|
8
|
+
:adjusters,
|
9
|
+
:stock_splitters,
|
10
|
+
:promotions,
|
11
|
+
:line_item_comparison_hooks)
|
5
12
|
SpreeCalculators = Struct.new(:shipping_methods, :tax_rates, :promotion_actions_create_adjustments, :promotion_actions_create_item_adjustments)
|
6
13
|
PromoEnvironment = Struct.new(:rules, :actions)
|
7
14
|
isolate_namespace Spree
|
@@ -12,8 +19,9 @@ module Spree
|
|
12
19
|
end
|
13
20
|
|
14
21
|
initializer 'spree.environment', before: :load_config_initializers do |app|
|
15
|
-
app.config.spree = Environment.new(SpreeCalculators.new, Spree::AppConfiguration.new)
|
22
|
+
app.config.spree = Environment.new(SpreeCalculators.new, Spree::AppConfiguration.new, Spree::AppDependencies.new)
|
16
23
|
Spree::Config = app.config.spree.preferences
|
24
|
+
Spree::Dependencies = app.config.spree.dependencies
|
17
25
|
end
|
18
26
|
|
19
27
|
initializer 'spree.register.calculators' do |app|
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
@@ -59,6 +59,20 @@ module Spree
|
|
59
59
|
yield(Spree::Config)
|
60
60
|
end
|
61
61
|
|
62
|
+
# Used to set dependencies for Spree.
|
63
|
+
#
|
64
|
+
# Example:
|
65
|
+
#
|
66
|
+
# Spree.dependencies do |dependency|
|
67
|
+
# dependency.cart_add_item_service = MyCustomAddToCart
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# This method is defined within the core gem on purpose.
|
71
|
+
# Some people may only wish to use the Core part of Spree.
|
72
|
+
def self.dependencies
|
73
|
+
yield(Spree::Dependencies)
|
74
|
+
end
|
75
|
+
|
62
76
|
module Core
|
63
77
|
autoload :ProductFilters, 'spree/core/product_filters'
|
64
78
|
autoload :TokenGenerator, 'spree/core/token_generator'
|
@@ -79,6 +93,7 @@ require 'spree/localized_number'
|
|
79
93
|
require 'spree/money'
|
80
94
|
require 'spree/permitted_attributes'
|
81
95
|
require 'spree/service_module'
|
96
|
+
require 'spree/dependencies_helper'
|
82
97
|
|
83
98
|
require 'spree/core/importer'
|
84
99
|
require 'spree/core/query_filters'
|
@@ -135,7 +135,9 @@ module CapybaraExt
|
|
135
135
|
def spree_accept_alert
|
136
136
|
yield
|
137
137
|
rescue Selenium::WebDriver::Error::UnhandledAlertError
|
138
|
-
|
138
|
+
Selenium::WebDriver::Wait.new(timeout: 5)
|
139
|
+
.until { page.driver.browser.switch_to.alert }
|
140
|
+
.accept
|
139
141
|
end
|
140
142
|
|
141
143
|
def disable_html5_validation
|
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: 3.7.0.
|
4
|
+
version: 3.7.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|
@@ -419,6 +419,7 @@ files:
|
|
419
419
|
- app/models/spree/adjustable/promotion_accumulator.rb
|
420
420
|
- app/models/spree/adjustment.rb
|
421
421
|
- app/models/spree/app_configuration.rb
|
422
|
+
- app/models/spree/app_dependencies.rb
|
422
423
|
- app/models/spree/asset.rb
|
423
424
|
- app/models/spree/asset/support/active_storage.rb
|
424
425
|
- app/models/spree/base.rb
|
@@ -958,6 +959,7 @@ files:
|
|
958
959
|
- lib/spree/core/search/base.rb
|
959
960
|
- lib/spree/core/token_generator.rb
|
960
961
|
- lib/spree/core/version.rb
|
962
|
+
- lib/spree/dependencies_helper.rb
|
961
963
|
- lib/spree/i18n.rb
|
962
964
|
- lib/spree/i18n/base.rb
|
963
965
|
- lib/spree/i18n/initializer.rb
|
@@ -1066,8 +1068,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1066
1068
|
- !ruby/object:Gem::Version
|
1067
1069
|
version: 1.8.23
|
1068
1070
|
requirements: []
|
1069
|
-
|
1070
|
-
rubygems_version: 2.7.8
|
1071
|
+
rubygems_version: 3.0.2
|
1071
1072
|
signing_key:
|
1072
1073
|
specification_version: 4
|
1073
1074
|
summary: The bare bones necessary for Spree.
|