railties 7.1.5.1 → 7.2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +197 -767
- data/lib/minitest/rails_plugin.rb +5 -2
- data/lib/rails/all.rb +1 -3
- data/lib/rails/api/task.rb +6 -4
- data/lib/rails/application/bootstrap.rb +5 -6
- data/lib/rails/application/configuration.rb +68 -33
- data/lib/rails/application/dummy_config.rb +2 -2
- data/lib/rails/application/finisher.rb +7 -0
- data/lib/rails/application.rb +22 -89
- data/lib/rails/backtrace_cleaner.rb +14 -1
- data/lib/rails/cli.rb +0 -1
- data/lib/rails/command.rb +1 -1
- data/lib/rails/commands/app/update_command.rb +102 -0
- data/lib/rails/commands/boot/boot_command.rb +14 -0
- data/lib/rails/commands/console/console_command.rb +2 -21
- data/lib/rails/commands/console/irb_console.rb +146 -0
- data/lib/rails/commands/credentials/credentials_command.rb +2 -2
- data/lib/rails/commands/dbconsole/dbconsole_command.rb +21 -30
- data/lib/rails/commands/devcontainer/devcontainer_command.rb +39 -0
- data/lib/rails/commands/rake/rake_command.rb +1 -1
- data/lib/rails/commands/runner/runner_command.rb +14 -3
- data/lib/rails/commands/server/server_command.rb +5 -3
- data/lib/rails/commands/test/test_command.rb +2 -0
- data/lib/rails/configuration.rb +10 -1
- data/lib/rails/console/app.rb +5 -32
- data/lib/rails/console/helpers.rb +5 -16
- data/lib/rails/console/methods.rb +23 -0
- data/lib/rails/engine.rb +7 -7
- data/lib/rails/gem_version.rb +2 -2
- data/lib/rails/generators/app_base.rb +70 -49
- data/lib/rails/generators/base.rb +5 -1
- data/lib/rails/generators/database.rb +227 -69
- data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +2 -0
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +2 -0
- data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +2 -0
- data/lib/rails/generators/generated_attribute.rb +26 -1
- data/lib/rails/generators/rails/app/app_generator.rb +56 -28
- data/lib/rails/generators/rails/app/templates/Dockerfile.tt +22 -15
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +17 -17
- data/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +4 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +8 -1
- data/lib/rails/generators/rails/app/templates/app/views/pwa/manifest.json.erb.tt +22 -0
- data/lib/rails/generators/rails/app/templates/app/views/pwa/service-worker.js +26 -0
- data/lib/rails/generators/rails/app/templates/bin/brakeman.tt +6 -0
- data/lib/rails/generators/rails/app/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +6 -2
- data/lib/rails/generators/rails/app/templates/config/application.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +7 -0
- data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +8 -1
- data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +14 -7
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +8 -0
- data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +8 -5
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_2.rb.tt +70 -0
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +25 -35
- data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +6 -0
- data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +5 -0
- data/lib/rails/generators/rails/app/templates/dockerignore.tt +13 -0
- data/lib/rails/generators/rails/app/templates/github/ci.yml.tt +138 -0
- data/lib/rails/generators/rails/app/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/app/templates/gitignore.tt +3 -3
- data/lib/rails/generators/rails/app/templates/public/406-unsupported-browser.html +66 -0
- data/lib/rails/generators/rails/app/templates/public/icon.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/icon.svg +3 -0
- data/lib/rails/generators/rails/app/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/app/templates/test/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/rails/controller/controller_generator.rb +1 -1
- data/lib/rails/generators/rails/db/system/change/change_generator.rb +131 -20
- data/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb +166 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/Dockerfile.tt +3 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/compose.yaml.tt +47 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/devcontainer.json.tt +37 -0
- data/lib/rails/generators/rails/migration/migration_generator.rb +4 -0
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +40 -7
- data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +2 -2
- data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +5 -1
- data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +2 -0
- data/lib/rails/generators/rails/plugin/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/github/ci.yml.tt +103 -0
- data/lib/rails/generators/rails/plugin/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/plugin/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/plugin/templates/test/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +2 -2
- data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb.tt +6 -4
- data/lib/rails/generators/test_unit/mailer/templates/preview.rb.tt +3 -2
- data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +15 -1
- data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +2 -2
- data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +2 -2
- data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +2 -0
- data/lib/rails/generators/test_unit/system/templates/application_system_test_case.rb.tt +1 -1
- data/lib/rails/generators/testing/assertions.rb +20 -0
- data/lib/rails/generators/testing/behavior.rb +7 -6
- data/lib/rails/generators.rb +6 -2
- data/lib/rails/health_controller.rb +1 -1
- data/lib/rails/info.rb +2 -2
- data/lib/rails/mailers_controller.rb +14 -1
- data/lib/rails/paths.rb +2 -2
- data/lib/rails/pwa_controller.rb +15 -0
- data/lib/rails/rack/logger.rb +15 -7
- data/lib/rails/railtie/configurable.rb +2 -2
- data/lib/rails/railtie.rb +2 -3
- data/lib/rails/tasks/framework.rake +0 -26
- data/lib/rails/tasks/tmp.rake +1 -1
- data/lib/rails/templates/layouts/application.html.erb +1 -1
- data/lib/rails/templates/rails/mailers/email.html.erb +12 -8
- data/lib/rails/templates/rails/welcome/index.html.erb +4 -2
- data/lib/rails/test_help.rb +2 -4
- data/lib/rails/test_unit/reporter.rb +8 -2
- data/lib/rails/test_unit/runner.rb +26 -2
- data/lib/rails/test_unit/test_parser.rb +45 -0
- data/lib/rails.rb +6 -3
- metadata +40 -30
- data/lib/rails/app_updater.rb +0 -52
- data/lib/rails/commands/secrets/USAGE +0 -61
- data/lib/rails/commands/secrets/secrets_command.rb +0 -47
- data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +0 -68
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +0 -54
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +0 -70
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +0 -24
- data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +0 -62
- data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +0 -53
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +0 -280
- data/lib/rails/generators/rails/app/templates/public/apple-touch-icon-precomposed.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/apple-touch-icon.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/favicon.ico +0 -0
- data/lib/rails/ruby_version_check.rb +0 -17
- data/lib/rails/secrets.rb +0 -110
@@ -4,14 +4,6 @@ require "rails/command/environment_argument"
|
|
4
4
|
|
5
5
|
module Rails
|
6
6
|
class Console
|
7
|
-
module BacktraceCleaner
|
8
|
-
def filter_backtrace(bt)
|
9
|
-
if result = super
|
10
|
-
Rails.backtrace_cleaner.filter([result]).first
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
7
|
def self.start(*args)
|
16
8
|
new(*args).start
|
17
9
|
end
|
@@ -32,16 +24,8 @@ module Rails
|
|
32
24
|
app.load_console
|
33
25
|
|
34
26
|
@console = app.config.console || begin
|
35
|
-
require "
|
36
|
-
|
37
|
-
|
38
|
-
IRB::WorkSpace.prepend(BacktraceCleaner)
|
39
|
-
|
40
|
-
if !Rails.env.local?
|
41
|
-
ENV["IRB_USE_AUTOCOMPLETE"] ||= "false"
|
42
|
-
end
|
43
|
-
|
44
|
-
IRB
|
27
|
+
require "rails/commands/console/irb_console"
|
28
|
+
IRBConsole.new(app)
|
45
29
|
end
|
46
30
|
end
|
47
31
|
|
@@ -72,9 +56,6 @@ module Rails
|
|
72
56
|
puts "Loading #{Rails.env} environment (Rails #{Rails.version})"
|
73
57
|
end
|
74
58
|
|
75
|
-
if defined?(console::ExtendCommandBundle)
|
76
|
-
console::ExtendCommandBundle.include(Rails::ConsoleMethods)
|
77
|
-
end
|
78
59
|
console.start
|
79
60
|
end
|
80
61
|
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "irb/helper_method"
|
4
|
+
require "irb/command"
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
class Console
|
8
|
+
class RailsHelperBase < IRB::HelperMethod::Base
|
9
|
+
include ConsoleMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
class ControllerHelper < RailsHelperBase
|
13
|
+
description "Gets helper methods available to ApplicationController."
|
14
|
+
|
15
|
+
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
16
|
+
def execute
|
17
|
+
ApplicationController.helpers
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class ControllerInstance < RailsHelperBase
|
22
|
+
description "Gets a new instance of ApplicationController."
|
23
|
+
|
24
|
+
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
25
|
+
def execute
|
26
|
+
@controller ||= ApplicationController.new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class NewSession < RailsHelperBase
|
31
|
+
description "[Deprecated] Please use `app(true)` instead."
|
32
|
+
|
33
|
+
def execute(*)
|
34
|
+
app = Rails.application
|
35
|
+
session = ActionDispatch::Integration::Session.new(app)
|
36
|
+
|
37
|
+
# This makes app.url_for and app.foo_path available in the console
|
38
|
+
session.extend(app.routes.url_helpers)
|
39
|
+
session.extend(app.routes.mounted_helpers)
|
40
|
+
|
41
|
+
session
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class AppInstance < NewSession
|
46
|
+
description "Creates a new ActionDispatch::Integration::Session and memoizes it. Use `app(true)` to create a new instance."
|
47
|
+
|
48
|
+
def execute(create = false)
|
49
|
+
@app_integration_instance = nil if create
|
50
|
+
@app_integration_instance ||= super
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class ReloadHelper < RailsHelperBase
|
55
|
+
description "Reloads the Rails application."
|
56
|
+
|
57
|
+
def execute
|
58
|
+
puts "Reloading..."
|
59
|
+
Rails.application.reloader.reload!
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class ReloadCommand < IRB::Command::Base
|
64
|
+
include ConsoleMethods
|
65
|
+
|
66
|
+
category "Rails console"
|
67
|
+
description "Reloads the Rails application."
|
68
|
+
|
69
|
+
def execute(*)
|
70
|
+
puts "Reloading..."
|
71
|
+
Rails.application.reloader.reload!
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
IRB::HelperMethod.register(:helper, ControllerHelper)
|
76
|
+
IRB::HelperMethod.register(:controller, ControllerInstance)
|
77
|
+
IRB::HelperMethod.register(:new_session, NewSession)
|
78
|
+
IRB::HelperMethod.register(:app, AppInstance)
|
79
|
+
IRB::HelperMethod.register(:reload!, ReloadHelper)
|
80
|
+
IRB::Command.register(:reload!, ReloadCommand)
|
81
|
+
|
82
|
+
class IRBConsole
|
83
|
+
def initialize(app)
|
84
|
+
@app = app
|
85
|
+
|
86
|
+
require "irb"
|
87
|
+
require "irb/completion"
|
88
|
+
end
|
89
|
+
|
90
|
+
def name
|
91
|
+
"IRB"
|
92
|
+
end
|
93
|
+
|
94
|
+
def start
|
95
|
+
IRB.setup(nil)
|
96
|
+
|
97
|
+
if !Rails.env.local? && !ENV.key?("IRB_USE_AUTOCOMPLETE")
|
98
|
+
IRB.conf[:USE_AUTOCOMPLETE] = false
|
99
|
+
end
|
100
|
+
|
101
|
+
env = colorized_env
|
102
|
+
prompt_prefix = "%N(#{env})"
|
103
|
+
IRB.conf[:IRB_NAME] = @app.name
|
104
|
+
|
105
|
+
IRB.conf[:PROMPT][:RAILS_PROMPT] = {
|
106
|
+
PROMPT_I: "#{prompt_prefix}> ",
|
107
|
+
PROMPT_S: "#{prompt_prefix}%l ",
|
108
|
+
PROMPT_C: "#{prompt_prefix}* ",
|
109
|
+
RETURN: "=> %s\n"
|
110
|
+
}
|
111
|
+
|
112
|
+
if current_filter = IRB.conf[:BACKTRACE_FILTER]
|
113
|
+
IRB.conf[:BACKTRACE_FILTER] = -> (backtrace) do
|
114
|
+
backtrace = current_filter.call(backtrace)
|
115
|
+
Rails.backtrace_cleaner.filter(backtrace)
|
116
|
+
end
|
117
|
+
else
|
118
|
+
IRB.conf[:BACKTRACE_FILTER] = -> (backtrace) do
|
119
|
+
Rails.backtrace_cleaner.filter(backtrace)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
# Because some users/libs use Rails::ConsoleMethods to extend Rails console,
|
124
|
+
# we still include it for backward compatibility.
|
125
|
+
IRB::ExtendCommandBundle.include ConsoleMethods
|
126
|
+
|
127
|
+
# Respect user's choice of prompt mode.
|
128
|
+
IRB.conf[:PROMPT_MODE] = :RAILS_PROMPT if IRB.conf[:PROMPT_MODE] == :DEFAULT
|
129
|
+
IRB::Irb.new.run(IRB.conf)
|
130
|
+
end
|
131
|
+
|
132
|
+
def colorized_env
|
133
|
+
case Rails.env
|
134
|
+
when "development"
|
135
|
+
IRB::Color.colorize("dev", [:BLUE])
|
136
|
+
when "test"
|
137
|
+
IRB::Color.colorize("test", [:BLUE])
|
138
|
+
when "production"
|
139
|
+
IRB::Color.colorize("prod", [:RED])
|
140
|
+
else
|
141
|
+
Rails.env
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -20,8 +20,8 @@ module Rails
|
|
20
20
|
load_generators
|
21
21
|
|
22
22
|
if environment_specified?
|
23
|
-
@content_path = "config/credentials/#{environment}.yml.enc" unless config.
|
24
|
-
@key_path = "config/credentials/#{environment}.key" unless config.
|
23
|
+
@content_path = "config/credentials/#{environment}.yml.enc" unless config.overridden?(:content_path)
|
24
|
+
@key_path = "config/credentials/#{environment}.key" unless config.overridden?(:key_path)
|
25
25
|
end
|
26
26
|
|
27
27
|
ensure_encryption_key_has_been_added
|
@@ -16,28 +16,29 @@ module Rails
|
|
16
16
|
|
17
17
|
def start
|
18
18
|
adapter_class.dbconsole(db_config, @options)
|
19
|
-
rescue NotImplementedError
|
20
|
-
abort
|
19
|
+
rescue NotImplementedError, ActiveRecord::AdapterNotFound, LoadError => error
|
20
|
+
abort error.message
|
21
21
|
end
|
22
22
|
|
23
23
|
def db_config
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
24
|
+
@db_config ||= begin
|
25
|
+
# If the user provided a database, use that. Otherwise find
|
26
|
+
# the first config in the database.yml
|
27
|
+
config = if database
|
28
|
+
@db_config = configurations.configs_for(env_name: environment, name: database, include_hidden: true)
|
29
|
+
else
|
30
|
+
@db_config = configurations.find_db_config(environment)
|
31
|
+
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
unless config
|
34
|
+
missing_db = database ? "'#{database}' database is not" : "No databases are"
|
35
|
+
raise ActiveRecord::AdapterNotSpecified,
|
36
|
+
"#{missing_db} configured for '#{environment}'. Available configuration: #{configurations.inspect}"
|
37
|
+
end
|
39
38
|
|
40
|
-
|
39
|
+
config.validate!
|
40
|
+
config
|
41
|
+
end
|
41
42
|
end
|
42
43
|
|
43
44
|
def database
|
@@ -50,11 +51,9 @@ module Rails
|
|
50
51
|
|
51
52
|
private
|
52
53
|
def adapter_class
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
ActiveRecord::ConnectionAdapters::AbstractAdapter
|
57
|
-
end
|
54
|
+
ActiveRecord::ConnectionAdapters.resolve(db_config.adapter)
|
55
|
+
rescue LoadError
|
56
|
+
ActiveRecord::ConnectionAdapters::AbstractAdapter
|
58
57
|
end
|
59
58
|
|
60
59
|
def configurations # :doc:
|
@@ -62,14 +61,6 @@ module Rails
|
|
62
61
|
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
|
63
62
|
ActiveRecord::Base.configurations
|
64
63
|
end
|
65
|
-
|
66
|
-
def find_cmd_and_exec(commands, *args) # :doc:
|
67
|
-
Rails.deprecator.warn(<<~MSG.squish)
|
68
|
-
Rails::DBConsole#find_cmd_and_exec is deprecated and will be removed in Rails 7.2.
|
69
|
-
Please use find_cmd_and_exec on the connection adapter class instead.
|
70
|
-
MSG
|
71
|
-
ActiveRecord::Base.connection.find_cmd_and_exec(commands, *args)
|
72
|
-
end
|
73
64
|
end
|
74
65
|
|
75
66
|
module Command
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
require "rails/generators/rails/devcontainer/devcontainer_generator"
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
module Command
|
8
|
+
class DevcontainerCommand < Base # :nodoc:
|
9
|
+
desc "devcontainer", "Generate a Dev Container setup based on current application configuration"
|
10
|
+
def perform(*)
|
11
|
+
boot_application!
|
12
|
+
|
13
|
+
say "Generating Dev Container with the following options:"
|
14
|
+
devcontainer_options.each do |option, value|
|
15
|
+
say "#{option}: #{value}"
|
16
|
+
end
|
17
|
+
|
18
|
+
Rails::Generators::DevcontainerGenerator.new([], devcontainer_options).invoke_all
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def devcontainer_options
|
23
|
+
@devcontainer_options ||= {
|
24
|
+
app_name: Rails.application.railtie_name.chomp("_application"),
|
25
|
+
database: !!defined?(ActiveRecord) && database,
|
26
|
+
active_storage: !!defined?(ActiveStorage),
|
27
|
+
redis: !!(defined?(ActionCable) || defined?(ActiveJob)),
|
28
|
+
system_test: File.exist?("test/application_system_test_case.rb"),
|
29
|
+
node: File.exist?(".node-version"),
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def database
|
34
|
+
adapter = ActiveRecord::Base.connection_db_config.adapter
|
35
|
+
adapter == "mysql2" ? "mysql" : adapter
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -18,7 +18,7 @@ module Rails
|
|
18
18
|
|
19
19
|
def perform(task, args, config)
|
20
20
|
with_rake(task, *args) do |rake|
|
21
|
-
if unrecognized_task = rake.top_level_tasks.find { |task| !rake.lookup(task[/[^\[]+/]) }
|
21
|
+
if unrecognized_task = (rake.top_level_tasks - ["default"]).find { |task| !rake.lookup(task[/[^\[]+/]) }
|
22
22
|
@rake_tasks = rake.tasks
|
23
23
|
raise UnrecognizedCommandError.new(unrecognized_task)
|
24
24
|
end
|
@@ -7,6 +7,8 @@ module Rails
|
|
7
7
|
class RunnerCommand < Base # :nodoc:
|
8
8
|
include EnvironmentArgument
|
9
9
|
|
10
|
+
class_option :skip_executor, type: :boolean, aliases: "-w", desc: "Don't wrap with Rails Executor", default: false
|
11
|
+
|
10
12
|
no_commands do
|
11
13
|
def help(command_name = nil, *)
|
12
14
|
super
|
@@ -30,19 +32,20 @@ module Rails
|
|
30
32
|
|
31
33
|
ARGV.replace(command_argv)
|
32
34
|
|
35
|
+
wrap_with_executor = !options[:skip_executor]
|
33
36
|
if code_or_file == "-"
|
34
|
-
|
37
|
+
conditional_executor(wrap_with_executor, source: "application.runner.railties") do
|
35
38
|
eval($stdin.read, TOPLEVEL_BINDING, "stdin")
|
36
39
|
end
|
37
40
|
elsif File.exist?(code_or_file)
|
38
41
|
expanded_file_path = File.expand_path code_or_file
|
39
42
|
$0 = expanded_file_path
|
40
|
-
|
43
|
+
conditional_executor(wrap_with_executor, source: "application.runner.railties") do
|
41
44
|
Kernel.load expanded_file_path
|
42
45
|
end
|
43
46
|
else
|
44
47
|
begin
|
45
|
-
|
48
|
+
conditional_executor(wrap_with_executor, source: "application.runner.railties") do
|
46
49
|
eval(code_or_file, TOPLEVEL_BINDING, __FILE__, __LINE__)
|
47
50
|
end
|
48
51
|
rescue SyntaxError, NameError => e
|
@@ -62,6 +65,14 @@ module Rails
|
|
62
65
|
end
|
63
66
|
|
64
67
|
private
|
68
|
+
def conditional_executor(enabled, **args, &block)
|
69
|
+
if enabled
|
70
|
+
Rails.application.executor.wrap(**args, &block)
|
71
|
+
else
|
72
|
+
yield
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
65
76
|
def looks_like_a_file_path?(code_or_file)
|
66
77
|
code_or_file.ends_with?(".rb")
|
67
78
|
end
|
@@ -114,7 +114,7 @@ module Rails
|
|
114
114
|
class_option :using, aliases: "-u", type: :string,
|
115
115
|
desc: "Specify the Rack server used to run the application (thin/puma/webrick).", banner: :name
|
116
116
|
class_option :pid, aliases: "-P", type: :string,
|
117
|
-
desc: "Specify the PID file
|
117
|
+
desc: "Specify the PID file. Defaults to #{DEFAULT_PIDFILE} in development."
|
118
118
|
class_option :dev_caching, aliases: "-C", type: :boolean, default: nil,
|
119
119
|
desc: "Specify whether to perform caching in development."
|
120
120
|
class_option :restart, type: :boolean, default: nil, hide: true
|
@@ -243,11 +243,13 @@ module Rails
|
|
243
243
|
end
|
244
244
|
|
245
245
|
def pid
|
246
|
-
|
246
|
+
default_pidfile = environment == "development" ? DEFAULT_PIDFILE : nil
|
247
|
+
pid = options[:pid] || ENV["PIDFILE"] || default_pidfile
|
248
|
+
File.expand_path(pid) if pid
|
247
249
|
end
|
248
250
|
|
249
251
|
def prepare_restart
|
250
|
-
FileUtils.rm_f(pid) if options[:restart]
|
252
|
+
FileUtils.rm_f(pid) if pid && options[:restart]
|
251
253
|
end
|
252
254
|
|
253
255
|
def rack_server_suggestion(server)
|
@@ -31,6 +31,8 @@ module Rails
|
|
31
31
|
Rails::TestUnit::Runner.parse_options(args)
|
32
32
|
run_prepare_task if self.args.none?(EXACT_TEST_ARGUMENT_PATTERN)
|
33
33
|
Rails::TestUnit::Runner.run(args)
|
34
|
+
rescue Rails::TestUnit::InvalidTestError => error
|
35
|
+
raise ArgumentError, error.message
|
34
36
|
end
|
35
37
|
|
36
38
|
# Define Thor tasks to avoid going through Rake and booting twice when using bin/rails test:*
|
data/lib/rails/configuration.rb
CHANGED
@@ -131,8 +131,17 @@ module Rails
|
|
131
131
|
@after_generate_callbacks << block
|
132
132
|
end
|
133
133
|
|
134
|
+
def apply_rubocop_autocorrect_after_generate!
|
135
|
+
after_generate do |files|
|
136
|
+
parsable_files = files.filter { |file| File.exist?(file) && file.end_with?(".rb") }
|
137
|
+
unless parsable_files.empty?
|
138
|
+
system(RbConfig.ruby, "bin/rubocop", "-A", "--fail-level=E", "--format=quiet", *parsable_files, exception: true)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
134
143
|
def method_missing(method, *args)
|
135
|
-
method = method.
|
144
|
+
method = method.name.delete_suffix("=").to_sym
|
136
145
|
|
137
146
|
if args.empty?
|
138
147
|
if method == :rails
|
data/lib/rails/console/app.rb
CHANGED
@@ -1,35 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
Rails.deprecator.warn(<<~MSG, caller_locations(0..1))
|
4
|
+
`rails/console/app` has been deprecated and will be removed in Rails 8.0.
|
5
|
+
Please require `rails/console/methods` instead.
|
6
|
+
MSG
|
5
7
|
|
6
|
-
|
7
|
-
module ConsoleMethods
|
8
|
-
# reference the global "app" instance, created on demand. To recreate the
|
9
|
-
# instance, pass a non-false value as the parameter.
|
10
|
-
def app(create = false)
|
11
|
-
@app_integration_instance = nil if create
|
12
|
-
@app_integration_instance ||= new_session
|
13
|
-
end
|
14
|
-
|
15
|
-
# create a new session. If a block is given, the new session will be yielded
|
16
|
-
# to the block before being returned.
|
17
|
-
def new_session
|
18
|
-
app = Rails.application
|
19
|
-
session = ActionDispatch::Integration::Session.new(app)
|
20
|
-
|
21
|
-
# This makes app.url_for and app.foo_path available in the console
|
22
|
-
session.extend(app.routes.url_helpers)
|
23
|
-
session.extend(app.routes.mounted_helpers)
|
24
|
-
|
25
|
-
session
|
26
|
-
end
|
27
|
-
|
28
|
-
# reloads the environment
|
29
|
-
def reload!(print = true)
|
30
|
-
puts "Reloading..." if print
|
31
|
-
Rails.application.reloader.reload!
|
32
|
-
true
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
8
|
+
require "rails/console/methods"
|
@@ -1,19 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
8
|
-
def helper
|
9
|
-
ApplicationController.helpers
|
10
|
-
end
|
3
|
+
Rails.deprecator.warn(<<~MSG, caller_locations(0..1))
|
4
|
+
`rails/console/helpers` has been deprecated and will be removed in Rails 8.0.
|
5
|
+
Please require `rails/console/methods` instead.
|
6
|
+
MSG
|
11
7
|
|
12
|
-
|
13
|
-
#
|
14
|
-
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
15
|
-
def controller
|
16
|
-
@controller ||= ApplicationController.new
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
8
|
+
require "rails/console/methods"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module ConsoleMethods
|
5
|
+
def self.include(_mod, ...)
|
6
|
+
raise_deprecation_warning
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.method_added(_method_name)
|
11
|
+
raise_deprecation_warning
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.raise_deprecation_warning
|
16
|
+
Rails.deprecator.warn(<<~MSG, caller_locations(2..2))
|
17
|
+
Extending Rails console through `Rails::ConsoleMethods` is deprecated and will be removed in Rails 8.0.
|
18
|
+
Please directly use IRB's extension API to add new commands or helpers to the console.
|
19
|
+
For more details, please visit: https://github.com/ruby/irb/blob/master/EXTEND_IRB.md
|
20
|
+
MSG
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/rails/engine.rb
CHANGED
@@ -451,8 +451,7 @@ module Rails
|
|
451
451
|
# Load console and invoke the registered hooks.
|
452
452
|
# Check Rails::Railtie.console for more info.
|
453
453
|
def load_console(app = self)
|
454
|
-
require "rails/console/
|
455
|
-
require "rails/console/helpers"
|
454
|
+
require "rails/console/methods"
|
456
455
|
run_console_blocks(app)
|
457
456
|
self
|
458
457
|
end
|
@@ -627,7 +626,7 @@ module Rails
|
|
627
626
|
next if is_a?(Rails::Application)
|
628
627
|
|
629
628
|
fixtures = config.root.join("test", "fixtures")
|
630
|
-
if
|
629
|
+
if fixtures_in_root_and_not_in_vendor_or_dot_dir?(fixtures)
|
631
630
|
ActiveSupport.on_load(:active_record_fixtures) { self.fixture_paths |= ["#{fixtures}/"] }
|
632
631
|
end
|
633
632
|
end
|
@@ -644,9 +643,9 @@ module Rails
|
|
644
643
|
end
|
645
644
|
end
|
646
645
|
|
647
|
-
initializer :
|
646
|
+
initializer :wrap_reloader_around_load_seed do |app|
|
648
647
|
self.class.set_callback(:load_seed, :around) do |engine, seeds_block|
|
649
|
-
app.
|
648
|
+
app.reloader.wrap(&seeds_block)
|
650
649
|
end
|
651
650
|
end
|
652
651
|
|
@@ -735,9 +734,10 @@ module Rails
|
|
735
734
|
end
|
736
735
|
end
|
737
736
|
|
738
|
-
def
|
737
|
+
def fixtures_in_root_and_not_in_vendor_or_dot_dir?(fixtures)
|
739
738
|
fixtures.exist? && fixtures.to_s.start_with?(Rails.root.to_s) &&
|
740
|
-
!fixtures.to_s.start_with?(Rails.root.join("vendor").to_s)
|
739
|
+
!fixtures.to_s.start_with?(Rails.root.join("vendor").to_s) &&
|
740
|
+
!fixtures.to_s.start_with?("#{Rails.root}/.".to_s)
|
741
741
|
end
|
742
742
|
|
743
743
|
def build_request(env)
|