spree_core 4.8.3 → 4.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/finders/spree/line_items/find_by_variant.rb +4 -2
- data/app/finders/spree/products/find.rb +1 -1
- data/app/finders/spree/variants/find.rb +30 -0
- data/app/models/spree/address.rb +12 -2
- data/app/models/spree/adjustment.rb +5 -0
- data/app/models/spree/asset.rb +8 -0
- data/app/models/spree/calculator/flat_rate.rb +3 -0
- data/app/models/spree/calculator/flexi_rate.rb +3 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +3 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +13 -1
- data/app/models/spree/cms_section_image.rb +0 -6
- data/app/models/spree/customer_return.rb +1 -0
- data/app/models/spree/icon.rb +0 -6
- data/app/models/spree/image/configuration/active_storage.rb +0 -8
- data/app/models/spree/image.rb +17 -0
- data/app/models/spree/line_item.rb +23 -6
- data/app/models/spree/option_value_variant.rb +4 -0
- data/app/models/spree/order/currency_updater.rb +2 -2
- data/app/models/spree/order/webhooks.rb +19 -0
- data/app/models/spree/order.rb +17 -6
- data/app/models/spree/order_merger.rb +6 -0
- data/app/models/spree/payment/gateway_options.rb +4 -0
- data/app/models/spree/payment/webhooks.rb +15 -0
- data/app/models/spree/payment.rb +7 -7
- data/app/models/spree/price.rb +45 -0
- data/app/models/spree/product/webhooks.rb +17 -0
- data/app/models/spree/product.rb +7 -9
- data/app/models/spree/promotion/actions/free_shipping.rb +13 -0
- data/app/models/spree/promotion/rules/first_order.rb +6 -1
- data/app/models/spree/promotion.rb +2 -2
- data/app/models/spree/promotion_handler/coupon.rb +3 -2
- data/app/models/spree/refund.rb +14 -2
- data/app/models/spree/reimbursement/emails.rb +11 -0
- data/app/models/spree/reimbursement.rb +1 -6
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment/emails.rb +11 -0
- data/app/models/spree/shipment/webhooks.rb +11 -0
- data/app/models/spree/shipment.rb +58 -7
- data/app/models/spree/shipment_handler.rb +2 -6
- data/app/models/spree/shipping_method.rb +6 -0
- data/app/models/spree/shipping_method_zone.rb +4 -2
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/stock/package.rb +4 -0
- data/app/models/spree/stock/quantifier.rb +22 -4
- data/app/models/spree/stock_item/webhooks.rb +6 -0
- data/app/models/spree/stock_item.rb +1 -3
- data/app/models/spree/stock_location.rb +15 -0
- data/app/models/spree/stock_movement/webhooks.rb +6 -0
- data/app/models/spree/stock_movement.rb +1 -3
- data/app/models/spree/store.rb +1 -5
- data/app/models/spree/store_credit.rb +11 -12
- data/app/models/spree/store_favicon_image.rb +0 -6
- data/app/models/spree/store_logo.rb +0 -5
- data/app/models/spree/store_mailer_logo.rb +0 -6
- data/app/models/spree/tax_rate.rb +3 -1
- data/app/models/spree/taxon_image/configuration/active_storage.rb +0 -6
- data/app/models/spree/variant/webhooks.rb +6 -0
- data/app/models/spree/variant.rb +21 -3
- data/app/models/spree/wishlist.rb +9 -0
- data/app/presenters/spree/variants/options_presenter.rb +34 -2
- data/app/services/spree/cart/add_item.rb +2 -0
- data/app/services/spree/cart/destroy.rb +14 -4
- data/app/services/spree/seeds/all.rb +3 -0
- data/app/services/spree/seeds/payment_methods.rb +18 -0
- data/app/services/spree/seeds/stock_locations.rb +1 -1
- data/app/services/spree/seeds/zones.rb +19 -19
- data/config/locales/en.yml +2 -0
- data/db/migrate/20240623172111_add_deleted_at_to_spree_stock_locations.rb +6 -0
- data/db/migrate/20240725124530_add_refunder_to_spree_refunds.rb +6 -0
- data/lib/spree/core/controller_helpers/order.rb +5 -5
- data/lib/spree/core/dependencies.rb +2 -1
- data/lib/spree/core/preferences/preferable.rb +4 -2
- data/lib/spree/core/preferences/preferable_class_methods.rb +3 -2
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core/webhooks.rb +15 -7
- data/lib/spree/core.rb +1 -0
- data/lib/spree/money.rb +1 -1
- data/lib/spree/testing_support/authorization_helpers.rb +2 -2
- data/lib/spree/testing_support/common_rake.rb +1 -1
- data/spree_core.gemspec +1 -0
- metadata +31 -4
data/app/models/spree/variant.rb
CHANGED
@@ -5,9 +5,7 @@ module Spree
|
|
5
5
|
|
6
6
|
include Spree::MemoizedData
|
7
7
|
include Spree::Metadata
|
8
|
-
|
9
|
-
include Spree::Webhooks::HasWebhooks
|
10
|
-
end
|
8
|
+
include Spree::Variant::Webhooks
|
11
9
|
|
12
10
|
MEMOIZED_METHODS = %w(purchasable in_stock backorderable tax_category options_text compare_at_price)
|
13
11
|
|
@@ -108,6 +106,14 @@ module Spree
|
|
108
106
|
not_discontinued.not_deleted.
|
109
107
|
for_currency_and_available_price_amount(currency)
|
110
108
|
end
|
109
|
+
|
110
|
+
scope :with_option_value, lambda { |option_name, option_value|
|
111
|
+
option_type_ids = OptionType.where(name: option_name).ids
|
112
|
+
return none if option_type_ids.empty?
|
113
|
+
|
114
|
+
joins(:option_values).where(Spree::OptionValue.table_name => { name: option_value, option_type_id: option_type_ids })
|
115
|
+
}
|
116
|
+
|
111
117
|
# FIXME: cost price should be represented with DisplayMoney class
|
112
118
|
LOCALIZED_NUMBERS = %w(cost_price weight depth width height)
|
113
119
|
|
@@ -172,6 +178,18 @@ module Spree
|
|
172
178
|
!!deleted_at
|
173
179
|
end
|
174
180
|
|
181
|
+
# Returns an array of hashes with the option type name, value and presentation
|
182
|
+
# @return [Array<Hash>]
|
183
|
+
def options
|
184
|
+
option_values.includes(:option_type).map do |option_value|
|
185
|
+
{
|
186
|
+
name: option_value.option_type.name,
|
187
|
+
value: option_value.name,
|
188
|
+
presentation: option_value.presentation
|
189
|
+
}
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
175
193
|
def options=(options = {})
|
176
194
|
options.each do |option|
|
177
195
|
next if option[:name].blank? || option[:value].blank?
|
@@ -15,6 +15,8 @@ module Spree
|
|
15
15
|
belongs_to :store, class_name: 'Spree::Store'
|
16
16
|
|
17
17
|
has_many :wished_items, class_name: 'Spree::WishedItem', dependent: :destroy
|
18
|
+
has_many :variants, through: :wished_items, source: :variant, class_name: 'Spree::Variant'
|
19
|
+
has_many :products, -> { distinct }, through: :variants, source: :product, class_name: 'Spree::Product'
|
18
20
|
|
19
21
|
after_commit :ensure_default_exists_and_is_unique
|
20
22
|
validates :name, :store, :user, presence: true
|
@@ -27,6 +29,13 @@ module Spree
|
|
27
29
|
token
|
28
30
|
end
|
29
31
|
|
32
|
+
# returns the number of wished items in the wishlist
|
33
|
+
#
|
34
|
+
# @return [Integer]
|
35
|
+
def wished_items_count
|
36
|
+
@wished_items_count ||= variant_ids.count
|
37
|
+
end
|
38
|
+
|
30
39
|
def self.get_by_param(param)
|
31
40
|
find_by(token: param)
|
32
41
|
end
|
@@ -19,10 +19,22 @@ module Spree
|
|
19
19
|
join_options(options)
|
20
20
|
end
|
21
21
|
|
22
|
+
def to_hash
|
23
|
+
options = option_values
|
24
|
+
options = sort_options(options)
|
25
|
+
options = present_options_as_hash(options)
|
26
|
+
|
27
|
+
join_hash_options(options)
|
28
|
+
end
|
29
|
+
|
22
30
|
private
|
23
31
|
|
24
32
|
def sort_options(options)
|
25
|
-
options.
|
33
|
+
if options.first&.association(:option_type)&.loaded?
|
34
|
+
options.sort_by { |o| o.option_type.position }
|
35
|
+
else
|
36
|
+
options.includes(:option_type).sort_by { |o| o.option_type.position }
|
37
|
+
end
|
26
38
|
end
|
27
39
|
|
28
40
|
def present_options(options)
|
@@ -34,7 +46,7 @@ module Spree
|
|
34
46
|
end
|
35
47
|
|
36
48
|
def present_color_option(option)
|
37
|
-
"#{option.option_type.presentation}: #{option.
|
49
|
+
"#{option.option_type.presentation}: #{option.presentation}"
|
38
50
|
end
|
39
51
|
|
40
52
|
def present_option(option)
|
@@ -44,6 +56,26 @@ module Spree
|
|
44
56
|
def join_options(options)
|
45
57
|
options.to_sentence(words_connector: WORDS_CONNECTOR, two_words_connector: WORDS_CONNECTOR)
|
46
58
|
end
|
59
|
+
|
60
|
+
def present_options_as_hash(options)
|
61
|
+
options.map do |ov|
|
62
|
+
method = "present_#{ov.option_type.name}_option_as_hash"
|
63
|
+
|
64
|
+
respond_to?(method, true) ? send(method, ov) : present_option_as_hash(ov)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def present_option_as_hash(option)
|
69
|
+
{}.tap do |hash|
|
70
|
+
hash.store(option.option_type.presentation.downcase, option.presentation)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def join_hash_options(options)
|
75
|
+
return {} if options.empty?
|
76
|
+
|
77
|
+
options.inject(:merge).symbolize_keys
|
78
|
+
end
|
47
79
|
end
|
48
80
|
end
|
49
81
|
end
|
@@ -16,6 +16,8 @@ module Spree
|
|
16
16
|
options ||= {}
|
17
17
|
quantity ||= 1
|
18
18
|
|
19
|
+
return failure(variant, "#{variant.name} is not available in #{order.currency}") if variant.amount_in(order.currency).nil?
|
20
|
+
|
19
21
|
line_item = Spree::Dependencies.line_item_by_variant_finder.constantize.new.execute(order: order, variant: variant, options: options)
|
20
22
|
|
21
23
|
line_item_created = line_item.nil?
|
@@ -7,31 +7,41 @@ module Spree
|
|
7
7
|
run :check_if_can_be_destroyed
|
8
8
|
run :cancel_shipments
|
9
9
|
run :void_payments
|
10
|
+
run :clear_addresses
|
10
11
|
run :destroy_order
|
11
12
|
end
|
12
13
|
|
13
14
|
private
|
14
15
|
|
15
16
|
def check_if_can_be_destroyed(order:)
|
16
|
-
return failure(Spree.t(:cannot_be_destroyed)) unless order&.can_be_destroyed?
|
17
|
+
return failure(false, Spree.t(:cannot_be_destroyed)) unless order&.can_be_destroyed?
|
17
18
|
|
18
19
|
success(order: order)
|
19
20
|
end
|
20
21
|
|
21
22
|
def cancel_shipments(order:)
|
22
|
-
order.shipments.each(&:cancel
|
23
|
+
order.shipments.each(&:cancel)
|
23
24
|
|
24
25
|
success(order: order)
|
25
26
|
end
|
26
27
|
|
27
28
|
def void_payments(order:)
|
28
|
-
order.payments.each(&:void
|
29
|
+
order.payments.each(&:void)
|
30
|
+
|
31
|
+
success(order: order)
|
32
|
+
end
|
33
|
+
|
34
|
+
def clear_addresses(order:)
|
35
|
+
order.ship_address = nil unless order.ship_address&.can_be_deleted?
|
36
|
+
order.bill_address = nil unless order.bill_address&.can_be_deleted?
|
29
37
|
|
30
38
|
success(order: order)
|
31
39
|
end
|
32
40
|
|
33
41
|
def destroy_order(order:)
|
34
|
-
order.destroy
|
42
|
+
destroyed_result = order.destroy
|
43
|
+
|
44
|
+
return failure(false, Spree.t(:cannot_be_destroyed)) unless destroyed_result.present?
|
35
45
|
|
36
46
|
success(order)
|
37
47
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Spree
|
2
|
+
module Seeds
|
3
|
+
class PaymentMethods
|
4
|
+
prepend Spree::ServiceModule::Base
|
5
|
+
|
6
|
+
def call
|
7
|
+
payment_method = Spree::PaymentMethod::StoreCredit.find_or_initialize_by(
|
8
|
+
name: Spree.t(:store_credit_name),
|
9
|
+
description: Spree.t(:store_credit_name),
|
10
|
+
active: true
|
11
|
+
)
|
12
|
+
|
13
|
+
payment_method.stores = Spree::Store.all if payment_method.new_record?
|
14
|
+
payment_method.save!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -7,32 +7,32 @@ module Spree
|
|
7
7
|
eu_vat = Spree::Zone.where(name: 'EU_VAT', description: 'Countries that make up the EU VAT zone.', kind: 'country').first_or_create!
|
8
8
|
uk_vat = Spree::Zone.where(name: 'UK_VAT', kind: 'country').first_or_create!
|
9
9
|
north_america = Spree::Zone.where(name: 'North America', description: 'USA + Canada', kind: 'country').first_or_create!
|
10
|
-
|
10
|
+
Spree::Zone.where(name: 'South America', description: 'South America', kind: 'country').first_or_create!
|
11
11
|
middle_east = Spree::Zone.where(name: 'Middle East', description: 'Middle East', kind: 'country').first_or_create!
|
12
12
|
asia = Spree::Zone.where(name: 'Asia', description: 'Asia', kind: 'country').first_or_create!
|
13
13
|
|
14
|
-
%w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG LT CY LU MT DK NL EE HR CZ GR)
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
create_zone_members(eu_vat, %w(PL FI PT RO DE FR SK HU SI IE AT ES IT BE SE LV BG LT CY LU MT DK NL EE HR CZ GR))
|
15
|
+
create_zone_members(north_america, %w(US CA))
|
16
|
+
create_zone_members(middle_east, %w(BH CY EG IR IQ IL JO KW LB OM QA SA SY TR AE YE))
|
17
|
+
create_zone_members(asia, %w(AF AM AZ BH BD BT BN KH CN CX CC GE HK IN ID IR IQ IL JP JO KZ KW KG LA LB MO MY MV MN MM NP
|
18
|
+
KP OM PK PS PH QA SA SG KR LK SY TW TJ TH TR TM AE UZ VN YE))
|
18
19
|
uk_vat.zone_members.where(zoneable: Spree::Country.find_by(iso: 'GB')).first_or_create!
|
20
|
+
end
|
19
21
|
|
20
|
-
|
21
|
-
north_america.zone_members.where(zoneable: Spree::Country.find_by!(iso: name)).first_or_create!
|
22
|
-
end
|
23
|
-
|
24
|
-
%w(BH CY EG IR IQ IL JO KW LB OM QA SA SY TR AE YE).each do |name|
|
25
|
-
middle_east.zone_members.where(zoneable: Spree::Country.find_by!(iso: name)).first_or_create!
|
26
|
-
end
|
27
|
-
|
28
|
-
%w(AF AM AZ BH BD BT BN KH CN CX CC GE HK IN ID IR IQ IL JP JO KZ KW KG LA LB MO MY MV MN MM NP
|
29
|
-
KP OM PK PS PH QA SA SG KR LK SY TW TJ TH TR TM AE UZ VN YE).each do |name|
|
30
|
-
asia.zone_members.where(zoneable: Spree::Country.find_by!(iso: name)).first_or_create!
|
31
|
-
end
|
22
|
+
protected
|
32
23
|
|
33
|
-
|
34
|
-
|
24
|
+
def create_zone_members(zone, country_codes)
|
25
|
+
countries_ids = Spree::Country.where(iso: country_codes).ids
|
26
|
+
zone_members = countries_ids.map do |country_id|
|
27
|
+
{
|
28
|
+
zoneable_id: country_id,
|
29
|
+
zoneable_type: 'Spree::Country',
|
30
|
+
zone_id: zone.id,
|
31
|
+
created_at: Time.current,
|
32
|
+
updated_at: Time.current
|
33
|
+
}
|
35
34
|
end
|
35
|
+
Spree::ZoneMember.insert_all(zone_members)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/config/locales/en.yml
CHANGED
@@ -576,6 +576,7 @@ en:
|
|
576
576
|
alternative_phone: Alternative Phone
|
577
577
|
amount: Amount
|
578
578
|
and: and
|
579
|
+
apply_only_on_full_priced_items: Apply only on full priced items
|
579
580
|
approve: approve
|
580
581
|
approver: Approver
|
581
582
|
approved_at: Approved at
|
@@ -1580,6 +1581,7 @@ en:
|
|
1580
1581
|
states_required: States Required
|
1581
1582
|
status: Status
|
1582
1583
|
stock: Stock
|
1584
|
+
default_stock_location_name: Shop location
|
1583
1585
|
stock_location: Stock Location
|
1584
1586
|
stock_location_info: Stock location info
|
1585
1587
|
stock_locations: Stock Locations
|
@@ -83,11 +83,7 @@ module Spree
|
|
83
83
|
def find_order_by_token_or_user(options = {}, with_adjustments = false)
|
84
84
|
options[:lock] ||= false
|
85
85
|
|
86
|
-
includes =
|
87
|
-
{ line_items: [variant: [:images, :option_values, :product]] }
|
88
|
-
else
|
89
|
-
{}
|
90
|
-
end
|
86
|
+
includes = options[:includes] ? order_includes : {}
|
91
87
|
|
92
88
|
# Find any incomplete orders for the token
|
93
89
|
incomplete_orders = current_store.orders.incomplete.includes(includes)
|
@@ -104,6 +100,10 @@ module Spree
|
|
104
100
|
|
105
101
|
order
|
106
102
|
end
|
103
|
+
|
104
|
+
def order_includes
|
105
|
+
{ line_items: [variant: [:images, :option_values, :product]] }
|
106
|
+
end
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
@@ -97,7 +97,8 @@ module Spree
|
|
97
97
|
credit_card_finder: 'Spree::CreditCards::Find',
|
98
98
|
products_finder: 'Spree::Products::Find',
|
99
99
|
taxon_finder: 'Spree::Taxons::Find',
|
100
|
-
line_item_by_variant_finder: 'Spree::LineItems::FindByVariant'
|
100
|
+
line_item_by_variant_finder: 'Spree::LineItems::FindByVariant',
|
101
|
+
variant_finder: 'Spree::Variants::Find'
|
101
102
|
}.freeze
|
102
103
|
|
103
104
|
include Spree::DependenciesHelper
|
@@ -101,14 +101,16 @@ module Spree::Preferences::Preferable
|
|
101
101
|
|
102
102
|
private
|
103
103
|
|
104
|
-
def convert_preference_value(value, type)
|
104
|
+
def convert_preference_value(value, type, nullable: false)
|
105
105
|
case type
|
106
106
|
when :string, :text
|
107
107
|
value.to_s
|
108
108
|
when :password
|
109
109
|
value.to_s
|
110
110
|
when :decimal
|
111
|
-
|
111
|
+
decimal_value = value.presence
|
112
|
+
decimal_value ||= 0 unless nullable
|
113
|
+
decimal_value.present? ? decimal_value.to_s.to_d : decimal_value
|
112
114
|
when :integer
|
113
115
|
value.to_i
|
114
116
|
when :boolean
|
@@ -2,10 +2,11 @@ module Spree::Preferences
|
|
2
2
|
module PreferableClassMethods
|
3
3
|
def preference(name, type, *args)
|
4
4
|
options = args.extract_options!
|
5
|
-
options.assert_valid_keys(:default, :deprecated)
|
5
|
+
options.assert_valid_keys(:default, :deprecated, :nullable)
|
6
6
|
default = options[:default]
|
7
7
|
default = -> { options[:default] } unless default.is_a?(Proc)
|
8
8
|
deprecated = options[:deprecated]
|
9
|
+
nullable = options[:nullable]
|
9
10
|
|
10
11
|
# cache_key will be nil for new objects, then if we check if there
|
11
12
|
# is a pending preference before going to default
|
@@ -16,7 +17,7 @@ module Spree::Preferences
|
|
16
17
|
end
|
17
18
|
|
18
19
|
define_method preference_setter_method(name) do |value|
|
19
|
-
value = convert_preference_value(value, type)
|
20
|
+
value = convert_preference_value(value, type, nullable: nullable)
|
20
21
|
preferences[name] = value
|
21
22
|
|
22
23
|
Spree::Deprecation.warn("`#{name}` is deprecated. #{deprecated}") if deprecated
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core/webhooks.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
module Spree
|
2
2
|
module Webhooks
|
3
3
|
def self.disable_webhooks
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
prev_value = disabled?
|
5
|
+
RequestStore.store[:disable_spree_webhooks] = true
|
6
|
+
yield
|
7
|
+
ensure
|
8
|
+
RequestStore.store[:disable_spree_webhooks] = prev_value
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.disabled?
|
12
|
+
# rubocop:disable Style/RedundantFetchBlock
|
13
|
+
RequestStore.fetch(:disable_spree_webhooks) { false }
|
14
|
+
# rubocop:enable Style/RedundantFetchBlock
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.disabled=(value)
|
18
|
+
RequestStore.store[:disable_spree_webhooks] = value
|
11
19
|
end
|
12
20
|
end
|
13
21
|
end
|
data/lib/spree/core.rb
CHANGED
@@ -19,6 +19,7 @@ require 'ransack'
|
|
19
19
|
require 'state_machines-activerecord'
|
20
20
|
require 'active_storage_validations'
|
21
21
|
require 'activerecord-typedstore'
|
22
|
+
require 'request_store'
|
22
23
|
|
23
24
|
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
24
25
|
# invalid state of a Payment. In the future this should be removed.
|
data/lib/spree/money.rb
CHANGED
@@ -28,7 +28,7 @@ module Spree
|
|
28
28
|
|
29
29
|
def initialize(amount, options = {})
|
30
30
|
::Money.default_currency ||= Spree::Store.default.default_currency || 'USD'
|
31
|
-
@money = Monetize.parse(
|
31
|
+
@money = Monetize.parse(amount, (options[:currency] || Spree::Store.default.default_currency))
|
32
32
|
@options = Spree::Money.default_formatting_rules.merge(options)
|
33
33
|
end
|
34
34
|
|
@@ -37,12 +37,12 @@ module Spree
|
|
37
37
|
ability_class.register_ability(ability)
|
38
38
|
end
|
39
39
|
|
40
|
-
let(:user) { Spree.
|
40
|
+
let(:user) { Spree.admin_user_class.new }
|
41
41
|
let(:admin_app) { Spree::OauthApplication.create!(name: 'Admin Panel', scopes: 'admin') }
|
42
42
|
let(:admin_token) { Spree::OauthAccessToken.create!(application: admin_app, scopes: 'admin').token }
|
43
43
|
|
44
44
|
before do
|
45
|
-
allow(Spree.
|
45
|
+
allow(Spree.admin_user_class).to receive(:find_by).and_return(user)
|
46
46
|
if defined?(Spree::Admin)
|
47
47
|
allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(user)
|
48
48
|
allow_any_instance_of(Spree::Admin::BaseController).to receive(:admin_oauth_application).and_return(admin_app)
|
@@ -17,7 +17,7 @@ namespace :common do
|
|
17
17
|
Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}"]
|
18
18
|
|
19
19
|
# install frontend libraries
|
20
|
-
unless ['spree/api', 'spree/core', 'spree/sample'].include?(ENV['LIB_NAME'])
|
20
|
+
unless ['spree/api', 'spree/core', 'spree/sample', 'spree/emails'].include?(ENV['LIB_NAME'])
|
21
21
|
system('bin/rails importmap:install')
|
22
22
|
system('bin/rails turbo:install')
|
23
23
|
system('bin/rails stimulus:install')
|
data/spree_core.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Schofield
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionpack
|
@@ -525,6 +525,20 @@ dependencies:
|
|
525
525
|
- - "~>"
|
526
526
|
- !ruby/object:Gem::Version
|
527
527
|
version: '1.0'
|
528
|
+
- !ruby/object:Gem::Dependency
|
529
|
+
name: request_store
|
530
|
+
requirement: !ruby/object:Gem::Requirement
|
531
|
+
requirements:
|
532
|
+
- - "~>"
|
533
|
+
- !ruby/object:Gem::Version
|
534
|
+
version: '1.7'
|
535
|
+
type: :runtime
|
536
|
+
prerelease: false
|
537
|
+
version_requirements: !ruby/object:Gem::Requirement
|
538
|
+
requirements:
|
539
|
+
- - "~>"
|
540
|
+
- !ruby/object:Gem::Version
|
541
|
+
version: '1.7'
|
528
542
|
description: Spree Models, Helpers, Services and core libraries
|
529
543
|
email: hello@spreecommerce.org
|
530
544
|
executables: []
|
@@ -550,6 +564,7 @@ files:
|
|
550
564
|
- app/finders/spree/products/find.rb
|
551
565
|
- app/finders/spree/stores/find_current.rb
|
552
566
|
- app/finders/spree/taxons/find.rb
|
567
|
+
- app/finders/spree/variants/find.rb
|
553
568
|
- app/finders/spree/variants/option_types_finder.rb
|
554
569
|
- app/finders/spree/variants/visible_finder.rb
|
555
570
|
- app/helpers/spree/base_helper.rb
|
@@ -664,6 +679,7 @@ files:
|
|
664
679
|
- app/models/spree/order/emails.rb
|
665
680
|
- app/models/spree/order/payments.rb
|
666
681
|
- app/models/spree/order/store_credit.rb
|
682
|
+
- app/models/spree/order/webhooks.rb
|
667
683
|
- app/models/spree/order_contents.rb
|
668
684
|
- app/models/spree/order_inventory.rb
|
669
685
|
- app/models/spree/order_merger.rb
|
@@ -672,6 +688,7 @@ files:
|
|
672
688
|
- app/models/spree/payment.rb
|
673
689
|
- app/models/spree/payment/gateway_options.rb
|
674
690
|
- app/models/spree/payment/processing.rb
|
691
|
+
- app/models/spree/payment/webhooks.rb
|
675
692
|
- app/models/spree/payment_capture_event.rb
|
676
693
|
- app/models/spree/payment_method.rb
|
677
694
|
- app/models/spree/payment_method/check.rb
|
@@ -680,6 +697,7 @@ files:
|
|
680
697
|
- app/models/spree/preference.rb
|
681
698
|
- app/models/spree/price.rb
|
682
699
|
- app/models/spree/product.rb
|
700
|
+
- app/models/spree/product/webhooks.rb
|
683
701
|
- app/models/spree/product_option_type.rb
|
684
702
|
- app/models/spree/product_promotion_rule.rb
|
685
703
|
- app/models/spree/product_property.rb
|
@@ -716,6 +734,7 @@ files:
|
|
716
734
|
- app/models/spree/refund_reason.rb
|
717
735
|
- app/models/spree/reimbursement.rb
|
718
736
|
- app/models/spree/reimbursement/credit.rb
|
737
|
+
- app/models/spree/reimbursement/emails.rb
|
719
738
|
- app/models/spree/reimbursement/reimbursement_type_engine.rb
|
720
739
|
- app/models/spree/reimbursement/reimbursement_type_validator.rb
|
721
740
|
- app/models/spree/reimbursement_performer.rb
|
@@ -742,6 +761,8 @@ files:
|
|
742
761
|
- app/models/spree/role.rb
|
743
762
|
- app/models/spree/role_user.rb
|
744
763
|
- app/models/spree/shipment.rb
|
764
|
+
- app/models/spree/shipment/emails.rb
|
765
|
+
- app/models/spree/shipment/webhooks.rb
|
745
766
|
- app/models/spree/shipment_handler.rb
|
746
767
|
- app/models/spree/shipping_calculator.rb
|
747
768
|
- app/models/spree/shipping_category.rb
|
@@ -768,8 +789,10 @@ files:
|
|
768
789
|
- app/models/spree/stock/splitter/shipping_category.rb
|
769
790
|
- app/models/spree/stock/splitter/weight.rb
|
770
791
|
- app/models/spree/stock_item.rb
|
792
|
+
- app/models/spree/stock_item/webhooks.rb
|
771
793
|
- app/models/spree/stock_location.rb
|
772
794
|
- app/models/spree/stock_movement.rb
|
795
|
+
- app/models/spree/stock_movement/webhooks.rb
|
773
796
|
- app/models/spree/stock_transfer.rb
|
774
797
|
- app/models/spree/store.rb
|
775
798
|
- app/models/spree/store_credit.rb
|
@@ -789,6 +812,7 @@ files:
|
|
789
812
|
- app/models/spree/taxon_image/configuration/active_storage.rb
|
790
813
|
- app/models/spree/taxonomy.rb
|
791
814
|
- app/models/spree/variant.rb
|
815
|
+
- app/models/spree/variant/webhooks.rb
|
792
816
|
- app/models/spree/wished_item.rb
|
793
817
|
- app/models/spree/wishlist.rb
|
794
818
|
- app/models/spree/zone.rb
|
@@ -851,6 +875,7 @@ files:
|
|
851
875
|
- app/services/spree/seeds/all.rb
|
852
876
|
- app/services/spree/seeds/countries.rb
|
853
877
|
- app/services/spree/seeds/default_reimbursement_types.rb
|
878
|
+
- app/services/spree/seeds/payment_methods.rb
|
854
879
|
- app/services/spree/seeds/roles.rb
|
855
880
|
- app/services/spree/seeds/shipping_categories.rb
|
856
881
|
- app/services/spree/seeds/states.rb
|
@@ -939,6 +964,8 @@ files:
|
|
939
964
|
- db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb
|
940
965
|
- db/migrate/20240303174340_fix_spree_stock_item_unique_index.rb
|
941
966
|
- db/migrate/20240514105216_add_weight_and_dimension_units_to_spree_variants.rb
|
967
|
+
- db/migrate/20240623172111_add_deleted_at_to_spree_stock_locations.rb
|
968
|
+
- db/migrate/20240725124530_add_refunder_to_spree_refunds.rb
|
942
969
|
- db/seeds.rb
|
943
970
|
- lib/friendly_id/paranoia.rb
|
944
971
|
- lib/generators/spree/custom_authentication/custom_authentication_generator.rb
|
@@ -1119,9 +1146,9 @@ licenses:
|
|
1119
1146
|
- BSD-3-Clause
|
1120
1147
|
metadata:
|
1121
1148
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
1122
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v4.
|
1149
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v4.9.0
|
1123
1150
|
documentation_uri: https://docs.spreecommerce.org/
|
1124
|
-
source_code_uri: https://github.com/spree/spree/tree/v4.
|
1151
|
+
source_code_uri: https://github.com/spree/spree/tree/v4.9.0
|
1125
1152
|
post_install_message:
|
1126
1153
|
rdoc_options: []
|
1127
1154
|
require_paths:
|