railties 6.0.0 → 7.1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +699 -245
- data/MIT-LICENSE +1 -1
- data/RDOC_MAIN.md +99 -0
- data/README.rdoc +7 -8
- data/lib/minitest/rails_plugin.rb +80 -2
- data/lib/rails/all.rb +0 -1
- data/lib/rails/api/task.rb +37 -5
- data/lib/rails/app_updater.rb +9 -6
- data/lib/rails/application/bootstrap.rb +52 -14
- data/lib/rails/application/configuration.rb +327 -86
- data/lib/rails/application/default_middleware_stack.rb +33 -7
- data/lib/rails/application/dummy_config.rb +19 -0
- data/lib/rails/application/finisher.rb +94 -113
- data/lib/rails/application/routes_reloader.rb +17 -3
- data/lib/rails/application.rb +258 -201
- data/lib/rails/application_controller.rb +3 -4
- data/lib/rails/autoloaders/inflector.rb +21 -0
- data/lib/rails/autoloaders.rb +42 -42
- data/lib/rails/backtrace_cleaner.rb +13 -8
- data/lib/rails/cli.rb +5 -2
- data/lib/rails/code_statistics.rb +6 -4
- data/lib/rails/code_statistics_calculator.rb +16 -7
- data/lib/rails/command/actions.rb +10 -12
- data/lib/rails/command/base.rb +66 -46
- data/lib/rails/command/behavior.rb +3 -3
- data/lib/rails/command/environment_argument.rb +33 -17
- data/lib/rails/command/helpers/editor.rb +17 -12
- data/lib/rails/command.rb +90 -32
- data/lib/rails/commands/about/about_command.rb +14 -0
- data/lib/rails/commands/application/application_command.rb +2 -0
- data/lib/rails/commands/console/console_command.rb +17 -13
- data/lib/rails/commands/credentials/USAGE +54 -39
- data/lib/rails/commands/credentials/credentials_command/diffing.rb +53 -0
- data/lib/rails/commands/credentials/credentials_command.rb +83 -60
- data/lib/rails/commands/db/system/change/change_command.rb +8 -2
- data/lib/rails/commands/dbconsole/dbconsole_command.rb +39 -124
- data/lib/rails/commands/destroy/destroy_command.rb +3 -2
- data/lib/rails/commands/dev/dev_command.rb +1 -6
- data/lib/rails/commands/encrypted/USAGE +15 -20
- data/lib/rails/commands/encrypted/encrypted_command.rb +46 -35
- data/lib/rails/commands/gem_help/USAGE +16 -0
- data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
- data/lib/rails/commands/generate/generate_command.rb +3 -3
- data/lib/rails/commands/help/USAGE +15 -14
- data/lib/rails/commands/help/help_command.rb +21 -2
- data/lib/rails/commands/initializers/initializers_command.rb +1 -4
- data/lib/rails/commands/middleware/middleware_command.rb +17 -0
- data/lib/rails/commands/new/new_command.rb +2 -0
- data/lib/rails/commands/notes/notes_command.rb +5 -14
- data/lib/rails/commands/plugin/plugin_command.rb +2 -0
- data/lib/rails/commands/rake/rake_command.rb +27 -23
- data/lib/rails/commands/restart/restart_command.rb +14 -0
- data/lib/rails/commands/routes/routes_command.rb +13 -1
- data/lib/rails/commands/runner/USAGE +14 -12
- data/lib/rails/commands/runner/runner_command.rb +34 -21
- data/lib/rails/commands/secret/secret_command.rb +13 -0
- data/lib/rails/commands/secrets/USAGE +44 -43
- data/lib/rails/commands/secrets/secrets_command.rb +20 -38
- data/lib/rails/commands/server/server_command.rb +40 -64
- data/lib/rails/commands/test/USAGE +14 -0
- data/lib/rails/commands/test/test_command.rb +58 -16
- data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
- data/lib/rails/commands/version/version_command.rb +1 -0
- data/lib/rails/configuration.rb +53 -23
- data/lib/rails/console/app.rb +1 -4
- data/lib/rails/console/helpers.rb +2 -2
- data/lib/rails/deprecator.rb +7 -0
- data/lib/rails/engine/configuration.rb +54 -9
- data/lib/rails/engine/updater.rb +1 -1
- data/lib/rails/engine.rb +105 -81
- data/lib/rails/gem_version.rb +5 -5
- data/lib/rails/generators/actions/create_migration.rb +9 -5
- data/lib/rails/generators/actions.rb +275 -97
- data/lib/rails/generators/active_model.rb +28 -14
- data/lib/rails/generators/app_base.rb +487 -165
- data/lib/rails/generators/app_name.rb +3 -14
- data/lib/rails/generators/base.rb +42 -31
- data/lib/rails/generators/database.rb +41 -4
- data/lib/rails/generators/erb/mailer/mailer_generator.rb +0 -1
- data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +1 -1
- data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +2 -1
- data/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt +11 -11
- data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +8 -4
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +11 -28
- data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +7 -3
- data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +17 -0
- data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +8 -17
- data/lib/rails/generators/erb.rb +1 -2
- data/lib/rails/generators/generated_attribute.rb +60 -19
- data/lib/rails/generators/migration.rb +4 -8
- data/lib/rails/generators/model_helpers.rb +29 -4
- data/lib/rails/generators/named_base.rb +15 -15
- data/lib/rails/generators/rails/app/USAGE +23 -6
- data/lib/rails/generators/rails/app/app_generator.rb +151 -80
- data/lib/rails/generators/rails/app/templates/Dockerfile.tt +103 -0
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +44 -54
- data/lib/rails/generators/rails/app/templates/Rakefile.tt +1 -1
- data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +2 -2
- data/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb.tt +2 -2
- data/lib/rails/generators/rails/app/templates/app/models/application_record.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +4 -9
- data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/bin/rails.tt +3 -3
- data/lib/rails/generators/rails/app/templates/bin/rake.tt +2 -2
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +19 -15
- data/lib/rails/generators/rails/app/templates/config/application.rb.tt +18 -23
- data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml.tt +5 -6
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml.tt +12 -11
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +17 -16
- data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +5 -5
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +12 -11
- data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml.tt +12 -11
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +17 -18
- data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +4 -4
- data/lib/rails/generators/rails/app/templates/config/databases/sqlserver.yml.tt +14 -13
- data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +59 -0
- data/lib/rails/generators/rails/app/templates/config/environment.rb.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +32 -14
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +42 -55
- data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +27 -15
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +3 -5
- data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +21 -28
- data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +3 -3
- data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +6 -2
- data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb.tt +4 -4
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +284 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +13 -0
- data/lib/rails/generators/rails/app/templates/config/locales/en.yml +13 -15
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +17 -20
- data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +8 -1
- data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +5 -5
- data/lib/rails/generators/rails/app/templates/config.ru.tt +2 -1
- data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +7 -5
- data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +10 -0
- data/lib/rails/generators/rails/app/templates/dockerignore.tt +43 -0
- data/lib/rails/generators/rails/app/templates/gitattributes.tt +9 -0
- data/lib/rails/generators/rails/app/templates/gitignore.tt +12 -9
- data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
- data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +10 -8
- data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +13 -11
- data/lib/rails/generators/rails/application_record/application_record_generator.rb +4 -0
- data/lib/rails/generators/rails/benchmark/USAGE +19 -0
- data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +30 -0
- data/lib/rails/generators/rails/benchmark/templates/benchmark.rb.tt +15 -0
- data/lib/rails/generators/rails/controller/USAGE +13 -5
- data/lib/rails/generators/rails/controller/controller_generator.rb +7 -42
- data/lib/rails/generators/rails/controller/templates/controller.rb.tt +1 -5
- data/lib/rails/generators/rails/credentials/credentials_generator.rb +30 -25
- data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +8 -0
- data/lib/rails/generators/rails/db/system/change/change_generator.rb +31 -1
- data/lib/rails/generators/rails/encrypted_file/encrypted_file_generator.rb +6 -2
- data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +1 -2
- data/lib/rails/generators/rails/generator/USAGE +2 -2
- data/lib/rails/generators/rails/generator/generator_generator.rb +0 -1
- data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +1 -1
- data/lib/rails/generators/rails/generator/templates/USAGE.tt +1 -1
- data/lib/rails/generators/rails/helper/USAGE +2 -3
- data/lib/rails/generators/rails/integration_test/USAGE +2 -2
- data/lib/rails/generators/rails/migration/USAGE +22 -12
- data/lib/rails/generators/rails/model/model_generator.rb +4 -0
- data/lib/rails/generators/rails/plugin/USAGE +17 -6
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +86 -46
- data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +15 -20
- data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +10 -39
- data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/README.md.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/Rakefile.tt +4 -18
- data/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt +0 -1
- data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +2 -2
- data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +0 -3
- data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +7 -22
- data/lib/rails/generators/rails/plugin/templates/gitignore.tt +10 -14
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +2 -2
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%.rb.tt +1 -0
- data/lib/rails/generators/rails/plugin/templates/rails/boot.rb.tt +3 -3
- data/lib/rails/generators/rails/plugin/templates/test/%namespaced_name%_test.rb.tt +4 -4
- data/lib/rails/generators/rails/plugin/templates/test/integration/navigation_test.rb.tt +1 -1
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +6 -14
- data/lib/rails/generators/rails/resource/USAGE +4 -4
- data/lib/rails/generators/rails/resource/resource_generator.rb +6 -0
- data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +2 -27
- data/lib/rails/generators/rails/scaffold/USAGE +5 -5
- data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +2 -20
- data/lib/rails/generators/rails/scaffold_controller/USAGE +2 -2
- data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +7 -2
- data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +2 -6
- data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +7 -11
- data/lib/rails/generators/rails/system_test/USAGE +2 -2
- data/lib/rails/generators/rails/task/USAGE +3 -3
- data/lib/rails/generators/resource_helpers.rb +2 -2
- data/lib/rails/generators/test_case.rb +3 -3
- data/lib/rails/generators/test_unit/controller/controller_generator.rb +2 -0
- data/lib/rails/generators/test_unit/controller/templates/functional_test.rb.tt +3 -3
- data/lib/rails/generators/test_unit/generator/generator_generator.rb +0 -1
- data/lib/rails/generators/test_unit/generator/templates/generator_test.rb.tt +3 -3
- data/lib/rails/generators/test_unit/integration/integration_generator.rb +0 -1
- data/lib/rails/generators/test_unit/integration/templates/integration_test.rb.tt +1 -1
- data/lib/rails/generators/test_unit/job/templates/unit_test.rb.tt +1 -1
- data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb.tt +1 -1
- data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +3 -3
- data/lib/rails/generators/test_unit/model/templates/unit_test.rb.tt +1 -1
- data/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +1 -1
- data/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +2 -2
- data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +4 -5
- data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +6 -6
- data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +8 -8
- data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +9 -11
- data/lib/rails/generators/testing/assertions.rb +2 -2
- data/lib/rails/generators/testing/{behaviour.rb → behavior.rb} +8 -7
- data/lib/rails/generators.rb +43 -45
- data/lib/rails/health_controller.rb +55 -0
- data/lib/rails/info.rb +4 -4
- data/lib/rails/info_controller.rb +30 -13
- data/lib/rails/initializable.rb +1 -1
- data/lib/rails/mailers_controller.rb +18 -9
- data/lib/rails/paths.rb +28 -19
- data/lib/rails/rack/logger.rb +17 -17
- data/lib/rails/rackup/server.rb +15 -0
- data/lib/rails/railtie/configurable.rb +0 -1
- data/lib/rails/railtie/configuration.rb +15 -3
- data/lib/rails/railtie.rb +80 -37
- data/lib/rails/ruby_version_check.rb +5 -3
- data/lib/rails/secrets.rb +14 -9
- data/lib/rails/source_annotation_extractor.rb +69 -34
- data/lib/rails/tasks/engine.rake +8 -11
- data/lib/rails/tasks/framework.rake +4 -6
- data/lib/rails/tasks/log.rake +1 -1
- data/lib/rails/tasks/misc.rake +4 -15
- data/lib/rails/tasks/statistics.rake +9 -6
- data/lib/rails/tasks/tmp.rake +13 -6
- data/lib/rails/tasks/yarn.rake +17 -6
- data/lib/rails/tasks/zeitwerk.rake +16 -41
- data/lib/rails/tasks.rb +0 -6
- data/lib/rails/templates/layouts/application.html.erb +15 -0
- data/lib/rails/templates/rails/mailers/email.html.erb +46 -11
- data/lib/rails/templates/rails/mailers/index.html.erb +14 -7
- data/lib/rails/templates/rails/mailers/mailer.html.erb +11 -5
- data/lib/rails/templates/rails/welcome/index.html.erb +65 -48
- data/lib/rails/test_help.rb +13 -14
- data/lib/rails/test_unit/line_filtering.rb +1 -1
- data/lib/rails/test_unit/railtie.rb +0 -4
- data/lib/rails/test_unit/reporter.rb +8 -3
- data/lib/rails/test_unit/runner.rb +61 -19
- data/lib/rails/test_unit/test_parser.rb +88 -0
- data/lib/rails/test_unit/testing.rake +17 -36
- data/lib/rails/testing/maintain_test_schema.rb +16 -0
- data/lib/rails/version.rb +1 -1
- data/lib/rails/welcome_controller.rb +1 -0
- data/lib/rails/zeitwerk_checker.rb +15 -0
- data/lib/rails.rb +31 -23
- metadata +89 -58
- data/RDOC_MAIN.rdoc +0 -98
- data/lib/rails/application/dummy_erb_compiler.rb +0 -18
- data/lib/rails/command/spellchecker.rb +0 -58
- data/lib/rails/generators/css/assets/assets_generator.rb +0 -15
- data/lib/rails/generators/css/assets/templates/stylesheet.css +0 -4
- data/lib/rails/generators/css/scaffold/scaffold_generator.rb +0 -18
- data/lib/rails/generators/rails/app/templates/app/javascript/channels/consumer.js +0 -6
- data/lib/rails/generators/rails/app/templates/app/javascript/channels/index.js +0 -5
- data/lib/rails/generators/rails/app/templates/app/javascript/packs/application.js.tt +0 -23
- data/lib/rails/generators/rails/app/templates/bin/yarn.tt +0 -10
- data/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml.tt +0 -50
- data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml.tt +0 -86
- data/lib/rails/generators/rails/app/templates/config/initializers/application_controller_renderer.rb.tt +0 -8
- data/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb.tt +0 -7
- data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb.tt +0 -5
- data/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb.tt +0 -4
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_0.rb.tt +0 -45
- data/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +0 -16
- data/lib/rails/generators/rails/app/templates/config/spring.rb.tt +0 -6
- data/lib/rails/generators/rails/app/templates/package.json.tt +0 -11
- data/lib/rails/generators/rails/assets/USAGE +0 -17
- data/lib/rails/generators/rails/assets/assets_generator.rb +0 -26
- data/lib/rails/generators/rails/assets/templates/stylesheet.css +0 -4
- data/lib/rails/generators/rails/model/USAGE +0 -114
- data/lib/rails/generators/rails/plugin/templates/rails/application.rb.tt +0 -23
- data/lib/rails/generators/rails/scaffold/templates/scaffold.css +0 -80
- data/lib/rails/tasks/annotations.rake +0 -22
- data/lib/rails/tasks/dev.rake +0 -11
- data/lib/rails/tasks/initializers.rake +0 -9
- data/lib/rails/tasks/middleware.rake +0 -9
- data/lib/rails/tasks/restart.rake +0 -9
- data/lib/rails/tasks/routes.rake +0 -9
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class DummyConfig # :nodoc:
|
4
|
+
def initialize(config)
|
5
|
+
@config = config
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
"DummyConfig"
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(selector, *args, &blk)
|
13
|
+
if @config.respond_to?(selector)
|
14
|
+
@config.send(selector, *args, &blk)
|
15
|
+
else
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "set"
|
3
4
|
require "active_support/core_ext/string/inflections"
|
4
5
|
require "active_support/core_ext/array/conversions"
|
6
|
+
require "active_support/descendants_tracker"
|
7
|
+
require "active_support/dependencies"
|
5
8
|
|
6
9
|
module Rails
|
7
10
|
class Application
|
@@ -9,80 +12,38 @@ module Rails
|
|
9
12
|
include Initializable
|
10
13
|
|
11
14
|
initializer :add_generator_templates do
|
12
|
-
|
15
|
+
ensure_generator_templates_added
|
13
16
|
end
|
14
17
|
|
15
|
-
initializer :
|
16
|
-
|
17
|
-
ActiveSupport::Dependencies.autoload_paths
|
18
|
+
initializer :setup_main_autoloader do
|
19
|
+
autoloader = Rails.autoloaders.main
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Extra items in autoload_once_paths: #{extra * ','}
|
23
|
-
end_error
|
24
|
-
end
|
25
|
-
end
|
21
|
+
# Normally empty, but if the user already defined some, we won't
|
22
|
+
# override them. Important if there are custom namespaces associated.
|
23
|
+
already_configured_dirs = Set.new(autoloader.dirs)
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
next if ActiveSupport::Dependencies.autoloaded_constants.empty?
|
33
|
-
|
34
|
-
autoloaded = ActiveSupport::Dependencies.autoloaded_constants
|
35
|
-
constants = "constant".pluralize(autoloaded.size)
|
36
|
-
enum = autoloaded.to_sentence
|
37
|
-
have = autoloaded.size == 1 ? "has" : "have"
|
38
|
-
these = autoloaded.size == 1 ? "This" : "These"
|
39
|
-
example = autoloaded.first
|
40
|
-
example_klass = example.constantize.class
|
41
|
-
|
42
|
-
if config.autoloader == :zeitwerk
|
43
|
-
ActiveSupport::DescendantsTracker.clear
|
44
|
-
ActiveSupport::Dependencies.clear
|
25
|
+
ActiveSupport::Dependencies.autoload_paths.freeze
|
26
|
+
ActiveSupport::Dependencies.autoload_paths.uniq.each do |path|
|
27
|
+
# Zeitwerk only accepts existing directories in `push_dir`.
|
28
|
+
next unless File.directory?(path)
|
29
|
+
next if already_configured_dirs.member?(path.to_s)
|
45
30
|
|
46
|
-
|
47
|
-
|
48
|
-
unload_message = "`config.autoloader` is set to `#{config.autoloader}`. #{these} autoloaded #{constants} would have been unloaded if `config.autoloader` had been set to `:zeitwerk`."
|
31
|
+
autoloader.push_dir(path)
|
32
|
+
autoloader.do_not_eager_load(path) unless ActiveSupport::Dependencies.eager_load?(path)
|
49
33
|
end
|
50
34
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
Being able to do this is deprecated. Autoloading during initialization is going
|
55
|
-
to be an error condition in future versions of Rails.
|
56
|
-
|
57
|
-
Reloading does not reboot the application, and therefore code executed during
|
58
|
-
initialization does not run again. So, if you reload #{example}, for example,
|
59
|
-
the expected changes won't be reflected in that stale #{example_klass} object.
|
60
|
-
|
61
|
-
#{unload_message}
|
62
|
-
|
63
|
-
Please, check the "Autoloading and Reloading Constants" guide for solutions.
|
64
|
-
WARNING
|
65
|
-
end
|
66
|
-
|
67
|
-
initializer :let_zeitwerk_take_over do
|
68
|
-
if config.autoloader == :zeitwerk
|
69
|
-
require "active_support/dependencies/zeitwerk_integration"
|
70
|
-
ActiveSupport::Dependencies::ZeitwerkIntegration.take_over(enable_reloading: !config.cache_classes)
|
71
|
-
end
|
72
|
-
end
|
35
|
+
if config.reloading_enabled?
|
36
|
+
autoloader.enable_reloading
|
37
|
+
ActiveSupport::Dependencies.autoloader = autoloader
|
73
38
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
get "/rails/info/routes" => "rails/info#routes", internal: true
|
79
|
-
get "/rails/info" => "rails/info#index", internal: true
|
80
|
-
end
|
81
|
-
|
82
|
-
app.routes.append do
|
83
|
-
get "/" => "rails/welcome#index", internal: true
|
39
|
+
autoloader.on_load do |_cpath, value, _abspath|
|
40
|
+
if value.is_a?(Class) && value.singleton_class < ActiveSupport::DescendantsTracker
|
41
|
+
ActiveSupport::Dependencies._autoloaded_tracked_classes << value
|
42
|
+
end
|
84
43
|
end
|
85
44
|
end
|
45
|
+
|
46
|
+
autoloader.setup
|
86
47
|
end
|
87
48
|
|
88
49
|
# Setup default session store if not already set in config/application.rb
|
@@ -113,14 +74,17 @@ module Rails
|
|
113
74
|
app.reloader.prepare!
|
114
75
|
end
|
115
76
|
|
116
|
-
initializer :eager_load! do
|
77
|
+
initializer :eager_load! do |app|
|
117
78
|
if config.eager_load
|
118
79
|
ActiveSupport.run_load_hooks(:before_eager_load, self)
|
119
|
-
|
120
|
-
# want to eager load any dependency managed by Zeitwerk regardless of
|
121
|
-
# the autoloading mode of the application.
|
122
|
-
Zeitwerk::Loader.eager_load_all if defined?(Zeitwerk)
|
80
|
+
Zeitwerk::Loader.eager_load_all
|
123
81
|
config.eager_load_namespaces.each(&:eager_load!)
|
82
|
+
|
83
|
+
if config.reloading_enabled?
|
84
|
+
app.reloader.after_class_unload do
|
85
|
+
Rails.autoloaders.main.eager_load
|
86
|
+
end
|
87
|
+
end
|
124
88
|
end
|
125
89
|
end
|
126
90
|
|
@@ -129,21 +93,21 @@ module Rails
|
|
129
93
|
ActiveSupport.run_load_hooks(:after_initialize, self)
|
130
94
|
end
|
131
95
|
|
132
|
-
class
|
133
|
-
def initialize(
|
134
|
-
@
|
96
|
+
class MonitorHook # :nodoc:
|
97
|
+
def initialize(monitor = Monitor.new)
|
98
|
+
@monitor = monitor
|
135
99
|
end
|
136
100
|
|
137
101
|
def run
|
138
|
-
@
|
102
|
+
@monitor.enter
|
139
103
|
end
|
140
104
|
|
141
105
|
def complete(_state)
|
142
|
-
@
|
106
|
+
@monitor.exit
|
143
107
|
end
|
144
108
|
end
|
145
109
|
|
146
|
-
module InterlockHook
|
110
|
+
module InterlockHook # :nodoc:
|
147
111
|
def self.run
|
148
112
|
ActiveSupport::Dependencies.interlock.start_running
|
149
113
|
end
|
@@ -158,7 +122,7 @@ module Rails
|
|
158
122
|
# User has explicitly opted out of concurrent request
|
159
123
|
# handling: presumably their code is not threadsafe
|
160
124
|
|
161
|
-
app.executor.register_hook(
|
125
|
+
app.executor.register_hook(MonitorHook.new, outer: true)
|
162
126
|
|
163
127
|
elsif config.allow_concurrency == :unsafe
|
164
128
|
# Do nothing, even if we know this is dangerous. This is the
|
@@ -167,15 +131,28 @@ module Rails
|
|
167
131
|
else
|
168
132
|
# Default concurrency setting: enabled, but safe
|
169
133
|
|
170
|
-
|
171
|
-
# Without cache_classes + eager_load, the load interlock
|
172
|
-
# is required for proper operation
|
173
|
-
|
134
|
+
if config.reloading_enabled?
|
174
135
|
app.executor.register_hook(InterlockHook, outer: true)
|
175
136
|
end
|
176
137
|
end
|
177
138
|
end
|
178
139
|
|
140
|
+
initializer :add_internal_routes do |app|
|
141
|
+
if Rails.env.development?
|
142
|
+
app.routes.prepend do
|
143
|
+
get "/rails/info/properties" => "rails/info#properties", internal: true
|
144
|
+
get "/rails/info/routes" => "rails/info#routes", internal: true
|
145
|
+
get "/rails/info" => "rails/info#index", internal: true
|
146
|
+
end
|
147
|
+
|
148
|
+
routes_reloader.run_after_load_paths = -> do
|
149
|
+
app.routes.append do
|
150
|
+
get "/" => "rails/welcome#index", internal: true
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
179
156
|
# Set routes reload after the finisher hook to ensure routes added in
|
180
157
|
# the hook are taken into account.
|
181
158
|
initializer :set_routes_reloader_hook do |app|
|
@@ -183,6 +160,7 @@ module Rails
|
|
183
160
|
reloader.eager_load = app.config.eager_load
|
184
161
|
reloader.execute
|
185
162
|
reloaders << reloader
|
163
|
+
|
186
164
|
app.reloader.to_run do
|
187
165
|
# We configure #execute rather than #execute_if_updated because if
|
188
166
|
# autoloaded constants are cleared we need to reload routes also in
|
@@ -195,54 +173,57 @@ module Rails
|
|
195
173
|
# some sort of reloaders dependency support, to be added.
|
196
174
|
require_unload_lock!
|
197
175
|
reloader.execute
|
176
|
+
ActiveSupport.run_load_hooks(:after_routes_loaded, self)
|
198
177
|
end
|
178
|
+
|
179
|
+
ActiveSupport.run_load_hooks(:after_routes_loaded, self)
|
199
180
|
end
|
200
181
|
|
201
182
|
# Set clearing dependencies after the finisher hook to ensure paths
|
202
183
|
# added in the hook are taken into account.
|
203
184
|
initializer :set_clear_dependencies_hook, group: :all do |app|
|
204
185
|
callback = lambda do
|
205
|
-
|
186
|
+
# Order matters.
|
187
|
+
ActiveSupport::DescendantsTracker.clear(ActiveSupport::Dependencies._autoloaded_tracked_classes)
|
206
188
|
ActiveSupport::Dependencies.clear
|
207
189
|
end
|
208
190
|
|
209
|
-
if config.
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
app.reloaders.map(&:updated?).any?
|
214
|
-
end
|
215
|
-
else
|
216
|
-
app.reloader.check = lambda { true }
|
217
|
-
end
|
218
|
-
|
219
|
-
if config.reload_classes_only_on_change
|
220
|
-
reloader = config.file_watcher.new(*watchable_args, &callback)
|
221
|
-
reloaders << reloader
|
222
|
-
|
223
|
-
# Prepend this callback to have autoloaded constants cleared before
|
224
|
-
# any other possible reloading, in case they need to autoload fresh
|
225
|
-
# constants.
|
226
|
-
app.reloader.to_run(prepend: true) do
|
227
|
-
# In addition to changes detected by the file watcher, if routes
|
228
|
-
# or i18n have been updated we also need to clear constants,
|
229
|
-
# that's why we run #execute rather than #execute_if_updated, this
|
230
|
-
# callback has to clear autoloaded constants after any update.
|
231
|
-
class_unload! do
|
232
|
-
reloader.execute
|
191
|
+
if config.reloading_enabled?
|
192
|
+
if config.reload_classes_only_on_change
|
193
|
+
app.reloader.check = lambda do
|
194
|
+
app.reloaders.map(&:updated?).any?
|
233
195
|
end
|
196
|
+
else
|
197
|
+
app.reloader.check = lambda { true }
|
234
198
|
end
|
235
199
|
else
|
236
|
-
app.reloader.
|
237
|
-
class_unload!(&callback)
|
238
|
-
end
|
200
|
+
app.reloader.check = lambda { false }
|
239
201
|
end
|
240
|
-
end
|
241
202
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
203
|
+
if config.reloading_enabled?
|
204
|
+
if config.reload_classes_only_on_change
|
205
|
+
reloader = config.file_watcher.new(*watchable_args, &callback)
|
206
|
+
reloaders << reloader
|
207
|
+
|
208
|
+
# Prepend this callback to have autoloaded constants cleared before
|
209
|
+
# any other possible reloading, in case they need to autoload fresh
|
210
|
+
# constants.
|
211
|
+
app.reloader.to_run(prepend: true) do
|
212
|
+
# In addition to changes detected by the file watcher, if routes
|
213
|
+
# or i18n have been updated we also need to clear constants,
|
214
|
+
# that's why we run #execute rather than #execute_if_updated, this
|
215
|
+
# callback has to clear autoloaded constants after any update.
|
216
|
+
class_unload! do
|
217
|
+
reloader.execute
|
218
|
+
end
|
219
|
+
end
|
220
|
+
else
|
221
|
+
app.reloader.to_complete do
|
222
|
+
class_unload!(&callback)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
else
|
226
|
+
ActiveSupport::DescendantsTracker.disable_clear!
|
246
227
|
end
|
247
228
|
end
|
248
229
|
end
|
@@ -5,13 +5,17 @@ require "active_support/core_ext/module/delegation"
|
|
5
5
|
module Rails
|
6
6
|
class Application
|
7
7
|
class RoutesReloader
|
8
|
-
|
8
|
+
include ActiveSupport::Callbacks
|
9
|
+
|
10
|
+
attr_reader :route_sets, :paths, :external_routes
|
9
11
|
attr_accessor :eager_load
|
12
|
+
attr_writer :run_after_load_paths # :nodoc:
|
10
13
|
delegate :execute_if_updated, :execute, :updated?, to: :updater
|
11
14
|
|
12
15
|
def initialize
|
13
16
|
@paths = []
|
14
17
|
@route_sets = []
|
18
|
+
@external_routes = []
|
15
19
|
@eager_load = false
|
16
20
|
end
|
17
21
|
|
@@ -25,9 +29,14 @@ module Rails
|
|
25
29
|
end
|
26
30
|
|
27
31
|
private
|
28
|
-
|
29
32
|
def updater
|
30
|
-
@updater ||=
|
33
|
+
@updater ||= begin
|
34
|
+
dirs = @external_routes.each_with_object({}) do |dir, hash|
|
35
|
+
hash[dir.to_s] = %w(rb)
|
36
|
+
end
|
37
|
+
|
38
|
+
ActiveSupport::FileUpdateChecker.new(paths, dirs) { reload! }
|
39
|
+
end
|
31
40
|
end
|
32
41
|
|
33
42
|
def clear!
|
@@ -39,6 +48,11 @@ module Rails
|
|
39
48
|
|
40
49
|
def load_paths
|
41
50
|
paths.each { |path| load(path) }
|
51
|
+
run_after_load_paths.call
|
52
|
+
end
|
53
|
+
|
54
|
+
def run_after_load_paths
|
55
|
+
@run_after_load_paths ||= -> { }
|
42
56
|
end
|
43
57
|
|
44
58
|
def finalize!
|