spree_core 4.1.13 → 4.2.0.rc4
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/controllers/spree/base_controller.rb +1 -2
- data/app/finders/spree/addresses/find.rb +1 -12
- data/app/finders/spree/base_finder.rb +14 -0
- data/app/finders/spree/countries/find.rb +11 -3
- data/app/finders/spree/credit_cards/find.rb +2 -2
- data/app/finders/spree/orders/find_current.rb +1 -1
- data/app/helpers/spree/base_helper.rb +61 -20
- data/app/helpers/spree/mail_helper.rb +29 -0
- data/app/helpers/spree/products_helper.rb +2 -1
- data/app/mailers/spree/base_mailer.rb +19 -5
- data/app/mailers/spree/order_mailer.rb +13 -4
- data/app/mailers/spree/reimbursement_mailer.rb +4 -2
- data/app/mailers/spree/shipment_mailer.rb +4 -2
- data/app/models/concerns/spree/default_price.rb +3 -6
- data/app/models/concerns/spree/user_methods.rb +11 -5
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/spree/ability.rb +45 -34
- data/app/models/spree/address.rb +17 -1
- data/app/models/spree/adjustment.rb +1 -0
- data/app/models/spree/app_configuration.rb +4 -0
- data/app/models/spree/app_dependencies.rb +4 -2
- data/app/models/spree/base.rb +5 -0
- data/app/models/spree/credit_card.rb +5 -0
- data/app/models/spree/fulfilment_changer.rb +58 -16
- data/app/models/spree/inventory_unit.rb +2 -7
- data/app/models/spree/line_item.rb +8 -7
- data/app/models/spree/log_entry.rb +1 -1
- data/app/models/spree/option_type.rb +7 -1
- data/app/models/spree/order.rb +27 -5
- data/app/models/spree/order/payments.rb +10 -2
- data/app/models/spree/payment.rb +18 -4
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment_method.rb +3 -3
- data/app/models/spree/preferences/store.rb +1 -1
- data/app/models/spree/price.rb +25 -6
- data/app/models/spree/product.rb +29 -9
- data/app/models/spree/promotion.rb +10 -15
- data/app/models/spree/promotion/rules/product.rb +2 -1
- data/app/models/spree/promotion/rules/user.rb +2 -1
- data/app/models/spree/promotion_handler/coupon.rb +1 -1
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +9 -3
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +2 -0
- data/app/models/spree/return_item/eligibility_validator/default.rb +0 -2
- data/app/models/spree/return_item/eligibility_validator/{r_m_a_required.rb → rma_required.rb} +0 -0
- data/app/models/spree/shipment.rb +3 -6
- data/app/models/spree/shipping_method.rb +1 -5
- data/app/models/spree/shipping_rate.rb +2 -11
- data/app/models/spree/stock/availability_validator.rb +3 -4
- data/app/models/spree/stock_item.rb +1 -5
- data/app/models/spree/stock_location.rb +13 -2
- data/app/models/spree/store.rb +51 -2
- data/app/models/spree/store_credit.rb +1 -1
- data/app/models/spree/variant.rb +16 -10
- data/app/models/spree/zone.rb +17 -4
- data/app/presenters/spree/variant_presenter.rb +9 -1
- data/app/presenters/spree/variants/option_types_presenter.rb +1 -0
- data/app/services/spree/account/addresses/create.rb +6 -1
- data/app/services/spree/account/addresses/{base.rb → helper.rb} +1 -3
- data/app/services/spree/account/addresses/update.rb +6 -1
- data/app/services/spree/compare_line_items.rb +4 -2
- data/app/sorters/spree/base_sorter.rb +35 -0
- data/app/sorters/spree/orders/sort.rb +1 -37
- data/app/sorters/spree/products/sort.rb +9 -32
- data/app/validators/email_validator.rb +1 -1
- data/app/views/layouts/spree/base_mailer.html.erb +45 -40
- data/app/views/spree/order_mailer/cancel_email.html.erb +19 -25
- data/app/views/spree/order_mailer/cancel_email.text.erb +24 -2
- data/app/views/spree/order_mailer/confirm_email.html.erb +18 -65
- data/app/views/spree/order_mailer/confirm_email.text.erb +2 -1
- data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +23 -0
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +38 -0
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +53 -58
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +3 -1
- data/app/views/spree/shared/_base_mailer_footer.html.erb +6 -14
- data/app/views/spree/shared/_base_mailer_header.html.erb +12 -32
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +293 -625
- data/app/views/spree/shared/_purchased_items_table.html.erb +60 -0
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +27 -0
- data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +13 -0
- data/app/views/spree/shared/purchased_items_table/_total.html.erb +13 -0
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +31 -36
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +2 -1
- data/config/initializers/assets.rb +1 -0
- data/config/initializers/inflections.rb +3 -0
- data/config/initializers/rails61_fixes.rb +3 -0
- data/config/locales/en.yml +145 -19
- data/db/default/spree/countries.rb +10 -4
- data/db/default/spree/states.rb +42 -5
- data/db/default/spree/stores.rb +17 -12
- data/db/default/spree/zones.rb +5 -2
- data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
- data/db/migrate/20140309033438_create_store_from_preferences.rb +1 -1
- data/db/migrate/20191017121054_add_supported_currencies_to_store.rb +10 -0
- data/db/migrate/20200102141311_add_social_to_spree_stores.rb +3 -0
- data/db/migrate/20200308210757_add_default_locale_to_spree_store.rb +7 -0
- data/db/migrate/20200310145140_add_customer_support_email_to_spree_store.rb +7 -0
- data/db/migrate/20200421095017_add_compare_at_amount_to_spree_prices.rb +7 -0
- data/db/migrate/20200423123001_add_default_country_id_to_spree_store.rb +9 -0
- data/db/migrate/20200430072209_add_footer_fields_to_spree_stores.rb +8 -0
- data/db/migrate/20200513154939_add_show_property_to_spree_product_properties.rb +5 -0
- data/db/migrate/20200607161221_add_store_owner_order_notification_delivered_to_spree_orders.rb +7 -0
- data/db/migrate/20200607161222_add_new_order_notifications_email_to_spree_stores.rb +7 -0
- data/db/migrate/20200610113542_add_label_to_spree_addresses.rb +5 -0
- data/db/migrate/20200826075557_add_unique_index_on_taxon_id_and_product_id_to_spree_products_taxons.rb +5 -0
- data/db/migrate/20201006110150_add_checkout_zone_field_to_store.rb +12 -0
- data/db/migrate/20201012091259_add_filterable_column_to_spree_option_types.rb +6 -0
- data/db/migrate/20201013084504_add_seo_robots_to_spree_stores.rb +5 -0
- data/db/migrate/20201127084048_add_default_country_kind_to_spree_zones.rb +5 -0
- data/db/migrate/20210112193440_remove_contact_email_from_spree_stores.rb +5 -0
- data/db/migrate/20210114182625_create_spree_payment_methods_stores.rb +10 -0
- data/db/migrate/20210114220232_migrate_data_payment_methods_stores.rb +15 -0
- data/db/migrate/20210117112551_remove_store_id_from_spree_payment_methods.rb +5 -0
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -2
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -2
- data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +23 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +13 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +5 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +5 -0
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +11 -0
- data/lib/spree/core.rb +2 -0
- data/lib/spree/core/controller_helpers/common.rb +1 -0
- data/lib/spree/core/controller_helpers/currency_helpers.rb +15 -0
- data/lib/spree/core/controller_helpers/order.rb +9 -4
- data/lib/spree/core/controller_helpers/store.rb +16 -1
- data/lib/spree/core/importer/order.rb +9 -9
- data/lib/spree/core/product_filters.rb +3 -3
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/i18n.rb +7 -21
- data/lib/spree/permitted_attributes.rb +8 -5
- data/lib/spree/service_module.rb +6 -2
- data/lib/spree/testing_support/authorization_helpers.rb +7 -4
- data/lib/spree/testing_support/capybara_config.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +29 -17
- data/lib/spree/testing_support/factories/shipment_factory.rb +7 -9
- data/lib/spree/testing_support/factories/store_factory.rb +11 -8
- data/lib/spree/testing_support/factories/zone_factory.rb +16 -13
- data/lib/spree/testing_support/i18n.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +8 -3
- data/lib/spree/testing_support/rspec_retry_config.rb +10 -0
- data/spree_core.gemspec +10 -8
- data/vendor/assets/javascripts/cleave.js +1669 -0
- metadata +105 -30
- data/app/views/spree/order_mailer/_adjustment.html.erb +0 -8
- data/app/views/spree/order_mailer/_subtotal.html.erb +0 -8
- data/app/views/spree/order_mailer/_total.html.erb +0 -8
- data/lib/spree/i18n/base.rb +0 -17
- data/lib/spree/i18n/initializer.rb +0 -1
|
@@ -44,6 +44,7 @@ module Spree
|
|
|
44
44
|
|
|
45
45
|
def set_user_language
|
|
46
46
|
locale = session[:locale]
|
|
47
|
+
locale = store_locale if respond_to?(:store_locale, true) && locale.blank?
|
|
47
48
|
locale = config_locale if respond_to?(:config_locale, true) && locale.blank?
|
|
48
49
|
locale = Rails.application.config.i18n.default_locale if locale.blank?
|
|
49
50
|
locale = I18n.default_locale unless I18n.available_locales.map(&:to_s).include?(locale.to_s)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Core
|
|
3
|
+
module ControllerHelpers
|
|
4
|
+
module CurrencyHelpers
|
|
5
|
+
def self.included(receiver)
|
|
6
|
+
receiver.send :helper_method, :supported_currencies
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def supported_currencies
|
|
10
|
+
current_store.supported_currencies_list
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -52,10 +52,15 @@ module Spree
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def set_current_order
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
return unless try_spree_current_user && current_order
|
|
56
|
+
|
|
57
|
+
orders_scope = try_spree_current_user.orders.
|
|
58
|
+
incomplete.
|
|
59
|
+
where.not(id: current_order.id).
|
|
60
|
+
where(store_id: current_store.id)
|
|
61
|
+
|
|
62
|
+
orders_scope.each do |order|
|
|
63
|
+
current_order.merge!(order, try_spree_current_user)
|
|
59
64
|
end
|
|
60
65
|
end
|
|
61
66
|
|
|
@@ -5,19 +5,34 @@ module Spree
|
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
7
|
included do
|
|
8
|
+
helper_method :supported_currencies
|
|
8
9
|
helper_method :current_currency
|
|
9
10
|
helper_method :current_store
|
|
10
11
|
helper_method :current_price_options
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def current_currency
|
|
14
|
-
|
|
15
|
+
if defined?(session) && session.key?(:currency) && supported_currencies.map(&:iso_code).include?(session[:currency])
|
|
16
|
+
session[:currency]
|
|
17
|
+
elsif params[:currency].present? && supported_currencies.map(&:iso_code).include?(params[:currency])
|
|
18
|
+
params[:currency]
|
|
19
|
+
else
|
|
20
|
+
current_store.default_currency
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def supported_currencies
|
|
25
|
+
current_store.supported_currencies_list
|
|
15
26
|
end
|
|
16
27
|
|
|
17
28
|
def current_store
|
|
18
29
|
@current_store ||= Spree::Store.current(request.env['SERVER_NAME'])
|
|
19
30
|
end
|
|
20
31
|
|
|
32
|
+
def store_locale
|
|
33
|
+
current_store.default_locale
|
|
34
|
+
end
|
|
35
|
+
|
|
21
36
|
# Return a Hash of things that influence the prices displayed in your shop.
|
|
22
37
|
#
|
|
23
38
|
# By default, the only thing that influences prices that is the current order's +tax_zone+
|
|
@@ -38,7 +38,7 @@ module Spree
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
order.reload
|
|
41
|
-
rescue
|
|
41
|
+
rescue StandardError => e
|
|
42
42
|
order.destroy if order&.persisted?
|
|
43
43
|
raise e.message
|
|
44
44
|
end
|
|
@@ -80,7 +80,7 @@ module Spree
|
|
|
80
80
|
|
|
81
81
|
adjustments = s.delete(:adjustments_attributes)
|
|
82
82
|
create_adjustments_from_params(adjustments, order, shipment)
|
|
83
|
-
rescue
|
|
83
|
+
rescue StandardError => e
|
|
84
84
|
raise "Order import shipments: #{e.message} #{s}"
|
|
85
85
|
end
|
|
86
86
|
end
|
|
@@ -115,7 +115,7 @@ module Spree
|
|
|
115
115
|
line_item.save!
|
|
116
116
|
end
|
|
117
117
|
create_adjustments_from_params(adjustments, order, line_item)
|
|
118
|
-
rescue
|
|
118
|
+
rescue StandardError => e
|
|
119
119
|
raise "Order import line items: #{e.message} #{line_item}"
|
|
120
120
|
end
|
|
121
121
|
end
|
|
@@ -132,7 +132,7 @@ module Spree
|
|
|
132
132
|
)
|
|
133
133
|
adjustment.save!
|
|
134
134
|
adjustment.close!
|
|
135
|
-
rescue
|
|
135
|
+
rescue StandardError => e
|
|
136
136
|
raise "Order import adjustments: #{e.message} #{a}"
|
|
137
137
|
end
|
|
138
138
|
end
|
|
@@ -150,7 +150,7 @@ module Spree
|
|
|
150
150
|
payment.payment_method = Spree::PaymentMethod.find_by!(name: p[:payment_method])
|
|
151
151
|
payment.source = create_source_payment_from_params(p[:source], payment) if p[:source]
|
|
152
152
|
payment.save!
|
|
153
|
-
rescue
|
|
153
|
+
rescue StandardError => e
|
|
154
154
|
raise "Order import payments: #{e.message} #{p}"
|
|
155
155
|
end
|
|
156
156
|
end
|
|
@@ -167,7 +167,7 @@ module Spree
|
|
|
167
167
|
gateway_payment_profile_id: source_hash[:gateway_payment_profile_id],
|
|
168
168
|
imported: true
|
|
169
169
|
)
|
|
170
|
-
rescue
|
|
170
|
+
rescue StandardError => e
|
|
171
171
|
raise "Order import source payments: #{e.message} #{source_hash}"
|
|
172
172
|
end
|
|
173
173
|
|
|
@@ -179,7 +179,7 @@ module Spree
|
|
|
179
179
|
hash
|
|
180
180
|
rescue ActiveRecord::RecordNotFound => e
|
|
181
181
|
raise "Ensure order import variant: Variant w/SKU #{sku} not found."
|
|
182
|
-
rescue
|
|
182
|
+
rescue StandardError => e
|
|
183
183
|
raise "Ensure order import variant: #{e.message} #{hash}"
|
|
184
184
|
end
|
|
185
185
|
|
|
@@ -200,7 +200,7 @@ module Spree
|
|
|
200
200
|
|
|
201
201
|
address.delete(:country)
|
|
202
202
|
address[:country_id] = Spree::Country.where(search).first!.id
|
|
203
|
-
rescue
|
|
203
|
+
rescue StandardError => e
|
|
204
204
|
raise "Ensure order import address country: #{e.message} #{search}"
|
|
205
205
|
end
|
|
206
206
|
end
|
|
@@ -224,7 +224,7 @@ module Spree
|
|
|
224
224
|
else
|
|
225
225
|
address[:state_name] = search[:name] || search[:abbr]
|
|
226
226
|
end
|
|
227
|
-
rescue
|
|
227
|
+
rescue StandardError => e
|
|
228
228
|
raise "Ensure order import address state: #{e.message} #{search}"
|
|
229
229
|
end
|
|
230
230
|
end
|
|
@@ -68,9 +68,9 @@ module Spree
|
|
|
68
68
|
def self.price_filter
|
|
69
69
|
v = Spree::Price.arel_table
|
|
70
70
|
conds = [[Spree.t(:under_price, price: format_price(10)), v[:amount].lteq(10)],
|
|
71
|
-
["#{format_price(10)} - #{format_price(15)}", v[:amount].
|
|
72
|
-
["#{format_price(15)} - #{format_price(18)}", v[:amount].
|
|
73
|
-
["#{format_price(18)} - #{format_price(20)}", v[:amount].
|
|
71
|
+
["#{format_price(10)} - #{format_price(15)}", v[:amount].between(10..15)],
|
|
72
|
+
["#{format_price(15)} - #{format_price(18)}", v[:amount].between(15..18)],
|
|
73
|
+
["#{format_price(18)} - #{format_price(20)}", v[:amount].between(18..20)],
|
|
74
74
|
[Spree.t(:or_over_price, price: format_price(20)), v[:amount].gteq(20)]]
|
|
75
75
|
{
|
|
76
76
|
name: Spree.t(:price_range),
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/i18n.rb
CHANGED
|
@@ -1,35 +1,21 @@
|
|
|
1
1
|
require 'i18n'
|
|
2
2
|
require 'active_support/core_ext/array/extract_options'
|
|
3
|
-
require '
|
|
3
|
+
require 'action_view'
|
|
4
4
|
|
|
5
5
|
module Spree
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
class TranslationHelperWrapper
|
|
7
|
+
include ActionView::Helpers::TranslationHelper
|
|
8
|
+
end
|
|
8
9
|
|
|
9
10
|
class << self
|
|
10
11
|
# Add spree namespace and delegate to Rails TranslationHelper for some nice
|
|
11
12
|
# extra functionality. e.g return reasonable strings for missing translations
|
|
12
|
-
def translate(
|
|
13
|
-
|
|
13
|
+
def translate(key, options = {})
|
|
14
|
+
options[:scope] = [*options[:scope]].unshift(:spree).uniq
|
|
14
15
|
|
|
15
|
-
options
|
|
16
|
-
options[:scope] = [*options[:scope]].unshift(:spree)
|
|
17
|
-
args << options
|
|
18
|
-
super(*args)
|
|
16
|
+
TranslationHelperWrapper.new.translate(key, **options)
|
|
19
17
|
end
|
|
20
18
|
|
|
21
19
|
alias t translate
|
|
22
|
-
|
|
23
|
-
def context
|
|
24
|
-
Spree::ViewContext.context
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def virtual_path
|
|
28
|
-
if context
|
|
29
|
-
path = context.instance_variable_get('@virtual_path')
|
|
30
|
-
|
|
31
|
-
path&.gsub(/spree/, '')
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
20
|
end
|
|
35
21
|
end
|
|
@@ -33,7 +33,7 @@ module Spree
|
|
|
33
33
|
:id, :firstname, :lastname, :first_name, :last_name,
|
|
34
34
|
:address1, :address2, :city, :country_iso, :country_id, :state_id,
|
|
35
35
|
:zipcode, :phone, :state_name, :alternative_phone, :company,
|
|
36
|
-
:user_id, :deleted_at,
|
|
36
|
+
:user_id, :deleted_at, :label,
|
|
37
37
|
country: [:iso, :name, :iso3, :iso_name],
|
|
38
38
|
state: [:name, :abbr]
|
|
39
39
|
]
|
|
@@ -64,7 +64,7 @@ module Spree
|
|
|
64
64
|
:meta_keywords, :price, :sku, :deleted_at, :prototype_id,
|
|
65
65
|
:option_values_hash, :weight, :height, :width, :depth,
|
|
66
66
|
:shipping_category_id, :tax_category_id,
|
|
67
|
-
:cost_currency, :cost_price,
|
|
67
|
+
:cost_currency, :cost_price, :compare_at_price,
|
|
68
68
|
option_type_ids: [], taxon_ids: []
|
|
69
69
|
]
|
|
70
70
|
|
|
@@ -96,9 +96,12 @@ module Spree
|
|
|
96
96
|
:quantity, :stock_item, :stock_item_id, :originator, :action
|
|
97
97
|
]
|
|
98
98
|
|
|
99
|
-
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords,
|
|
99
|
+
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords, :logo,
|
|
100
100
|
:meta_description, :default_currency, :mail_from_address,
|
|
101
|
-
:facebook, :twitter, :instagram
|
|
101
|
+
:customer_support_email, :facebook, :twitter, :instagram,
|
|
102
|
+
:description, :address, :contact_phone,
|
|
103
|
+
:default_locale, :default_country_id, :supported_currencies,
|
|
104
|
+
:new_order_notifications_email, :mailer_logo, :checkout_zone_id, :seo_robots]
|
|
102
105
|
|
|
103
106
|
@@store_credit_attributes = %i[amount currency category_id memo]
|
|
104
107
|
|
|
@@ -115,7 +118,7 @@ module Spree
|
|
|
115
118
|
@@variant_attributes = [
|
|
116
119
|
:name, :presentation, :cost_price, :discontinue_on, :lock_version,
|
|
117
120
|
:position, :track_inventory,
|
|
118
|
-
:product_id, :product, :option_values_attributes, :price,
|
|
121
|
+
:product_id, :product, :option_values_attributes, :price, :compare_at_price,
|
|
119
122
|
:weight, :height, :width, :depth, :sku, :cost_currency,
|
|
120
123
|
options: [:name, :value], option_value_ids: []
|
|
121
124
|
]
|
data/lib/spree/service_module.rb
CHANGED
|
@@ -47,7 +47,11 @@ module Spree
|
|
|
47
47
|
def call(input = nil)
|
|
48
48
|
input ||= {}
|
|
49
49
|
@_passed_input = Result.new(true, input)
|
|
50
|
-
result =
|
|
50
|
+
result = if input.is_a?(Hash)
|
|
51
|
+
super(**input)
|
|
52
|
+
else
|
|
53
|
+
super(input)
|
|
54
|
+
end
|
|
51
55
|
@_passed_input = result if result.is_a? Result
|
|
52
56
|
enforce_data_format
|
|
53
57
|
@_passed_input
|
|
@@ -71,7 +75,7 @@ module Spree
|
|
|
71
75
|
end
|
|
72
76
|
|
|
73
77
|
begin
|
|
74
|
-
@_passed_input = callable.call(
|
|
78
|
+
@_passed_input = callable.call(**@_passed_input.value)
|
|
75
79
|
rescue ArgumentError => e
|
|
76
80
|
if e.message.include? 'missing'
|
|
77
81
|
raise IncompatibleParamsPassed, "You didn't pass #{e.message} to callable '#{callable.name}'"
|
|
@@ -27,13 +27,14 @@ module Spree
|
|
|
27
27
|
|
|
28
28
|
def stub_authorization!
|
|
29
29
|
ability = build_ability
|
|
30
|
+
ability_class = Spree::Dependencies.ability_class.constantize
|
|
30
31
|
|
|
31
32
|
after(:all) do
|
|
32
|
-
|
|
33
|
+
ability_class.remove_ability(ability)
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
before(:all) do
|
|
36
|
-
|
|
37
|
+
ability_class.register_ability(ability)
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
before do
|
|
@@ -45,11 +46,13 @@ module Spree
|
|
|
45
46
|
|
|
46
47
|
def custom_authorization!(&block)
|
|
47
48
|
ability = build_ability(&block)
|
|
49
|
+
ability_class = Spree::Dependencies.ability_class.constantize
|
|
50
|
+
|
|
48
51
|
after(:all) do
|
|
49
|
-
|
|
52
|
+
ability_class.remove_ability(ability)
|
|
50
53
|
end
|
|
51
54
|
before(:all) do
|
|
52
|
-
|
|
55
|
+
ability_class.register_ability(ability)
|
|
53
56
|
end
|
|
54
57
|
end
|
|
55
58
|
end
|
|
@@ -1,4 +1,21 @@
|
|
|
1
1
|
FactoryBot.define do
|
|
2
|
+
trait :with_item_total_rule do
|
|
3
|
+
transient do
|
|
4
|
+
item_total_threshold_amount { 10 }
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
after(:create) do |promotion, evaluator|
|
|
8
|
+
rule = Spree::Promotion::Rules::ItemTotal.create!(
|
|
9
|
+
preferred_operator_min: 'gte',
|
|
10
|
+
preferred_operator_max: 'lte',
|
|
11
|
+
preferred_amount_min: evaluator.item_total_threshold_amount,
|
|
12
|
+
preferred_amount_max: evaluator.item_total_threshold_amount + 100
|
|
13
|
+
)
|
|
14
|
+
promotion.rules << rule
|
|
15
|
+
promotion.save!
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
2
19
|
factory :promotion, class: Spree::Promotion do
|
|
3
20
|
name { 'Promo' }
|
|
4
21
|
|
|
@@ -13,7 +30,16 @@ FactoryBot.define do
|
|
|
13
30
|
Spree::Promotion::Actions::CreateItemAdjustments.create!(calculator: calculator, promotion: promotion)
|
|
14
31
|
end
|
|
15
32
|
end
|
|
33
|
+
|
|
34
|
+
trait :with_one_use_per_user_rule do
|
|
35
|
+
after(:create) do |promotion|
|
|
36
|
+
rule = Spree::Promotion::Rules::OneUsePerUser.create!
|
|
37
|
+
promotion.rules << rule
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
16
41
|
factory :promotion_with_item_adjustment, traits: [:with_line_item_adjustment]
|
|
42
|
+
factory :promotion_with_one_use_per_user_rule, traits: [:with_line_item_adjustment, :with_one_use_per_user_rule]
|
|
17
43
|
|
|
18
44
|
trait :with_order_adjustment do
|
|
19
45
|
transient do
|
|
@@ -28,24 +54,8 @@ FactoryBot.define do
|
|
|
28
54
|
promotion.save!
|
|
29
55
|
end
|
|
30
56
|
end
|
|
31
|
-
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
|
32
57
|
|
|
33
|
-
|
|
34
|
-
transient do
|
|
35
|
-
item_total_threshold_amount { 10 }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
after(:create) do |promotion, evaluator|
|
|
39
|
-
rule = Spree::Promotion::Rules::ItemTotal.create!(
|
|
40
|
-
preferred_operator_min: 'gte',
|
|
41
|
-
preferred_operator_max: 'lte',
|
|
42
|
-
preferred_amount_min: evaluator.item_total_threshold_amount,
|
|
43
|
-
preferred_amount_max: evaluator.item_total_threshold_amount + 100
|
|
44
|
-
)
|
|
45
|
-
promotion.rules << rule
|
|
46
|
-
promotion.save!
|
|
47
|
-
end
|
|
48
|
-
end
|
|
58
|
+
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
|
49
59
|
factory :promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
|
50
60
|
end
|
|
51
61
|
|
|
@@ -57,5 +67,7 @@ FactoryBot.define do
|
|
|
57
67
|
action.promotion = promotion
|
|
58
68
|
action.save
|
|
59
69
|
end
|
|
70
|
+
|
|
71
|
+
factory :free_shipping_promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
|
60
72
|
end
|
|
61
73
|
end
|
|
@@ -8,15 +8,13 @@ FactoryBot.define do
|
|
|
8
8
|
|
|
9
9
|
after(:create) do |shipment, _evalulator|
|
|
10
10
|
shipment.add_shipping_method(create(:shipping_method), true)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
)
|
|
19
|
-
end
|
|
11
|
+
shipment.order.line_items.map do |line_item|
|
|
12
|
+
shipment.inventory_units.create(
|
|
13
|
+
order_id: shipment.order_id,
|
|
14
|
+
variant_id: line_item.variant_id,
|
|
15
|
+
line_item_id: line_item.id,
|
|
16
|
+
quantity: line_item.quantity
|
|
17
|
+
)
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
20
|
end
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
FactoryBot.define do
|
|
2
2
|
factory :store, class: Spree::Store do
|
|
3
|
-
sequence(:code)
|
|
4
|
-
name
|
|
5
|
-
url
|
|
6
|
-
mail_from_address
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
sequence(:code) { |i| "spree_#{i}" }
|
|
4
|
+
name { 'Spree Test Store' }
|
|
5
|
+
url { 'www.example.com' }
|
|
6
|
+
mail_from_address { 'no-reply@example.com' }
|
|
7
|
+
customer_support_email { 'support@example.com' }
|
|
8
|
+
new_order_notifications_email { 'store-owner@example.com' }
|
|
9
|
+
default_currency { 'USD' }
|
|
10
|
+
supported_currencies { 'USD,EUR,GBP' }
|
|
11
|
+
facebook { 'spreecommerce' }
|
|
12
|
+
twitter { 'spreecommerce' }
|
|
13
|
+
instagram { 'spreecommerce' }
|
|
11
14
|
end
|
|
12
15
|
end
|