spree_core 4.7.3 → 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/product_scopes.rb +19 -19
- data/app/models/concerns/spree/user_address.rb +4 -2
- data/app/models/spree/address.rb +1 -20
- data/app/models/spree/asset.rb +1 -1
- data/app/models/spree/cms_page.rb +1 -1
- data/app/models/spree/country.rb +0 -26
- data/app/models/spree/credit_card.rb +4 -2
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/digital.rb +1 -1
- data/app/models/spree/digital_link.rb +1 -1
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/menu.rb +1 -1
- data/app/models/spree/menu_item.rb +1 -1
- data/app/models/spree/option_type.rb +3 -3
- data/app/models/spree/option_value.rb +3 -3
- data/app/models/spree/order.rb +5 -3
- data/app/models/spree/payment.rb +1 -1
- data/app/models/spree/payment_capture_event.rb +1 -1
- data/app/models/spree/price.rb +3 -1
- data/app/models/spree/product.rb +24 -13
- data/app/models/spree/product_property.rb +4 -2
- data/app/models/spree/promotion.rb +1 -1
- data/app/models/spree/property.rb +6 -4
- data/app/models/spree/prototype.rb +1 -1
- data/app/models/spree/refund.rb +1 -1
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/return_item.rb +1 -1
- data/app/models/spree/shipment.rb +1 -1
- data/app/models/spree/shipping_category.rb +1 -1
- data/app/models/spree/shipping_method.rb +1 -1
- data/app/models/spree/stock_item.rb +2 -2
- data/app/models/spree/stock_location.rb +6 -1
- data/app/models/spree/stock_movement.rb +1 -1
- data/app/models/spree/stock_transfer.rb +1 -1
- data/app/models/spree/store.rb +2 -4
- data/app/models/spree/store_credit.rb +1 -1
- 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 +20 -4
- data/app/models/spree/taxonomy.rb +3 -3
- data/app/models/spree/variant.rb +9 -4
- data/app/models/spree/wished_item.rb +1 -1
- data/app/models/spree/wishlist.rb +1 -1
- data/app/models/spree/zone.rb +1 -1
- 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
|
@@ -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"
|
data/lib/spree/money.rb
CHANGED
|
@@ -5,8 +5,15 @@ Money.rounding_mode = BigDecimal::ROUND_HALF_UP
|
|
|
5
5
|
|
|
6
6
|
module Spree
|
|
7
7
|
class Money
|
|
8
|
+
include Comparable
|
|
9
|
+
|
|
8
10
|
class << self
|
|
9
11
|
attr_accessor :default_formatting_rules
|
|
12
|
+
|
|
13
|
+
def from_cents(amount_in_cents, options = {})
|
|
14
|
+
money = ::Money.from_cents(amount_in_cents, options[:currency])
|
|
15
|
+
new(money.to_d, options)
|
|
16
|
+
end
|
|
10
17
|
end
|
|
11
18
|
|
|
12
19
|
self.default_formatting_rules = {
|
|
@@ -17,10 +24,10 @@ module Spree
|
|
|
17
24
|
|
|
18
25
|
attr_reader :money
|
|
19
26
|
|
|
20
|
-
delegate :cents, :currency, to: :money
|
|
27
|
+
delegate :cents, :currency, :to_d, :positive?, :zero?, to: :money
|
|
21
28
|
|
|
22
29
|
def initialize(amount, options = {})
|
|
23
|
-
|
|
30
|
+
::Money.default_currency ||= Spree::Store.default.default_currency || 'USD'
|
|
24
31
|
@money = Monetize.parse([amount, (options[:currency] || Spree::Store.default.default_currency)].join)
|
|
25
32
|
@options = Spree::Money.default_formatting_rules.merge(options)
|
|
26
33
|
end
|
|
@@ -29,10 +36,18 @@ module Spree
|
|
|
29
36
|
(cents / currency.subunit_to_unit.to_f * 100).round
|
|
30
37
|
end
|
|
31
38
|
|
|
39
|
+
def abs
|
|
40
|
+
self.class.new(money.abs, options)
|
|
41
|
+
end
|
|
42
|
+
|
|
32
43
|
def to_s
|
|
33
44
|
money&.format(options)
|
|
34
45
|
end
|
|
35
46
|
|
|
47
|
+
def inspect
|
|
48
|
+
"#{self.class}(cents: #{cents}, currency: #{currency})"
|
|
49
|
+
end
|
|
50
|
+
|
|
36
51
|
# 1) prevent blank, breaking spaces
|
|
37
52
|
# 2) prevent escaping of HTML character entities
|
|
38
53
|
def to_html(opts = { html: true })
|
|
@@ -65,9 +80,27 @@ module Spree
|
|
|
65
80
|
money == obj.money
|
|
66
81
|
end
|
|
67
82
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
83
|
+
def +(other)
|
|
84
|
+
result_money = money + other.money
|
|
85
|
+
self.class.new(result_money.to_s, options)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def -(other)
|
|
89
|
+
result_money = money - other.money
|
|
90
|
+
self.class.new(result_money.to_s, options)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def *(value)
|
|
94
|
+
result_money = money * value
|
|
95
|
+
self.class.new(result_money.to_s, options)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def <=>(other)
|
|
99
|
+
money <=> other.money
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def -@
|
|
103
|
+
self.class.new((-money).to_s, options)
|
|
71
104
|
end
|
|
72
105
|
|
|
73
106
|
private
|
|
@@ -37,12 +37,14 @@ module Spree
|
|
|
37
37
|
ability_class.register_ability(ability)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
let(:user) { Spree.user_class.new }
|
|
40
41
|
let(:admin_app) { Spree::OauthApplication.create!(name: 'Admin Panel', scopes: 'admin') }
|
|
41
42
|
let(:admin_token) { Spree::OauthAccessToken.create!(application: admin_app, scopes: 'admin').token }
|
|
42
43
|
|
|
43
44
|
before do
|
|
44
|
-
allow(Spree.user_class).to receive(:find_by).and_return(
|
|
45
|
+
allow(Spree.user_class).to receive(:find_by).and_return(user)
|
|
45
46
|
if defined?(Spree::Admin)
|
|
47
|
+
allow_any_instance_of(Spree::Admin::BaseController).to receive(:try_spree_current_user).and_return(user)
|
|
46
48
|
allow_any_instance_of(Spree::Admin::BaseController).to receive(:admin_oauth_application).and_return(admin_app)
|
|
47
49
|
allow_any_instance_of(Spree::Admin::BaseController).to receive(:admin_oauth_token).and_return(admin_token)
|
|
48
50
|
end
|
|
@@ -14,21 +14,21 @@ namespace :common do
|
|
|
14
14
|
ENV['RAILS_ENV'] = 'test'
|
|
15
15
|
Rails.env = 'test'
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
system('
|
|
17
|
+
Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}"]
|
|
18
|
+
|
|
19
|
+
# install frontend libraries
|
|
20
|
+
unless ['spree/api', 'spree/core', 'spree/sample'].include?(ENV['LIB_NAME'])
|
|
21
|
+
system('bin/rails importmap:install')
|
|
22
|
+
system('bin/rails turbo:install')
|
|
23
|
+
system('bin/rails stimulus:install')
|
|
22
24
|
end
|
|
23
25
|
|
|
24
|
-
Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--quiet']
|
|
25
26
|
Spree::InstallGenerator.start [
|
|
26
27
|
"--lib_name=#{ENV['LIB_NAME']}",
|
|
27
28
|
'--auto-accept',
|
|
28
29
|
'--migrate=false',
|
|
29
30
|
'--seed=false',
|
|
30
31
|
'--sample=false',
|
|
31
|
-
'--quiet',
|
|
32
32
|
'--copy_storefront=false',
|
|
33
33
|
"--install_storefront=#{args[:install_storefront]}",
|
|
34
34
|
"--install_admin=#{args[:install_admin]}",
|
|
@@ -41,12 +41,6 @@ namespace :common do
|
|
|
41
41
|
Spree::DummyModelGenerator.start
|
|
42
42
|
system('bundle exec rake db:migrate')
|
|
43
43
|
|
|
44
|
-
unless ['spree/api', 'spree/core', 'spree/sample', 'spree/emails'].include?(ENV['LIB_NAME'])
|
|
45
|
-
puts 'Setting up node environment'
|
|
46
|
-
system('bin/rails javascript:install:esbuild')
|
|
47
|
-
system('bin/rails turbo:install')
|
|
48
|
-
end
|
|
49
|
-
|
|
50
44
|
begin
|
|
51
45
|
require "generators/#{ENV['LIB_NAME']}/install/install_generator"
|
|
52
46
|
puts 'Running extension installation generator...'
|
|
@@ -56,11 +50,6 @@ namespace :common do
|
|
|
56
50
|
end
|
|
57
51
|
|
|
58
52
|
unless ['spree/api', 'spree/core', 'spree/sample'].include?(ENV['LIB_NAME'])
|
|
59
|
-
if ENV['LIB_NAME'] == 'spree/backend'
|
|
60
|
-
puts 'Installing node dependencies...'
|
|
61
|
-
system('yarn link @spree/dashboard')
|
|
62
|
-
system('yarn install')
|
|
63
|
-
end
|
|
64
53
|
puts 'Precompiling assets...'
|
|
65
54
|
system('bundle exec rake assets:precompile')
|
|
66
55
|
end
|
data/spree_core.gemspec
CHANGED
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
|
16
16
|
s.metadata = {
|
|
17
17
|
"bug_tracker_uri" => "https://github.com/spree/spree/issues",
|
|
18
18
|
"changelog_uri" => "https://github.com/spree/spree/releases/tag/v#{s.version}",
|
|
19
|
-
"documentation_uri" => "https://
|
|
19
|
+
"documentation_uri" => "https://docs.spreecommerce.org/",
|
|
20
20
|
"source_code_uri" => "https://github.com/spree/spree/tree/v#{s.version}",
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
|
|
|
30
30
|
actionpack actionview activejob activemodel activerecord
|
|
31
31
|
activestorage activesupport railties
|
|
32
32
|
].each do |rails_gem|
|
|
33
|
-
s.add_dependency rails_gem, '>= 6.1', '<
|
|
33
|
+
s.add_dependency rails_gem, '>= 6.1', '< 8.0'
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
s.add_dependency 'activemerchant', '~> 1.67'
|
|
@@ -40,7 +40,7 @@ Gem::Specification.new do |s|
|
|
|
40
40
|
s.add_dependency 'carmen', '>= 1.0'
|
|
41
41
|
s.add_dependency 'cancancan', '~> 3.2'
|
|
42
42
|
s.add_dependency 'friendly_id', '~> 5.2', '>= 5.2.1'
|
|
43
|
-
s.add_dependency 'highline', '
|
|
43
|
+
s.add_dependency 'highline', '>= 2', '< 4' # Necessary for the install generator
|
|
44
44
|
s.add_dependency 'kaminari', '~> 1.2'
|
|
45
45
|
s.add_dependency 'money', '~> 6.13'
|
|
46
46
|
s.add_dependency 'monetize', '~> 1.9'
|
|
@@ -52,9 +52,9 @@ Gem::Specification.new do |s|
|
|
|
52
52
|
s.add_dependency 'stringex'
|
|
53
53
|
s.add_dependency 'validates_zipcode'
|
|
54
54
|
s.add_dependency 'image_processing', '~> 1.2'
|
|
55
|
-
s.add_dependency 'active_storage_validations', '~>
|
|
55
|
+
s.add_dependency 'active_storage_validations', '~> 1.1'
|
|
56
56
|
s.add_dependency 'activerecord-typedstore'
|
|
57
|
-
s.add_dependency 'mobility', '~> 1.2
|
|
58
|
-
s.add_dependency 'mobility-ransack', '~> 1.2
|
|
59
|
-
s.add_dependency 'friendly_id-mobility', '~> 1.0
|
|
57
|
+
s.add_dependency 'mobility', '~> 1.2'
|
|
58
|
+
s.add_dependency 'mobility-ransack', '~> 1.2'
|
|
59
|
+
s.add_dependency 'friendly_id-mobility', '~> 1.0'
|
|
60
60
|
end
|