railties 5.2.5 → 6.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of railties might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +184 -180
- data/MIT-LICENSE +1 -1
- data/RDOC_MAIN.rdoc +35 -28
- data/README.rdoc +1 -1
- data/lib/minitest/rails_plugin.rb +6 -10
- data/lib/rails/all.rb +4 -0
- data/lib/rails/api/generator.rb +2 -1
- data/lib/rails/api/task.rb +16 -0
- data/lib/rails/app_loader.rb +1 -1
- data/lib/rails/app_updater.rb +3 -1
- data/lib/rails/application.rb +21 -45
- data/lib/rails/application/configuration.rb +54 -12
- data/lib/rails/application/default_middleware_stack.rb +2 -0
- data/lib/rails/backtrace_cleaner.rb +5 -17
- data/lib/rails/code_statistics.rb +3 -3
- data/lib/rails/command.rb +11 -10
- data/lib/rails/command/actions.rb +0 -10
- data/lib/rails/command/base.rb +1 -5
- data/lib/rails/command/behavior.rb +4 -46
- data/lib/rails/command/environment_argument.rb +1 -11
- data/lib/rails/command/spellchecker.rb +58 -0
- data/lib/rails/commands/credentials/USAGE +19 -1
- data/lib/rails/commands/credentials/credentials_command.rb +42 -23
- data/lib/rails/commands/db/system/change/change_command.rb +20 -0
- data/lib/rails/commands/dbconsole/dbconsole_command.rb +2 -2
- data/lib/rails/commands/dev/dev_command.rb +17 -0
- data/lib/rails/commands/encrypted/encrypted_command.rb +2 -3
- data/lib/rails/commands/help/help_command.rb +1 -1
- data/lib/rails/commands/initializers/initializers_command.rb +16 -0
- data/lib/rails/commands/new/new_command.rb +2 -2
- data/lib/rails/commands/notes/notes_command.rb +39 -0
- data/lib/rails/commands/plugin/plugin_command.rb +1 -1
- data/lib/rails/commands/routes/routes_command.rb +37 -0
- data/lib/rails/commands/runner/runner_command.rb +6 -6
- data/lib/rails/commands/secrets/USAGE +3 -3
- data/lib/rails/commands/secrets/secrets_command.rb +3 -3
- data/lib/rails/commands/server/server_command.rb +109 -48
- data/lib/rails/configuration.rb +1 -7
- data/lib/rails/engine.rb +3 -9
- data/lib/rails/engine/configuration.rb +3 -1
- data/lib/rails/gem_version.rb +4 -4
- data/lib/rails/generators.rb +11 -12
- data/lib/rails/generators/actions.rb +48 -37
- data/lib/rails/generators/app_base.rb +49 -89
- data/lib/rails/generators/app_name.rb +50 -0
- data/lib/rails/generators/base.rb +0 -4
- data/lib/rails/generators/database.rb +57 -0
- data/lib/rails/generators/erb/mailer/mailer_generator.rb +1 -1
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +1 -1
- data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +1 -1
- data/lib/rails/generators/generated_attribute.rb +17 -17
- data/lib/rails/generators/model_helpers.rb +8 -1
- data/lib/rails/generators/named_base.rb +1 -5
- data/lib/rails/generators/rails/app/app_generator.rb +37 -72
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +3 -6
- data/lib/rails/generators/rails/app/templates/app/assets/config/manifest.js.tt +0 -3
- data/lib/rails/generators/rails/app/templates/app/{assets/javascripts/cable.js.tt → javascript/channels/consumer.js} +2 -9
- data/lib/rails/generators/rails/app/templates/app/javascript/channels/index.js +5 -0
- data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +15 -0
- data/lib/rails/generators/rails/app/templates/app/jobs/application_job.rb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +4 -4
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +4 -5
- data/lib/rails/generators/rails/app/templates/bin/update.tt +6 -7
- data/lib/rails/generators/rails/app/templates/config/application.rb.tt +2 -0
- data/lib/rails/generators/rails/app/templates/config/cable.yml.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml.tt +2 -2
- data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml.tt +2 -2
- data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +2 -2
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +4 -4
- data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +2 -2
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +6 -6
- data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +2 -2
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +3 -2
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +5 -12
- data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +6 -2
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +4 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_0.rb.tt +33 -0
- data/lib/rails/generators/rails/app/templates/config/locales/en.yml +1 -1
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +3 -5
- data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/spring.rb.tt +6 -6
- data/lib/rails/generators/rails/app/templates/gitignore.tt +2 -7
- data/lib/rails/generators/rails/app/templates/package.json.tt +7 -1
- data/lib/rails/generators/rails/app/templates/ruby-version.tt +1 -1
- data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +11 -0
- data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +7 -0
- data/lib/rails/generators/rails/assets/USAGE +1 -4
- data/lib/rails/generators/rails/assets/assets_generator.rb +0 -8
- data/lib/rails/generators/rails/controller/controller_generator.rb +11 -1
- data/lib/rails/generators/rails/credentials/credentials_generator.rb +7 -8
- data/lib/rails/generators/rails/db/system/change/change_generator.rb +55 -0
- data/lib/rails/generators/rails/encrypted_file/encrypted_file_generator.rb +4 -5
- data/lib/rails/generators/rails/helper/helper_generator.rb +5 -0
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +9 -18
- data/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/app/helpers/%namespaced_name%/application_helper.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/app/jobs/%namespaced_name%/application_job.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/app/models/%namespaced_name%/application_record.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/gitignore.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/railtie.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +1 -2
- data/lib/rails/generators/resource_helpers.rb +1 -6
- data/lib/rails/generators/test_unit/integration/integration_generator.rb +6 -0
- data/lib/rails/generators/test_unit/job/job_generator.rb +5 -0
- data/lib/rails/generators/test_unit/mailer/mailer_generator.rb +1 -1
- data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +1 -1
- data/lib/rails/generators/test_unit/system/system_generator.rb +5 -0
- data/lib/rails/generators/testing/behaviour.rb +3 -0
- data/lib/rails/info.rb +2 -2
- data/lib/rails/info_controller.rb +1 -1
- data/lib/rails/mailers_controller.rb +1 -1
- data/lib/rails/paths.rb +19 -9
- data/lib/rails/railtie.rb +1 -1
- data/lib/rails/ruby_version_check.rb +3 -3
- data/lib/rails/secrets.rb +0 -1
- data/lib/rails/source_annotation_extractor.rb +125 -117
- data/lib/rails/tasks/annotations.rake +9 -9
- data/lib/rails/tasks/dev.rake +5 -4
- data/lib/rails/tasks/framework.rake +5 -1
- data/lib/rails/tasks/initializers.rake +5 -4
- data/lib/rails/tasks/log.rake +0 -1
- data/lib/rails/tasks/routes.rake +4 -26
- data/lib/rails/tasks/statistics.rake +1 -0
- data/lib/rails/tasks/yarn.rake +1 -1
- data/lib/rails/templates/rails/welcome/index.html.erb +2 -2
- data/lib/rails/test_help.rb +11 -9
- data/lib/rails/test_unit/reporter.rb +1 -1
- data/lib/rails/test_unit/runner.rb +5 -5
- data/lib/rails/test_unit/testing.rake +1 -1
- metadata +30 -24
- data/lib/rails/commands/encrypted/USAGE +0 -28
- data/lib/rails/generators/js/assets/assets_generator.rb +0 -15
- data/lib/rails/generators/js/assets/templates/javascript.js +0 -2
- data/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +0 -22
- data/lib/rails/generators/rails/app/templates/bin/bundle.tt +0 -2
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.tt +0 -38
- data/lib/rails/generators/rails/assets/templates/javascript.js +0 -2
data/lib/rails/configuration.rb
CHANGED
data/lib/rails/engine.rb
CHANGED
@@ -531,9 +531,9 @@ module Rails
|
|
531
531
|
|
532
532
|
# Defines the routes for this engine. If a block is given to
|
533
533
|
# routes, it is appended to the engine.
|
534
|
-
def routes
|
534
|
+
def routes
|
535
535
|
@routes ||= ActionDispatch::Routing::RouteSet.new_with_config(config)
|
536
|
-
@routes.append(&
|
536
|
+
@routes.append(&Proc.new) if block_given?
|
537
537
|
@routes
|
538
538
|
end
|
539
539
|
|
@@ -548,13 +548,7 @@ module Rails
|
|
548
548
|
# Blog::Engine.load_seed
|
549
549
|
def load_seed
|
550
550
|
seed_file = paths["db/seeds.rb"].existent.first
|
551
|
-
|
552
|
-
|
553
|
-
if config.try(:active_job).try!(:queue_adapter) == :async
|
554
|
-
with_inline_jobs { load(seed_file) }
|
555
|
-
else
|
556
|
-
load(seed_file)
|
557
|
-
end
|
551
|
+
with_inline_jobs { load(seed_file) } if seed_file
|
558
552
|
end
|
559
553
|
|
560
554
|
# Add configured load paths to Ruby's load path, and remove duplicate entries.
|
@@ -38,7 +38,9 @@ module Rails
|
|
38
38
|
@paths ||= begin
|
39
39
|
paths = Rails::Paths::Root.new(@root)
|
40
40
|
|
41
|
-
paths.add "app", eager_load: true,
|
41
|
+
paths.add "app", eager_load: true,
|
42
|
+
glob: "{*,*/concerns}",
|
43
|
+
exclude: %w(assets javascript)
|
42
44
|
paths.add "app/assets", glob: "*"
|
43
45
|
paths.add "app/controllers", eager_load: true
|
44
46
|
paths.add "app/channels", eager_load: true, glob: "**/*_channel.rb"
|
data/lib/rails/gem_version.rb
CHANGED
data/lib/rails/generators.rb
CHANGED
@@ -23,6 +23,8 @@ module Rails
|
|
23
23
|
autoload :ActiveModel, "rails/generators/active_model"
|
24
24
|
autoload :Base, "rails/generators/base"
|
25
25
|
autoload :Migration, "rails/generators/migration"
|
26
|
+
autoload :Database, "rails/generators/database"
|
27
|
+
autoload :AppName, "rails/generators/app_name"
|
26
28
|
autoload :NamedBase, "rails/generators/named_base"
|
27
29
|
autoload :ResourceHelpers, "rails/generators/resource_helpers"
|
28
30
|
autoload :TestCase, "rails/generators/test_case"
|
@@ -33,8 +35,6 @@ module Rails
|
|
33
35
|
rails: {
|
34
36
|
actions: "-a",
|
35
37
|
orm: "-o",
|
36
|
-
javascripts: "-j",
|
37
|
-
javascript_engine: "-je",
|
38
38
|
resource_controller: "-c",
|
39
39
|
scaffold_controller: "-c",
|
40
40
|
stylesheets: "-y",
|
@@ -56,8 +56,6 @@ module Rails
|
|
56
56
|
force_plural: false,
|
57
57
|
helper: true,
|
58
58
|
integration_tool: nil,
|
59
|
-
javascripts: true,
|
60
|
-
javascript_engine: :js,
|
61
59
|
orm: false,
|
62
60
|
resource_controller: :controller,
|
63
61
|
resource_route: true,
|
@@ -126,7 +124,7 @@ module Rails
|
|
126
124
|
)
|
127
125
|
|
128
126
|
if ARGV.first == "mailer"
|
129
|
-
options[:rails]
|
127
|
+
options[:rails][:template_engine] = :erb
|
130
128
|
end
|
131
129
|
end
|
132
130
|
|
@@ -222,6 +220,7 @@ module Rails
|
|
222
220
|
rails.delete("encryption_key_file")
|
223
221
|
rails.delete("master_key")
|
224
222
|
rails.delete("credentials")
|
223
|
+
rails.delete("db:system:change")
|
225
224
|
|
226
225
|
hidden_namespaces.each { |n| groups.delete(n.to_s) }
|
227
226
|
|
@@ -258,7 +257,6 @@ module Rails
|
|
258
257
|
|
259
258
|
namespaces = Hash[subclasses.map { |klass| [klass.namespace, klass] }]
|
260
259
|
lookups.each do |namespace|
|
261
|
-
|
262
260
|
klass = namespaces[namespace]
|
263
261
|
return klass if klass
|
264
262
|
end
|
@@ -276,12 +274,13 @@ module Rails
|
|
276
274
|
klass.start(args, config)
|
277
275
|
else
|
278
276
|
options = sorted_groups.flat_map(&:last)
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
277
|
+
suggestion = Rails::Command::Spellchecker.suggest(namespace.to_s, from: options)
|
278
|
+
suggestion_msg = "Maybe you meant #{suggestion.inspect}?" if suggestion
|
279
|
+
|
280
|
+
puts <<~MSG
|
281
|
+
Could not find generator '#{namespace}'. #{suggestion_msg}
|
282
|
+
Run `rails generate --help` for more options.
|
283
|
+
MSG
|
285
284
|
end
|
286
285
|
end
|
287
286
|
|
@@ -1,12 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/core_ext/string/strip"
|
4
|
+
|
3
5
|
module Rails
|
4
6
|
module Generators
|
5
7
|
module Actions
|
6
8
|
def initialize(*) # :nodoc:
|
7
9
|
super
|
8
|
-
@
|
9
|
-
@after_bundle_callbacks = []
|
10
|
+
@indentation = 0
|
10
11
|
end
|
11
12
|
|
12
13
|
# Adds an entry into +Gemfile+ for the supplied gem.
|
@@ -34,13 +35,11 @@ module Rails
|
|
34
35
|
|
35
36
|
log :gemfile, message
|
36
37
|
|
37
|
-
options
|
38
|
-
parts << "#{option}: #{quote(value)}"
|
39
|
-
end
|
38
|
+
parts << quote(options) unless options.empty?
|
40
39
|
|
41
40
|
in_root do
|
42
41
|
str = "gem #{parts.join(", ")}"
|
43
|
-
str =
|
42
|
+
str = indentation + str
|
44
43
|
str = "\n" + str
|
45
44
|
append_file "Gemfile", str, verbose: false
|
46
45
|
end
|
@@ -52,17 +51,29 @@ module Rails
|
|
52
51
|
# gem "rspec-rails"
|
53
52
|
# end
|
54
53
|
def gem_group(*names, &block)
|
55
|
-
|
56
|
-
|
54
|
+
options = names.extract_options!
|
55
|
+
str = names.map(&:inspect)
|
56
|
+
str << quote(options) unless options.empty?
|
57
|
+
str = str.join(", ")
|
58
|
+
log :gemfile, "group #{str}"
|
57
59
|
|
58
60
|
in_root do
|
59
|
-
append_file "Gemfile", "\ngroup #{
|
61
|
+
append_file "Gemfile", "\ngroup #{str} do", force: true
|
62
|
+
with_indentation(&block)
|
63
|
+
append_file "Gemfile", "\nend\n", force: true
|
64
|
+
end
|
65
|
+
end
|
60
66
|
|
61
|
-
|
62
|
-
|
63
|
-
|
67
|
+
def github(repo, options = {}, &block)
|
68
|
+
str = [quote(repo)]
|
69
|
+
str << quote(options) unless options.empty?
|
70
|
+
str = str.join(", ")
|
71
|
+
log :github, "github #{str}"
|
64
72
|
|
65
|
-
|
73
|
+
in_root do
|
74
|
+
append_file "Gemfile", "\n#{indentation}github #{str} do", force: true
|
75
|
+
with_indentation(&block)
|
76
|
+
append_file "Gemfile", "\n#{indentation}end", force: true
|
66
77
|
end
|
67
78
|
end
|
68
79
|
|
@@ -81,9 +92,7 @@ module Rails
|
|
81
92
|
in_root do
|
82
93
|
if block
|
83
94
|
append_file "Gemfile", "\nsource #{quote(source)} do", force: true
|
84
|
-
|
85
|
-
instance_eval(&block)
|
86
|
-
@in_group = false
|
95
|
+
with_indentation(&block)
|
87
96
|
append_file "Gemfile", "\nend\n", force: true
|
88
97
|
else
|
89
98
|
prepend_file "Gemfile", "source #{quote(source)}\n", verbose: false
|
@@ -211,9 +220,11 @@ module Rails
|
|
211
220
|
# generate(:authenticated, "user session")
|
212
221
|
def generate(what, *args)
|
213
222
|
log :generate, what
|
223
|
+
|
224
|
+
options = args.extract_options!
|
214
225
|
argument = args.flat_map(&:to_s).join(" ")
|
215
226
|
|
216
|
-
|
227
|
+
execute_command :rails, "generate #{what} #{argument}", options
|
217
228
|
end
|
218
229
|
|
219
230
|
# Runs the supplied rake task (invoked with 'rake ...')
|
@@ -236,15 +247,6 @@ module Rails
|
|
236
247
|
execute_command :rails, command, options
|
237
248
|
end
|
238
249
|
|
239
|
-
# Just run the capify command in root
|
240
|
-
#
|
241
|
-
# capify!
|
242
|
-
def capify!
|
243
|
-
ActiveSupport::Deprecation.warn("`capify!` is deprecated and will be removed in the next version of Rails.")
|
244
|
-
log :capify, ""
|
245
|
-
in_root { run("#{extify(:capify)} .", verbose: false) }
|
246
|
-
end
|
247
|
-
|
248
250
|
# Make an entry in Rails routing file <tt>config/routes.rb</tt>
|
249
251
|
#
|
250
252
|
# route "root 'welcome#index'"
|
@@ -264,16 +266,6 @@ module Rails
|
|
264
266
|
log File.read(find_in_source_paths(path))
|
265
267
|
end
|
266
268
|
|
267
|
-
# Registers a callback to be executed after bundle and spring binstubs
|
268
|
-
# have run.
|
269
|
-
#
|
270
|
-
# after_bundle do
|
271
|
-
# git add: '.'
|
272
|
-
# end
|
273
|
-
def after_bundle(&block)
|
274
|
-
@after_bundle_callbacks << block
|
275
|
-
end
|
276
|
-
|
277
269
|
private
|
278
270
|
|
279
271
|
# Define log for backwards compatibility. If just one argument is sent,
|
@@ -296,7 +288,8 @@ module Rails
|
|
296
288
|
sudo = options[:sudo] && !Gem.win_platform? ? "sudo " : ""
|
297
289
|
config = { verbose: false }
|
298
290
|
|
299
|
-
config
|
291
|
+
config[:capture] = options[:capture] if options[:capture]
|
292
|
+
config[:abort_on_failure] = options[:abort_on_failure] if options[:abort_on_failure]
|
300
293
|
|
301
294
|
in_root { run("#{sudo}#{extify(executor)} #{command} RAILS_ENV=#{env}", config) }
|
302
295
|
end
|
@@ -313,6 +306,11 @@ module Rails
|
|
313
306
|
# Surround string with single quotes if there is no quotes.
|
314
307
|
# Otherwise fall back to double quotes
|
315
308
|
def quote(value) # :doc:
|
309
|
+
if value.respond_to? :each_pair
|
310
|
+
return value.map do |k, v|
|
311
|
+
"#{k}: #{quote(v)}"
|
312
|
+
end.join(", ")
|
313
|
+
end
|
316
314
|
return value.inspect unless value.is_a? String
|
317
315
|
|
318
316
|
if value.include?("'")
|
@@ -332,6 +330,19 @@ module Rails
|
|
332
330
|
"#{value.strip.indent(amount)}\n"
|
333
331
|
end
|
334
332
|
end
|
333
|
+
|
334
|
+
# Indent the +Gemfile+ to the depth of @indentation
|
335
|
+
def indentation # :doc:
|
336
|
+
" " * @indentation
|
337
|
+
end
|
338
|
+
|
339
|
+
# Manage +Gemfile+ indentation for a DSL action block
|
340
|
+
def with_indentation(&block) # :doc:
|
341
|
+
@indentation += 1
|
342
|
+
instance_eval(&block)
|
343
|
+
ensure
|
344
|
+
@indentation -= 1
|
345
|
+
end
|
335
346
|
end
|
336
347
|
end
|
337
348
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require "fileutils"
|
4
4
|
require "digest/md5"
|
5
|
-
require "active_support/core_ext/string/strip"
|
6
5
|
require "rails/version" unless defined?(Rails::VERSION)
|
7
6
|
require "open-uri"
|
8
7
|
require "uri"
|
@@ -12,9 +11,8 @@ require "active_support/core_ext/array/extract_options"
|
|
12
11
|
module Rails
|
13
12
|
module Generators
|
14
13
|
class AppBase < Base # :nodoc:
|
15
|
-
|
16
|
-
|
17
|
-
DATABASES.concat(JDBC_DATABASES)
|
14
|
+
include Database
|
15
|
+
include AppName
|
18
16
|
|
19
17
|
attr_accessor :rails_template
|
20
18
|
add_shebang_option!
|
@@ -32,9 +30,6 @@ module Rails
|
|
32
30
|
class_option :database, type: :string, aliases: "-d", default: "sqlite3",
|
33
31
|
desc: "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
34
32
|
|
35
|
-
class_option :skip_yarn, type: :boolean, default: false,
|
36
|
-
desc: "Don't use Yarn for managing JavaScript dependencies"
|
37
|
-
|
38
33
|
class_option :skip_gemfile, type: :boolean, default: false,
|
39
34
|
desc: "Don't create a Gemfile"
|
40
35
|
|
@@ -48,6 +43,12 @@ module Rails
|
|
48
43
|
default: false,
|
49
44
|
desc: "Skip Action Mailer files"
|
50
45
|
|
46
|
+
class_option :skip_action_mailbox, type: :boolean, default: false,
|
47
|
+
desc: "Skip Action Mailbox gem"
|
48
|
+
|
49
|
+
class_option :skip_action_text, type: :boolean, default: false,
|
50
|
+
desc: "Skip Action Text gem"
|
51
|
+
|
51
52
|
class_option :skip_active_record, type: :boolean, aliases: "-O", default: false,
|
52
53
|
desc: "Skip Active Record files"
|
53
54
|
|
@@ -69,10 +70,7 @@ module Rails
|
|
69
70
|
class_option :skip_listen, type: :boolean, default: false,
|
70
71
|
desc: "Don't generate configuration that depends on the listen gem"
|
71
72
|
|
72
|
-
class_option :
|
73
|
-
desc: "Don't use CoffeeScript"
|
74
|
-
|
75
|
-
class_option :skip_javascript, type: :boolean, aliases: "-J", default: false,
|
73
|
+
class_option :skip_javascript, type: :boolean, aliases: "-J", default: name == "plugin",
|
76
74
|
desc: "Skip JavaScript files"
|
77
75
|
|
78
76
|
class_option :skip_turbolinks, type: :boolean, default: false,
|
@@ -107,7 +105,6 @@ module Rails
|
|
107
105
|
@gem_filter = lambda { |gem| true }
|
108
106
|
@extra_entries = []
|
109
107
|
super
|
110
|
-
convert_database_option_for_jruby
|
111
108
|
end
|
112
109
|
|
113
110
|
private
|
@@ -207,7 +204,9 @@ module Rails
|
|
207
204
|
:skip_sprockets,
|
208
205
|
:skip_action_cable
|
209
206
|
),
|
210
|
-
skip_active_storage
|
207
|
+
skip_active_storage?,
|
208
|
+
skip_action_mailbox?,
|
209
|
+
skip_action_text?
|
211
210
|
].flatten.none?
|
212
211
|
end
|
213
212
|
|
@@ -236,6 +235,14 @@ module Rails
|
|
236
235
|
options[:skip_active_storage] || options[:skip_active_record]
|
237
236
|
end
|
238
237
|
|
238
|
+
def skip_action_mailbox? # :doc:
|
239
|
+
options[:skip_action_mailbox] || skip_active_storage?
|
240
|
+
end
|
241
|
+
|
242
|
+
def skip_action_text? # :doc:
|
243
|
+
options[:skip_action_text] || skip_active_storage?
|
244
|
+
end
|
245
|
+
|
239
246
|
class GemfileEntry < Struct.new(:name, :version, :comment, :options, :commented_out)
|
240
247
|
def initialize(name, version, comment, options = {}, commented_out = false)
|
241
248
|
super
|
@@ -275,7 +282,7 @@ module Rails
|
|
275
282
|
]
|
276
283
|
elsif options.edge?
|
277
284
|
[
|
278
|
-
GemfileEntry.github("rails", "rails/rails"
|
285
|
+
GemfileEntry.github("rails", "rails/rails")
|
279
286
|
]
|
280
287
|
else
|
281
288
|
[GemfileEntry.version("rails",
|
@@ -297,55 +304,20 @@ module Rails
|
|
297
304
|
end
|
298
305
|
end
|
299
306
|
|
300
|
-
def gem_for_database
|
301
|
-
# %w( mysql postgresql sqlite3 oracle frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql )
|
302
|
-
case options[:database]
|
303
|
-
when "mysql" then ["mysql2", [">= 0.4.4", "< 0.6.0"]]
|
304
|
-
when "postgresql" then ["pg", [">= 0.18", "< 2.0"]]
|
305
|
-
when "oracle" then ["activerecord-oracle_enhanced-adapter", nil]
|
306
|
-
when "frontbase" then ["ruby-frontbase", nil]
|
307
|
-
when "sqlserver" then ["activerecord-sqlserver-adapter", nil]
|
308
|
-
when "jdbcmysql" then ["activerecord-jdbcmysql-adapter", nil]
|
309
|
-
when "jdbcsqlite3" then ["activerecord-jdbcsqlite3-adapter", nil]
|
310
|
-
when "jdbcpostgresql" then ["activerecord-jdbcpostgresql-adapter", nil]
|
311
|
-
when "jdbc" then ["activerecord-jdbc-adapter", nil]
|
312
|
-
else [options[:database], nil]
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
def convert_database_option_for_jruby
|
317
|
-
if defined?(JRUBY_VERSION)
|
318
|
-
opt = options.dup
|
319
|
-
case opt[:database]
|
320
|
-
when "postgresql" then opt[:database] = "jdbcpostgresql"
|
321
|
-
when "mysql" then opt[:database] = "jdbcmysql"
|
322
|
-
when "sqlite3" then opt[:database] = "jdbcsqlite3"
|
323
|
-
end
|
324
|
-
self.options = opt.freeze
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
307
|
def assets_gemfile_entry
|
329
308
|
return [] if options[:skip_sprockets]
|
330
309
|
|
331
|
-
|
332
|
-
gems << GemfileEntry.version("sass-rails", "~> 5.0",
|
333
|
-
"Use SCSS for stylesheets")
|
334
|
-
|
335
|
-
if !options[:skip_javascript]
|
336
|
-
gems << GemfileEntry.version("uglifier",
|
337
|
-
">= 1.3.0",
|
338
|
-
"Use Uglifier as compressor for JavaScript assets")
|
339
|
-
end
|
340
|
-
|
341
|
-
gems
|
310
|
+
GemfileEntry.version("sass-rails", "~> 5.0", "Use SCSS for stylesheets")
|
342
311
|
end
|
343
312
|
|
344
313
|
def webpacker_gemfile_entry
|
345
|
-
return []
|
314
|
+
return [] if options[:skip_javascript]
|
346
315
|
|
347
|
-
|
348
|
-
|
316
|
+
if options.dev? || options.edge?
|
317
|
+
GemfileEntry.github "webpacker", "rails/webpacker", nil, "Use development version of Webpacker"
|
318
|
+
else
|
319
|
+
GemfileEntry.version "webpacker", ">= 4.0.0.rc.3", "Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker"
|
320
|
+
end
|
349
321
|
end
|
350
322
|
|
351
323
|
def jbuilder_gemfile_entry
|
@@ -353,34 +325,12 @@ module Rails
|
|
353
325
|
GemfileEntry.new "jbuilder", "~> 2.5", comment, {}, options[:api]
|
354
326
|
end
|
355
327
|
|
356
|
-
def coffee_gemfile_entry
|
357
|
-
GemfileEntry.version "coffee-rails", "~> 4.2", "Use CoffeeScript for .coffee assets and views"
|
358
|
-
end
|
359
|
-
|
360
328
|
def javascript_gemfile_entry
|
361
|
-
if options[:skip_javascript] || options[:
|
329
|
+
if options[:skip_javascript] || options[:skip_turbolinks]
|
362
330
|
[]
|
363
331
|
else
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
unless options[:skip_turbolinks]
|
368
|
-
gems << GemfileEntry.version("turbolinks", "~> 5",
|
369
|
-
"Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks")
|
370
|
-
end
|
371
|
-
|
372
|
-
gems
|
373
|
-
end
|
374
|
-
end
|
375
|
-
|
376
|
-
def javascript_runtime_gemfile_entry
|
377
|
-
comment = "See https://github.com/rails/execjs#readme for more supported runtimes"
|
378
|
-
if defined?(JRUBY_VERSION)
|
379
|
-
GemfileEntry.version "therubyrhino", nil, comment
|
380
|
-
elsif RUBY_PLATFORM =~ /mingw|mswin/
|
381
|
-
GemfileEntry.version "duktape", nil, comment
|
382
|
-
else
|
383
|
-
GemfileEntry.new "mini_racer", nil, comment, { platforms: :ruby }, true
|
332
|
+
[ GemfileEntry.version("turbolinks", "~> 5",
|
333
|
+
"Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks") ]
|
384
334
|
end
|
385
335
|
end
|
386
336
|
|
@@ -400,7 +350,7 @@ module Rails
|
|
400
350
|
gems
|
401
351
|
end
|
402
352
|
|
403
|
-
def bundle_command(command)
|
353
|
+
def bundle_command(command, env = {})
|
404
354
|
say_status :run, "bundle #{command}"
|
405
355
|
|
406
356
|
# We are going to shell out rather than invoking Bundler::CLI.new(command)
|
@@ -413,16 +363,16 @@ module Rails
|
|
413
363
|
|
414
364
|
require "bundler"
|
415
365
|
Bundler.with_original_env do
|
416
|
-
exec_bundle_command(_bundle_command, command)
|
366
|
+
exec_bundle_command(_bundle_command, command, env)
|
417
367
|
end
|
418
368
|
end
|
419
369
|
|
420
|
-
def exec_bundle_command(bundle_command, command)
|
370
|
+
def exec_bundle_command(bundle_command, command, env)
|
421
371
|
full_command = %Q["#{Gem.ruby}" "#{bundle_command}" #{command}]
|
422
372
|
if options[:quiet]
|
423
|
-
system(full_command, out: File::NULL)
|
373
|
+
system(env, full_command, out: File::NULL)
|
424
374
|
else
|
425
|
-
system(full_command)
|
375
|
+
system(env, full_command)
|
426
376
|
end
|
427
377
|
end
|
428
378
|
|
@@ -434,6 +384,10 @@ module Rails
|
|
434
384
|
!options[:skip_spring] && !options.dev? && Process.respond_to?(:fork) && !RUBY_PLATFORM.include?("cygwin")
|
435
385
|
end
|
436
386
|
|
387
|
+
def webpack_install?
|
388
|
+
!(options[:skip_javascript] || options[:skip_webpack_install])
|
389
|
+
end
|
390
|
+
|
437
391
|
def depends_on_system_test?
|
438
392
|
!(options[:skip_system_test] || options[:skip_test] || options[:api])
|
439
393
|
end
|
@@ -451,13 +405,19 @@ module Rails
|
|
451
405
|
end
|
452
406
|
|
453
407
|
def run_bundle
|
454
|
-
bundle_command("install") if bundle_install?
|
408
|
+
bundle_command("install", "BUNDLE_IGNORE_MESSAGES" => "1") if bundle_install?
|
455
409
|
end
|
456
410
|
|
457
411
|
def run_webpack
|
458
|
-
if
|
412
|
+
if webpack_install?
|
459
413
|
rails_command "webpacker:install"
|
460
|
-
rails_command "webpacker:install:#{webpack}"
|
414
|
+
rails_command "webpacker:install:#{options[:webpack]}" if options[:webpack] && options[:webpack] != "webpack"
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
418
|
+
def generate_bundler_binstub
|
419
|
+
if bundle_install?
|
420
|
+
bundle_command("binstubs bundler")
|
461
421
|
end
|
462
422
|
end
|
463
423
|
|