solidus_core 3.0.3 → 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/default_price.rb +63 -10
- 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/order.rb +11 -6
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product/scopes.rb +5 -5
- data/app/models/spree/product.rb +12 -0
- 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 +1 -1
- 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 -1
- 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 -0
- data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
- data/lib/generators/solidus/install/install_generator.rb +1 -1
- 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 +62 -0
- data/lib/spree/core/engine.rb +7 -16
- 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/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/dummy_app/database.yml +42 -22
- data/lib/spree/testing_support/dummy_app.rb +33 -18
- data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
- metadata +11 -7
- data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
- data/lib/tasks/upgrade.rake +0 -15
data/app/models/spree/variant.rb
CHANGED
@@ -24,7 +24,6 @@ module Spree
|
|
24
24
|
stock_items.discard_all
|
25
25
|
images.destroy_all
|
26
26
|
prices.discard_all
|
27
|
-
currently_valid_prices.discard_all
|
28
27
|
end
|
29
28
|
|
30
29
|
attr_writer :rebuild_vat_prices
|
@@ -58,13 +57,6 @@ module Spree
|
|
58
57
|
inverse_of: :variant,
|
59
58
|
autosave: true
|
60
59
|
|
61
|
-
has_many :currently_valid_prices,
|
62
|
-
-> { currently_valid },
|
63
|
-
class_name: 'Spree::Price',
|
64
|
-
dependent: :destroy,
|
65
|
-
inverse_of: :variant,
|
66
|
-
autosave: true
|
67
|
-
|
68
60
|
before_validation :set_cost_currency
|
69
61
|
before_validation :set_price, if: -> { product && product.master }
|
70
62
|
before_validation :build_vat_prices, if: -> { rebuild_vat_prices? || new_record? && product }
|
@@ -276,16 +268,17 @@ module Spree
|
|
276
268
|
end
|
277
269
|
|
278
270
|
# Chooses an appropriate price for the given pricing options
|
271
|
+
# This has been deprecated in favor of #price_for_options.
|
279
272
|
#
|
280
|
-
# @see Spree::Variant::PriceSelector#
|
273
|
+
# @see Spree::Variant::PriceSelector#price_for_options
|
281
274
|
delegate :price_for, to: :price_selector
|
282
275
|
|
283
276
|
# Returns the difference in price from the master variant
|
284
277
|
def price_difference_from_master(pricing_options = Spree::Config.default_pricing_options)
|
285
|
-
master_price = product.master.
|
286
|
-
variant_price =
|
278
|
+
master_price = product.master.price_for_options(pricing_options)
|
279
|
+
variant_price = price_for_options(pricing_options)
|
287
280
|
return unless master_price && variant_price
|
288
|
-
variant_price - master_price
|
281
|
+
Spree::Money.new(variant_price.amount - master_price.amount, currency: pricing_options.currency)
|
289
282
|
end
|
290
283
|
|
291
284
|
def price_same_as_master?(pricing_options = Spree::Config.default_pricing_options)
|
@@ -293,6 +286,17 @@ module Spree
|
|
293
286
|
diff && diff.zero?
|
294
287
|
end
|
295
288
|
|
289
|
+
def price_for_options(price_options)
|
290
|
+
if price_selector.respond_to?(:price_for_options)
|
291
|
+
price_selector.price_for_options(price_options)
|
292
|
+
else
|
293
|
+
money = price_for(price_options)
|
294
|
+
return if money.nil?
|
295
|
+
|
296
|
+
Spree::Price.new(amount: money.to_d, variant: self, currency: price_options.currency)
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
296
300
|
# Generates a friendly name and sku string.
|
297
301
|
#
|
298
302
|
# @return [String]
|
@@ -315,16 +319,22 @@ module Spree
|
|
315
319
|
end
|
316
320
|
|
317
321
|
# @param quantity [Fixnum] how many are desired
|
322
|
+
# @param stock_location [Spree::StockLocation] Optionally restrict stock
|
323
|
+
# quantity check to a specific stock location. If unspecified it will
|
324
|
+
# check inventory in all available StockLocations.
|
318
325
|
# @return [Boolean] true if the desired quantity can be supplied
|
319
|
-
def can_supply?(quantity = 1)
|
320
|
-
Spree::Stock::Quantifier.new(self).can_supply?(quantity)
|
326
|
+
def can_supply?(quantity = 1, stock_location = nil)
|
327
|
+
Spree::Stock::Quantifier.new(self, stock_location).can_supply?(quantity)
|
321
328
|
end
|
322
329
|
|
323
330
|
# Fetches the on-hand quantity of the variant.
|
324
331
|
#
|
332
|
+
# @param stock_location [Spree::StockLocation] Optionally restrict stock
|
333
|
+
# quantity check to a specific stock location. If unspecified it will
|
334
|
+
# check inventory in all available StockLocations.
|
325
335
|
# @return [Fixnum] the number currently on-hand
|
326
|
-
def total_on_hand
|
327
|
-
Spree::Stock::Quantifier.new(self).total_on_hand
|
336
|
+
def total_on_hand(stock_location = nil)
|
337
|
+
Spree::Stock::Quantifier.new(self, stock_location).total_on_hand
|
328
338
|
end
|
329
339
|
|
330
340
|
# Shortcut method to determine if inventory tracking is enabled for this
|
data/config/locales/en.yml
CHANGED
@@ -1288,6 +1288,8 @@ en:
|
|
1288
1288
|
%{amount}.
|
1289
1289
|
item_total_less_than_or_equal: This coupon code can't be applied to orders
|
1290
1290
|
less than or equal to %{amount}.
|
1291
|
+
item_total_doesnt_match_with_operator: This coupon code can't be applied to
|
1292
|
+
orders %{operator} %{amount}.
|
1291
1293
|
limit_once_per_user: This coupon code can only be used once per user.
|
1292
1294
|
missing_product: This coupon code can't be applied because you don't have
|
1293
1295
|
all of the necessary products in your cart.
|
@@ -132,7 +132,7 @@ module Solidus
|
|
132
132
|
Solidus has a default authentication extension that uses Devise.
|
133
133
|
You can find more info at https://github.com/solidusio/solidus_auth_devise.
|
134
134
|
|
135
|
-
Would you like to install it? (
|
135
|
+
Would you like to install it? (Y/n)"))
|
136
136
|
|
137
137
|
@plugins_to_be_installed << 'solidus_auth_devise'
|
138
138
|
@plugin_generators_to_run << 'solidus:auth:install'
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# Configure Solidus Preferences
|
2
2
|
# See http://docs.solidus.io/Spree/AppConfiguration.html for details
|
3
3
|
|
4
|
+
# Solidus version defaults for preferences that are not overridden
|
5
|
+
Spree.load_defaults '<%= Spree.solidus_version %>'
|
6
|
+
|
4
7
|
Spree.config do |config|
|
5
8
|
# Core:
|
6
|
-
|
7
9
|
# Default currency for new sites
|
8
10
|
config.currency = "USD"
|
9
11
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# This initializer lets you preview the defaults that have changed on the new
|
2
|
+
# Solidus version.
|
3
|
+
#
|
4
|
+
# It allows you to enable them one by one while you adapt your application.
|
5
|
+
# When you're done with all of them, you can safely remove this file and add
|
6
|
+
# the updated `load_defaults` calls to the top of the config blocks in your
|
7
|
+
# Solidus main initializer. You can also call `Spree.load_defaults(version)` to
|
8
|
+
# target all components at once.
|
9
|
+
|
10
|
+
Spree.config do |config|
|
11
|
+
<%= @core_changes %>
|
12
|
+
end
|
13
|
+
|
14
|
+
<% if defined?(Spree::Frontend::Engine) -%>
|
15
|
+
Spree::Frontend::Config.configure do |config|
|
16
|
+
<%= @frontend_changes %>
|
17
|
+
end
|
18
|
+
<% end -%>
|
19
|
+
|
20
|
+
<% if defined?(Spree::Backend::Engine) -%>
|
21
|
+
Spree::Backend::Config.configure do |config|
|
22
|
+
<%= @backend_changes %>
|
23
|
+
end
|
24
|
+
<% end -%>
|
25
|
+
|
26
|
+
<% if defined?(Spree::Api::Engine) -%>
|
27
|
+
Spree::Api::Config.configure do |config|
|
28
|
+
<%= @api_changes %>
|
29
|
+
end
|
30
|
+
<% end -%>
|
@@ -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 %>
|
@@ -372,6 +372,28 @@ module Spree
|
|
372
372
|
# Spree::Wallet::DefaultPaymentBuilder.
|
373
373
|
class_name_attribute :default_payment_builder_class, default: 'Spree::Wallet::DefaultPaymentBuilder'
|
374
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
|
+
|
375
397
|
# Allows providing your own class for canceling payments.
|
376
398
|
#
|
377
399
|
# @!attribute [rw] payment_canceller
|
@@ -453,6 +475,46 @@ module Spree
|
|
453
475
|
# @return [Array]
|
454
476
|
class_name_attribute :allowed_image_mime_types, default: %w(image/jpeg image/jpg image/png image/gif).freeze
|
455
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
|
+
|
456
518
|
# Allows switching attachment library for Taxon
|
457
519
|
#
|
458
520
|
# `Spree::Taxon::ActiveStorageAttachment`
|
data/lib/spree/core/engine.rb
CHANGED
@@ -55,26 +55,17 @@ module Spree
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
# manually required.
|
63
|
-
if Rails.env.development? || Rails.env.test?
|
64
|
-
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'
|
65
62
|
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
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
|
70
65
|
end
|
71
66
|
|
72
67
|
config.after_initialize do
|
73
|
-
|
74
|
-
Gem::Version.new(Spree::Auth::VERSION) < Gem::Version.new('2.5.4') &&
|
75
|
-
defined?(Spree::UsersController)
|
76
|
-
Spree::UsersController.protect_from_forgery with: :exception
|
77
|
-
end
|
68
|
+
Spree::Config.check_load_defaults_called('Spree::Config')
|
78
69
|
end
|
79
70
|
end
|
80
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
|
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
|