solidus_core 3.0.8 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_core might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +2 -4
- data/app/models/concerns/spree/default_price.rb +63 -10
- data/app/models/concerns/spree/user_methods.rb +1 -20
- data/app/models/spree/adjustment.rb +6 -5
- data/app/models/spree/customer_return.rb +3 -2
- data/app/models/spree/image/active_storage_attachment.rb +2 -7
- data/app/models/spree/image/paperclip_attachment.rb +2 -2
- data/app/models/spree/line_item.rb +2 -2
- data/app/models/spree/log_entry.rb +1 -74
- data/app/models/spree/order.rb +10 -5
- data/app/models/spree/order_shipping.rb +9 -6
- data/app/models/spree/price.rb +2 -2
- data/app/models/spree/product/scopes.rb +5 -5
- data/app/models/spree/product.rb +12 -1
- data/app/models/spree/promotion/rules/item_total.rb +50 -6
- data/app/models/spree/promotion.rb +2 -2
- data/app/models/spree/promotion_code.rb +3 -3
- data/app/models/spree/refund.rb +0 -8
- data/app/models/spree/shipping_rate_tax.rb +1 -1
- data/app/models/spree/stock/availability.rb +11 -3
- data/app/models/spree/stock/simple_coordinator.rb +0 -10
- data/app/models/spree/stock_location.rb +1 -1
- data/app/models/spree/store_credit.rb +6 -9
- data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +3 -3
- data/app/models/spree/variant/price_selector.rb +16 -3
- data/app/models/spree/variant.rb +26 -16
- data/config/locales/en.yml +2 -249
- data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
- data/lib/generators/solidus/install/install_generator.rb +2 -3
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -1
- data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
- data/lib/generators/solidus/update/update_generator.rb +112 -0
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +78 -35
- data/lib/spree/app_configuration.rb +64 -19
- data/lib/spree/core/engine.rb +7 -22
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/base.rb +1 -1
- data/lib/spree/core/state_machines/order.rb +1 -1
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +5 -1
- data/lib/spree/core/versioned_value.rb +75 -0
- data/lib/spree/core.rb +17 -0
- data/lib/spree/permitted_attributes.rb +1 -1
- data/lib/spree/preferences/configuration.rb +62 -0
- data/lib/spree/preferences/preferable.rb +8 -0
- data/lib/spree/preferences/preferable_class_methods.rb +5 -3
- data/lib/spree/preferences/preference_differentiator.rb +28 -0
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/dummy_app/database.yml +42 -22
- data/lib/spree/testing_support/dummy_app.rb +33 -19
- data/lib/spree/testing_support/factories/user_factory.rb +0 -6
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- data/solidus_core.gemspec +0 -1
- metadata +9 -26
- data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/lib/tasks/solidus/check_orders_with_invalid_email.rake +0 -18
- data/lib/tasks/upgrade.rake +0 -15
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spree/preferences/preference_differentiator'
|
4
|
+
require 'rails/generators'
|
5
|
+
|
6
|
+
module Solidus
|
7
|
+
# @private
|
8
|
+
class UpdateGenerator < ::Rails::Generators::Base
|
9
|
+
FROM = Spree.previous_solidus_minor_version
|
10
|
+
|
11
|
+
desc 'Generates a new initializer to preview the new defaults for current Solidus version'
|
12
|
+
|
13
|
+
source_root File.expand_path('templates', __dir__)
|
14
|
+
|
15
|
+
class_option :initializer_basename,
|
16
|
+
type: :string,
|
17
|
+
default: 'new_solidus_defaults',
|
18
|
+
banner: 'The name for the new initializer'
|
19
|
+
|
20
|
+
class_option :previous_version_prompt,
|
21
|
+
type: :boolean,
|
22
|
+
default: true,
|
23
|
+
banner: 'Prompt to warn about only previous version support'
|
24
|
+
|
25
|
+
class_option :from,
|
26
|
+
type: :string,
|
27
|
+
default: FROM,
|
28
|
+
banner: 'Solidus version from which you are upgrading'
|
29
|
+
|
30
|
+
class_option :to,
|
31
|
+
type: :string,
|
32
|
+
default: Spree.solidus_version,
|
33
|
+
hide: true
|
34
|
+
|
35
|
+
class_option :initializer_directory,
|
36
|
+
type: :string,
|
37
|
+
default: 'config/initializers/',
|
38
|
+
hide: true
|
39
|
+
|
40
|
+
def create_new_defaults_initializer
|
41
|
+
previous_version_prompt = options[:previous_version_prompt]
|
42
|
+
return if previous_version_prompt && !yes?(<<~MSG, :red)
|
43
|
+
The update process is only supported if you are coming from version #{FROM}. If this is not the case, please, skip it and update your application to use Solidus #{FROM} before retrying.
|
44
|
+
If you are confident you want to upgrade from a previous version, you must rerun the generator with the "--from={OLD_VERSION}" argument.
|
45
|
+
Are you sure you want to continue? (y/N)
|
46
|
+
MSG
|
47
|
+
|
48
|
+
from = options[:from]
|
49
|
+
to = options[:to]
|
50
|
+
@from = from
|
51
|
+
@core_changes = core_changes_template(from, to)
|
52
|
+
@frontend_changes = frontend_changes_template(from, to)
|
53
|
+
@backend_changes = backend_changes_template(from, to)
|
54
|
+
@api_changes = api_changes_template(from, to)
|
55
|
+
|
56
|
+
template 'config/initializers/new_solidus_defaults.rb.tt',
|
57
|
+
File.join(options[:initializer_directory], "#{options[:initializer_basename]}.rb")
|
58
|
+
end
|
59
|
+
|
60
|
+
def print_message
|
61
|
+
say <<~MSG
|
62
|
+
|
63
|
+
***********************************************************************
|
64
|
+
|
65
|
+
Other tasks may be needed to update to the new Solidus version. Please,
|
66
|
+
check https://github.com/solidusio/solidus/blob/v#{options[:to]}/CHANGELOG.md
|
67
|
+
for details.
|
68
|
+
|
69
|
+
Thanks for using Solidus!
|
70
|
+
|
71
|
+
***********************************************************************
|
72
|
+
|
73
|
+
MSG
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def core_changes_template(from, to)
|
79
|
+
changes_template_for(Spree::AppConfiguration, from, to)
|
80
|
+
end
|
81
|
+
|
82
|
+
def frontend_changes_template(from, to)
|
83
|
+
return '' unless defined?(Spree::Frontend::Engine)
|
84
|
+
|
85
|
+
changes_template_for(Spree::FrontendConfiguration, from, to)
|
86
|
+
end
|
87
|
+
|
88
|
+
def backend_changes_template(from, to)
|
89
|
+
return '' unless defined?(Spree::Backend::Engine)
|
90
|
+
|
91
|
+
changes_template_for(Spree::BackendConfiguration, from, to)
|
92
|
+
end
|
93
|
+
|
94
|
+
def api_changes_template(from, to)
|
95
|
+
return '' unless defined?(Spree::Api::Engine)
|
96
|
+
|
97
|
+
changes_template_for(Spree::ApiConfiguration, from, to)
|
98
|
+
end
|
99
|
+
|
100
|
+
def changes_template_for(klass, from, to)
|
101
|
+
changes = Spree::Preferences::PreferenceDifferentiator.new(klass).call(from: from, to: to)
|
102
|
+
return '# No changes' if changes.empty?
|
103
|
+
|
104
|
+
[
|
105
|
+
["config.load_defaults('#{from}')"] +
|
106
|
+
changes.map do |pref_key, change|
|
107
|
+
" # config.#{pref_key} = #{change[:to]}"
|
108
|
+
end.flatten
|
109
|
+
].join("\n")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -1,66 +1,111 @@
|
|
1
1
|
<% if agent_number = ENV['TC_AGENT_NUMBER']
|
2
2
|
database_prefix = agent_number + '_'
|
3
3
|
end %>
|
4
|
+
<% db = case ENV['DB']
|
5
|
+
when 'mysql'
|
6
|
+
'mysql'
|
7
|
+
when 'postgres', 'postgresql'
|
8
|
+
'postgres'
|
9
|
+
when 'sqlite', '', nil
|
10
|
+
'sqlite'
|
11
|
+
else
|
12
|
+
raise "Invalid DB specified: #{ENV['DB']}"
|
13
|
+
end %>
|
14
|
+
<% db_host = case db
|
15
|
+
when 'mysql'
|
16
|
+
ENV['DB_MYSQL_HOST'] || ENV['DB_HOST']
|
17
|
+
when 'postgres'
|
18
|
+
ENV['DB_POSTGRES_HOST'] || ENV['DB_HOST']
|
19
|
+
else
|
20
|
+
ENV['DB_HOST']
|
21
|
+
end %>
|
22
|
+
<% db_username = ENV['DB_USERNAME'] %>
|
23
|
+
<% db_password = ENV['DB_PASSWORD'] %>
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
4
28
|
<% case ENV['DB']
|
5
|
-
when '
|
6
|
-
development:
|
7
|
-
adapter: sqlite3
|
8
|
-
database: db/solidus_development.sqlite3
|
9
|
-
test:
|
10
|
-
adapter: sqlite3
|
11
|
-
database: db/solidus_test.sqlite3
|
12
|
-
timeout: 10000
|
13
|
-
production:
|
14
|
-
adapter: sqlite3
|
15
|
-
database: db/solidus_production.sqlite3
|
16
|
-
<% when 'mysql' %>
|
29
|
+
when 'mysql' %>
|
17
30
|
development:
|
18
31
|
adapter: mysql2
|
19
32
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_development
|
33
|
+
<% unless db_username.blank? %>
|
34
|
+
username: <%= db_username %>
|
35
|
+
<% end %>
|
36
|
+
<% unless db_password.blank? %>
|
37
|
+
password: <%= db_password %>
|
38
|
+
<% end %>
|
39
|
+
<% unless db_host.blank? %>
|
40
|
+
host: <%= db_host %>
|
41
|
+
<% end %>
|
20
42
|
encoding: utf8
|
21
43
|
test:
|
22
44
|
adapter: mysql2
|
23
|
-
<% if ENV['TRAVIS'] %>
|
24
|
-
username: root
|
25
|
-
password:
|
26
|
-
<% end %>
|
27
45
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_test
|
46
|
+
<% unless db_username.blank? %>
|
47
|
+
username: <%= db_username %>
|
48
|
+
<% end %>
|
49
|
+
<% unless db_password.blank? %>
|
50
|
+
password: <%= db_password %>
|
51
|
+
<% end %>
|
52
|
+
<% unless db_host.blank? %>
|
53
|
+
host: <%= db_host %>
|
54
|
+
<% end %>
|
28
55
|
encoding: utf8
|
29
56
|
production:
|
30
57
|
adapter: mysql2
|
31
58
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_production
|
59
|
+
<% unless db_username.blank? %>
|
60
|
+
username: <%= db_username %>
|
61
|
+
<% end %>
|
62
|
+
<% unless db_password.blank? %>
|
63
|
+
password: <%= db_password %>
|
64
|
+
<% end %>
|
65
|
+
<% unless db_host.blank? %>
|
66
|
+
host: <%= db_host %>
|
67
|
+
<% end %>
|
32
68
|
encoding: utf8
|
33
69
|
<% when 'postgres', 'postgresql' %>
|
34
|
-
<% db_host = ENV['DB_HOST'] -%>
|
35
|
-
<% db_username = ENV['DB_USERNAME'] -%>
|
36
|
-
<% db_password = ENV['DB_PASSWORD'] -%>
|
37
70
|
development:
|
38
71
|
adapter: postgresql
|
39
72
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_development
|
40
|
-
|
41
|
-
|
42
|
-
<%
|
73
|
+
<% unless db_username.blank? %>
|
74
|
+
username: <%= db_username %>
|
75
|
+
<% end %>
|
76
|
+
<% unless db_password.blank? %>
|
77
|
+
password: <%= db_password %>
|
78
|
+
<% end %>
|
79
|
+
<% unless db_host.blank? %>
|
43
80
|
host: <%= db_host %>
|
44
|
-
<% end %>
|
81
|
+
<% end %>
|
82
|
+
min_messages: warning
|
45
83
|
test:
|
46
84
|
adapter: postgresql
|
47
85
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_test
|
48
|
-
|
49
|
-
|
86
|
+
<% unless db_username.blank? %>
|
87
|
+
username: <%= db_username %>
|
88
|
+
<% end %>
|
89
|
+
<% unless db_password.blank? %>
|
50
90
|
password: <%= db_password %>
|
51
|
-
<% end %>
|
52
|
-
|
53
|
-
<% unless db_host.blank? %>
|
91
|
+
<% end %>
|
92
|
+
<% unless db_host.blank? %>
|
54
93
|
host: <%= db_host %>
|
55
|
-
<% end %>
|
94
|
+
<% end %>
|
95
|
+
min_messages: warning
|
56
96
|
production:
|
57
97
|
adapter: postgresql
|
58
98
|
database: <%= database_prefix %><%= options[:lib_name] %>_solidus_production
|
59
|
-
|
60
|
-
|
61
|
-
<%
|
99
|
+
<% unless db_username.blank? %>
|
100
|
+
username: <%= db_username %>
|
101
|
+
<% end %>
|
102
|
+
<% unless db_password.blank? %>
|
103
|
+
password: <%= db_password %>
|
104
|
+
<% end %>
|
105
|
+
<% unless db_host.blank? %>
|
62
106
|
host: <%= db_host %>
|
63
|
-
<% end %>
|
107
|
+
<% end %>
|
108
|
+
min_messages: warning
|
64
109
|
<% when 'sqlite', '', nil %>
|
65
110
|
development:
|
66
111
|
adapter: sqlite3
|
@@ -71,6 +116,4 @@ test:
|
|
71
116
|
production:
|
72
117
|
adapter: sqlite3
|
73
118
|
database: db/solidus_production.sqlite3
|
74
|
-
<% else %>
|
75
|
-
<% raise "Invalid DB specified: #{ENV['DB']}" %>
|
76
119
|
<% end %>
|
@@ -21,7 +21,6 @@ require "spree/core/search/base"
|
|
21
21
|
require "spree/core/search/variant"
|
22
22
|
require 'spree/preferences/configuration'
|
23
23
|
require 'spree/core/environment'
|
24
|
-
require 'rails/gem_version'
|
25
24
|
|
26
25
|
module Spree
|
27
26
|
class AppConfiguration < Preferences::Configuration
|
@@ -166,22 +165,6 @@ module Spree
|
|
166
165
|
# @return [String] URL of logo used on frontend (default: +'logo/solidus.svg'+)
|
167
166
|
preference :logo, :string, default: 'logo/solidus.svg'
|
168
167
|
|
169
|
-
# @!attribute [rw] log_entry_permitted_classes
|
170
|
-
# @return [Array<String>] An array of extra classes that are allowed to be
|
171
|
-
# loaded from a serialized YAML as details in {Spree::LogEntry}
|
172
|
-
# (defaults to a non-frozen empty array, so that extensions can add
|
173
|
-
# their own classes).
|
174
|
-
# @example
|
175
|
-
# config.log_entry_permitted_classes = ['Date']
|
176
|
-
preference :log_entry_permitted_classes, :array, default: []
|
177
|
-
|
178
|
-
# @!attribute [rw] log_entry_allow_aliases
|
179
|
-
# @return [Boolean] Whether YAML aliases are allowed when loading
|
180
|
-
# serialized data in {Spree::LogEntry}. It defaults to true. Depending
|
181
|
-
# on the source of your data, you may consider disabling it to prevent
|
182
|
-
# entity expansion attacks.
|
183
|
-
preference :log_entry_allow_aliases, :boolean, default: true
|
184
|
-
|
185
168
|
# @!attribute [rw] mails_from
|
186
169
|
# @return [String] Email address used as +From:+ field in transactional emails.
|
187
170
|
preference :mails_from, :string, default: 'solidus@example.com'
|
@@ -389,6 +372,28 @@ module Spree
|
|
389
372
|
# Spree::Wallet::DefaultPaymentBuilder.
|
390
373
|
class_name_attribute :default_payment_builder_class, default: 'Spree::Wallet::DefaultPaymentBuilder'
|
391
374
|
|
375
|
+
# Allows providing your own class for managing the contents of an order.
|
376
|
+
#
|
377
|
+
# @!attribute [rw] order_contents_class
|
378
|
+
# @return [Class] a class with the same public interfaces as
|
379
|
+
# Spree::OrderContents.
|
380
|
+
class_name_attribute :order_contents_class, default: 'Spree::OrderContents'
|
381
|
+
|
382
|
+
# Allows providing your own class for shipping an order.
|
383
|
+
#
|
384
|
+
# @!attribute [rw] order_shipping_class
|
385
|
+
# @return [Class] a class with the same public interfaces as
|
386
|
+
# Spree::OrderShipping.
|
387
|
+
class_name_attribute :order_shipping_class, default: 'Spree::OrderShipping'
|
388
|
+
|
389
|
+
# Allows providing your own class for managing the inventory units of a
|
390
|
+
# completed order.
|
391
|
+
#
|
392
|
+
# @!attribute [rw] order_cancellations_class
|
393
|
+
# @return [Class] a class with the same public interfaces as
|
394
|
+
# Spree::OrderCancellations.
|
395
|
+
class_name_attribute :order_cancellations_class, default: 'Spree::OrderCancellations'
|
396
|
+
|
392
397
|
# Allows providing your own class for canceling payments.
|
393
398
|
#
|
394
399
|
# @!attribute [rw] payment_canceller
|
@@ -460,7 +465,7 @@ module Spree
|
|
460
465
|
# @!attribute [rw] image_attachment_module
|
461
466
|
# @return [Module] a module that can be included into Spree::Image to allow attachments
|
462
467
|
# Enumerable of images adhering to the present_image_class interface
|
463
|
-
class_name_attribute :image_attachment_module, default:
|
468
|
+
class_name_attribute :image_attachment_module, default: 'Spree::Image::ActiveStorageAttachment'
|
464
469
|
|
465
470
|
# @!attribute [rw] allowed_image_mime_types
|
466
471
|
#
|
@@ -470,6 +475,46 @@ module Spree
|
|
470
475
|
# @return [Array]
|
471
476
|
class_name_attribute :allowed_image_mime_types, default: %w(image/jpeg image/jpg image/png image/gif).freeze
|
472
477
|
|
478
|
+
# @!attribute [rw] product_image_style_default
|
479
|
+
#
|
480
|
+
# Defines which style to default to when style is not provided
|
481
|
+
# :product is the default.
|
482
|
+
#
|
483
|
+
# @return [Symbol]
|
484
|
+
class_name_attribute :product_image_style_default, default: :product
|
485
|
+
|
486
|
+
# @!attribute [rw] product_image_styles
|
487
|
+
#
|
488
|
+
# Defines image styles/sizes hash for styles
|
489
|
+
# `{ mini: '48x48>',
|
490
|
+
# small: '400x400>',
|
491
|
+
# product: '680x680>',
|
492
|
+
# large: '1200x1200>' } is the default.
|
493
|
+
#
|
494
|
+
# @return [Hash]
|
495
|
+
class_name_attribute :product_image_styles, default: { mini: '48x48>',
|
496
|
+
small: '400x400>',
|
497
|
+
product: '680x680>',
|
498
|
+
large: '1200x1200>' }
|
499
|
+
# @!attribute [rw] taxon_image_style_default
|
500
|
+
#
|
501
|
+
# Defines which style to default to when style is not provided
|
502
|
+
# :mini is the default.
|
503
|
+
#
|
504
|
+
# @return [Symbol]
|
505
|
+
class_name_attribute :taxon_image_style_default, default: :mini
|
506
|
+
|
507
|
+
# @!attribute [rw] taxon_styles
|
508
|
+
#
|
509
|
+
# Defines taxon styles/sizes hash for styles
|
510
|
+
# `{ mini: '48x48>',
|
511
|
+
# small: '400x400>',
|
512
|
+
# product: '680x680>',
|
513
|
+
# large: '1200x1200>' } is the default.
|
514
|
+
#
|
515
|
+
# @return [Hash]
|
516
|
+
class_name_attribute :taxon_image_styles, default: { mini: '32x32>', normal: '128x128>' }
|
517
|
+
|
473
518
|
# Allows switching attachment library for Taxon
|
474
519
|
#
|
475
520
|
# `Spree::Taxon::ActiveStorageAttachment`
|
@@ -478,7 +523,7 @@ module Spree
|
|
478
523
|
# @!attribute [rw] taxon_attachment_module
|
479
524
|
# @return [Module] a module that can be included into Spree::Taxon to allow attachments
|
480
525
|
# Enumerable of taxons adhering to the present_taxon_class interface
|
481
|
-
class_name_attribute :taxon_attachment_module, default:
|
526
|
+
class_name_attribute :taxon_attachment_module, default: 'Spree::Taxon::ActiveStorageAttachment'
|
482
527
|
|
483
528
|
# Allows providing your own class instance for generating order numbers.
|
484
529
|
#
|
data/lib/spree/core/engine.rb
CHANGED
@@ -15,12 +15,6 @@ 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
|
-
|
24
18
|
initializer "spree.environment", before: :load_config_initializers do |app|
|
25
19
|
app.config.spree = Spree::Config.environment
|
26
20
|
end
|
@@ -61,26 +55,17 @@ module Spree
|
|
61
55
|
end
|
62
56
|
end
|
63
57
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
# manually required.
|
69
|
-
if Rails.env.development? || Rails.env.test?
|
70
|
-
ActionMailer::Preview.all
|
58
|
+
# Load in mailer previews for apps to use in development.
|
59
|
+
initializer "spree.core.action_mailer.set_preview_path", after: "action_mailer.set_configs" do |app|
|
60
|
+
original_preview_path = app.config.action_mailer.preview_path
|
61
|
+
solidus_preview_path = Spree::Core::Engine.root.join 'lib/spree/mailer_previews'
|
71
62
|
|
72
|
-
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
63
|
+
app.config.action_mailer.preview_path = "{#{original_preview_path},#{solidus_preview_path}}"
|
64
|
+
ActionMailer::Base.preview_path = app.config.action_mailer.preview_path
|
76
65
|
end
|
77
66
|
|
78
67
|
config.after_initialize do
|
79
|
-
|
80
|
-
Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new('2.5.4') &&
|
81
|
-
defined?(Spree::UsersController)
|
82
|
-
Spree::UsersController.protect_from_forgery with: :exception
|
83
|
-
end
|
68
|
+
Spree::Config.check_load_defaults_called('Spree::Config')
|
84
69
|
end
|
85
70
|
end
|
86
71
|
end
|
@@ -51,7 +51,7 @@ module Spree
|
|
51
51
|
# separate queries most of the time but opt for a join as soon as any
|
52
52
|
# `where` constraints affecting joined tables are added to the search;
|
53
53
|
# which is the case as soon as a taxon is added to the base scope.
|
54
|
-
scope = scope.preload(master: :
|
54
|
+
scope = scope.preload(master: :prices)
|
55
55
|
scope = scope.preload(master: :images) if @properties[:include_images]
|
56
56
|
scope
|
57
57
|
end
|
@@ -12,7 +12,7 @@ module Spree
|
|
12
12
|
# end
|
13
13
|
#
|
14
14
|
class EmailValidator < ActiveModel::EachValidator
|
15
|
-
EMAIL_REGEXP =
|
15
|
+
EMAIL_REGEXP = /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/
|
16
16
|
|
17
17
|
def validate_each(record, attribute, value)
|
18
18
|
unless EMAIL_REGEXP.match? value
|
data/lib/spree/core/version.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Spree
|
4
|
-
VERSION = "3.0
|
4
|
+
VERSION = "3.1.0"
|
5
5
|
|
6
6
|
def self.solidus_version
|
7
7
|
VERSION
|
8
8
|
end
|
9
9
|
|
10
|
+
def self.previous_solidus_minor_version
|
11
|
+
'3.0'
|
12
|
+
end
|
13
|
+
|
10
14
|
def self.solidus_gem_version
|
11
15
|
Gem::Version.new(solidus_version)
|
12
16
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module Core
|
5
|
+
# Wrapper for a value that can be different depending on the Solidus version
|
6
|
+
#
|
7
|
+
# Some configuration defaults can be added or changed when a new Solidus
|
8
|
+
# version is released. This class encapsulates getting the correct value for a
|
9
|
+
# given Solidus version.
|
10
|
+
#
|
11
|
+
# The way it works is you provide an initial value in time, plus the version
|
12
|
+
# boundary where it got changed. Then you can fetch the value providing the
|
13
|
+
# desired Solidus version:
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# value = VersionedValue.new(true, "3.0.0" => false)
|
17
|
+
# value.call("2.7.0") # => true
|
18
|
+
# value.call("3.0.0") # => false
|
19
|
+
# value.call("3.1.0") # => false
|
20
|
+
#
|
21
|
+
# Remember that you must provide the exact boundary when a value got changed,
|
22
|
+
# which could easily be during a pre-release:
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
# value = VersionedValue.new(true, "3.0.0" => false)
|
26
|
+
# value.call("3.0.0.alpha") # => true
|
27
|
+
#
|
28
|
+
# value = VersionedValue.new(true, "3.0.0.alpha" => false)
|
29
|
+
# value.call("3.0.0.alpha") # => false
|
30
|
+
#
|
31
|
+
# Multiple boundaries can also be provided:
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# value = VersionedValue.new(0, "2.0.0" => 1, "3.0.0" => 2)
|
35
|
+
# value.call("1.0.0") # => 0
|
36
|
+
# value.call("2.1.0") # => 1
|
37
|
+
# value.call("3.0.0") # => 2
|
38
|
+
class VersionedValue
|
39
|
+
attr_reader :boundaries
|
40
|
+
|
41
|
+
# @param initial_value [Any]
|
42
|
+
# @param boundary [Hash<String, Any>] Map from version number to new value
|
43
|
+
def initialize(initial_value, boundaries = {})
|
44
|
+
@boundaries = Hash[
|
45
|
+
{ '0' => initial_value }
|
46
|
+
.merge(boundaries)
|
47
|
+
.transform_keys { |version| to_gem_version(version) }
|
48
|
+
.sort
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param solidus_version [String]
|
53
|
+
def call(solidus_version = Spree.solidus_version)
|
54
|
+
solidus_version = to_gem_version(solidus_version)
|
55
|
+
boundaries.fetch(
|
56
|
+
boundaries
|
57
|
+
.keys
|
58
|
+
.reduce do |target, following|
|
59
|
+
if target <= solidus_version && solidus_version < following
|
60
|
+
target
|
61
|
+
else
|
62
|
+
following
|
63
|
+
end
|
64
|
+
end
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def to_gem_version(string)
|
71
|
+
Gem::Version.new(string)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/spree/core.rb
CHANGED
@@ -37,6 +37,16 @@ module Spree
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
# Load the same version defaults for all available Solidus components
|
41
|
+
#
|
42
|
+
# @see Spree::Preferences::Configuration#load_defaults
|
43
|
+
def self.load_defaults(version)
|
44
|
+
Spree::Config.load_defaults(version)
|
45
|
+
Spree::Frontend::Config.load_defaults(version) if defined?(Spree::Frontend::Config)
|
46
|
+
Spree::Backend::Config.load_defaults(version) if defined?(Spree::Backend::Config)
|
47
|
+
Spree::Api::Config.load_defaults(version) if defined?(Spree::Api::Config)
|
48
|
+
end
|
49
|
+
|
40
50
|
# Used to configure Spree.
|
41
51
|
#
|
42
52
|
# Example:
|
@@ -52,6 +62,13 @@ module Spree
|
|
52
62
|
end
|
53
63
|
|
54
64
|
module Core
|
65
|
+
def self.has_install_generator_been_run?
|
66
|
+
(Rails.env.test? && Rails.application.class.name == 'DummyApp::Application') ||
|
67
|
+
Rails.application.paths['config/initializers'].paths.any? do |path|
|
68
|
+
File.exist?(path.join('spree.rb'))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
55
72
|
class GatewayError < RuntimeError; end
|
56
73
|
end
|
57
74
|
end
|
@@ -74,7 +74,7 @@ module Spree
|
|
74
74
|
@@product_properties_attributes = [:property_name, :value, :position]
|
75
75
|
|
76
76
|
@@product_attributes = [
|
77
|
-
:name, :description, :available_on, :discontinue_on, :
|
77
|
+
:name, :description, :available_on, :discontinue_on, :meta_description,
|
78
78
|
:meta_keywords, :price, :sku, :deleted_at,
|
79
79
|
:option_values_hash, :weight, :height, :width, :depth,
|
80
80
|
:shipping_category_id, :tax_category_id,
|