spree_core 4.7.2 → 4.8.0
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/LICENSE +1 -1
- data/app/finders/spree/taxons/find.rb +7 -3
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/product_scopes.rb +19 -19
- data/app/models/concerns/spree/user_address.rb +4 -2
- data/app/models/spree/address.rb +2 -21
- data/app/models/spree/asset.rb +2 -2
- data/app/models/spree/calculator/default_tax.rb +1 -1
- data/app/models/spree/cms_page.rb +3 -3
- data/app/models/spree/cms_section.rb +1 -1
- data/app/models/spree/country.rb +0 -26
- data/app/models/spree/credit_card.rb +5 -3
- data/app/models/spree/customer_return.rb +3 -3
- data/app/models/spree/digital.rb +1 -1
- data/app/models/spree/digital_link.rb +1 -1
- data/app/models/spree/image.rb +2 -2
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/legacy_user.rb +3 -3
- data/app/models/spree/line_item.rb +2 -2
- data/app/models/spree/menu.rb +2 -2
- data/app/models/spree/menu_item.rb +1 -1
- data/app/models/spree/option_type.rb +6 -6
- data/app/models/spree/option_value.rb +5 -5
- data/app/models/spree/order.rb +9 -7
- data/app/models/spree/payment.rb +4 -4
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/payment_method.rb +1 -1
- data/app/models/spree/payment_source.rb +1 -1
- data/app/models/spree/price.rb +4 -2
- data/app/models/spree/product.rb +30 -19
- data/app/models/spree/product_property.rb +5 -3
- data/app/models/spree/promotion.rb +3 -3
- data/app/models/spree/property.rb +8 -6
- data/app/models/spree/prototype.rb +2 -2
- data/app/models/spree/refund.rb +2 -2
- data/app/models/spree/reimbursement.rb +2 -2
- data/app/models/spree/return_authorization.rb +2 -2
- data/app/models/spree/return_item.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/shipment.rb +4 -4
- data/app/models/spree/shipping_category.rb +2 -2
- data/app/models/spree/shipping_method.rb +2 -2
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock_item.rb +3 -3
- data/app/models/spree/stock_location.rb +7 -2
- data/app/models/spree/stock_movement.rb +1 -1
- data/app/models/spree/stock_transfer.rb +4 -4
- data/app/models/spree/store.rb +3 -5
- data/app/models/spree/store_credit.rb +3 -3
- data/app/models/spree/store_favicon_image.rb +11 -2
- data/app/models/spree/tax_category.rb +1 -1
- data/app/models/spree/tax_rate.rb +1 -1
- data/app/models/spree/taxon.rb +23 -7
- data/app/models/spree/taxon_image.rb +2 -2
- data/app/models/spree/taxonomy.rb +5 -5
- data/app/models/spree/variant.rb +11 -6
- data/app/models/spree/wished_item.rb +1 -1
- data/app/models/spree/wishlist.rb +2 -2
- data/app/models/spree/zone.rb +2 -2
- data/app/services/spree/addresses/update.rb +1 -0
- data/app/services/spree/seeds/all.rb +15 -13
- data/app/services/spree/seeds/stores.rb +2 -2
- data/app/sorters/spree/products/sort.rb +1 -1
- data/config/initializers/mobility.rb +1 -0
- data/config/routes.rb +7 -8
- data/db/migrate/20210929090344_create_stock_item_stock_location_id_variant_id_coalesce_deleted_at_unique_index.rb +1 -28
- data/db/migrate/20230103144439_create_option_type_translations.rb +0 -1
- data/db/migrate/20230103151034_create_option_value_translations.rb +0 -1
- data/db/migrate/20230109084253_create_product_property_translations.rb +0 -1
- data/db/migrate/20230109105943_create_property_translations.rb +0 -2
- data/db/migrate/20230110142344_backfill_friendly_id_slug_locale.rb +2 -8
- data/db/migrate/20240303174340_fix_spree_stock_item_unique_index.rb +35 -0
- data/db/migrate/20240514105216_add_weight_and_dimension_units_to_spree_variants.rb +6 -0
- data/lib/generators/spree/custom_authentication/custom_authentication_generator.rb +23 -0
- data/lib/generators/spree/{custom_user → custom_authentication}/templates/authentication_helpers.rb.tt +1 -14
- data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
- data/lib/generators/spree/custom_user/templates/current_user_helpers.rb.tt +15 -0
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -6
- data/lib/generators/spree/dummy/templates/rails/database.yml +19 -21
- data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
- data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -0
- data/lib/spree/core/configuration.rb +11 -25
- data/lib/spree/core/controller_helpers/locale.rb +5 -1
- data/lib/spree/core/engine.rb +4 -1
- data/lib/spree/core/preferences/runtime_configuration.rb +43 -0
- data/lib/spree/core/product_duplicator.rb +2 -0
- data/lib/spree/core/product_filters.rb +9 -2
- data/lib/spree/core/runtime_configuration.rb +9 -0
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core/webhooks.rb +13 -0
- data/lib/spree/core.rb +7 -0
- data/lib/spree/money.rb +38 -5
- data/lib/spree/testing_support/authorization_helpers.rb +3 -1
- data/lib/spree/testing_support/common_rake.rb +7 -18
- data/spree_core.gemspec +7 -7
- metadata +47 -50
- data/db/migrate/20220715120222_change_product_name_null_to_true.rb +0 -5
- data/db/migrate/20220718100948_change_taxon_name_null_to_true.rb +0 -5
- data/db/migrate/20220804073928_transfer_data_to_translatable_tables.rb +0 -66
- data/db/migrate/20230109094907_transfer_options_data_to_translatable_tables.rb +0 -58
- data/db/migrate/20230109110840_transfer_property_data_to_translatable_tables.rb +0 -59
- data/db/migrate/20230111122511_transfer_product_and_taxon_data_to_translatable_tables.rb +0 -82
- data/db/migrate/20230117120430_allow_null_taxonomy_name.rb +0 -5
- data/db/migrate/20230117121303_transfer_taxonomy_data_to_translatable_tables.rb +0 -11
- data/db/migrate/20230210142849_transfer_store_data_to_translatable_tables.rb +0 -11
- data/db/migrate/20230514162157_add_index_on_locale_and_permalink_to_spree_taxons.rb +0 -5
|
@@ -9,7 +9,6 @@ class CreateProductPropertyTranslations < ActiveRecord::Migration[6.1]
|
|
|
9
9
|
create_table :spree_product_property_translations do |t|
|
|
10
10
|
# Translated attribute(s)
|
|
11
11
|
t.string :value
|
|
12
|
-
t.string :filter_param
|
|
13
12
|
|
|
14
13
|
t.string :locale, null: false
|
|
15
14
|
t.references :spree_product_property, null: false, foreign_key: true, index: false
|
|
@@ -8,9 +8,7 @@ class CreatePropertyTranslations < ActiveRecord::Migration[6.1]
|
|
|
8
8
|
else
|
|
9
9
|
create_table :spree_property_translations do |t|
|
|
10
10
|
# Translated attribute(s)
|
|
11
|
-
t.string :name
|
|
12
11
|
t.string :presentation
|
|
13
|
-
t.string :filter_param
|
|
14
12
|
|
|
15
13
|
t.string :locale, null: false
|
|
16
14
|
t.references :spree_property, null: false, foreign_key: true, index: false
|
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
class BackfillFriendlyIdSlugLocale < ActiveRecord::Migration[6.1]
|
|
2
|
-
DEFAULT_LOCALE = 'en'
|
|
3
|
-
|
|
4
2
|
def up
|
|
5
|
-
|
|
6
|
-
UPDATE friendly_id_slugs SET locale = '#{DEFAULT_LOCALE}'
|
|
7
|
-
")
|
|
3
|
+
FriendlyId::Slug.unscoped.update_all(locale: Spree::Store.default.default_locale)
|
|
8
4
|
end
|
|
9
5
|
|
|
10
6
|
def down
|
|
11
|
-
|
|
12
|
-
UPDATE friendly_id_slugs SET locale = NULL
|
|
13
|
-
")
|
|
7
|
+
FriendlyId::Slug.unscoped.update_all(locale: nil)
|
|
14
8
|
end
|
|
15
9
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class FixSpreeStockItemUniqueIndex < ActiveRecord::Migration[6.1]
|
|
2
|
+
def change
|
|
3
|
+
remove_index :spree_stock_items, name: 'stock_item_by_loc_var_id_deleted_at' if index_exists?(:spree_stock_items, [:stock_location_id, :variant_id], name: 'stock_item_by_loc_var_id_deleted_at')
|
|
4
|
+
|
|
5
|
+
unless index_exists?(:spree_stock_items, ['variant_id', 'stock_location_id'], name: 'index_spree_stock_items_unique_without_deleted_at')
|
|
6
|
+
# MySQL doesn't support partial indexes
|
|
7
|
+
if ActiveRecord::Base.connection.adapter_name == 'Mysql2'
|
|
8
|
+
reversible do |dir|
|
|
9
|
+
dir.up do
|
|
10
|
+
execute <<-SQL
|
|
11
|
+
CREATE UNIQUE INDEX index_spree_stock_items_unique_without_deleted_at
|
|
12
|
+
ON spree_stock_items(
|
|
13
|
+
stock_location_id,
|
|
14
|
+
variant_id,
|
|
15
|
+
(COALESCE(deleted_at, CAST('1970-01-01' AS DATETIME)))
|
|
16
|
+
);
|
|
17
|
+
SQL
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
dir.down do
|
|
21
|
+
remove_index :spree_stock_items, name: :index_spree_stock_items_unique_without_deleted_at
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
else
|
|
25
|
+
add_index(
|
|
26
|
+
:spree_stock_items,
|
|
27
|
+
['variant_id', 'stock_location_id'],
|
|
28
|
+
name: 'index_spree_stock_items_unique_without_deleted_at',
|
|
29
|
+
unique: true,
|
|
30
|
+
where: 'deleted_at IS NULL',
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class CustomAuthenticationGenerator < Rails::Generators::Base
|
|
3
|
+
desc 'Set up a Spree installation with a custom authentication helpers'
|
|
4
|
+
|
|
5
|
+
def self.source_paths
|
|
6
|
+
paths = superclass.source_paths
|
|
7
|
+
paths << File.expand_path('templates', __dir__)
|
|
8
|
+
paths.flatten
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def generate
|
|
12
|
+
template 'authentication_helpers.rb.tt', 'lib/spree/authentication_helpers.rb'
|
|
13
|
+
|
|
14
|
+
file_action = File.exist?('config/initializers/spree.rb') ? :append_file : :create_file
|
|
15
|
+
send(file_action, 'config/initializers/spree.rb') do
|
|
16
|
+
%Q{
|
|
17
|
+
Rails.application.config.to_prepare do
|
|
18
|
+
require_dependency 'spree/authentication_helpers'
|
|
19
|
+
end\n}
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,14 +1,4 @@
|
|
|
1
1
|
module Spree
|
|
2
|
-
module CurrentUserHelpers
|
|
3
|
-
def self.included(receiver)
|
|
4
|
-
receiver.send :helper_method, :spree_current_user
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def spree_current_user
|
|
8
|
-
current_user
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
2
|
module AuthenticationHelpers
|
|
13
3
|
def self.included(receiver)
|
|
14
4
|
receiver.send :helper_method, :spree_login_path
|
|
@@ -30,7 +20,4 @@ module Spree
|
|
|
30
20
|
end
|
|
31
21
|
end
|
|
32
22
|
|
|
33
|
-
ApplicationController.include Spree::AuthenticationHelpers
|
|
34
|
-
ApplicationController.include Spree::CurrentUserHelpers
|
|
35
|
-
|
|
36
|
-
Spree::Api::BaseController.include Spree::CurrentUserHelpers
|
|
23
|
+
ApplicationController.include Spree::AuthenticationHelpers if defined?(ApplicationController)
|
|
@@ -20,24 +20,19 @@ module Spree
|
|
|
20
20
|
|
|
21
21
|
def generate
|
|
22
22
|
migration_template 'migration.rb.tt', 'db/migrate/add_spree_fields_to_custom_user_table.rb'
|
|
23
|
-
template '
|
|
23
|
+
template 'current_user_helpers.rb.tt', 'lib/spree/current_user_helpers.rb'
|
|
24
24
|
|
|
25
25
|
file_action = File.exist?('config/initializers/spree.rb') ? :append_file : :create_file
|
|
26
26
|
send(file_action, 'config/initializers/spree.rb') do
|
|
27
27
|
%Q{
|
|
28
28
|
Rails.application.config.to_prepare do
|
|
29
|
-
require_dependency 'spree/
|
|
29
|
+
require_dependency 'spree/current_user_helpers'
|
|
30
30
|
end\n}
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def self.next_migration_number(dirname)
|
|
35
|
-
|
|
36
|
-
sleep 1 # make sure to get a different migration every time
|
|
37
|
-
Time.new.utc.strftime('%Y%m%d%H%M%S')
|
|
38
|
-
else
|
|
39
|
-
format('%.3d', (current_migration_number(dirname) + 1))
|
|
40
|
-
end
|
|
35
|
+
format('%.3d', (current_migration_number(dirname) + 1))
|
|
41
36
|
end
|
|
42
37
|
|
|
43
38
|
def klass
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module CurrentUserHelpers
|
|
3
|
+
def self.included(receiver)
|
|
4
|
+
receiver.send :helper_method, :spree_current_user
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def spree_current_user
|
|
8
|
+
current_user
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
ApplicationController.include Spree::CurrentUserHelpers if defined?(ApplicationController)
|
|
15
|
+
Spree::Api::BaseController.include Spree::CurrentUserHelpers if defined?(Spree::Api::BaseController)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
class AddSpreeFieldsToCustomUserTable < ActiveRecord::Migration[4.2]
|
|
2
2
|
def up
|
|
3
3
|
add_column <%= table_name.inspect %>, :spree_api_key, :string, limit: 48
|
|
4
|
-
add_column <%= table_name.inspect %>, :ship_address_id, :
|
|
5
|
-
add_column <%= table_name.inspect %>, :bill_address_id, :
|
|
4
|
+
add_column <%= table_name.inspect %>, :ship_address_id, :bigint
|
|
5
|
+
add_column <%= table_name.inspect %>, :bill_address_id, :bigint
|
|
6
6
|
end
|
|
7
7
|
end
|
|
@@ -29,10 +29,9 @@ module Spree
|
|
|
29
29
|
# calling slice on a Thor::CoreExtensions::HashWithIndifferentAccess
|
|
30
30
|
# object has been known to return nil
|
|
31
31
|
opts = {}.merge(options).slice(*PASSTHROUGH_OPTIONS)
|
|
32
|
-
opts[:database] = '
|
|
32
|
+
opts[:database] = 'sqlite3' if opts[:database].blank?
|
|
33
33
|
opts[:force] = true
|
|
34
34
|
opts[:skip_bundle] = true
|
|
35
|
-
opts[:skip_gemfile] = true
|
|
36
35
|
opts[:skip_git] = true
|
|
37
36
|
opts[:skip_listen] = true
|
|
38
37
|
opts[:skip_rc] = true
|
|
@@ -57,10 +56,6 @@ module Spree
|
|
|
57
56
|
template 'rails/test.rb', "#{dummy_path}/config/environments/test.rb", force: true
|
|
58
57
|
template 'rails/script/rails', "#{dummy_path}/spec/dummy/script/rails", force: true
|
|
59
58
|
template 'initializers/devise.rb', "#{dummy_path}/config/initializers/devise.rb", force: true
|
|
60
|
-
|
|
61
|
-
if lib_name == 'spree/backend'
|
|
62
|
-
template 'package.json', "#{dummy_path}/package.json", force: true
|
|
63
|
-
end
|
|
64
59
|
end
|
|
65
60
|
|
|
66
61
|
def test_dummy_inject_extension_requirements
|
|
@@ -8,7 +8,18 @@ end %>
|
|
|
8
8
|
<% db_username = ENV['DB_USERNAME'] %>
|
|
9
9
|
<% db_host = ENV['DB_HOST'] %>
|
|
10
10
|
<% case ENV['DB']
|
|
11
|
-
when '
|
|
11
|
+
when 'sqlite' %>
|
|
12
|
+
development:
|
|
13
|
+
adapter: sqlite3
|
|
14
|
+
database: db/spree_development.sqlite3
|
|
15
|
+
test:
|
|
16
|
+
adapter: sqlite3
|
|
17
|
+
database: db/spree_test.sqlite3
|
|
18
|
+
timeout: 10000
|
|
19
|
+
production:
|
|
20
|
+
adapter: sqlite3
|
|
21
|
+
database: db/spree_production.sqlite3
|
|
22
|
+
<% when 'mysql' %>
|
|
12
23
|
mysql: &mysql
|
|
13
24
|
adapter: mysql2
|
|
14
25
|
encoding: utf8
|
|
@@ -57,26 +68,13 @@ production:
|
|
|
57
68
|
<<: *postgres
|
|
58
69
|
database: <%= database_prefix %><%= lib_name %>_spree_production
|
|
59
70
|
<% else %>
|
|
60
|
-
postgres: &postgres
|
|
61
|
-
adapter: postgresql
|
|
62
|
-
<% unless db_username.blank? %>
|
|
63
|
-
username: <%= db_username || 'postgres' %>
|
|
64
|
-
<% end %>
|
|
65
|
-
<% unless db_password.blank? %>
|
|
66
|
-
password: <%= db_password %>
|
|
67
|
-
<% end %>
|
|
68
|
-
<% unless db_host.blank? %>
|
|
69
|
-
host: <%= db_host %>
|
|
70
|
-
<% end %>
|
|
71
|
-
min_messages: warning
|
|
72
|
-
|
|
73
71
|
development:
|
|
74
|
-
|
|
75
|
-
database:
|
|
72
|
+
adapter: sqlite3
|
|
73
|
+
database: db/spree_development.sqlite3
|
|
76
74
|
test:
|
|
77
|
-
|
|
78
|
-
database:
|
|
75
|
+
adapter: sqlite3
|
|
76
|
+
database: db/spree_test.sqlite3
|
|
79
77
|
production:
|
|
80
|
-
|
|
81
|
-
database:
|
|
82
|
-
<% end %>
|
|
78
|
+
adapter: sqlite3
|
|
79
|
+
database: db/spree_production.sqlite3
|
|
80
|
+
<% end %>
|
|
@@ -36,7 +36,7 @@ Dummy::Application.configure do
|
|
|
36
36
|
|
|
37
37
|
config.active_job.queue_adapter = :test
|
|
38
38
|
|
|
39
|
-
config.cache_store = :
|
|
39
|
+
config.cache_store = :memory_store # we need to use memory store for Spree preferences
|
|
40
40
|
|
|
41
41
|
routes.default_url_options = { host: 'localhost', port: 3000 }
|
|
42
42
|
end
|
|
@@ -9,17 +9,40 @@
|
|
|
9
9
|
#
|
|
10
10
|
# In order to initialize a setting do:
|
|
11
11
|
# config.setting_name = 'new value'
|
|
12
|
+
#
|
|
13
|
+
# More on configuring Spree preferences can be found at:
|
|
14
|
+
# https://docs.spreecommerce.org/developer/customization
|
|
12
15
|
Spree.config do |config|
|
|
13
16
|
# Example:
|
|
14
17
|
# Uncomment to stop tracking inventory levels in the application
|
|
15
18
|
# config.track_inventory_levels = false
|
|
16
19
|
end
|
|
17
20
|
|
|
21
|
+
# Use a CDN host for images, eg. Cloudfront
|
|
22
|
+
# This is used in the frontend to generate absolute URLs to images
|
|
23
|
+
# Default is nil and your application host will be used
|
|
24
|
+
# Spree.cdn_host = 'cdn.example.com'
|
|
25
|
+
|
|
26
|
+
# Use a different service for storage (S3, google, etc)
|
|
27
|
+
# unless Rails.env.test?
|
|
28
|
+
# Spree.private_storage_service_name = :amazon_public # public assets, such as product images
|
|
29
|
+
# Spree.public_storage_service_name = :amazon_private # private assets, such as invoices, etc
|
|
30
|
+
# end
|
|
31
|
+
|
|
32
|
+
# Use a different search engine for products
|
|
33
|
+
# You can check the default search class at:
|
|
34
|
+
# https://github.com/spree/spree/blob/main/core/lib/spree/core/search/base.rb
|
|
35
|
+
# and use it as base class for your custom searcher
|
|
36
|
+
# eg. MySearcher < Spree::Core::Search::Base
|
|
37
|
+
# Spree.searcher_class = 'MySearcher'
|
|
38
|
+
|
|
18
39
|
# Configure Spree Dependencies
|
|
19
40
|
#
|
|
20
41
|
# Note: If a dependency is set here it will NOT be stored within the cache & database upon initialization.
|
|
21
42
|
# Just removing an entry from this initializer will make the dependency value go away.
|
|
22
43
|
#
|
|
44
|
+
# More on how to use Spree dependencies can be found at:
|
|
45
|
+
# https://docs.spreecommerce.org/customization/dependencies
|
|
23
46
|
Spree.dependencies do |dependencies|
|
|
24
47
|
# Example:
|
|
25
48
|
# Uncomment to change the default Service handling adding Items to Cart
|
|
@@ -29,3 +52,5 @@ end
|
|
|
29
52
|
# Spree::Api::Dependencies.storefront_cart_serializer = 'MyRailsApp::CartSerializer'
|
|
30
53
|
|
|
31
54
|
Spree.user_class = <%= (options[:user_class].blank? ? 'Spree::LegacyUser' : options[:user_class]).inspect %>
|
|
55
|
+
# Use a different class for admin users
|
|
56
|
+
# Spree.admin_user_class = 'AdminUser'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# This is the primary location for defining
|
|
1
|
+
# This is the primary location for defining Spree Core preferences
|
|
2
2
|
#
|
|
3
3
|
# The expectation is that this is created once and stored in
|
|
4
4
|
# the spree environment
|
|
@@ -22,29 +22,20 @@ module Spree
|
|
|
22
22
|
module Core
|
|
23
23
|
class Configuration < Preferences::Configuration
|
|
24
24
|
# Alphabetized to more easily lookup particular preferences
|
|
25
|
-
preference :address_requires_state, :boolean, default: true # should state/state_name be required
|
|
25
|
+
preference :address_requires_state, :boolean, default: true, deprecated: true # should state/state_name be required
|
|
26
26
|
preference :address_requires_phone, :boolean, default: true # Determines whether we require phone in address
|
|
27
|
-
preference :admin_path, :string, deprecated: true
|
|
28
|
-
preference :admin_products_per_page, :integer, deprecated: true
|
|
29
|
-
preference :admin_orders_per_page, :integer, deprecated: true
|
|
30
|
-
preference :admin_properties_per_page, :integer, deprecated: true
|
|
31
|
-
preference :admin_promotions_per_page, :integer, deprecated: true
|
|
32
|
-
preference :admin_customer_returns_per_page, :integer, deprecated: true
|
|
33
|
-
preference :admin_users_per_page, :integer, deprecated: true
|
|
34
|
-
preference :admin_show_version, :boolean, deprecated: true
|
|
35
27
|
preference :allow_checkout_on_gateway_error, :boolean, default: false
|
|
36
|
-
preference :allow_guest_checkout, :boolean, default: true
|
|
28
|
+
preference :allow_guest_checkout, :boolean, default: true # this is only used in the rails frontend, and is not implemented in API
|
|
37
29
|
preference :alternative_shipping_phone, :boolean, default: false # Request extra phone for ship addr
|
|
38
30
|
preference :always_include_confirm_step, :boolean, default: false # Ensures confirmation step is always in checkout_progress bar, but does not force a confirm step if your payment methods do not support it.
|
|
39
31
|
preference :always_put_site_name_in_title, :boolean, deprecated: true
|
|
40
|
-
preference :title_site_name_separator, :string, deprecated: true
|
|
41
32
|
preference :auto_capture, :boolean, default: false # automatically capture the credit card (as opposed to just authorize and capture later)
|
|
42
33
|
preference :auto_capture_on_dispatch, :boolean, default: false # Captures payment for each shipment in Shipment#after_ship callback, and makes Shipment.ready when payment authorized.
|
|
43
|
-
preference :binary_inventory_cache, :boolean, default: false # only invalidate product cache when a stock item changes whether it is in_stock
|
|
34
|
+
preference :binary_inventory_cache, :boolean, default: false, deprecated: true # only invalidate product cache when a stock item changes whether it is in_stock
|
|
44
35
|
preference :checkout_zone, :string, default: nil, deprecated: true # replace with the name of a zone if you would like to limit the countries
|
|
45
36
|
preference :company, :boolean, default: false # Request company field for billing and shipping addr
|
|
46
37
|
preference :currency, :string, default: 'USD', deprecated: true
|
|
47
|
-
preference :
|
|
38
|
+
preference :credit_to_new_allocation, :boolean, default: false
|
|
48
39
|
preference :disable_sku_validation, :boolean, default: false # when turned off disables the built-in SKU uniqueness validation
|
|
49
40
|
preference :disable_store_presence_validation, :boolean, default: false # when turned off disables Store presence validation for Products and Payment Methods
|
|
50
41
|
preference :expedited_exchanges, :boolean, default: false # NOTE this requires payment profiles to be supported on your gateway of choice as well as a delayed job handler to be configured with activejob. kicks off an exchange shipment upon return authorization save. charge customer if they do not return items within timely manner.
|
|
@@ -53,6 +44,7 @@ module Spree
|
|
|
53
44
|
preference :logo, :string, deprecated: true
|
|
54
45
|
preference :mailer_logo, :string, deprecated: true
|
|
55
46
|
preference :max_level_in_taxons_menu, :integer, deprecated: true
|
|
47
|
+
preference :non_expiring_credit_types, :array, default: []
|
|
56
48
|
preference :products_per_page, :integer, default: 12
|
|
57
49
|
preference :require_master_price, :boolean, default: true
|
|
58
50
|
preference :restock_inventory, :boolean, default: true # Determines if a return item is restocked automatically once it has been received
|
|
@@ -64,15 +56,14 @@ module Spree
|
|
|
64
56
|
preference :show_products_without_price, :boolean, default: false
|
|
65
57
|
preference :show_raw_product_description, :boolean, deprecated: true
|
|
66
58
|
preference :tax_using_ship_address, :boolean, default: true
|
|
59
|
+
preference :title_site_name_separator, :string, deprecated: true
|
|
67
60
|
preference :track_inventory_levels, :boolean, default: true # Determines whether to track on_hand values for variants / products.
|
|
68
61
|
preference :use_user_locale, :boolean, default: true
|
|
69
62
|
|
|
70
|
-
#
|
|
71
|
-
preference :
|
|
72
|
-
preference :
|
|
73
|
-
|
|
74
|
-
# Multi store configurations
|
|
75
|
-
preference :show_store_selector, :boolean, deprecated: true
|
|
63
|
+
# Sets the path used for products, taxons and pages.
|
|
64
|
+
preference :storefront_products_path, :string, default: 'products'
|
|
65
|
+
preference :storefront_taxons_path, :string, default: 't'
|
|
66
|
+
preference :storefront_pages_path, :string, default: 'pages'
|
|
76
67
|
|
|
77
68
|
# searcher_class allows spree extension writers to provide their own Search class
|
|
78
69
|
def searcher_class
|
|
@@ -80,11 +71,6 @@ module Spree
|
|
|
80
71
|
@searcher_class ||= Spree.searcher_class
|
|
81
72
|
end
|
|
82
73
|
|
|
83
|
-
# Sets the path used for products, taxons and pages.
|
|
84
|
-
preference :storefront_products_path, :string, default: 'products'
|
|
85
|
-
preference :storefront_taxons_path, :string, default: 't'
|
|
86
|
-
preference :storefront_pages_path, :string, default: 'pages'
|
|
87
|
-
|
|
88
74
|
attr_writer :searcher_class
|
|
89
75
|
end
|
|
90
76
|
end
|
|
@@ -28,6 +28,10 @@ module Spree
|
|
|
28
28
|
Spree::Locales::SetFallbackLocaleForStore.new.call(store: current_store)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
+
def default_locale
|
|
32
|
+
@default_locale ||= current_store&.default_locale || Rails.application.config.i18n.default_locale || I18n.default_locale
|
|
33
|
+
end
|
|
34
|
+
|
|
31
35
|
def current_locale
|
|
32
36
|
@current_locale ||= if user_locale?
|
|
33
37
|
try_spree_current_user.selected_locale
|
|
@@ -36,7 +40,7 @@ module Spree
|
|
|
36
40
|
elsif config_locale?
|
|
37
41
|
config_locale
|
|
38
42
|
else
|
|
39
|
-
|
|
43
|
+
default_locale
|
|
40
44
|
end
|
|
41
45
|
end
|
|
42
46
|
|
data/lib/spree/core/engine.rb
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
require_relative 'dependencies'
|
|
2
2
|
require_relative 'configuration'
|
|
3
|
+
require_relative 'runtime_configuration'
|
|
3
4
|
|
|
4
5
|
module Spree
|
|
5
6
|
module Core
|
|
6
7
|
class Engine < ::Rails::Engine
|
|
7
8
|
Environment = Struct.new(:calculators,
|
|
8
9
|
:preferences,
|
|
10
|
+
:runtime_preferences,
|
|
9
11
|
:dependencies,
|
|
10
12
|
:payment_methods,
|
|
11
13
|
:adjusters,
|
|
@@ -23,9 +25,10 @@ module Spree
|
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
initializer 'spree.environment', before: :load_config_initializers do |app|
|
|
26
|
-
app.config.spree = Environment.new(SpreeCalculators.new, Spree::Core::Configuration.new, Spree::Core::Dependencies.new)
|
|
28
|
+
app.config.spree = Environment.new(SpreeCalculators.new, Spree::Core::Configuration.new, Spree::Core::RuntimeConfiguration.new, Spree::Core::Dependencies.new)
|
|
27
29
|
app.config.active_record.yaml_column_permitted_classes = [Symbol, BigDecimal]
|
|
28
30
|
Spree::Config = app.config.spree.preferences
|
|
31
|
+
Spree::RuntimeConfig = app.config.spree.runtime_preferences
|
|
29
32
|
Spree::Dependencies = app.config.spree.dependencies
|
|
30
33
|
Spree::Deprecation = ActiveSupport::Deprecation.new
|
|
31
34
|
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Preferences
|
|
3
|
+
class RuntimeConfiguration
|
|
4
|
+
def initialize
|
|
5
|
+
self.class.defaults.each do |key, value|
|
|
6
|
+
self[key] = value
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def configure
|
|
11
|
+
yield(self) if block_given?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def get(preference)
|
|
15
|
+
send(preference)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
alias [] get
|
|
19
|
+
|
|
20
|
+
def set(preference, value)
|
|
21
|
+
send("#{preference}=", value)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
alias []= set
|
|
25
|
+
|
|
26
|
+
class << self
|
|
27
|
+
def preference(name, _type, default: nil, deprecated: false)
|
|
28
|
+
defaults[name] = default
|
|
29
|
+
deprecations[name] = deprecated
|
|
30
|
+
attr_accessor name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def defaults
|
|
34
|
+
@defaults ||= {}
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def deprecations
|
|
38
|
+
@deprecations ||= {}
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -98,7 +98,12 @@ module Spree
|
|
|
98
98
|
conds.each do |new_scope|
|
|
99
99
|
scope = scope.or(new_scope)
|
|
100
100
|
end
|
|
101
|
-
|
|
101
|
+
|
|
102
|
+
if Spree.use_translations?
|
|
103
|
+
Product.with_property('brand').join_translation_table(ProductProperty).where(scope)
|
|
104
|
+
else
|
|
105
|
+
Product.with_property('brand').where(scope)
|
|
106
|
+
end
|
|
102
107
|
end
|
|
103
108
|
|
|
104
109
|
def self.brand_filter
|
|
@@ -106,7 +111,9 @@ module Spree
|
|
|
106
111
|
brands = brand_property ? Spree::ProductProperty.where(property_id: brand_property.id).pluck(:value).uniq.map(&:to_s) : []
|
|
107
112
|
|
|
108
113
|
conditions = brands.map do |brand|
|
|
109
|
-
|
|
114
|
+
table_name = Spree.use_translations? ? ProductProperty.translation_table_alias : ProductProperty.table_name
|
|
115
|
+
|
|
116
|
+
[brand, { table_name.to_s => { value: brand } }]
|
|
110
117
|
end.to_h
|
|
111
118
|
|
|
112
119
|
{
|
data/lib/spree/core/version.rb
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Webhooks
|
|
3
|
+
def self.disable_webhooks
|
|
4
|
+
webhooks_disabled_previously = ENV['DISABLE_SPREE_WEBHOOKS']
|
|
5
|
+
begin
|
|
6
|
+
ENV['DISABLE_SPREE_WEBHOOKS'] = 'true'
|
|
7
|
+
yield
|
|
8
|
+
ensure
|
|
9
|
+
ENV['DISABLE_SPREE_WEBHOOKS'] = webhooks_disabled_previously
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/spree/core.rb
CHANGED
|
@@ -76,6 +76,10 @@ module Spree
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
def self.use_translations?
|
|
80
|
+
Spree::RuntimeConfig.always_use_translations || I18n.default_locale != I18n.locale
|
|
81
|
+
end
|
|
82
|
+
|
|
79
83
|
# Used to configure Spree.
|
|
80
84
|
#
|
|
81
85
|
# Example:
|
|
@@ -141,3 +145,6 @@ require 'spree/core/controller_helpers/currency'
|
|
|
141
145
|
|
|
142
146
|
require 'spree/core/preferences/store'
|
|
143
147
|
require 'spree/core/preferences/scoped_store'
|
|
148
|
+
require 'spree/core/preferences/runtime_configuration'
|
|
149
|
+
|
|
150
|
+
require "spree/core/webhooks"
|