solidus_core 3.2.4 → 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/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 +4 -3
- 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 -3
- 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 +17 -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 +13 -0
- data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
- data/lib/generators/solidus/install/install_generator.rb +233 -187
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -4
- 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/core/controller_helpers/current_host.rb +5 -1
- data/lib/spree/core/engine.rb +1 -0
- data/lib/spree/core/search/base.rb +17 -8
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +1 -21
- data/lib/spree/migrations.rb +12 -10
- data/lib/spree/permitted_attributes.rb +4 -1
- data/lib/spree/preferences/preferable.rb +5 -0
- data/lib/spree/preferences/preferable_class_methods.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +25 -8
- data/lib/spree/rails_compatibility.rb +0 -17
- data/lib/spree/testing_support/common_rake.rb +27 -7
- data/lib/spree/testing_support/dummy_app.rb +2 -2
- 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 +37 -23
- data/lib/generators/solidus/install/install_generator/bundler_context.rb +0 -97
- data/lib/generators/solidus/install/install_generator/install_frontend.rb +0 -59
- data/lib/generators/solidus/install/install_generator/support_solidus_frontend_extraction.rb +0 -48
@@ -0,0 +1,13 @@
|
|
1
|
+
unless Bundler.locked_gems.dependencies['solidus_frontend']
|
2
|
+
say_status :warning, "Support for frontends other than `solidus_frontend` by `solidus_bolt` is still in progress.", :yellow
|
3
|
+
end
|
4
|
+
|
5
|
+
unless Bundler.locked_gems.dependencies['solidus_auth_devise']
|
6
|
+
say_status :warning, "Running solidus_bolt without solidus_auth_devise is not supported.", :yellow
|
7
|
+
end
|
8
|
+
|
9
|
+
unless Bundler.locked_gems.dependencies['solidus_bolt']
|
10
|
+
bundle_command 'add solidus_bolt'
|
11
|
+
end
|
12
|
+
|
13
|
+
generate 'solidus_bolt:install'
|
@@ -0,0 +1 @@
|
|
1
|
+
# noop
|
@@ -0,0 +1,10 @@
|
|
1
|
+
unless Bundler.locked_gems.dependencies['solidus_frontend']
|
2
|
+
say_status :warning, "Support for frontends other than `solidus_frontend` by `solidus_paypal_commerce_platform` is still in progress.", :yellow
|
3
|
+
end
|
4
|
+
|
5
|
+
unless Bundler.locked_gems.dependencies['solidus_paypal_commerce_platform']
|
6
|
+
version = @selected_frontend == 'classic' ? '< 1' : '~> 1.0'
|
7
|
+
bundle_command "add solidus_paypal_commerce_platform --version='#{version}'"
|
8
|
+
end
|
9
|
+
|
10
|
+
generate 'solidus_paypal_commerce_platform:install'
|
@@ -1,68 +1,90 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails/generators'
|
4
3
|
require 'rails/version'
|
5
|
-
|
6
|
-
|
7
|
-
require_relative 'install_generator/install_frontend'
|
4
|
+
require 'rails/generators'
|
5
|
+
require 'rails/generators/app_base'
|
8
6
|
|
9
7
|
module Solidus
|
10
8
|
# @private
|
11
|
-
class InstallGenerator < Rails::Generators::
|
12
|
-
|
9
|
+
class InstallGenerator < Rails::Generators::AppBase
|
10
|
+
argument :app_path, type: :string, default: Rails.root
|
13
11
|
|
14
|
-
|
15
|
-
DEFAULT_FRONTEND = 'solidus_starter_frontend'
|
16
|
-
FRONTENDS = [
|
17
|
-
DEFAULT_FRONTEND,
|
18
|
-
LEGACY_FRONTEND,
|
19
|
-
'none'
|
20
|
-
].freeze
|
12
|
+
CORE_MOUNT_ROUTE = "mount Spree::Core::Engine"
|
21
13
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
FRONTENDS = %w[
|
15
|
+
none
|
16
|
+
classic
|
17
|
+
starter
|
18
|
+
]
|
19
|
+
|
20
|
+
LEGACY_FRONTENDS = %w[
|
21
|
+
solidus_starter_frontend
|
22
|
+
solidus_frontend
|
23
|
+
]
|
24
|
+
|
25
|
+
AUTHENTICATIONS = %w[
|
26
|
+
devise
|
27
|
+
existing
|
28
|
+
custom
|
29
|
+
none
|
30
|
+
]
|
31
|
+
|
32
|
+
PAYMENT_METHODS = %w[
|
33
|
+
paypal
|
34
|
+
bolt
|
35
|
+
none
|
36
|
+
]
|
27
37
|
|
28
38
|
class_option :migrate, type: :boolean, default: true, banner: 'Run Solidus migrations'
|
29
39
|
class_option :seed, type: :boolean, default: true, banner: 'Load seed data (migrations must be run)'
|
30
|
-
class_option :sample, type: :boolean, default: true, banner: 'Load sample data (migrations must be run)'
|
31
|
-
class_option :active_storage, type: :boolean, default:
|
40
|
+
class_option :sample, type: :boolean, default: true, banner: 'Load sample data (migrations and seeds must be run)'
|
41
|
+
class_option :active_storage, type: :boolean, default: (
|
42
|
+
Rails.gem_version >= Gem::Version.new("6.1.0")
|
43
|
+
), banner: 'Install ActiveStorage as image attachments handler for products and taxons'
|
32
44
|
class_option :auto_accept, type: :boolean
|
33
45
|
class_option :user_class, type: :string
|
34
46
|
class_option :admin_email, type: :string
|
35
47
|
class_option :admin_password, type: :string
|
36
|
-
|
37
|
-
class_option :
|
38
|
-
class_option :
|
39
|
-
class_option :
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
class_option :
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
def self.source_paths
|
51
|
-
paths = superclass.source_paths
|
52
|
-
paths << File.expand_path('../templates', "../../#{__FILE__}")
|
53
|
-
paths << File.expand_path('../templates', "../#{__FILE__}")
|
54
|
-
paths << File.expand_path('templates', __dir__)
|
55
|
-
paths.flatten
|
48
|
+
|
49
|
+
class_option :frontend, type: :string, enum: FRONTENDS + LEGACY_FRONTENDS, default: nil, desc: "Indicates which frontend to install."
|
50
|
+
class_option :authentication, type: :string, enum: AUTHENTICATIONS, default: nil, desc: "Indicates which authentication system to install."
|
51
|
+
class_option :payment_method, type: :string, enum: PAYMENT_METHODS, default: nil, desc: "Indicates which payment method to install."
|
52
|
+
|
53
|
+
# DEPRECATED
|
54
|
+
class_option :with_authentication, type: :boolean, hide: true, default: nil
|
55
|
+
class_option :enforce_available_locales, type: :boolean, hide: true, default: nil
|
56
|
+
class_option :lib_name, type: :string, hide: true, default: nil
|
57
|
+
|
58
|
+
source_root "#{__dir__}/templates"
|
59
|
+
|
60
|
+
def self.exit_on_failure?
|
61
|
+
true
|
56
62
|
end
|
57
63
|
|
58
64
|
def prepare_options
|
59
65
|
@run_migrations = options[:migrate]
|
60
|
-
@load_seed_data = options[:seed]
|
61
|
-
@load_sample_data = options[:sample]
|
66
|
+
@load_seed_data = options[:seed] && @run_migrations
|
67
|
+
@load_sample_data = options[:sample] && @run_migrations && @load_seed_data
|
68
|
+
@selected_frontend = detect_frontend_to_install
|
69
|
+
@selected_authentication = detect_authentication_to_install
|
70
|
+
@selected_payment_method = detect_payment_method_to_install
|
71
|
+
|
72
|
+
# Silence verbose output (e.g. Rails migrations will rely on this environment variable)
|
73
|
+
ENV['VERBOSE'] = 'false'
|
74
|
+
|
75
|
+
# No reason to check for their presence if we're about to install them
|
76
|
+
ENV['SOLIDUS_SKIP_MIGRATIONS_CHECK'] = 'true'
|
77
|
+
|
78
|
+
if options[:enforce_available_locales] != nil
|
79
|
+
warn \
|
80
|
+
"DEPRECATION WARNING: using `solidus:install --enforce-available-locales` is now deprecated and has no effect. " \
|
81
|
+
"Since Rails 4.1 the default is `true` so we no longer need to explicitly set a value."
|
82
|
+
end
|
62
83
|
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
if options[:lib_name] != nil
|
85
|
+
warn \
|
86
|
+
"DEPRECATION WARNING: using `solidus:install --lib-name` is now deprecated and has no effect. " \
|
87
|
+
"The option is legacy and should be removed from scripts still using it."
|
66
88
|
end
|
67
89
|
end
|
68
90
|
|
@@ -72,32 +94,15 @@ module Solidus
|
|
72
94
|
|
73
95
|
def install_file_attachment
|
74
96
|
if options[:active_storage]
|
75
|
-
|
97
|
+
say_status :assets, "Active Storage", :green
|
76
98
|
rake 'active_storage:install'
|
77
99
|
else
|
78
|
-
|
100
|
+
say_status :assets, "Paperclip", :green
|
79
101
|
gsub_file 'config/initializers/spree.rb', "ActiveStorageAttachment", "PaperclipAttachment"
|
80
102
|
end
|
81
103
|
end
|
82
104
|
|
83
|
-
def additional_tweaks
|
84
|
-
return unless File.exist? 'public/robots.txt'
|
85
|
-
|
86
|
-
append_file "public/robots.txt", <<-ROBOTS.strip_heredoc
|
87
|
-
User-agent: *
|
88
|
-
Disallow: /checkout
|
89
|
-
Disallow: /cart
|
90
|
-
Disallow: /orders
|
91
|
-
Disallow: /user
|
92
|
-
Disallow: /account
|
93
|
-
Disallow: /api
|
94
|
-
Disallow: /password
|
95
|
-
ROBOTS
|
96
|
-
end
|
97
|
-
|
98
105
|
def setup_assets
|
99
|
-
@lib_name = 'spree'
|
100
|
-
|
101
106
|
empty_directory 'app/assets/images'
|
102
107
|
|
103
108
|
%w{javascripts stylesheets images}.each do |path|
|
@@ -114,68 +119,15 @@ module Solidus
|
|
114
119
|
empty_directory "app/overrides"
|
115
120
|
end
|
116
121
|
|
117
|
-
def configure_application
|
118
|
-
if !options[:enforce_available_locales].nil?
|
119
|
-
application <<-RUBY
|
120
|
-
# Prevent this deprecation message: https://github.com/svenfuchs/i18n/commit/3b6e56e
|
121
|
-
I18n.enforce_available_locales = #{options[:enforce_available_locales]}
|
122
|
-
RUBY
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
def plugin_install_preparation
|
127
|
-
@plugins_to_be_installed = []
|
128
|
-
@plugin_generators_to_run = []
|
129
|
-
end
|
130
|
-
|
131
|
-
def install_auth_plugin
|
132
|
-
with_authentication = options[:with_authentication]
|
133
|
-
with_authentication.nil? and with_authentication = (options[:auto_accept] || !no?("
|
134
|
-
Solidus has a default authentication extension that uses Devise.
|
135
|
-
You can find more info at https://github.com/solidusio/solidus_auth_devise.
|
136
|
-
|
137
|
-
Regardless of what you answer here, it'll be installed if you choose
|
138
|
-
solidus_starter_frontend as your storefront in a later step.
|
139
|
-
|
140
|
-
Would you like to install it? (Y/n)"))
|
141
|
-
|
142
|
-
if with_authentication
|
143
|
-
@plugins_to_be_installed << 'solidus_auth_devise'
|
144
|
-
@plugin_generators_to_run << 'solidus:auth:install'
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
def install_payment_method
|
149
|
-
say_status :warning, set_color(
|
150
|
-
"Selecting a payment along with `solidus_starter_frontend` might require manual integration.",
|
151
|
-
:yellow
|
152
|
-
), :yellow
|
153
|
-
|
154
|
-
name = options[:payment_method]
|
155
|
-
name ||= PAYMENT_METHODS.keys.first if options[:auto_accept]
|
156
|
-
name ||= ask("
|
157
|
-
You can select a payment method to be included in the installation process.
|
158
|
-
Please select a payment method name:", limited_to: PAYMENT_METHODS.keys, default: PAYMENT_METHODS.keys.first)
|
159
|
-
|
160
|
-
gem_name = PAYMENT_METHODS.fetch(name)
|
161
|
-
|
162
|
-
if gem_name
|
163
|
-
@plugins_to_be_installed << gem_name
|
164
|
-
@plugin_generators_to_run << "#{gem_name}:install"
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
122
|
def include_seed_data
|
169
|
-
append_file "db/seeds.rb",
|
170
|
-
|
171
|
-
Spree::Core::Engine.load_seed if defined?(Spree::Core)
|
172
|
-
Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
|
123
|
+
append_file "db/seeds.rb", <<~RUBY
|
124
|
+
Spree::Core::Engine.load_seed
|
173
125
|
RUBY
|
174
126
|
end
|
175
127
|
|
176
128
|
def install_migrations
|
177
129
|
say_status :copying, "migrations"
|
178
|
-
|
130
|
+
rake 'railties:install:migrations'
|
179
131
|
end
|
180
132
|
|
181
133
|
def create_database
|
@@ -183,32 +135,18 @@ module Solidus
|
|
183
135
|
rake 'db:create'
|
184
136
|
end
|
185
137
|
|
186
|
-
def
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
.new(bundler_context: bundler_context, generator_context: self)
|
199
|
-
.call(frontend)
|
200
|
-
end
|
201
|
-
|
202
|
-
def run_bundle_install_if_needed_by_plugins
|
203
|
-
@plugins_to_be_installed.each do |plugin_name|
|
204
|
-
gem plugin_name
|
205
|
-
end
|
206
|
-
|
207
|
-
BundlerContext.bundle_cleanly { run "bundle install" } if @plugins_to_be_installed.any?
|
208
|
-
run "spring stop" if defined?(Spring)
|
209
|
-
|
210
|
-
@plugin_generators_to_run.each do |plugin_generator_name|
|
211
|
-
generate "#{plugin_generator_name} --skip_migrations=true"
|
138
|
+
def install_routes
|
139
|
+
if Pathname(app_path).join('config', 'routes.rb').read.include? CORE_MOUNT_ROUTE
|
140
|
+
say_status :route_exist, CORE_MOUNT_ROUTE, :blue
|
141
|
+
else
|
142
|
+
route <<~RUBY
|
143
|
+
# This line mounts Solidus's routes at the root of your application.
|
144
|
+
# This means, any requests to URLs such as /products, will go to Spree::ProductsController.
|
145
|
+
# If you would like to change where this engine is mounted, simply change the :at option to something different.
|
146
|
+
#
|
147
|
+
# We ask that you don't use the :as option here, as Solidus relies on it being the default of "spree"
|
148
|
+
#{CORE_MOUNT_ROUTE}, at: '/'
|
149
|
+
RUBY
|
212
150
|
end
|
213
151
|
end
|
214
152
|
|
@@ -216,15 +154,27 @@ module Solidus
|
|
216
154
|
if @run_migrations
|
217
155
|
say_status :running, "migrations"
|
218
156
|
|
219
|
-
rake 'db:migrate
|
157
|
+
rake 'db:migrate'
|
220
158
|
else
|
221
159
|
say_status :skipping, "migrations (don't forget to run rake db:migrate)"
|
222
160
|
end
|
223
161
|
end
|
224
162
|
|
163
|
+
def install_authentication
|
164
|
+
apply_template_for :authentication, @selected_authentication
|
165
|
+
end
|
166
|
+
|
167
|
+
def install_frontend
|
168
|
+
apply_template_for :frontend, @selected_frontend
|
169
|
+
end
|
170
|
+
|
171
|
+
def install_payment_method
|
172
|
+
apply_template_for :payment_method, @selected_payment_method
|
173
|
+
end
|
174
|
+
|
225
175
|
def populate_seed_data
|
226
176
|
if @load_seed_data
|
227
|
-
say_status :loading,
|
177
|
+
say_status :loading, "seed data"
|
228
178
|
rake_options = []
|
229
179
|
rake_options << "AUTO_ACCEPT=1" if options[:auto_accept]
|
230
180
|
rake_options << "ADMIN_EMAIL=#{options[:admin_email]}" if options[:admin_email]
|
@@ -245,61 +195,157 @@ module Solidus
|
|
245
195
|
end
|
246
196
|
end
|
247
197
|
|
248
|
-
def
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
198
|
+
def complete
|
199
|
+
say_status :complete, "Solidus has been installed successfully. Enjoy!"
|
200
|
+
end
|
201
|
+
|
202
|
+
private
|
203
|
+
|
204
|
+
def generate(what, *args, abort_on_failure: true)
|
205
|
+
args << '--auto-accept' if options[:auto_accept]
|
206
|
+
args << '--auto-run-migrations' if options[:migrate]
|
207
|
+
super(what, *args, abort_on_failure: abort_on_failure)
|
208
|
+
end
|
209
|
+
|
210
|
+
def bundle_command(command, env = {})
|
211
|
+
# Make `bundle install` less verbose by skipping the "Using ..." messages
|
212
|
+
super(command, env.reverse_merge('BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES' => 'true'))
|
213
|
+
ensure
|
214
|
+
Bundler.reset_paths!
|
215
|
+
end
|
216
|
+
|
217
|
+
def ask_with_description(desc:, limited_to:, default:)
|
218
|
+
loop do
|
219
|
+
say_status :question, desc, :yellow
|
220
|
+
answer = ask(set_color("answer:".rjust(13), :blue, :bold)).to_s.downcase.presence
|
221
|
+
|
222
|
+
case answer
|
223
|
+
when nil
|
224
|
+
say_status :using, "#{default} (default)"
|
225
|
+
break default
|
226
|
+
when *limited_to.map(&:to_s)
|
227
|
+
say_status :using, answer
|
228
|
+
break answer
|
229
|
+
else say_status :error, "Please select a valid answer:", :red
|
261
230
|
end
|
262
231
|
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def apply_template_for(topic, selected)
|
235
|
+
template_path = Dir["#{__dir__}/app_templates/#{topic}/*.rb"].find do |path|
|
236
|
+
File.basename(path, '.rb') == selected
|
237
|
+
end
|
263
238
|
|
264
|
-
unless
|
265
|
-
|
266
|
-
|
267
|
-
puts " "
|
268
|
-
puts " #{CORE_MOUNT_ROUTE}, at: '/'"
|
239
|
+
unless template_path
|
240
|
+
say_status :warning, "Unknown #{topic}: #{selected.inspect}, attempting to run it with `rails app:template`"
|
241
|
+
template_path = selected
|
269
242
|
end
|
243
|
+
|
244
|
+
say_status :installing, "[#{topic}] #{selected}", :blue
|
245
|
+
apply template_path
|
270
246
|
end
|
271
247
|
|
272
|
-
def
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
248
|
+
def with_env(vars)
|
249
|
+
original = ENV.to_hash
|
250
|
+
vars.each { |k, v| ENV[k] = v }
|
251
|
+
|
252
|
+
begin
|
253
|
+
yield
|
254
|
+
ensure
|
255
|
+
ENV.replace(original)
|
278
256
|
end
|
279
257
|
end
|
280
258
|
|
281
|
-
|
259
|
+
def detect_frontend_to_install
|
260
|
+
# We need to support names that were available in v3.2
|
261
|
+
selected_frontend = 'starter' if options[:frontend] == 'solidus_starter_frontend'
|
262
|
+
selected_frontend = 'classic' if options[:frontend] == 'solidus_frontend'
|
263
|
+
selected_frontend ||= options[:frontend]
|
282
264
|
|
283
|
-
def detect_frontend_to_install(bundler_context)
|
284
265
|
ENV['FRONTEND'] ||
|
285
|
-
|
286
|
-
(
|
287
|
-
(options[:auto_accept] &&
|
288
|
-
|
266
|
+
selected_frontend ||
|
267
|
+
(Bundler.locked_gems.dependencies['solidus_frontend'] && 'classic') ||
|
268
|
+
(options[:auto_accept] && 'starter') ||
|
269
|
+
ask_with_description(
|
270
|
+
default: 'starter',
|
271
|
+
limited_to: FRONTENDS,
|
272
|
+
desc: <<~TEXT
|
273
|
+
Which frontend would you like to use?
|
274
|
+
|
275
|
+
- [#{set_color 'starter', :bold}] Generate all necessary controllers and views directly in your Rails app (#{set_color :default, :bold}).
|
276
|
+
- [#{set_color 'classic', :bold}] Install `solidus_frontend`, was the default in previous solidus versions (#{set_color :deprecated, :bold}).
|
277
|
+
- [#{set_color 'none', :bold}] Skip installing a frontend.
|
278
|
+
|
279
|
+
Selecting `starter` is recommended, however, some extensions are still only compatible with `classic`.
|
280
|
+
TEXT
|
281
|
+
)
|
282
|
+
end
|
289
283
|
|
290
|
-
|
291
|
-
|
292
|
-
|
284
|
+
def detect_authentication_to_install
|
285
|
+
return 'devise' if @selected_frontend == 'starter'
|
286
|
+
|
287
|
+
if options[:with_authentication] != nil
|
288
|
+
say_status :warning, \
|
289
|
+
"Using `solidus:install --with-authentication` is now deprecated. " \
|
290
|
+
"Please use `--authentication` instead (see --help for the full list of options).",
|
291
|
+
:red
|
292
|
+
|
293
|
+
if options[:with_authentication] == 'false'
|
294
|
+
# Don't use the default authentication if the user explicitly
|
295
|
+
# requested no authentication system.
|
296
|
+
return 'none'
|
297
|
+
else
|
298
|
+
return 'devise'
|
299
|
+
end
|
300
|
+
end
|
293
301
|
|
294
|
-
|
302
|
+
ENV['AUTHENTICATION'] ||
|
303
|
+
options[:authentication] ||
|
304
|
+
(Bundler.locked_gems.dependencies['solidus_auth_devise'] && 'devise') ||
|
305
|
+
(options[:auto_accept] && 'devise') ||
|
306
|
+
ask_with_description(
|
307
|
+
default: 'devise',
|
308
|
+
limited_to: AUTHENTICATIONS,
|
309
|
+
desc: <<~TEXT
|
310
|
+
Which authentication would you like to use?
|
311
|
+
|
312
|
+
- [#{set_color 'devise', :bold}] Install and configure the standard `devise` integration. (#{set_color :default, :bold}).
|
313
|
+
- [#{set_color 'existing', :bold}] Integrate and configure an existing `devise` setup.
|
314
|
+
- [#{set_color 'custom', :bold}] A starter configuration for rolling your own authentication system.
|
315
|
+
- [#{set_color 'none', :bold}] Don't add any configuration for authentication.
|
316
|
+
|
317
|
+
Selecting `devise` is recommended.
|
318
|
+
TEXT
|
319
|
+
)
|
295
320
|
end
|
296
321
|
|
297
|
-
def
|
298
|
-
|
322
|
+
def detect_payment_method_to_install
|
323
|
+
return 'paypal' if Bundler.locked_gems.dependencies['solidus_paypal_commerce_platform']
|
324
|
+
return 'bolt' if Bundler.locked_gems.dependencies['solidus_bolt']
|
325
|
+
|
326
|
+
descriptions = {
|
327
|
+
paypal: "- [#{set_color 'paypal', :bold}] Install `solidus_paypal_commerce_platform` (#{set_color :default, :bold}).",
|
328
|
+
bolt: "- [#{set_color 'bolt', :bold}] Install `solidus_bolt`.",
|
329
|
+
none: "- [#{set_color 'none', :bold}] Skip installing a payment method.",
|
330
|
+
}
|
331
|
+
|
332
|
+
payment_methods = PAYMENT_METHODS
|
333
|
+
|
334
|
+
if @selected_frontend != 'classic'
|
335
|
+
payment_methods -= ['bolt']
|
336
|
+
descriptions.delete(:bolt)
|
337
|
+
end
|
338
|
+
|
339
|
+
selected = options[:payment_method] || (options[:auto_accept] && 'paypal') ||
|
340
|
+
ask_with_description(
|
341
|
+
default: 'paypal',
|
342
|
+
limited_to: payment_methods,
|
343
|
+
desc: <<~TEXT
|
344
|
+
Which payment method would you like to use?
|
299
345
|
|
300
|
-
|
301
|
-
|
302
|
-
|
346
|
+
#{descriptions.values.join("\n")}
|
347
|
+
TEXT
|
348
|
+
)
|
303
349
|
end
|
304
350
|
end
|
305
351
|
end
|
@@ -9,9 +9,6 @@ Spree.config do |config|
|
|
9
9
|
# Default currency for new sites
|
10
10
|
config.currency = "USD"
|
11
11
|
|
12
|
-
# from address for transactional emails
|
13
|
-
config.mails_from = "store@example.com"
|
14
|
-
|
15
12
|
# Uncomment to stop tracking inventory levels in the application
|
16
13
|
# config.track_inventory_levels = false
|
17
14
|
|
@@ -79,7 +76,9 @@ Spree::Api::Config.configure do |config|
|
|
79
76
|
end
|
80
77
|
<% end -%>
|
81
78
|
|
82
|
-
|
79
|
+
<% if options[:user_class].present? -%>
|
80
|
+
Spree.user_class = <%= options[:user_class].inspect %>
|
81
|
+
<% end -%>
|
83
82
|
|
84
83
|
# Rules for avoiding to store the current path into session for redirects
|
85
84
|
# When at least one rule is matched, the request path will not be stored
|
@@ -22,10 +22,12 @@ module Spree
|
|
22
22
|
migration_template 'migration.rb.tt', "db/migrate/add_spree_fields_to_custom_user_table.rb"
|
23
23
|
template 'authentication_helpers.rb.tt', "lib/spree/authentication_helpers.rb"
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
initializer 'solidus_authentication', <<~RUBY
|
26
|
+
Rails.application.config.to_prepare do
|
27
|
+
ApplicationController.include Spree::AuthenticationHelpers, Spree::CurrentUserHelpers
|
28
|
+
Spree::Api::BaseController.include Spree::CurrentUserHelpers if defined? Spree::Api
|
29
|
+
end
|
30
|
+
RUBY
|
29
31
|
|
30
32
|
gsub_file 'config/initializers/spree.rb', /Spree\.user_class.?=.?.+$/, %{Spree.user_class = "#{class_name}"}
|
31
33
|
end
|
@@ -9,7 +9,8 @@ module Spree
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def spree_current_user
|
12
|
-
|
12
|
+
# TODO: Replace this with your implementation for retrieving the current user
|
13
|
+
Spree.user_class.new
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
@@ -33,8 +34,3 @@ module Spree
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
36
|
-
|
37
|
-
ApplicationController.send :include, Spree::AuthenticationHelpers
|
38
|
-
ApplicationController.send :include, Spree::CurrentUserHelpers
|
39
|
-
|
40
|
-
Spree::Api::BaseController.send :include, Spree::CurrentUserHelpers
|
@@ -1,7 +1,11 @@
|
|
1
1
|
class AddSpreeFieldsToCustomUserTable < ActiveRecord::Migration[4.2]
|
2
2
|
def up
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
if table_exists?(<%= table_name.inspect %>)
|
4
|
+
add_column <%= table_name.inspect %>, :spree_api_key, :string, :limit => 48 unless column_exists?(<%= table_name.inspect %>, :spree_api_key)
|
5
|
+
add_column <%= table_name.inspect %>, :ship_address_id, :integer unless column_exists?(<%= table_name.inspect %>, :ship_address_id)
|
6
|
+
add_column <%= table_name.inspect %>, :bill_address_id, :integer unless column_exists?(<%= table_name.inspect %>, :bill_address_id)
|
7
|
+
add_column <%= table_name.inspect %>, :deleted_at, :datetime unless column_exists?(<%= table_name.inspect %>, :deleted_at)
|
8
|
+
add_index <%= table_name.inspect %>, :deleted_at unless column_exists?(<%= table_name.inspect %>, :deleted_at)
|
9
|
+
end
|
6
10
|
end
|
7
11
|
end
|
@@ -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
|