solidus_core 3.0.4 → 3.0.7
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/models/concerns/spree/active_storage_adapter/attachment.rb +4 -2
- data/app/models/spree/log_entry.rb +74 -1
- data/app/models/spree/order_shipping.rb +6 -9
- data/app/models/spree/product.rb +1 -0
- data/app/models/spree/promotion_code.rb +2 -2
- data/app/models/spree/refund.rb +8 -0
- data/app/models/spree/store_credit.rb +8 -0
- data/lib/generators/solidus/install/install_generator.rb +2 -1
- data/lib/spree/app_configuration.rb +16 -0
- data/lib/spree/core/engine.rb +6 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +1 -0
- data/lib/spree/testing_support/factories/user_factory.rb +6 -0
- data/solidus_core.gemspec +1 -0
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 537dddd7d010536778c7f8a680b31f260360f1979c29ae6743db0016a31ce280
|
4
|
+
data.tar.gz: ea39d3503b7fe86d3be5d21d40c435cf7ec53da8b33f28272ad7008c00c3a839
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b9b1a71a93ef6487e619d7fc14a78fc46da6803802f6773e6384e3d5ce000aaeda155dfb7eac3b538eac7ada013c704be4afc70343f85e4d29a2ae4174f1791
|
7
|
+
data.tar.gz: 5f6fee042fa4cbcbd5bc3019dfe94ea48abddcee9ec491677ddb045a3066e92dd896a12c71252e7514e2554d7dd053a0e94e83193f5cda4f01ab48328515dc65
|
@@ -30,7 +30,9 @@ module Spree
|
|
30
30
|
size = style_to_size(style)
|
31
31
|
@attachment.variant(
|
32
32
|
resize_to_limit: size,
|
33
|
-
|
33
|
+
saver: {
|
34
|
+
strip: true
|
35
|
+
}
|
34
36
|
).processed
|
35
37
|
end
|
36
38
|
|
@@ -58,7 +60,7 @@ module Spree
|
|
58
60
|
end
|
59
61
|
|
60
62
|
def normalize_styles(styles)
|
61
|
-
styles.transform_values { |v| v.split('x') }
|
63
|
+
styles.transform_values { |v| v.split('x').map(&:to_i) }
|
62
64
|
end
|
63
65
|
|
64
66
|
def style_to_size(style)
|
@@ -2,10 +2,83 @@
|
|
2
2
|
|
3
3
|
module Spree
|
4
4
|
class LogEntry < Spree::Base
|
5
|
+
# Classes used in core that can be present in serialized details
|
6
|
+
#
|
7
|
+
# Users can add their own classes in
|
8
|
+
# `Spree::Config#log_entry_permitted_classes`.
|
9
|
+
#
|
10
|
+
# @see Spree::AppConfiguration#log_entry_permitted_classes
|
11
|
+
CORE_PERMITTED_CLASSES = [
|
12
|
+
ActiveMerchant::Billing::Response,
|
13
|
+
ActiveSupport::TimeWithZone,
|
14
|
+
Time,
|
15
|
+
ActiveSupport::TimeZone
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
# Raised when a disallowed class is tried to be loaded
|
19
|
+
class DisallowedClass < RuntimeError
|
20
|
+
attr_reader :psych_exception
|
21
|
+
|
22
|
+
def initialize(psych_exception:)
|
23
|
+
@psych_exception = psych_exception
|
24
|
+
super(default_message)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_message
|
30
|
+
<<~MSG
|
31
|
+
#{psych_exception.message}
|
32
|
+
|
33
|
+
You can specify custom classes to be loaded in config/initializers/spree.rb. E.g:
|
34
|
+
|
35
|
+
Spree.config do |config|
|
36
|
+
config.log_entry_permitted_classes = ['MyClass']
|
37
|
+
end
|
38
|
+
MSG
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Raised when YAML contains aliases and they're not enabled
|
43
|
+
class BadAlias < RuntimeError
|
44
|
+
attr_reader :psych_exception
|
45
|
+
|
46
|
+
def initialize(psych_exception:)
|
47
|
+
@psych_exception = psych_exception
|
48
|
+
super(default_message)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def default_message
|
54
|
+
<<~MSG
|
55
|
+
#{psych_exception.message}
|
56
|
+
|
57
|
+
You can explicitly enable aliases in config/initializers/spree.rb. E.g:
|
58
|
+
|
59
|
+
Spree.config do |config|
|
60
|
+
config.log_entry_allow_aliases = true
|
61
|
+
end
|
62
|
+
MSG
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.permitted_classes
|
67
|
+
CORE_PERMITTED_CLASSES + Spree::Config.log_entry_permitted_classes.map(&:constantize)
|
68
|
+
end
|
69
|
+
|
5
70
|
belongs_to :source, polymorphic: true, optional: true
|
6
71
|
|
7
72
|
def parsed_details
|
8
|
-
@details ||= YAML.
|
73
|
+
@details ||= YAML.safe_load(
|
74
|
+
details,
|
75
|
+
permitted_classes: self.class.permitted_classes,
|
76
|
+
aliases: Spree::Config.log_entry_allow_aliases
|
77
|
+
)
|
78
|
+
rescue Psych::DisallowedClass => e
|
79
|
+
raise DisallowedClass.new(psych_exception: e)
|
80
|
+
rescue Psych::BadAlias => e
|
81
|
+
raise BadAlias.new(psych_exception: e)
|
9
82
|
end
|
10
83
|
end
|
11
84
|
end
|
@@ -62,18 +62,15 @@ class Spree::OrderShipping
|
|
62
62
|
end
|
63
63
|
|
64
64
|
inventory_units.map(&:shipment).uniq.each do |shipment|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
# TODO: make OrderShipping#ship_shipment call Shipment#ship! rather than
|
71
|
-
# having Shipment#ship! call OrderShipping#ship_shipment. We only really
|
72
|
-
# need this `update_columns` for the specs, until we make that change.
|
73
|
-
shipment.update_columns(state: 'shipped', shipped_at: Time.current)
|
65
|
+
if shipment.inventory_units.reload.all? { |iu| iu.shipped? || iu.canceled? }
|
66
|
+
shipment.update!(state: "shipped", shipped_at: Time.current, tracking: tracking_number)
|
67
|
+
else
|
68
|
+
shipment.update!(tracking: tracking_number)
|
69
|
+
end
|
74
70
|
end
|
75
71
|
|
76
72
|
send_shipment_emails(carton) if stock_location.fulfillable? && !suppress_mailer # e.g. digital gift cards that aren't actually shipped
|
73
|
+
@order.shipments.reload
|
77
74
|
@order.recalculate
|
78
75
|
|
79
76
|
carton
|
data/app/models/spree/product.rb
CHANGED
@@ -5,12 +5,12 @@ class Spree::PromotionCode < Spree::Base
|
|
5
5
|
belongs_to :promotion_code_batch, class_name: "Spree::PromotionCodeBatch", optional: true
|
6
6
|
has_many :adjustments
|
7
7
|
|
8
|
+
before_validation :normalize_code
|
9
|
+
|
8
10
|
validates :value, presence: true, uniqueness: { allow_blank: true, case_sensitive: true }
|
9
11
|
validates :promotion, presence: true
|
10
12
|
validate :promotion_not_apply_automatically, on: :create
|
11
13
|
|
12
|
-
before_save :normalize_code
|
13
|
-
|
14
14
|
self.whitelisted_ransackable_attributes = ['value']
|
15
15
|
|
16
16
|
# Whether the promotion code has exceeded its usage restrictions
|
data/app/models/spree/refund.rb
CHANGED
@@ -31,6 +31,14 @@ module Spree
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# Sets this price's amount to a new value, parsing it if the new value is
|
35
|
+
# a string.
|
36
|
+
#
|
37
|
+
# @param price [String, #to_d] a new amount
|
38
|
+
def amount=(price)
|
39
|
+
self[:amount] = Spree::LocalizedNumber.parse(price)
|
40
|
+
end
|
41
|
+
|
34
42
|
def description
|
35
43
|
payment.payment_method.name
|
36
44
|
end
|
@@ -40,6 +40,14 @@ class Spree::StoreCredit < Spree::PaymentSource
|
|
40
40
|
extend Spree::DisplayMoney
|
41
41
|
money_methods :amount, :amount_used, :amount_authorized
|
42
42
|
|
43
|
+
# Sets this store credit's amount to a new value,
|
44
|
+
# parsing it as a localized number if the new value is a string.
|
45
|
+
#
|
46
|
+
# @param number [String, #to_d] a new amount
|
47
|
+
def amount=(number)
|
48
|
+
self[:amount] = Spree::LocalizedNumber.parse(number)
|
49
|
+
end
|
50
|
+
|
43
51
|
def amount_remaining
|
44
52
|
return 0.0.to_d if invalidated?
|
45
53
|
amount - amount_used - amount_authorized
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails/generators'
|
4
|
+
require 'rails/version'
|
4
5
|
|
5
6
|
module Solidus
|
6
7
|
# @private
|
@@ -15,7 +16,7 @@ module Solidus
|
|
15
16
|
class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
|
16
17
|
class_option :seed, type: :boolean, default: true, banner: 'Load seed data (migrations must be run)'
|
17
18
|
class_option :sample, type: :boolean, default: true, banner: 'Load sample data (migrations must be run)'
|
18
|
-
class_option :active_storage, type: :boolean, default:
|
19
|
+
class_option :active_storage, type: :boolean, default: Rails.gem_version >= Gem::Version.new("6.1.0"), banner: 'Install ActiveStorage as image attachments handler for products and taxons'
|
19
20
|
class_option :auto_accept, type: :boolean
|
20
21
|
class_option :user_class, type: :string
|
21
22
|
class_option :admin_email, type: :string
|
@@ -165,6 +165,22 @@ module Spree
|
|
165
165
|
# @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
|
166
166
|
preference :logo, :string, default: 'logo/solidus.svg'
|
167
167
|
|
168
|
+
# @!attribute [rw] log_entry_permitted_classes
|
169
|
+
# @return [Array<String>] An array of extra classes that are allowed to be
|
170
|
+
# loaded from a serialized YAML as details in {Spree::LogEntry}
|
171
|
+
# (defaults to a non-frozen empty array, so that extensions can add
|
172
|
+
# their own classes).
|
173
|
+
# @example
|
174
|
+
# config.log_entry_permitted_classes = ['Date']
|
175
|
+
preference :log_entry_permitted_classes, :array, default: []
|
176
|
+
|
177
|
+
# @!attribute [rw] log_entry_allow_aliases
|
178
|
+
# @return [Boolean] Whether YAML aliases are allowed when loading
|
179
|
+
# serialized data in {Spree::LogEntry}. It defaults to true. Depending
|
180
|
+
# on the source of your data, you may consider disabling it to prevent
|
181
|
+
# entity expansion attacks.
|
182
|
+
preference :log_entry_allow_aliases, :boolean, default: true
|
183
|
+
|
168
184
|
# @!attribute [rw] mails_from
|
169
185
|
# @return [String] Email address used as +From:+ field in transactional emails.
|
170
186
|
preference :mails_from, :string, default: 'solidus@example.com'
|
data/lib/spree/core/engine.rb
CHANGED
@@ -15,6 +15,12 @@ module Spree
|
|
15
15
|
generator.test_framework :rspec
|
16
16
|
end
|
17
17
|
|
18
|
+
if ActiveRecord.respond_to?(:yaml_column_permitted_classes) || ActiveRecord::Base.respond_to?(:yaml_column_permitted_classes)
|
19
|
+
config.active_record.yaml_column_permitted_classes ||= []
|
20
|
+
config.active_record.yaml_column_permitted_classes |=
|
21
|
+
[Symbol, BigDecimal, ActiveSupport::HashWithIndifferentAccess]
|
22
|
+
end
|
23
|
+
|
18
24
|
initializer "spree.environment", before: :load_config_initializers do |app|
|
19
25
|
app.config.spree = Spree::Config.environment
|
20
26
|
end
|
data/lib/spree/core/version.rb
CHANGED
@@ -21,6 +21,12 @@ FactoryBot.define do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
trait :with_orders do
|
25
|
+
after(:create) do |user, _|
|
26
|
+
create(:order, user: user)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
24
30
|
factory :admin_user do
|
25
31
|
after(:create) do |user, _|
|
26
32
|
admin_role = Spree::Role.find_by(name: 'admin') || create(:role, name: 'admin')
|
data/solidus_core.gemspec
CHANGED
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
s.add_dependency 'mini_magick', '~> 4.10'
|
41
41
|
s.add_dependency 'monetize', '~> 1.8'
|
42
42
|
s.add_dependency 'kt-paperclip', '~> 6.3'
|
43
|
+
s.add_dependency 'psych', ['>= 3.1.0', '< 5.0']
|
43
44
|
s.add_dependency 'ransack', '~> 2.0'
|
44
45
|
s.add_dependency 'state_machines-activerecord', '~> 0.6'
|
45
46
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solidus_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Solidus Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionmailer
|
@@ -344,6 +344,26 @@ dependencies:
|
|
344
344
|
- - "~>"
|
345
345
|
- !ruby/object:Gem::Version
|
346
346
|
version: '6.3'
|
347
|
+
- !ruby/object:Gem::Dependency
|
348
|
+
name: psych
|
349
|
+
requirement: !ruby/object:Gem::Requirement
|
350
|
+
requirements:
|
351
|
+
- - ">="
|
352
|
+
- !ruby/object:Gem::Version
|
353
|
+
version: 3.1.0
|
354
|
+
- - "<"
|
355
|
+
- !ruby/object:Gem::Version
|
356
|
+
version: '5.0'
|
357
|
+
type: :runtime
|
358
|
+
prerelease: false
|
359
|
+
version_requirements: !ruby/object:Gem::Requirement
|
360
|
+
requirements:
|
361
|
+
- - ">="
|
362
|
+
- !ruby/object:Gem::Version
|
363
|
+
version: 3.1.0
|
364
|
+
- - "<"
|
365
|
+
- !ruby/object:Gem::Version
|
366
|
+
version: '5.0'
|
347
367
|
- !ruby/object:Gem::Dependency
|
348
368
|
name: ransack
|
349
369
|
requirement: !ruby/object:Gem::Requirement
|