solidus_core 3.2.9 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +6 -2
- data/app/controllers/spree/base_controller.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +4 -0
- data/app/models/concerns/spree/default_price.rb +0 -6
- data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
- data/app/models/concerns/spree/user_methods.rb +2 -2
- data/app/models/spree/address.rb +1 -1
- data/app/models/spree/calculator/flat_fee.rb +21 -0
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +1 -1
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/line_item.rb +2 -2
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +1 -1
- data/app/models/spree/order/number_generator.rb +7 -1
- data/app/models/spree/order.rb +5 -4
- data/app/models/spree/order_promotion.rb +1 -1
- data/app/models/spree/order_updater.rb +11 -2
- data/app/models/spree/payment/processing.rb +58 -55
- data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
- data/app/models/spree/payment_method.rb +16 -10
- data/app/models/spree/price.rb +1 -1
- data/app/models/spree/product.rb +3 -4
- data/app/models/spree/product_property.rb +1 -1
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
- data/app/models/spree/promotion.rb +2 -2
- data/app/models/spree/promotion_code.rb +1 -1
- data/app/models/spree/property.rb +1 -1
- data/app/models/spree/return_authorization.rb +1 -1
- data/app/models/spree/shipment.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/stock_item.rb +1 -1
- data/app/models/spree/stock_location.rb +1 -1
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/store_credit_prioritizer.rb +17 -0
- data/app/models/spree/tax/tax_helpers.rb +2 -2
- data/app/models/spree/tax_calculator/default.rb +31 -0
- data/app/models/spree/tax_rate.rb +8 -1
- data/app/models/spree/taxon.rb +1 -1
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
- data/app/models/spree/variant.rb +25 -5
- data/app/models/spree/zone.rb +1 -1
- data/config/locales/en.yml +13 -2
- data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
- data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
- data/db/seeds.rb +4 -1
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
- data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
- data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
- data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
- data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +11 -9
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +8 -9
- data/lib/generators/solidus/install/install_generator.rb +213 -190
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -4
- data/lib/generators/solidus/update/update_generator.rb +2 -14
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
- data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
- data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +10 -8
- data/lib/generators/spree/dummy/templates/rails/database.yml +6 -12
- data/lib/spree/app_configuration.rb +23 -0
- data/lib/spree/bus.rb +3 -3
- data/lib/spree/core/controller_helpers/current_host.rb +5 -1
- data/lib/spree/core/product_duplicator.rb +1 -1
- data/lib/spree/core/search/base.rb +17 -8
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +1 -20
- data/lib/spree/migration_helpers.rb +3 -3
- data/lib/spree/migrations.rb +12 -10
- data/lib/spree/permitted_attributes.rb +4 -1
- data/lib/spree/rails_compatibility.rb +0 -17
- data/lib/spree/testing_support/common_rake.rb +7 -6
- data/lib/spree/testing_support/dummy_app.rb +5 -5
- data/lib/spree/testing_support/factories/address_factory.rb +9 -11
- data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
- data/lib/spree/testing_support/factories/country_factory.rb +1 -2
- data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
- data/lib/spree/testing_support/factories/state_factory.rb +8 -2
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +1 -1
- data/lib/tasks/colorado_delivery_fee.rake +28 -0
- data/solidus_core.gemspec +2 -2
- metadata +34 -23
- data/lib/generators/solidus/install/install_generator/bundler_context.rb +0 -105
- data/lib/generators/solidus/install/install_generator/install_frontend.rb +0 -61
- data/lib/generators/solidus/install/install_generator/support_solidus_frontend_extraction.rb +0 -48
@@ -96,13 +96,15 @@ module Spree
|
|
96
96
|
protected
|
97
97
|
|
98
98
|
def inject_require_for(requirement)
|
99
|
-
inject_into_file 'config/application.rb',
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
99
|
+
inject_into_file 'config/application.rb', (
|
100
|
+
<<~RUBY
|
101
|
+
begin
|
102
|
+
require '#{requirement}'
|
103
|
+
rescue LoadError
|
104
|
+
# #{requirement} is not available.
|
105
|
+
end
|
106
|
+
RUBY
|
107
|
+
), before: /require '#{@lib_name}'/, verbose: true
|
106
108
|
end
|
107
109
|
|
108
110
|
def dummy_path
|
@@ -118,7 +120,7 @@ end
|
|
118
120
|
dummy_application_path = File.expand_path("#{dummy_path}/config/application.rb", destination_root)
|
119
121
|
unless options[:pretend] || !File.exist?(dummy_application_path)
|
120
122
|
contents = File.read(dummy_application_path)
|
121
|
-
contents[(contents.index("module #{module_name}"))
|
123
|
+
contents[(contents.index("module #{module_name}"))..]
|
122
124
|
end
|
123
125
|
end
|
124
126
|
end
|
@@ -1,6 +1,3 @@
|
|
1
|
-
<% if agent_number = ENV['TC_AGENT_NUMBER']
|
2
|
-
database_prefix = agent_number + '_'
|
3
|
-
end %>
|
4
1
|
<% db = case ENV['DB']
|
5
2
|
when 'mysql'
|
6
3
|
'mysql'
|
@@ -22,14 +19,11 @@ end %>
|
|
22
19
|
<% db_username = ENV['DB_USERNAME'] %>
|
23
20
|
<% db_password = ENV['DB_PASSWORD'] %>
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
22
|
<% case ENV['DB']
|
29
23
|
when 'mysql' %>
|
30
24
|
development:
|
31
25
|
adapter: mysql2
|
32
|
-
database: <%=
|
26
|
+
database: <%= options[:lib_name] %>_solidus_development
|
33
27
|
<% unless db_username.blank? %>
|
34
28
|
username: <%= db_username %>
|
35
29
|
<% end %>
|
@@ -42,7 +36,7 @@ development:
|
|
42
36
|
encoding: utf8
|
43
37
|
test:
|
44
38
|
adapter: mysql2
|
45
|
-
database: <%=
|
39
|
+
database: <%= options[:lib_name] %>_solidus_test
|
46
40
|
<% unless db_username.blank? %>
|
47
41
|
username: <%= db_username %>
|
48
42
|
<% end %>
|
@@ -55,7 +49,7 @@ test:
|
|
55
49
|
encoding: utf8
|
56
50
|
production:
|
57
51
|
adapter: mysql2
|
58
|
-
database: <%=
|
52
|
+
database: <%= options[:lib_name] %>_solidus_production
|
59
53
|
<% unless db_username.blank? %>
|
60
54
|
username: <%= db_username %>
|
61
55
|
<% end %>
|
@@ -69,7 +63,7 @@ production:
|
|
69
63
|
<% when 'postgres', 'postgresql' %>
|
70
64
|
development:
|
71
65
|
adapter: postgresql
|
72
|
-
database: <%=
|
66
|
+
database: <%= options[:lib_name] %>_solidus_development
|
73
67
|
<% unless db_username.blank? %>
|
74
68
|
username: <%= db_username %>
|
75
69
|
<% end %>
|
@@ -82,7 +76,7 @@ development:
|
|
82
76
|
min_messages: warning
|
83
77
|
test:
|
84
78
|
adapter: postgresql
|
85
|
-
database: <%=
|
79
|
+
database: <%= options[:lib_name] %>_solidus_test
|
86
80
|
<% unless db_username.blank? %>
|
87
81
|
username: <%= db_username %>
|
88
82
|
<% end %>
|
@@ -95,7 +89,7 @@ test:
|
|
95
89
|
min_messages: warning
|
96
90
|
production:
|
97
91
|
adapter: postgresql
|
98
|
-
database: <%=
|
92
|
+
database: <%= options[:lib_name] %>_solidus_production
|
99
93
|
<% unless db_username.blank? %>
|
100
94
|
username: <%= db_username %>
|
101
95
|
<% end %>
|
@@ -193,7 +193,17 @@ module Spree
|
|
193
193
|
|
194
194
|
# @!attribute [rw] mails_from
|
195
195
|
# @return [String] Email address used as +From:+ field in transactional emails.
|
196
|
+
# @deprecated Spree::Store#mail_from_address is used instead
|
196
197
|
preference :mails_from, :string, default: 'solidus@example.com'
|
198
|
+
def mails_from=(value)
|
199
|
+
Spree::Deprecation.warn(<<~MSG) && preferences[:mail_from] = value
|
200
|
+
Solidus doesn't use `Spree::Config.mails_from` preference and it'll
|
201
|
+
removed on the next major release. Please, remove its definition in
|
202
|
+
`config/initializers/spree.rb`. Use the `Spree::Store#mail_from_address`
|
203
|
+
attribute for the default email address used as the 'From:' field in
|
204
|
+
transactional emails.
|
205
|
+
MSG
|
206
|
+
end
|
197
207
|
|
198
208
|
# @!attribute [rw] max_level_in_taxons_menu
|
199
209
|
# @return [Integer] maximum nesting level in taxons menu (default: +1+)
|
@@ -343,6 +353,9 @@ module Spree
|
|
343
353
|
# promotion_chooser_class allows extensions to provide their own PromotionChooser
|
344
354
|
class_name_attribute :promotion_chooser_class, default: 'Spree::PromotionChooser'
|
345
355
|
|
356
|
+
# promotion_adjuster_class allows extensions to provide their own Promotion Adjuster
|
357
|
+
class_name_attribute :promotion_adjuster_class, default: 'Spree::Promotion::OrderAdjustmentsRecalculator'
|
358
|
+
|
346
359
|
class_name_attribute :allocator_class, default: 'Spree::Stock::Allocator::OnHandFirst'
|
347
360
|
|
348
361
|
class_name_attribute :shipping_rate_sorter_class, default: 'Spree::Stock::ShippingRateSorter'
|
@@ -529,6 +542,15 @@ module Spree
|
|
529
542
|
small: '400x400>',
|
530
543
|
product: '680x680>',
|
531
544
|
large: '1200x1200>' }
|
545
|
+
|
546
|
+
# Allows providing your own class for prioritizing store credit application
|
547
|
+
# to an order.
|
548
|
+
#
|
549
|
+
# @!attribute [rw] store_credit_prioritizer_class
|
550
|
+
# @return [Class] a class with the same public interfaces as
|
551
|
+
# Spree::StoreCreditPrioritizer.
|
552
|
+
class_name_attribute :store_credit_prioritizer_class, default: 'Spree::StoreCreditPrioritizer'
|
553
|
+
|
532
554
|
# @!attribute [rw] taxon_image_style_default
|
533
555
|
#
|
534
556
|
# Defines which style to default to when style is not provided
|
@@ -642,6 +664,7 @@ module Spree
|
|
642
664
|
|
643
665
|
env.calculators.tax_rates = %w[
|
644
666
|
Spree::Calculator::DefaultTax
|
667
|
+
Spree::Calculator::FlatFee
|
645
668
|
]
|
646
669
|
|
647
670
|
env.payment_methods = %w[
|
data/lib/spree/bus.rb
CHANGED
@@ -9,12 +9,12 @@ module Spree
|
|
9
9
|
# It has some modifications to support internal usage of the legacy event
|
10
10
|
# system {see Spree::AppConfiguration#use_legacy_events}.
|
11
11
|
Bus = Omnes::Bus.new
|
12
|
-
|
12
|
+
Bus.define_singleton_method(:publish) do |*args, **kwargs, &block|
|
13
13
|
if Spree::Config.use_legacy_events
|
14
|
-
Spree::Event.fire(
|
14
|
+
Spree::Event.fire(*args, **kwargs, &block)
|
15
15
|
else
|
16
16
|
# Override caller_location to point to the actual event publisher
|
17
|
-
super(
|
17
|
+
super(*args, **kwargs, caller_location: caller_locations(1)[0], &block)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -7,7 +7,11 @@ module Spree
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
Spree::
|
10
|
+
Spree::Deprecation.warn <<~MSG
|
11
|
+
'Spree::Core::ControllerHelpers::CurrentHost' is deprecated.
|
12
|
+
Please, include 'ActiveStorage::SetCurrent' instead.
|
13
|
+
MSG
|
14
|
+
include ActiveStorage::SetCurrent
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -45,7 +45,7 @@ module Spree
|
|
45
45
|
new_master.sku = "COPY OF #{master.sku}"
|
46
46
|
new_master.deleted_at = nil
|
47
47
|
new_master.images = master.images.map { |image| duplicate_image image } if @include_images
|
48
|
-
new_master.
|
48
|
+
new_master.price = master.price
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
@@ -4,6 +4,12 @@ module Spree
|
|
4
4
|
module Core
|
5
5
|
module Search
|
6
6
|
class Base
|
7
|
+
class InvalidOptions < ArgumentError
|
8
|
+
def initialize(option)
|
9
|
+
super("Invalid option passed to the searcher: '#{option}'")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
attr_accessor :properties
|
8
14
|
attr_accessor :current_user
|
9
15
|
attr_accessor :pricing_options
|
@@ -57,16 +63,19 @@ module Spree
|
|
57
63
|
end
|
58
64
|
|
59
65
|
def add_search_scopes(base_scope)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
return base_scope unless @properties[:search].present?
|
67
|
+
raise InvalidOptions.new(:search) unless @properties[:search].respond_to?(:each_pair)
|
68
|
+
|
69
|
+
@properties[:search].each_pair do |name, scope_attribute|
|
70
|
+
scope_name = name.to_sym
|
71
|
+
|
72
|
+
if base_scope.respond_to?(:search_scopes) && base_scope.search_scopes.include?(scope_name.to_sym)
|
73
|
+
base_scope = base_scope.send(scope_name, *scope_attribute)
|
74
|
+
else
|
75
|
+
base_scope = base_scope.merge(Spree::Product.ransack({ scope_name => scope_attribute }).result)
|
68
76
|
end
|
69
77
|
end
|
78
|
+
|
70
79
|
base_scope
|
71
80
|
end
|
72
81
|
|
data/lib/spree/core/version.rb
CHANGED
data/lib/spree/core.rb
CHANGED
@@ -27,7 +27,7 @@ require 'spree/rails_compatibility'
|
|
27
27
|
StateMachines::Machine.ignore_method_conflicts = true
|
28
28
|
|
29
29
|
module Spree
|
30
|
-
mattr_accessor :user_class
|
30
|
+
mattr_accessor :user_class, default: 'Spree::LegacyUser'
|
31
31
|
|
32
32
|
def self.user_class
|
33
33
|
if @@user_class.is_a?(Class)
|
@@ -84,24 +84,6 @@ module Spree
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.7")
|
88
|
-
Spree::Deprecation.warn <<~HEREDOC
|
89
|
-
Ruby 2.5 & Ruby 2.6 (both EOL) are deprecated and will not be supported anymore from the next Solidus version.
|
90
|
-
Please, upgrade to a more recent Ruby version.
|
91
|
-
Read more on the release notes for different Ruby versions here:
|
92
|
-
https://www.ruby-lang.org/en/downloads/releases/
|
93
|
-
HEREDOC
|
94
|
-
end
|
95
|
-
|
96
|
-
if Gem::Version.new(Rails.version) < Gem::Version.new('6.0')
|
97
|
-
Spree::Deprecation.warn <<~HEREDOC
|
98
|
-
Rails 5.2 (EOL) is deprecated and will not be supported anymore from the next Solidus version.
|
99
|
-
Please, upgrade to a more recent Rails version.
|
100
|
-
Read more on upgrading from Rails 5.2 to Rails 6.0 here:
|
101
|
-
https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#upgrading-from-rails-5-2-to-rails-6-0
|
102
|
-
HEREDOC
|
103
|
-
end
|
104
|
-
|
105
87
|
require 'spree/core/version'
|
106
88
|
|
107
89
|
require 'spree/core/active_merchant_dependencies'
|
@@ -126,7 +108,6 @@ require 'spree/core/permalinks'
|
|
126
108
|
require 'spree/core/product_duplicator'
|
127
109
|
require 'spree/core/controller_helpers/auth'
|
128
110
|
require 'spree/core/controller_helpers/common'
|
129
|
-
require 'spree/core/controller_helpers/current_host'
|
130
111
|
require 'spree/core/controller_helpers/order'
|
131
112
|
require 'spree/core/controller_helpers/payment_parameters'
|
132
113
|
require 'spree/core/controller_helpers/pricing'
|
@@ -6,9 +6,9 @@ module Spree
|
|
6
6
|
remove_index(table, column) if index_exists?(table, column)
|
7
7
|
end
|
8
8
|
|
9
|
-
def safe_add_index(table, column,
|
10
|
-
if columns_exist?(table, column) && !index_exists?(table, column,
|
11
|
-
add_index(table, column,
|
9
|
+
def safe_add_index(table, column, options = {})
|
10
|
+
if columns_exist?(table, column) && !index_exists?(table, column, options)
|
11
|
+
add_index(table, column, options)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
data/lib/spree/migrations.rb
CHANGED
@@ -23,16 +23,18 @@ module Spree
|
|
23
23
|
# Shouldn't run on test mode because migrations inside engine don't have
|
24
24
|
# engine name on the file name
|
25
25
|
def check
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
26
|
+
return unless File.directory?(app_dir)
|
27
|
+
return if missing_migrations.empty?
|
28
|
+
return if ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK']
|
29
|
+
|
30
|
+
prefix = "[WARNING #{engine_name.capitalize}]"
|
31
|
+
warn <<~WARN
|
32
|
+
#{prefix} Missing migrations.
|
33
|
+
#{missing_migrations.map {|m| "#{prefix} - #{m}"}.join("\n")}
|
34
|
+
#{prefix}
|
35
|
+
#{prefix} Run `bin/rails railties:install:migrations` to get them.
|
36
|
+
#{prefix} You can silence this warning by setting the `SOLIDUS_SKIP_MIGRATIONS_CHECK` environment variable.
|
37
|
+
WARN
|
36
38
|
end
|
37
39
|
|
38
40
|
def missing_migrations
|
@@ -132,7 +132,10 @@ module Spree
|
|
132
132
|
:name, :presentation, :cost_price, :lock_version,
|
133
133
|
:position, :track_inventory,
|
134
134
|
:product_id, :product, :price,
|
135
|
-
:weight, :height, :width, :depth, :sku, :cost_currency,
|
135
|
+
:weight, :height, :width, :depth, :sku, :cost_currency,
|
136
|
+
:tax_category_id, :shipping_category_id,
|
137
|
+
option_value_ids: [],
|
138
|
+
options: [:name, :value]
|
136
139
|
]
|
137
140
|
|
138
141
|
@@checkout_address_attributes = [
|
@@ -72,23 +72,6 @@ module Spree
|
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
|
-
# Set current host for ActiveStorage in a controller
|
76
|
-
#
|
77
|
-
# Changed from `#host` to including a module in Rails 6
|
78
|
-
#
|
79
|
-
# See https://github.com/rails/rails/commit/e33c3cd8ccbecaca6c6af0438956431b02cb3fb2
|
80
|
-
#
|
81
|
-
# TODO: Remove when deprecating Rails 5.2
|
82
|
-
def self.active_storage_set_current(controller)
|
83
|
-
if version_gte?('6')
|
84
|
-
controller.include ActiveStorage::SetCurrent
|
85
|
-
else
|
86
|
-
controller.before_action do
|
87
|
-
ActiveStorage::Current.host = request.base_url
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
75
|
# Set current host for ActiveStorage
|
93
76
|
#
|
94
77
|
# Changed from `#host` to `#url_options` on Rails 7
|
@@ -9,28 +9,29 @@ class CommonRakeTasks
|
|
9
9
|
namespace :common do
|
10
10
|
task :test_app, :user_class do |_t, args|
|
11
11
|
args.with_defaults(user_class: "Spree::LegacyUser")
|
12
|
-
|
12
|
+
lib_name = ENV['LIB_NAME'] or
|
13
|
+
raise "Please provide a library name via the LIB_NAME environment variable."
|
14
|
+
|
15
|
+
require lib_name
|
13
16
|
|
14
17
|
force_rails_environment_to_test
|
15
18
|
|
16
19
|
Spree::DummyGenerator.start [
|
17
|
-
"--lib-name=#{
|
20
|
+
"--lib-name=#{lib_name}",
|
18
21
|
"--quiet",
|
19
22
|
]
|
20
23
|
|
21
24
|
# While the dummy app is generated the current directory
|
22
25
|
# within ruby is changed to that of the dummy app.
|
23
26
|
sh({
|
24
|
-
'
|
25
|
-
'FRONTEND' => 'solidus_frontend',
|
27
|
+
'FRONTEND' => ENV['FRONTEND'] || 'classic',
|
26
28
|
}, [
|
27
29
|
'bin/rails',
|
28
30
|
'generate',
|
29
31
|
'solidus:install',
|
30
32
|
Dir.pwd, # use the current dir as Rails.root
|
31
|
-
"--lib-name=#{ENV['LIB_NAME']}",
|
32
33
|
"--auto-accept",
|
33
|
-
"--
|
34
|
+
"--authentication=none",
|
34
35
|
"--payment-method=none",
|
35
36
|
"--migrate=false",
|
36
37
|
"--seed=false",
|
@@ -38,7 +38,7 @@ module DummyApp
|
|
38
38
|
ENV["LIB_NAME"] = lib_name
|
39
39
|
DummyApp::Application.config.root = File.join(gem_root, 'spec', 'dummy')
|
40
40
|
|
41
|
-
DummyApp::Application.initialize!
|
41
|
+
DummyApp::Application.initialize! unless DummyApp::Application.initialized?
|
42
42
|
|
43
43
|
if auto_migrate
|
44
44
|
DummyApp::Migrations.auto_migrate
|
@@ -90,7 +90,7 @@ module DummyApp
|
|
90
90
|
config.active_record.dump_schema_after_migration = false
|
91
91
|
|
92
92
|
# Configure active storage to use storage within tmp folder
|
93
|
-
unless
|
93
|
+
unless ENV['DISABLE_ACTIVE_STORAGE']
|
94
94
|
initializer 'solidus.active_storage' do
|
95
95
|
config.active_storage.service_configurations = {
|
96
96
|
test: {
|
@@ -116,6 +116,7 @@ module DummyApp
|
|
116
116
|
end
|
117
117
|
config.paths['db/migrate'] = migration_dirs
|
118
118
|
ActiveRecord::Migrator.migrations_paths = migration_dirs
|
119
|
+
ActiveRecord::Migration.verbose = false
|
119
120
|
|
120
121
|
config.assets.paths << File.expand_path('dummy_app/assets/javascripts', __dir__)
|
121
122
|
config.assets.paths << File.expand_path('dummy_app/assets/stylesheets', __dir__)
|
@@ -137,10 +138,9 @@ end
|
|
137
138
|
Spree.user_class = 'Spree::LegacyUser'
|
138
139
|
Spree.load_defaults(Spree.solidus_version)
|
139
140
|
Spree.config do |config|
|
140
|
-
config.
|
141
|
-
config.use_legacy_events = (ENV['USE_LEGACY_EVENTS'] == 'true')
|
141
|
+
config.use_legacy_events = ENV['USE_LEGACY_EVENTS'].present?
|
142
142
|
|
143
|
-
if
|
143
|
+
if ENV['DISABLE_ACTIVE_STORAGE']
|
144
144
|
config.image_attachment_module = 'Spree::Image::PaperclipAttachment'
|
145
145
|
config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
|
146
146
|
end
|
@@ -24,21 +24,19 @@ FactoryBot.define do
|
|
24
24
|
phone { '555-555-0199' }
|
25
25
|
alternative_phone { '555-555-0199' }
|
26
26
|
|
27
|
-
state do |address|
|
28
|
-
Spree::State.joins(:country).where('spree_countries.iso = (?)', country_iso_code).find_by(abbr: state_code) ||
|
29
|
-
address.association(
|
30
|
-
:state,
|
31
|
-
strategy: :create,
|
32
|
-
country_iso: country_iso_code,
|
33
|
-
state_code: state_code
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
27
|
country do |address|
|
38
28
|
if address.state
|
39
29
|
address.state.country
|
40
30
|
else
|
41
|
-
|
31
|
+
Spree::Country.find_by(iso: country_iso_code) ||
|
32
|
+
address.association(:country, strategy: :create, iso: country_iso_code)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
after(:build) do |address, evaluator|
|
37
|
+
if address&.country&.states_required? && address.state.nil? && address.state_name.nil?
|
38
|
+
address.state = address.country.states.find_by(abbr: evaluator.state_code) ||
|
39
|
+
create(:state, country_iso: address.country.iso, state_code: evaluator.state_code)
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
@@ -17,6 +17,9 @@ FactoryBot.define do
|
|
17
17
|
factory :default_tax_calculator, class: 'Spree::Calculator::DefaultTax' do
|
18
18
|
end
|
19
19
|
|
20
|
+
factory :flat_fee_calculator, class: 'Spree::Calculator::FlatFee' do
|
21
|
+
end
|
22
|
+
|
20
23
|
factory :shipping_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do
|
21
24
|
preferred_amount { 10.0 }
|
22
25
|
end
|
@@ -20,7 +20,6 @@ FactoryBot.define do
|
|
20
20
|
iso3 { carmen_country.alpha_3_code }
|
21
21
|
numcode { carmen_country.numeric_code }
|
22
22
|
|
23
|
-
|
24
|
-
# states_required { carmen_country.subregions? }
|
23
|
+
states_required { carmen_country.subregions? }
|
25
24
|
end
|
26
25
|
end
|
@@ -22,23 +22,40 @@ FactoryBot.define do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
trait :with_action do
|
25
|
-
|
26
|
-
|
25
|
+
transient do
|
26
|
+
promotion_action_class { Spree::Promotion::Actions::CreateAdjustment }
|
27
|
+
end
|
28
|
+
|
29
|
+
after(:create) do |promotion, evaluator|
|
30
|
+
promotion.actions << evaluator.promotion_action_class.new
|
27
31
|
end
|
28
32
|
end
|
29
33
|
|
30
|
-
trait :
|
34
|
+
trait :with_adjustable_action do
|
31
35
|
transient do
|
32
|
-
|
36
|
+
preferred_amount { 10 }
|
37
|
+
calculator_class { Spree::Calculator::FlatRate }
|
38
|
+
promotion_action_class { Spree::Promotion::Actions::CreateItemAdjustments }
|
33
39
|
end
|
34
40
|
|
35
41
|
after(:create) do |promotion, evaluator|
|
36
|
-
calculator =
|
37
|
-
calculator.preferred_amount = evaluator.
|
38
|
-
|
42
|
+
calculator = evaluator.calculator_class.new
|
43
|
+
calculator.preferred_amount = evaluator.preferred_amount
|
44
|
+
evaluator.promotion_action_class.create!(calculator: calculator, promotion: promotion)
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
48
|
+
factory :promotion_with_action_adjustment, traits: [:with_adjustable_action]
|
49
|
+
|
50
|
+
trait :with_line_item_adjustment do
|
51
|
+
transient do
|
52
|
+
adjustment_rate { 10 }
|
53
|
+
end
|
54
|
+
|
55
|
+
with_adjustable_action
|
56
|
+
preferred_amount { adjustment_rate }
|
57
|
+
end
|
58
|
+
|
42
59
|
factory :promotion_with_item_adjustment, traits: [:with_line_item_adjustment]
|
43
60
|
|
44
61
|
trait :with_free_shipping do
|
@@ -52,14 +69,11 @@ FactoryBot.define do
|
|
52
69
|
weighted_order_adjustment_amount { 10 }
|
53
70
|
end
|
54
71
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
action = Spree::Promotion::Actions::CreateAdjustment.create!(calculator: calculator)
|
59
|
-
promotion.actions << action
|
60
|
-
promotion.save!
|
61
|
-
end
|
72
|
+
with_adjustable_action
|
73
|
+
preferred_amount { weighted_order_adjustment_amount }
|
74
|
+
promotion_action_class { Spree::Promotion::Actions::CreateAdjustment }
|
62
75
|
end
|
76
|
+
|
63
77
|
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
64
78
|
|
65
79
|
trait :with_item_total_rule do
|
@@ -17,9 +17,15 @@ FactoryBot.define do
|
|
17
17
|
carmen_subregion do
|
18
18
|
carmen_country = Carmen::Country.coded(country.iso)
|
19
19
|
|
20
|
-
carmen_country.subregions
|
21
|
-
carmen_country.subregions.sort_by(&:name).first ||
|
20
|
+
unless carmen_country.subregions?
|
22
21
|
fail("Country #{country.iso} has no subregions")
|
22
|
+
end
|
23
|
+
|
24
|
+
carmen_regions = carmen_country.subregions
|
25
|
+
carmen_regions = carmen_regions.flat_map(&:subregions) if carmen_regions.first.subregions?
|
26
|
+
region_collection = Carmen::RegionCollection.new(carmen_regions)
|
27
|
+
|
28
|
+
region_collection.coded(state_code) || region_collection.sort_by(&:name).first
|
23
29
|
end
|
24
30
|
end
|
25
31
|
|
@@ -37,7 +37,7 @@ module Spree
|
|
37
37
|
Spree::Deprecation.warn(
|
38
38
|
"Please do not cherry-pick factories, this is not well supported by FactoryBot, " \
|
39
39
|
'follow the changelog instructions on how to migrate your current setup.',
|
40
|
-
callsites[index
|
40
|
+
callsites[index..]
|
41
41
|
)
|
42
42
|
end
|
43
43
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :taxes do
|
4
|
+
desc "Creates all of the records necessary to start collecting the Colorado Delivery Fee"
|
5
|
+
task colorado_delivery_fee: :environment do
|
6
|
+
usa = Spree::Country.find_by!(iso: "US")
|
7
|
+
colorado = usa.states.find_by!(abbr: "CO")
|
8
|
+
|
9
|
+
ActiveRecord::Base.transaction do
|
10
|
+
zone = Spree::Zone.create!(
|
11
|
+
name: "Colorado",
|
12
|
+
description: "State-based zone containing only Colorado.",
|
13
|
+
states: [colorado]
|
14
|
+
)
|
15
|
+
|
16
|
+
calculator = Spree::Calculator::FlatFee.new
|
17
|
+
rate = Spree::TaxRate.create!(
|
18
|
+
name: "Colorado Delivery Fee",
|
19
|
+
calculator: calculator,
|
20
|
+
zone: zone,
|
21
|
+
amount: 0.27,
|
22
|
+
show_rate_in_label: false,
|
23
|
+
level: "order"
|
24
|
+
)
|
25
|
+
rate.tax_categories << Spree::TaxCategory.default if Spree::TaxCategory.default
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/solidus_core.gemspec
CHANGED
@@ -20,14 +20,14 @@ Gem::Specification.new do |s|
|
|
20
20
|
f.match(%r{^(spec|script)/})
|
21
21
|
end
|
22
22
|
|
23
|
-
s.required_ruby_version = '>= 2.
|
23
|
+
s.required_ruby_version = '>= 2.7.0'
|
24
24
|
s.required_rubygems_version = '>= 1.8.23'
|
25
25
|
|
26
26
|
%w[
|
27
27
|
actionmailer actionpack actionview activejob activemodel activerecord
|
28
28
|
activesupport railties
|
29
29
|
].each do |rails_dep|
|
30
|
-
s.add_dependency rails_dep, ['>=
|
30
|
+
s.add_dependency rails_dep, ['>= 6.0', '< 7.1.x']
|
31
31
|
end
|
32
32
|
|
33
33
|
s.add_dependency 'activemerchant', '~> 1.66'
|