railties 7.0.8.7 → 7.1.5.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.
Files changed (168) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +723 -215
  3. data/MIT-LICENSE +1 -1
  4. data/RDOC_MAIN.md +99 -0
  5. data/README.rdoc +4 -4
  6. data/lib/minitest/rails_plugin.rb +63 -0
  7. data/lib/rails/api/task.rb +35 -4
  8. data/lib/rails/app_updater.rb +14 -2
  9. data/lib/rails/application/bootstrap.rb +23 -4
  10. data/lib/rails/application/configuration.rb +190 -69
  11. data/lib/rails/application/default_middleware_stack.rb +8 -2
  12. data/lib/rails/application/dummy_config.rb +19 -0
  13. data/lib/rails/application/finisher.rb +43 -33
  14. data/lib/rails/application.rb +141 -33
  15. data/lib/rails/backtrace_cleaner.rb +5 -3
  16. data/lib/rails/cli.rb +5 -2
  17. data/lib/rails/command/actions.rb +10 -12
  18. data/lib/rails/command/base.rb +55 -53
  19. data/lib/rails/command/environment_argument.rb +32 -16
  20. data/lib/rails/command/helpers/editor.rb +17 -12
  21. data/lib/rails/command.rb +84 -33
  22. data/lib/rails/commands/about/about_command.rb +14 -0
  23. data/lib/rails/commands/application/application_command.rb +2 -0
  24. data/lib/rails/commands/console/console_command.rb +14 -14
  25. data/lib/rails/commands/credentials/USAGE +53 -55
  26. data/lib/rails/commands/credentials/credentials_command/diffing.rb +5 -3
  27. data/lib/rails/commands/credentials/credentials_command.rb +64 -70
  28. data/lib/rails/commands/db/system/change/change_command.rb +2 -1
  29. data/lib/rails/commands/dbconsole/dbconsole_command.rb +25 -115
  30. data/lib/rails/commands/destroy/destroy_command.rb +3 -2
  31. data/lib/rails/commands/dev/dev_command.rb +1 -6
  32. data/lib/rails/commands/encrypted/USAGE +15 -20
  33. data/lib/rails/commands/encrypted/encrypted_command.rb +46 -35
  34. data/lib/rails/commands/gem_help/USAGE +16 -0
  35. data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
  36. data/lib/rails/commands/generate/generate_command.rb +2 -2
  37. data/lib/rails/commands/help/USAGE +13 -13
  38. data/lib/rails/commands/help/help_command.rb +21 -2
  39. data/lib/rails/commands/initializers/initializers_command.rb +1 -4
  40. data/lib/rails/commands/middleware/middleware_command.rb +17 -0
  41. data/lib/rails/commands/new/new_command.rb +2 -0
  42. data/lib/rails/commands/notes/notes_command.rb +2 -1
  43. data/lib/rails/commands/plugin/plugin_command.rb +2 -0
  44. data/lib/rails/commands/rake/rake_command.rb +25 -22
  45. data/lib/rails/commands/restart/restart_command.rb +14 -0
  46. data/lib/rails/commands/routes/routes_command.rb +13 -1
  47. data/lib/rails/commands/runner/USAGE +14 -12
  48. data/lib/rails/commands/runner/runner_command.rb +32 -20
  49. data/lib/rails/commands/secret/secret_command.rb +13 -0
  50. data/lib/rails/commands/secrets/USAGE +44 -49
  51. data/lib/rails/commands/secrets/secrets_command.rb +20 -38
  52. data/lib/rails/commands/server/server_command.rb +33 -32
  53. data/lib/rails/commands/test/USAGE +14 -0
  54. data/lib/rails/commands/test/test_command.rb +56 -14
  55. data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
  56. data/lib/rails/commands/version/version_command.rb +1 -0
  57. data/lib/rails/configuration.rb +5 -5
  58. data/lib/rails/console/app.rb +1 -4
  59. data/lib/rails/deprecator.rb +7 -0
  60. data/lib/rails/engine/configuration.rb +50 -6
  61. data/lib/rails/engine.rb +49 -21
  62. data/lib/rails/gem_version.rb +4 -4
  63. data/lib/rails/generators/actions.rb +6 -15
  64. data/lib/rails/generators/active_model.rb +28 -14
  65. data/lib/rails/generators/app_base.rb +355 -82
  66. data/lib/rails/generators/app_name.rb +3 -14
  67. data/lib/rails/generators/base.rb +17 -9
  68. data/lib/rails/generators/database.rb +40 -2
  69. data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +1 -1
  70. data/lib/rails/generators/generated_attribute.rb +12 -0
  71. data/lib/rails/generators/migration.rb +4 -5
  72. data/lib/rails/generators/model_helpers.rb +2 -1
  73. data/lib/rails/generators/rails/app/USAGE +22 -6
  74. data/lib/rails/generators/rails/app/app_generator.rb +85 -64
  75. data/lib/rails/generators/rails/app/templates/Dockerfile.tt +103 -0
  76. data/lib/rails/generators/rails/app/templates/Gemfile.tt +9 -11
  77. data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +1 -1
  78. data/lib/rails/generators/rails/app/templates/bin/setup.tt +10 -1
  79. data/lib/rails/generators/rails/app/templates/config/application.rb.tt +6 -17
  80. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml.tt +4 -4
  81. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml.tt +3 -3
  82. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +4 -6
  83. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +3 -3
  84. data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +59 -0
  85. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +12 -2
  86. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +32 -28
  87. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +13 -9
  88. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +2 -0
  89. data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +2 -2
  90. data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +1 -1
  91. data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +3 -3
  92. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_1.rb.tt +280 -0
  93. data/lib/rails/generators/rails/app/templates/config/initializers/permissions_policy.rb.tt +11 -9
  94. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +11 -13
  95. data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +21 -20
  96. data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +5 -1
  97. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +6 -4
  98. data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +10 -0
  99. data/lib/rails/generators/rails/app/templates/dockerignore.tt +43 -0
  100. data/lib/rails/generators/rails/app/templates/gitignore.tt +4 -8
  101. data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
  102. data/lib/rails/generators/rails/app/templates/test/channels/application_cable/connection_test.rb.tt +10 -8
  103. data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +9 -7
  104. data/lib/rails/generators/rails/application_record/application_record_generator.rb +4 -0
  105. data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +2 -1
  106. data/lib/rails/generators/rails/controller/USAGE +12 -4
  107. data/lib/rails/generators/rails/controller/controller_generator.rb +5 -0
  108. data/lib/rails/generators/rails/controller/templates/controller.rb.tt +1 -1
  109. data/lib/rails/generators/rails/credentials/credentials_generator.rb +29 -24
  110. data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +8 -0
  111. data/lib/rails/generators/rails/db/system/change/change_generator.rb +30 -0
  112. data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +1 -2
  113. data/lib/rails/generators/rails/migration/USAGE +21 -11
  114. data/lib/rails/generators/rails/model/model_generator.rb +4 -0
  115. data/lib/rails/generators/rails/plugin/USAGE +17 -6
  116. data/lib/rails/generators/rails/plugin/plugin_generator.rb +5 -15
  117. data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +2 -2
  118. data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +1 -1
  119. data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +1 -17
  120. data/lib/rails/generators/rails/plugin/templates/gitignore.tt +0 -2
  121. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +4 -4
  122. data/lib/rails/generators/rails/resource/resource_generator.rb +6 -0
  123. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +2 -1
  124. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +1 -1
  125. data/lib/rails/generators/test_case.rb +2 -2
  126. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +1 -1
  127. data/lib/rails/generators/testing/{behaviour.rb → behavior.rb} +4 -1
  128. data/lib/rails/generators.rb +6 -14
  129. data/lib/rails/health_controller.rb +55 -0
  130. data/lib/rails/info.rb +1 -1
  131. data/lib/rails/info_controller.rb +33 -11
  132. data/lib/rails/mailers_controller.rb +15 -5
  133. data/lib/rails/paths.rb +13 -10
  134. data/lib/rails/rack/logger.rb +15 -12
  135. data/lib/rails/rackup/server.rb +15 -0
  136. data/lib/rails/railtie/configuration.rb +14 -1
  137. data/lib/rails/railtie.rb +31 -31
  138. data/lib/rails/ruby_version_check.rb +2 -0
  139. data/lib/rails/source_annotation_extractor.rb +67 -18
  140. data/lib/rails/tasks/engine.rake +8 -8
  141. data/lib/rails/tasks/framework.rake +4 -10
  142. data/lib/rails/tasks/log.rake +1 -1
  143. data/lib/rails/tasks/misc.rake +3 -14
  144. data/lib/rails/tasks/statistics.rake +5 -4
  145. data/lib/rails/tasks/tmp.rake +5 -5
  146. data/lib/rails/tasks/zeitwerk.rake +15 -35
  147. data/lib/rails/tasks.rb +0 -2
  148. data/lib/rails/templates/rails/mailers/email.html.erb +32 -0
  149. data/lib/rails/templates/rails/mailers/index.html.erb +14 -7
  150. data/lib/rails/templates/rails/mailers/mailer.html.erb +11 -5
  151. data/lib/rails/templates/rails/welcome/index.html.erb +1 -0
  152. data/lib/rails/test_help.rb +9 -14
  153. data/lib/rails/test_unit/line_filtering.rb +1 -1
  154. data/lib/rails/test_unit/reporter.rb +6 -2
  155. data/lib/rails/test_unit/runner.rb +36 -18
  156. data/lib/rails/test_unit/test_parser.rb +88 -0
  157. data/lib/rails/test_unit/testing.rake +13 -33
  158. data/lib/rails/testing/maintain_test_schema.rb +16 -0
  159. data/lib/rails/version.rb +1 -1
  160. data/lib/rails/zeitwerk_checker.rb +15 -0
  161. data/lib/rails.rb +15 -15
  162. metadata +64 -27
  163. data/RDOC_MAIN.rdoc +0 -97
  164. data/lib/rails/application/dummy_erb_compiler.rb +0 -18
  165. data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +0 -143
  166. data/lib/rails/generators/rails/model/USAGE +0 -113
  167. data/lib/rails/tasks/middleware.rake +0 -9
  168. data/lib/rails/tasks/restart.rake +0 -9
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2022 David Heinemeier Hansson
1
+ Copyright (c) David Heinemeier Hansson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/RDOC_MAIN.md ADDED
@@ -0,0 +1,99 @@
1
+ # Welcome to \Rails
2
+
3
+ ## What's \Rails?
4
+
5
+ \Rails is a web-application framework that includes everything needed to
6
+ create database-backed web applications according to the
7
+ [Model-View-Controller (MVC)](https://en.wikipedia.org/wiki/Model-view-controller)
8
+ pattern.
9
+
10
+ Understanding the MVC pattern is key to understanding \Rails. MVC divides your
11
+ application into three layers: Model, View, and Controller, each with a specific responsibility.
12
+
13
+ ## Model layer
14
+
15
+ The _**Model layer**_ represents the domain model (such as Account, Product,
16
+ Person, Post, etc.) and encapsulates the business logic specific to
17
+ your application. In \Rails, database-backed model classes are derived from
18
+ `ActiveRecord::Base`. [Active Record](files/activerecord/README.rdoc) allows you to present the data from
19
+ database rows as objects and embellish these data objects with business logic
20
+ methods.
21
+ Although most \Rails models are backed by a database, models can also be ordinary
22
+ Ruby classes, or Ruby classes that implement a set of interfaces as provided by
23
+ the [Active Model](files/activemodel/README.rdoc) module.
24
+
25
+ ## View layer
26
+
27
+ The _**View layer**_ is composed of "templates" that are responsible for providing
28
+ appropriate representations of your application's resources. Templates can
29
+ come in a variety of formats, but most view templates are HTML with embedded
30
+ Ruby code (\ERB files). Views are typically rendered to generate a controller response
31
+ or to generate the body of an email. In \Rails, View generation is handled by [Action View](files/actionview/README.rdoc).
32
+
33
+ ## Controller layer
34
+
35
+ The _**Controller layer**_ is responsible for handling incoming HTTP requests and
36
+ providing a suitable response. Usually, this means returning HTML, but \Rails controllers
37
+ can also generate XML, JSON, PDFs, mobile-specific views, and more. Controllers load and
38
+ manipulate models, and render view templates in order to generate the appropriate HTTP response.
39
+ In \Rails, incoming requests are routed by Action Dispatch to an appropriate controller, and
40
+ controller classes are derived from `ActionController::Base`. Action Dispatch and Action Controller
41
+ are bundled together in [Action Pack](files/actionpack/README.rdoc).
42
+
43
+ ## Frameworks and libraries
44
+
45
+ [Active Record](files/activerecord/README.rdoc), [Active Model](files/activemodel/README.rdoc), [Action Pack](files/actionpack/README.rdoc), and [Action View](files/actionview/README.rdoc) can each be used independently outside \Rails.
46
+
47
+ In addition to that, \Rails also comes with:
48
+
49
+ - [Action Mailer](files/actionmailer/README.rdoc), a library to generate and send emails
50
+ - [Action Mailbox](files/actionmailbox/README.md), a library to receive emails within a \Rails application
51
+ - [Active Job](files/activejob/README.md), a framework for declaring jobs and making them run on a variety of queuing backends
52
+ - [Action Cable](files/actioncable/README.md), a framework to integrate WebSockets with a \Rails application
53
+ - [Active Storage](files/activestorage/README.md), a library to attach cloud and local files to \Rails applications
54
+ - [Action Text](files/actiontext/README.md), a library to handle rich text content
55
+ - [Active Support](files/activesupport/README.rdoc), a collection of utility classes and standard library extensions that are useful for \Rails, and may also be used independently outside \Rails
56
+
57
+ ## Getting Started
58
+
59
+ 1. Install \Rails at the command prompt if you haven't yet:
60
+
61
+ $ gem install rails
62
+
63
+ 2. At the command prompt, create a new \Rails application:
64
+
65
+ $ rails new myapp
66
+
67
+ where "myapp" is the application name.
68
+
69
+ 3. Change directory to `myapp` and start the web server:
70
+
71
+ $ cd myapp
72
+ $ bin/rails server
73
+
74
+ Run with `--help` or `-h` for options.
75
+
76
+ 4. Go to `http://localhost:3000` and you'll see the \Rails bootscreen with your
77
+ \Rails and Ruby versions.
78
+
79
+ 5. Follow the guidelines to start developing your application. You may find the
80
+ following resources handy:
81
+
82
+ * [Getting Started with Rails](https://guides.rubyonrails.org/getting_started.html)
83
+ * [Ruby on Rails Guides](https://guides.rubyonrails.org)
84
+ * [The API Documentation](https://api.rubyonrails.org)
85
+
86
+ ## Contributing
87
+
88
+ We encourage you to contribute to Ruby on \Rails! Please check out the
89
+ [Contributing to Ruby on Rails guide](https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html) for guidelines about how to proceed. [Join us!](https://contributors.rubyonrails.org)
90
+
91
+ Trying to report a possible security vulnerability in \Rails? Please
92
+ check out our [security policy](https://rubyonrails.org/security) for
93
+ guidelines about how to proceed.
94
+
95
+ Everyone interacting in \Rails and its sub-projects' codebases, issue trackers, chat rooms, and mailing lists is expected to follow the \Rails [code of conduct](https://rubyonrails.org/conduct).
96
+
97
+ ## License
98
+
99
+ Ruby on \Rails is released under the [MIT License](https://opensource.org/licenses/MIT).
data/README.rdoc CHANGED
@@ -1,12 +1,12 @@
1
- = Railties -- Gluing the Engine to the Rails
1
+ = Railties -- Gluing the Engine to the \Rails
2
2
 
3
3
  Railties is responsible for gluing all frameworks together. Overall, it:
4
4
 
5
- * handles the bootstrapping process for a Rails application;
5
+ * handles the bootstrapping process for a \Rails application;
6
6
 
7
7
  * manages the +rails+ command line interface;
8
8
 
9
- * and provides the Rails generators core.
9
+ * and provides the \Rails generators core.
10
10
 
11
11
  == Download
12
12
 
@@ -30,7 +30,7 @@ API documentation is at
30
30
 
31
31
  * https://api.rubyonrails.org
32
32
 
33
- Bug reports can be filed for the Ruby on Rails project here:
33
+ Bug reports can be filed for the Ruby on \Rails project here:
34
34
 
35
35
  * https://github.com/rails/rails/issues
36
36
 
@@ -25,6 +25,46 @@ module Minitest
25
25
  end
26
26
  end
27
27
 
28
+ class ProfileReporter < StatisticsReporter
29
+ def initialize(io = $stdout, options = {})
30
+ super
31
+ @results = []
32
+ @count = options[:profile]
33
+ end
34
+
35
+ def record(result)
36
+ @results << result
37
+ end
38
+
39
+ def report
40
+ total_time = @results.sum(&:time)
41
+
42
+ @results.sort! { |a, b| b.time <=> a.time }
43
+ slow_results = @results.take(@count)
44
+ slow_tests_total_time = slow_results.sum(&:time)
45
+
46
+ ratio = (total_time == 0) ? 0.0 : (slow_tests_total_time / total_time) * 100
47
+
48
+ io.puts("\nTop %d slowest tests (%.2f seconds, %.1f%% of total time):\n" % [slow_results.size, slow_tests_total_time, ratio])
49
+ slow_results.each do |result|
50
+ io.puts(" %s\n %.4f seconds %s\n" % [result.location, result.time, source_location(result)])
51
+ end
52
+ io.puts("\n")
53
+ end
54
+
55
+ private
56
+ def source_location(result)
57
+ filename, line = result.source_location
58
+ return "" unless filename
59
+
60
+ pwd = Dir.pwd
61
+ if filename.start_with?(pwd)
62
+ filename = Pathname.new(filename).relative_path_from(pwd)
63
+ end
64
+ "#{filename}:#{line}"
65
+ end
66
+ end
67
+
28
68
  def self.plugin_rails_options(opts, options)
29
69
  ::Rails::TestUnit::Runner.attach_before_load_options(opts)
30
70
 
@@ -44,6 +84,24 @@ module Minitest
44
84
  options[:color] = value
45
85
  end
46
86
 
87
+ opts.on("--profile [COUNT]", "Enable profiling of tests and list the slowest test cases (default: 10)") do |value|
88
+ default_count = 10
89
+
90
+ if value.nil?
91
+ count = default_count
92
+ else
93
+ count = Integer(value, exception: false)
94
+ if count.nil?
95
+ warn("Non integer specified as profile count, separate " \
96
+ "your path from options with -- e.g. " \
97
+ "`bin/test --profile -- #{value}`")
98
+ count = default_count
99
+ end
100
+ end
101
+
102
+ options[:profile] = count
103
+ end
104
+
47
105
  options[:color] = true
48
106
  options[:output_inline] = true
49
107
  end
@@ -67,6 +125,11 @@ module Minitest
67
125
  if reporter.reporters.reject! { |reporter| reporter.kind_of?(ProgressReporter) }
68
126
  reporter << ::Rails::TestUnitReporter.new(options[:io], options)
69
127
  end
128
+
129
+ # Add slowest tests reporter at the end.
130
+ if options[:profile]
131
+ reporter << ProfileReporter.new(options[:io], options)
132
+ end
70
133
  end
71
134
 
72
135
  # Backwards compatibility with Rails 5.0 generated plugin test scripts
@@ -10,6 +10,7 @@ module Rails
10
10
  "activesupport" => {
11
11
  include: %w(
12
12
  README.rdoc
13
+ lib/active_support.rb
13
14
  lib/active_support/**/*.rb
14
15
  )
15
16
  },
@@ -17,6 +18,7 @@ module Rails
17
18
  "activerecord" => {
18
19
  include: %w(
19
20
  README.rdoc
21
+ lib/active_record.rb
20
22
  lib/active_record/**/*.rb
21
23
  lib/arel.rb
22
24
  )
@@ -25,6 +27,7 @@ module Rails
25
27
  "activemodel" => {
26
28
  include: %w(
27
29
  README.rdoc
30
+ lib/active_model.rb
28
31
  lib/active_model/**/*.rb
29
32
  )
30
33
  },
@@ -33,7 +36,9 @@ module Rails
33
36
  include: %w(
34
37
  README.rdoc
35
38
  lib/abstract_controller/**/*.rb
39
+ lib/action_controller.rb
36
40
  lib/action_controller/**/*.rb
41
+ lib/action_dispatch.rb
37
42
  lib/action_dispatch/**/*.rb
38
43
  )
39
44
  },
@@ -41,6 +46,7 @@ module Rails
41
46
  "actionview" => {
42
47
  include: %w(
43
48
  README.rdoc
49
+ lib/action_view.rb
44
50
  lib/action_view/**/*.rb
45
51
  ),
46
52
  exclude: "lib/action_view/vendor/*"
@@ -49,6 +55,7 @@ module Rails
49
55
  "actionmailer" => {
50
56
  include: %w(
51
57
  README.rdoc
58
+ lib/action_mailer.rb
52
59
  lib/action_mailer/**/*.rb
53
60
  )
54
61
  },
@@ -56,6 +63,7 @@ module Rails
56
63
  "activejob" => {
57
64
  include: %w(
58
65
  README.md
66
+ lib/active_job.rb
59
67
  lib/active_job/**/*.rb
60
68
  )
61
69
  },
@@ -63,6 +71,7 @@ module Rails
63
71
  "actioncable" => {
64
72
  include: %w(
65
73
  README.md
74
+ lib/action_cable.rb
66
75
  lib/action_cable/**/*.rb
67
76
  )
68
77
  },
@@ -71,6 +80,7 @@ module Rails
71
80
  include: %w(
72
81
  README.md
73
82
  app/**/active_storage/**/*.rb
83
+ lib/active_storage.rb
74
84
  lib/active_storage/**/*.rb
75
85
  )
76
86
  },
@@ -79,6 +89,7 @@ module Rails
79
89
  include: %w(
80
90
  README.md
81
91
  app/**/action_mailbox/**/*.rb
92
+ lib/action_mailbox.rb
82
93
  lib/action_mailbox/**/*.rb
83
94
  )
84
95
  },
@@ -87,6 +98,7 @@ module Rails
87
98
  include: %w(
88
99
  README.md
89
100
  app/**/action_text/**/*.rb
101
+ lib/action_text.rb
90
102
  lib/action_text/**/*.rb
91
103
  )
92
104
  },
@@ -150,8 +162,8 @@ module Rails
150
162
 
151
163
  # Only generate documentation for files that have been
152
164
  # changed since the API was generated.
153
- if Dir.exist?("doc/rdoc") && !ENV["ALL"]
154
- last_generation = DateTime.rfc2822(File.open("doc/rdoc/created.rid", &:readline))
165
+ if Dir.exist?(api_dir) && !ENV["ALL"]
166
+ last_generation = DateTime.rfc2822(File.open("#{api_dir}/created.rid", &:readline))
155
167
 
156
168
  rdoc_files.keep_if do |file|
157
169
  File.mtime(file).to_datetime > last_generation
@@ -162,13 +174,16 @@ module Rails
162
174
  end
163
175
  end
164
176
 
165
- def setup_horo_variables
177
+ # These variables are used by the sdoc template
178
+ def setup_horo_variables # :nodoc:
166
179
  ENV["HORO_PROJECT_NAME"] = "Ruby on Rails"
167
180
  ENV["HORO_PROJECT_VERSION"] = rails_version
181
+ ENV["HORO_BADGE_VERSION"] = badge_version
182
+ ENV["HORO_CANONICAL_URL"] = canonical_url
168
183
  end
169
184
 
170
185
  def api_main
171
- component_root_dir("railties") + "/RDOC_MAIN.rdoc"
186
+ component_root_dir("railties") + "/RDOC_MAIN.md"
172
187
  end
173
188
  end
174
189
 
@@ -191,12 +206,28 @@ module Rails
191
206
  def rails_version
192
207
  "main@#{`git rev-parse HEAD`[0, 7]}"
193
208
  end
209
+
210
+ def badge_version
211
+ "edge"
212
+ end
213
+
214
+ def canonical_url
215
+ "https://edgeapi.rubyonrails.org"
216
+ end
194
217
  end
195
218
 
196
219
  class StableTask < RepoTask
197
220
  def rails_version
198
221
  File.read("RAILS_VERSION").strip
199
222
  end
223
+
224
+ def badge_version
225
+ "v#{rails_version}"
226
+ end
227
+
228
+ def canonical_url
229
+ "https://api.rubyonrails.org/#{badge_version}"
230
+ end
200
231
  end
201
232
  end
202
233
  end
@@ -21,6 +21,7 @@ module Rails
21
21
  private
22
22
  def generator_options
23
23
  options = { api: !!Rails.application.config.api_only, update: true }
24
+ options[:name] = Rails.application.class.name.chomp("::Application").underscore
24
25
  options[:skip_active_job] = !defined?(ActiveJob::Railtie)
25
26
  options[:skip_active_record] = !defined?(ActiveRecord::Railtie)
26
27
  options[:skip_active_storage] = !defined?(ActiveStorage::Engine)
@@ -30,11 +31,22 @@ module Rails
30
31
  options[:skip_action_cable] = !defined?(ActionCable::Engine)
31
32
  options[:skip_test] = !defined?(Rails::TestUnitRailtie)
32
33
  options[:skip_system_test] = Rails.application.config.generators.system_tests.nil?
33
- options[:skip_asset_pipeline] = !defined?(Sprockets::Railtie) && !defined?(Propshaft::Railtie)
34
+ options[:asset_pipeline] = asset_pipeline
35
+ options[:skip_asset_pipeline] = asset_pipeline.nil?
34
36
  options[:skip_bootsnap] = !defined?(Bootsnap)
35
- options[:updating] = true
36
37
  options
37
38
  end
39
+
40
+ def asset_pipeline
41
+ case
42
+ when defined?(Sprockets::Railtie)
43
+ "sprockets"
44
+ when defined?(Propshaft::Railtie)
45
+ "propshaft"
46
+ else
47
+ nil
48
+ end
49
+ end
38
50
  end
39
51
  end
40
52
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "fileutils"
4
+ require "set"
4
5
  require "active_support/notifications"
5
6
  require "active_support/dependencies"
6
7
  require "active_support/descendants_tracker"
@@ -14,7 +15,6 @@ module Rails
14
15
  initializer :load_environment_hook, group: :all do end
15
16
 
16
17
  initializer :load_active_support, group: :all do
17
- ENV["RAILS_DISABLE_DEPRECATED_TO_S_CONVERSION"] = "true" if config.active_support.disable_to_s_conversion
18
18
  require "active_support/all" unless config.active_support.bare
19
19
  end
20
20
 
@@ -28,14 +28,18 @@ module Rails
28
28
  * production - set it to true
29
29
 
30
30
  INFO
31
- config.eager_load = config.cache_classes
31
+ config.eager_load = !config.reloading_enabled?
32
32
  end
33
33
  end
34
34
 
35
35
  # Initialize the logger early in the stack in case we need to log some deprecation.
36
36
  initializer :initialize_logger, group: :all do
37
37
  Rails.logger ||= config.logger || begin
38
- logger = ActiveSupport::Logger.new(config.default_log_file)
38
+ logger = if config.log_file_size
39
+ ActiveSupport::Logger.new(config.default_log_file, 1, config.log_file_size)
40
+ else
41
+ ActiveSupport::Logger.new(config.default_log_file)
42
+ end
39
43
  logger.formatter = config.log_formatter
40
44
  logger = ActiveSupport::TaggedLogging.new(logger)
41
45
  logger
@@ -50,7 +54,17 @@ module Rails
50
54
  )
51
55
  logger
52
56
  end
53
- Rails.logger.level = ActiveSupport::Logger.const_get(config.log_level.to_s.upcase)
57
+
58
+ if Rails.logger.is_a?(ActiveSupport::BroadcastLogger)
59
+ if config.broadcast_log_level
60
+ Rails.logger.level = ActiveSupport::Logger.const_get(config.broadcast_log_level.to_s.upcase)
61
+ end
62
+ else
63
+ Rails.logger.level = ActiveSupport::Logger.const_get(config.log_level.to_s.upcase)
64
+ broadcast_logger = ActiveSupport::BroadcastLogger.new(Rails.logger)
65
+ broadcast_logger.formatter = Rails.logger.formatter
66
+ Rails.logger = broadcast_logger
67
+ end
54
68
 
55
69
  unless config.consider_all_requests_local
56
70
  Rails.error.logger = Rails.logger
@@ -76,10 +90,15 @@ module Rails
76
90
  initializer :setup_once_autoloader, after: :set_eager_load_paths, before: :bootstrap_hook do
77
91
  autoloader = Rails.autoloaders.once
78
92
 
93
+ # Normally empty, but if the user already defined some, we won't
94
+ # override them. Important if there are custom namespaces associated.
95
+ already_configured_dirs = Set.new(autoloader.dirs)
96
+
79
97
  ActiveSupport::Dependencies.autoload_once_paths.freeze
80
98
  ActiveSupport::Dependencies.autoload_once_paths.uniq.each do |path|
81
99
  # Zeitwerk only accepts existing directories in `push_dir`.
82
100
  next unless File.directory?(path)
101
+ next if already_configured_dirs.member?(path.to_s)
83
102
 
84
103
  autoloader.push_dir(path)
85
104
  autoloader.do_not_eager_load(path) unless ActiveSupport::Dependencies.eager_load?(path)