railties 5.2.8.1 → 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 +182 -223
- 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/configuration.rb +54 -12
- data/lib/rails/application/default_middleware_stack.rb +2 -0
- data/lib/rails/application.rb +21 -45
- data/lib/rails/backtrace_cleaner.rb +5 -17
- data/lib/rails/code_statistics.rb +3 -3
- 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/command.rb +11 -10
- 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/configuration.rb +3 -1
- data/lib/rails/engine.rb +3 -9
- data/lib/rails/gem_version.rb +4 -4
- 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/generators.rb +11 -12
- 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 +33 -27
- 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/command.rb
CHANGED
@@ -4,7 +4,6 @@ require "active_support"
|
|
4
4
|
require "active_support/dependencies/autoload"
|
5
5
|
require "active_support/core_ext/enumerable"
|
6
6
|
require "active_support/core_ext/object/blank"
|
7
|
-
require "active_support/core_ext/hash/transform_values"
|
8
7
|
|
9
8
|
require "thor"
|
10
9
|
|
@@ -12,6 +11,7 @@ module Rails
|
|
12
11
|
module Command
|
13
12
|
extend ActiveSupport::Autoload
|
14
13
|
|
14
|
+
autoload :Spellchecker
|
15
15
|
autoload :Behavior
|
16
16
|
autoload :Base
|
17
17
|
|
@@ -83,20 +83,21 @@ module Rails
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def print_commands # :nodoc:
|
86
|
-
|
86
|
+
commands.each { |command| puts(" #{command}") }
|
87
87
|
end
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
private
|
90
|
+
COMMANDS_IN_USAGE = %w(generate console server test test:system dbconsole new)
|
91
|
+
private_constant :COMMANDS_IN_USAGE
|
91
92
|
|
92
|
-
|
93
|
-
|
93
|
+
def commands
|
94
|
+
lookup!
|
94
95
|
|
95
|
-
|
96
|
-
|
97
|
-
|
96
|
+
visible_commands = (subclasses - hidden_commands).flat_map(&:printing_commands)
|
97
|
+
|
98
|
+
(visible_commands - COMMANDS_IN_USAGE).sort
|
99
|
+
end
|
98
100
|
|
99
|
-
private
|
100
101
|
def command_type # :doc:
|
101
102
|
@command_type ||= "command"
|
102
103
|
end
|
@@ -14,7 +14,7 @@ that just contains the secret_key_base used by MessageVerifiers/MessageEncryptor
|
|
14
14
|
signing and encrypting cookies.
|
15
15
|
|
16
16
|
For applications created prior to Rails 5.2, we'll automatically generate a new
|
17
|
-
credentials file in `config/credentials.yml.enc` the first time you run `
|
17
|
+
credentials file in `config/credentials.yml.enc` the first time you run `rails credentials:edit`.
|
18
18
|
If you didn't have a master key saved in `config/master.key`, that'll be created too.
|
19
19
|
|
20
20
|
Don't lose this master key! Put it in a password manager your team can access.
|
@@ -38,3 +38,21 @@ the encrypted credentials.
|
|
38
38
|
When the temporary file is next saved the contents are encrypted and written to
|
39
39
|
`config/credentials.yml.enc` while the file itself is destroyed to prevent credentials
|
40
40
|
from leaking.
|
41
|
+
|
42
|
+
=== Environment Specific Credentials
|
43
|
+
|
44
|
+
The `credentials` command supports passing an `--environment` option to create an
|
45
|
+
environment specific override. That override will takes precedence over the
|
46
|
+
global `config/credentials.yml.enc` file when running in that environment. So:
|
47
|
+
|
48
|
+
rails credentials:edit --environment development
|
49
|
+
|
50
|
+
will create `config/credentials/development.yml.enc` with the corresponding
|
51
|
+
encryption key in `config/credentials/development.key` if the credentials file
|
52
|
+
doesn't exist.
|
53
|
+
|
54
|
+
The encryption key can also be put in `ENV["RAILS_MASTER_KEY"]`, which takes
|
55
|
+
precedence over the file encryption key.
|
56
|
+
|
57
|
+
In addition to that, the default credentials lookup paths can be overriden through
|
58
|
+
`config.credentials.content_path` and `config.credentials.key_path`.
|
@@ -8,6 +8,9 @@ module Rails
|
|
8
8
|
class CredentialsCommand < Rails::Command::Base # :nodoc:
|
9
9
|
include Helpers::Editor
|
10
10
|
|
11
|
+
class_option :environment, aliases: "-e", type: :string,
|
12
|
+
desc: "Uses credentials from config/credentials/:environment.yml.enc encrypted by config/credentials/:environment.key key"
|
13
|
+
|
11
14
|
no_commands do
|
12
15
|
def help
|
13
16
|
say "Usage:\n #{self.class.banner}"
|
@@ -17,62 +20,78 @@ module Rails
|
|
17
20
|
end
|
18
21
|
|
19
22
|
def edit
|
20
|
-
|
23
|
+
require_application_and_environment!
|
21
24
|
|
22
25
|
ensure_editor_available(command: "bin/rails credentials:edit") || (return)
|
23
|
-
|
26
|
+
|
27
|
+
ensure_encryption_key_has_been_added if credentials.key.nil?
|
24
28
|
ensure_credentials_have_been_added
|
25
29
|
|
26
30
|
catch_editing_exceptions do
|
27
31
|
change_credentials_in_system_editor
|
28
32
|
end
|
29
33
|
|
30
|
-
say "
|
34
|
+
say "File encrypted and saved."
|
35
|
+
rescue ActiveSupport::MessageEncryptor::InvalidMessage
|
36
|
+
say "Couldn't decrypt #{content_path}. Perhaps you passed the wrong key?"
|
31
37
|
end
|
32
38
|
|
33
39
|
def show
|
34
|
-
|
40
|
+
require_application_and_environment!
|
35
41
|
|
36
|
-
say
|
42
|
+
say credentials.read.presence || missing_credentials_message
|
37
43
|
end
|
38
44
|
|
39
45
|
private
|
40
|
-
def
|
41
|
-
|
42
|
-
|
46
|
+
def credentials
|
47
|
+
Rails.application.encrypted(content_path, key_path: key_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def ensure_encryption_key_has_been_added
|
51
|
+
encryption_key_file_generator.add_key_file(key_path)
|
52
|
+
encryption_key_file_generator.ignore_key_file(key_path)
|
43
53
|
end
|
44
54
|
|
45
55
|
def ensure_credentials_have_been_added
|
46
|
-
|
56
|
+
encrypted_file_generator.add_encrypted_file_silently(content_path, key_path)
|
47
57
|
end
|
48
58
|
|
49
59
|
def change_credentials_in_system_editor
|
50
|
-
|
60
|
+
credentials.change do |tmp_path|
|
51
61
|
system("#{ENV["EDITOR"]} #{tmp_path}")
|
52
62
|
end
|
53
63
|
end
|
54
64
|
|
65
|
+
def missing_credentials_message
|
66
|
+
if credentials.key.nil?
|
67
|
+
"Missing '#{key_path}' to decrypt credentials. See `rails credentials:help`"
|
68
|
+
else
|
69
|
+
"File '#{content_path}' does not exist. Use `rails credentials:edit` to change that."
|
70
|
+
end
|
71
|
+
end
|
55
72
|
|
56
|
-
def master_key_generator
|
57
|
-
require "rails/generators"
|
58
|
-
require "rails/generators/rails/master_key/master_key_generator"
|
59
73
|
|
60
|
-
|
74
|
+
def content_path
|
75
|
+
options[:environment] ? "config/credentials/#{options[:environment]}.yml.enc" : "config/credentials.yml.enc"
|
61
76
|
end
|
62
77
|
|
63
|
-
def
|
78
|
+
def key_path
|
79
|
+
options[:environment] ? "config/credentials/#{options[:environment]}.key" : "config/master.key"
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def encryption_key_file_generator
|
64
84
|
require "rails/generators"
|
65
|
-
require "rails/generators/rails/
|
85
|
+
require "rails/generators/rails/encryption_key_file/encryption_key_file_generator"
|
66
86
|
|
67
|
-
Rails::Generators::
|
87
|
+
Rails::Generators::EncryptionKeyFileGenerator.new
|
68
88
|
end
|
69
89
|
|
70
|
-
def
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
90
|
+
def encrypted_file_generator
|
91
|
+
require "rails/generators"
|
92
|
+
require "rails/generators/rails/encrypted_file/encrypted_file_generator"
|
93
|
+
|
94
|
+
Rails::Generators::EncryptedFileGenerator.new
|
76
95
|
end
|
77
96
|
end
|
78
97
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
require "rails/generators/rails/db/system/change/change_generator"
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
module Command
|
8
|
+
module Db
|
9
|
+
module System
|
10
|
+
class ChangeCommand < Base # :nodoc:
|
11
|
+
class_option :to, desc: "The database system to switch to."
|
12
|
+
|
13
|
+
def perform
|
14
|
+
Rails::Generators::Db::System::ChangeGenerator.start
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -75,7 +75,7 @@ module Rails
|
|
75
75
|
args += ["-P", "#{config['password']}"] if config["password"]
|
76
76
|
|
77
77
|
if config["host"]
|
78
|
-
host_arg = "#{config['host']}"
|
78
|
+
host_arg = +"#{config['host']}"
|
79
79
|
host_arg << ":#{config['port']}" if config["port"]
|
80
80
|
args += ["-S", host_arg]
|
81
81
|
end
|
@@ -97,7 +97,7 @@ module Rails
|
|
97
97
|
elsif configurations[environment].blank? && configurations[connection].blank?
|
98
98
|
raise ActiveRecord::AdapterNotSpecified, "'#{environment}' database is not configured. Available configuration: #{configurations.inspect}"
|
99
99
|
else
|
100
|
-
configurations[
|
100
|
+
configurations[connection] || configurations[environment].presence
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/dev_caching"
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
module Command
|
7
|
+
class DevCommand < Base # :nodoc:
|
8
|
+
def help
|
9
|
+
say "rails dev:cache # Toggle development mode caching on/off."
|
10
|
+
end
|
11
|
+
|
12
|
+
def cache
|
13
|
+
Rails::DevCaching.enable_by_file
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -16,7 +16,6 @@ module Rails
|
|
16
16
|
def help
|
17
17
|
say "Usage:\n #{self.class.banner}"
|
18
18
|
say ""
|
19
|
-
say self.class.desc
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
@@ -77,9 +76,9 @@ module Rails
|
|
77
76
|
|
78
77
|
def missing_encrypted_message(key:, key_path:, file_path:)
|
79
78
|
if key.nil?
|
80
|
-
"Missing '#{key_path}' to decrypt data. See
|
79
|
+
"Missing '#{key_path}' to decrypt data. See `rails encrypted:help`"
|
81
80
|
else
|
82
|
-
"File '#{file_path}' does not exist. Use
|
81
|
+
"File '#{file_path}' does not exist. Use `rails encrypted:edit #{file_path}` to change that."
|
83
82
|
end
|
84
83
|
end
|
85
84
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Command
|
5
|
+
class InitializersCommand < Base # :nodoc:
|
6
|
+
desc "initializers", "Print out all defined initializers in the order they are invoked by Rails."
|
7
|
+
def perform
|
8
|
+
require_application_and_environment!
|
9
|
+
|
10
|
+
Rails.application.initializers.tsort_each do |initializer|
|
11
|
+
say "#{initializer.context_class}.#{initializer.name}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -10,8 +10,8 @@ module Rails
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def perform(*)
|
13
|
-
|
14
|
-
|
13
|
+
say "Can't initialize a new Rails application within the directory of another, please change to a non-Rails directory first.\n"
|
14
|
+
say "Type 'rails' for help."
|
15
15
|
exit 1
|
16
16
|
end
|
17
17
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/source_annotation_extractor"
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
module Command
|
7
|
+
class NotesCommand < Base # :nodoc:
|
8
|
+
class_option :annotations, aliases: "-a", desc: "Filter by specific annotations, e.g. Foobar TODO", type: :array, default: %w(OPTIMIZE FIXME TODO)
|
9
|
+
|
10
|
+
def perform(*)
|
11
|
+
require_application_and_environment!
|
12
|
+
|
13
|
+
deprecation_warning
|
14
|
+
display_annotations
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def display_annotations
|
19
|
+
annotations = options[:annotations]
|
20
|
+
tag = (annotations.length > 1)
|
21
|
+
|
22
|
+
Rails::SourceAnnotationExtractor.enumerate annotations.join("|"), tag: tag, dirs: directories
|
23
|
+
end
|
24
|
+
|
25
|
+
def directories
|
26
|
+
Rails::SourceAnnotationExtractor::Annotation.directories + source_annotation_directories
|
27
|
+
end
|
28
|
+
|
29
|
+
def deprecation_warning
|
30
|
+
return if source_annotation_directories.empty?
|
31
|
+
ActiveSupport::Deprecation.warn("`SOURCE_ANNOTATION_DIRECTORIES` is deprecated and will be removed in Rails 6.1. You can add default directories by using config.annotations.register_directories instead.")
|
32
|
+
end
|
33
|
+
|
34
|
+
def source_annotation_directories
|
35
|
+
ENV["SOURCE_ANNOTATION_DIRECTORIES"].to_s.split(",")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -26,7 +26,7 @@ module Rails
|
|
26
26
|
|
27
27
|
if File.exist?(railsrc)
|
28
28
|
extra_args = File.read(railsrc).split(/\n+/).flat_map(&:split)
|
29
|
-
|
29
|
+
say "Using #{extra_args.join(" ")} from #{railsrc}"
|
30
30
|
plugin_args.insert(1, *extra_args)
|
31
31
|
end
|
32
32
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/command"
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
module Command
|
7
|
+
class RoutesCommand < Base # :nodoc:
|
8
|
+
class_option :controller, aliases: "-c", desc: "Filter by a specific controller, e.g. PostsController or Admin::PostsController."
|
9
|
+
class_option :grep, aliases: "-g", desc: "Grep routes by a specific pattern."
|
10
|
+
class_option :expanded, type: :boolean, aliases: "-E", desc: "Print routes expanded vertically with parts explained."
|
11
|
+
|
12
|
+
def perform(*)
|
13
|
+
require_application_and_environment!
|
14
|
+
require "action_dispatch/routing/inspector"
|
15
|
+
|
16
|
+
say inspector.format(formatter, routes_filter)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def inspector
|
21
|
+
ActionDispatch::Routing::RoutesInspector.new(Rails.application.routes.routes)
|
22
|
+
end
|
23
|
+
|
24
|
+
def formatter
|
25
|
+
if options.key?("expanded")
|
26
|
+
ActionDispatch::Routing::ConsoleFormatter::Expanded.new
|
27
|
+
else
|
28
|
+
ActionDispatch::Routing::ConsoleFormatter::Sheet.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def routes_filter
|
33
|
+
options.symbolize_keys.slice(:controller, :grep)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -10,7 +10,7 @@ module Rails
|
|
10
10
|
no_commands do
|
11
11
|
def help
|
12
12
|
super
|
13
|
-
|
13
|
+
say self.class.desc
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -39,11 +39,11 @@ module Rails
|
|
39
39
|
else
|
40
40
|
begin
|
41
41
|
eval(code_or_file, TOPLEVEL_BINDING, __FILE__, __LINE__)
|
42
|
-
rescue SyntaxError, NameError =>
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
rescue SyntaxError, NameError => e
|
43
|
+
error "Please specify a valid ruby command or the path of a script to run."
|
44
|
+
error "Run '#{self.class.executable} -h' for help."
|
45
|
+
error ""
|
46
|
+
error e
|
47
47
|
exit 1
|
48
48
|
end
|
49
49
|
end
|
@@ -7,7 +7,7 @@ with the code.
|
|
7
7
|
|
8
8
|
=== Setup
|
9
9
|
|
10
|
-
Run `
|
10
|
+
Run `rails secrets:setup` to opt in and generate the `config/secrets.yml.key`
|
11
11
|
and `config/secrets.yml.enc` files.
|
12
12
|
|
13
13
|
The latter contains all the keys to be encrypted while the former holds the
|
@@ -45,12 +45,12 @@ the key. Add this:
|
|
45
45
|
|
46
46
|
config.read_encrypted_secrets = true
|
47
47
|
|
48
|
-
to the environment you'd like to read encrypted secrets. `
|
48
|
+
to the environment you'd like to read encrypted secrets. `rails secrets:setup`
|
49
49
|
inserts this into the production environment by default.
|
50
50
|
|
51
51
|
=== Editing Secrets
|
52
52
|
|
53
|
-
After `
|
53
|
+
After `rails secrets:setup`, run `rails secrets:edit`.
|
54
54
|
|
55
55
|
That command opens a temporary file in `$EDITOR` with the decrypted contents of
|
56
56
|
`config/secrets.yml.enc` to edit the encrypted secrets.
|
@@ -22,7 +22,7 @@ module Rails
|
|
22
22
|
if ENV["EDITOR"].to_s.empty?
|
23
23
|
say "No $EDITOR to open decrypted secrets in. Assign one like this:"
|
24
24
|
say ""
|
25
|
-
say %(EDITOR="mate --wait"
|
25
|
+
say %(EDITOR="mate --wait" rails secrets:edit)
|
26
26
|
say ""
|
27
27
|
say "For editors that fork and exit immediately, it's important to pass a wait flag,"
|
28
28
|
say "otherwise the secrets will be saved immediately with no chance to edit."
|
@@ -42,7 +42,7 @@ module Rails
|
|
42
42
|
rescue Rails::Secrets::MissingKeyError => error
|
43
43
|
say error.message
|
44
44
|
rescue Errno::ENOENT => error
|
45
|
-
if
|
45
|
+
if /secrets\.yml\.enc/.match?(error.message)
|
46
46
|
deprecate_in_favor_of_credentials_and_exit
|
47
47
|
else
|
48
48
|
raise
|
@@ -56,7 +56,7 @@ module Rails
|
|
56
56
|
private
|
57
57
|
def deprecate_in_favor_of_credentials_and_exit
|
58
58
|
say "Encrypted secrets is deprecated in favor of credentials. Run:"
|
59
|
-
say "
|
59
|
+
say "rails credentials:help"
|
60
60
|
|
61
61
|
exit 1
|
62
62
|
end
|