railties 8.0.5.2 → 8.1.0.beta1
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 +71 -262
- data/lib/minitest/rails_plugin.rb +48 -19
- data/lib/rails/application/bootstrap.rb +5 -0
- data/lib/rails/application/configuration.rb +26 -0
- data/lib/rails/application/default_middleware_stack.rb +1 -1
- data/lib/rails/application/finisher.rb +2 -1
- data/lib/rails/application/routes_reloader.rb +0 -1
- data/lib/rails/application.rb +1 -3
- data/lib/rails/command/base.rb +0 -2
- data/lib/rails/command/environment_argument.rb +0 -1
- data/lib/rails/command.rb +1 -1
- data/lib/rails/commands/console/irb_console.rb +4 -4
- data/lib/rails/commands/credentials/credentials_command.rb +25 -5
- data/lib/rails/commands/encrypted/encrypted_command.rb +0 -1
- data/lib/rails/engine.rb +0 -1
- data/lib/rails/gem_version.rb +3 -3
- data/lib/rails/generators/actions.rb +2 -3
- data/lib/rails/generators/app_base.rb +37 -41
- data/lib/rails/generators/database.rb +1 -1
- data/lib/rails/generators/erb/authentication/authentication_generator.rb +2 -0
- data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +2 -2
- data/lib/rails/generators/generated_attribute.rb +1 -1
- data/lib/rails/generators/migration.rb +0 -1
- data/lib/rails/generators/rails/app/app_generator.rb +12 -2
- data/lib/rails/generators/rails/app/templates/Dockerfile.tt +14 -13
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +3 -0
- data/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +1 -0
- data/lib/rails/generators/rails/app/templates/bin/bundler-audit.tt +5 -0
- data/lib/rails/generators/rails/app/templates/bin/ci.tt +5 -0
- data/lib/rails/generators/rails/app/templates/bin/rubocop.tt +1 -1
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +1 -0
- data/lib/rails/generators/rails/app/templates/config/bundler-audit.yml.tt +5 -0
- data/lib/rails/generators/rails/app/templates/config/ci.rb.tt +34 -0
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +9 -1
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +10 -2
- data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +1 -1
- data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +9 -1
- data/lib/rails/generators/rails/app/templates/config/deploy.yml.tt +5 -5
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +16 -4
- 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_8_1.rb.tt +66 -0
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +3 -2
- data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +0 -7
- data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +0 -6
- data/lib/rails/generators/rails/app/templates/github/ci.yml.tt +101 -19
- data/lib/rails/generators/rails/app/templates/github/dependabot.yml +2 -2
- data/lib/rails/generators/rails/app/templates/kamal-secrets.tt +3 -0
- data/lib/rails/generators/rails/app/templates/public/400.html +1 -1
- data/lib/rails/generators/rails/app/templates/public/404.html +2 -2
- data/lib/rails/generators/rails/app/templates/public/422.html +1 -1
- data/lib/rails/generators/rails/app/templates/public/500.html +2 -2
- data/lib/rails/generators/rails/app/templates/ruby-version.tt +1 -1
- data/lib/rails/generators/rails/authentication/authentication_generator.rb +17 -6
- data/lib/rails/generators/rails/authentication/templates/app/controllers/passwords_controller.rb.tt +6 -0
- data/lib/rails/generators/rails/authentication/templates/app/controllers/sessions_controller.rb.tt +2 -2
- data/lib/rails/generators/rails/authentication/templates/test/test_helpers/session_test_helper.rb.tt +15 -0
- data/lib/rails/generators/rails/benchmark/USAGE +1 -1
- data/lib/rails/generators/rails/benchmark/templates/benchmark.rb.tt +0 -2
- data/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb +1 -1
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/Dockerfile.tt +4 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/compose.yaml.tt +2 -2
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/devcontainer.json.tt +1 -1
- data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +17 -5
- data/lib/rails/generators/rails/master_key/master_key_generator.rb +0 -12
- data/lib/rails/generators/rails/plugin/templates/github/ci.yml.tt +20 -9
- data/lib/rails/generators/rails/plugin/templates/github/dependabot.yml +2 -2
- data/lib/rails/generators/rails/script/USAGE +1 -1
- data/lib/rails/generators/test_unit/authentication/authentication_generator.rb +3 -2
- data/lib/rails/generators/test_unit/authentication/templates/test/controllers/passwords_controller_test.rb.tt +67 -0
- data/lib/rails/generators/test_unit/authentication/templates/test/controllers/sessions_controller_test.rb +33 -0
- data/lib/rails/generators/test_unit/authentication/templates/test/models/user_test.rb.tt +4 -3
- data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +1 -1
- data/lib/rails/generators/testing/behavior.rb +0 -3
- data/lib/rails/generators.rb +3 -1
- data/lib/rails/health_controller.rb +8 -2
- data/lib/rails/info.rb +4 -5
- data/lib/rails/info_controller.rb +2 -3
- data/lib/rails/initializable.rb +63 -19
- data/lib/rails/rack/silence_request.rb +5 -2
- data/lib/rails/railtie/configurable.rb +0 -1
- data/lib/rails/railtie.rb +0 -1
- data/lib/rails/source_annotation_extractor.rb +2 -6
- data/lib/rails/templates/rails/info/notes.html.erb +23 -0
- data/lib/rails/templates/rails/mailers/email.html.erb +3 -2
- data/lib/rails/templates/rails/welcome/index.html.erb +17 -1
- data/lib/rails/test_unit/line_filtering.rb +3 -24
- data/lib/rails/test_unit/reporter.rb +7 -10
- data/lib/rails/test_unit/runner.rb +8 -5
- data/lib/rails.rb +9 -2
- metadata +20 -16
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_8_0.rb.tt +0 -30
- data/lib/rails/generators/test_unit/plugin/plugin_generator.rb +0 -15
- data/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +0 -7
- data/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +0 -2
- /data/lib/rails/generators/{test_unit → rails}/authentication/templates/test/mailers/previews/passwords_mailer_preview.rb.tt +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f96d0bd7304aebd3f5b4067354bd24c00ad034b34b03454275124bda2ef80371
|
|
4
|
+
data.tar.gz: 2d8e046700f53160f821f70ceb11f6cf8799fc9654ba8f4b73d283240d8f7259
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 031c43f3c487649f1d6a83622afd3d438aa437e259864372c685b5e720b8b636cecbf7bf083afb58219b20120059c85ebf9bdfdb756afdbd59e713d7443a6f98
|
|
7
|
+
data.tar.gz: 0d2eb2b9519a859362aa6eda717ba8b0a9ef54fa975824f76c295f84e1750d2c30a3d5b9b0983e075c8bf1b89a2d80c6c3b469952920bd5537ed728d4b140e62
|
data/CHANGELOG.md
CHANGED
|
@@ -1,59 +1,85 @@
|
|
|
1
|
-
## Rails 8.0.
|
|
1
|
+
## Rails 8.1.0.beta1 (September 04, 2025) ##
|
|
2
2
|
|
|
3
|
-
*
|
|
3
|
+
* Add command `rails credentials:fetch PATH` to get the value of a credential from the credentials file.
|
|
4
4
|
|
|
5
|
+
```bash
|
|
6
|
+
$ bin/rails credentials:fetch kamal_registry.password
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
*Matthew Nguyen*, *Jean Boussier*
|
|
5
10
|
|
|
6
|
-
|
|
11
|
+
* Generate static BCrypt password digests in fixtures instead of dynamic ERB expressions.
|
|
7
12
|
|
|
8
|
-
|
|
13
|
+
Previously, fixtures with password digest attributes used `<%= BCrypt::Password.create("secret") %>`,
|
|
14
|
+
which regenerated the hash on each test run. Now generates a static hash with a comment
|
|
15
|
+
showing how to recreate it.
|
|
9
16
|
|
|
17
|
+
*Nate Smith*, *Cassia Scheffer*
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
* Broaden the `.gitignore` entry when adding a credentials key to ignore all key files.
|
|
12
20
|
|
|
13
|
-
*
|
|
21
|
+
*Greg Molnar*
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
* Remove unnecessary `ruby-version` input from `ruby/setup-ruby`
|
|
16
24
|
|
|
17
|
-
*
|
|
25
|
+
*TangRufus*
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
* Add --reset option to bin/setup which will call db:reset as part of the setup.
|
|
28
|
+
|
|
29
|
+
*DHH*
|
|
20
30
|
|
|
31
|
+
* Add RuboCop cache restoration to RuboCop job in GitHub Actions workflow templates.
|
|
21
32
|
|
|
22
|
-
|
|
33
|
+
*Lovro Bikić*
|
|
23
34
|
|
|
24
|
-
*
|
|
35
|
+
* Skip generating mailer-related files in authentication generator if the application does
|
|
36
|
+
not use ActionMailer
|
|
25
37
|
|
|
38
|
+
*Rami Massoud*
|
|
26
39
|
|
|
27
|
-
|
|
40
|
+
* Introduce `bin/ci` for running your tests, style checks, and security audits locally or in the cloud.
|
|
28
41
|
|
|
29
|
-
|
|
42
|
+
The specific steps are defined by a new DSL in `config/ci.rb`.
|
|
30
43
|
|
|
44
|
+
```ruby
|
|
45
|
+
ActiveSupport::ContinuousIntegration.run do
|
|
46
|
+
step "Setup", "bin/setup --skip-server"
|
|
47
|
+
step "Style: Ruby", "bin/rubocop"
|
|
48
|
+
step "Security: Gem audit", "bin/bundler-audit"
|
|
49
|
+
step "Tests: Rails", "bin/rails test test:system"
|
|
50
|
+
end
|
|
51
|
+
```
|
|
31
52
|
|
|
32
|
-
|
|
53
|
+
Optionally use [gh-signoff](https://github.com/basecamp/gh-signoff) to
|
|
54
|
+
set a green PR status - ready for merge.
|
|
33
55
|
|
|
34
|
-
*
|
|
56
|
+
*Jeremy Daer*, *DHH*
|
|
35
57
|
|
|
36
|
-
|
|
58
|
+
* Generate session controller tests when running the authentication generator.
|
|
37
59
|
|
|
38
|
-
*
|
|
60
|
+
*Jerome Dalbert*
|
|
39
61
|
|
|
40
|
-
|
|
62
|
+
* Add bin/bundler-audit and config/bundler-audit.yml for discovering and managing known security problems with app gems.
|
|
41
63
|
|
|
42
|
-
*
|
|
64
|
+
*DHH*
|
|
43
65
|
|
|
66
|
+
* Rails no longer generates a `bin/bundle` binstub when creating new applications.
|
|
44
67
|
|
|
45
|
-
|
|
68
|
+
The `bin/bundle` binstub used to help activate the right version of bundler.
|
|
69
|
+
This is no longer necessary as this mechanism is now part of Rubygem itself.
|
|
46
70
|
|
|
47
|
-
*
|
|
71
|
+
*Edouard Chin*
|
|
48
72
|
|
|
73
|
+
* Add a `SessionTestHelper` module with `sign_in_as(user)` and `sign_out` test helpers when
|
|
74
|
+
running `rails g authentication`. Simplifies authentication in integration tests.
|
|
49
75
|
|
|
50
|
-
|
|
76
|
+
*Bijan Rahnema*
|
|
51
77
|
|
|
52
|
-
*
|
|
78
|
+
* Rate limit password resets in authentication generator
|
|
53
79
|
|
|
54
|
-
|
|
80
|
+
This helps mitigate abuse from attackers spamming the password reset form.
|
|
55
81
|
|
|
56
|
-
|
|
82
|
+
*Chris Oliver*
|
|
57
83
|
|
|
58
84
|
* Update `rails new --minimal` option
|
|
59
85
|
|
|
@@ -62,6 +88,16 @@
|
|
|
62
88
|
|
|
63
89
|
*eelcoj*
|
|
64
90
|
|
|
91
|
+
* Add `application-name` metadata to application layout
|
|
92
|
+
|
|
93
|
+
The following metatag will be added to `app/views/layouts/application.html.erb`
|
|
94
|
+
|
|
95
|
+
```html
|
|
96
|
+
<meta name="application-name" content="Name of Rails Application">
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
*Steve Polito*
|
|
100
|
+
|
|
65
101
|
* Use `secret_key_base` from ENV or credentials when present locally.
|
|
66
102
|
|
|
67
103
|
When ENV["SECRET_KEY_BASE"] or
|
|
@@ -71,250 +107,23 @@
|
|
|
71
107
|
|
|
72
108
|
*Petrik de Heus*
|
|
73
109
|
|
|
110
|
+
* Introduce `RAILS_MASTER_KEY` placeholder in generated ci.yml files
|
|
74
111
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
* Skip generation system tests related code for CI when `--skip-system-test` is given.
|
|
78
|
-
|
|
79
|
-
*fatkodima*
|
|
80
|
-
|
|
81
|
-
* Don't add bin/thrust if thruster is not in Gemfile.
|
|
82
|
-
|
|
83
|
-
*Étienne Barrié*
|
|
84
|
-
|
|
85
|
-
* Don't install a package for system test when applications don't use it.
|
|
86
|
-
|
|
87
|
-
*y-yagi*
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
## Rails 8.0.0.1 (December 10, 2024) ##
|
|
91
|
-
|
|
92
|
-
* No changes.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
## Rails 8.0.0 (November 07, 2024) ##
|
|
96
|
-
|
|
97
|
-
* No changes.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## Rails 8.0.0.rc2 (October 30, 2024) ##
|
|
101
|
-
|
|
102
|
-
* Fix incorrect database.yml with `skip_solid`.
|
|
103
|
-
|
|
104
|
-
*Joé Dupuis*
|
|
105
|
-
|
|
106
|
-
* Set `Regexp.timeout` to `1`s by default to improve security over Regexp Denial-of-Service attacks.
|
|
107
|
-
|
|
108
|
-
*Rafael Mendonça França*
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
## Rails 8.0.0.rc1 (October 19, 2024) ##
|
|
112
|
-
|
|
113
|
-
* Remove deprecated support to extend Rails console through `Rails::ConsoleMethods`.
|
|
114
|
-
|
|
115
|
-
*Rafael Mendonça França*
|
|
116
|
-
|
|
117
|
-
* Remove deprecated file `rails/console/helpers`.
|
|
118
|
-
|
|
119
|
-
*Rafael Mendonça França*
|
|
120
|
-
|
|
121
|
-
* Remove deprecated file `rails/console/app`.
|
|
122
|
-
|
|
123
|
-
*Rafael Mendonça França*
|
|
124
|
-
|
|
125
|
-
* Remove deprecated `config.read_encrypted_secrets`.
|
|
126
|
-
|
|
127
|
-
*Rafael Mendonça França*
|
|
128
|
-
|
|
129
|
-
* Add Kamal support for devcontainers
|
|
130
|
-
|
|
131
|
-
Previously generated devcontainer could not use docker and therefore Kamal.
|
|
132
|
-
|
|
133
|
-
*Joé Dupuis*
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
## Rails 8.0.0.beta1 (September 26, 2024) ##
|
|
137
|
-
|
|
138
|
-
* Exit `rails g` with code 1 if generator could not be found.
|
|
139
|
-
|
|
140
|
-
Previously `rails g` returned 0, which would make it harder to catch typos in scripts calling `rails g`.
|
|
141
|
-
|
|
142
|
-
*Christopher Özbek*
|
|
143
|
-
|
|
144
|
-
* Remove `require_*` statements from application.css to align with the transition from Sprockets to Propshaft.
|
|
145
|
-
|
|
146
|
-
With Propshaft as the default asset pipeline in Rails 8, the require_tree and require_self clauses in application.css are no longer necessary, as they were specific to Sprockets. Additionally, the comment has been updated to clarify that CSS precedence now follows standard cascading order without automatic prioritization by the asset pipeline.
|
|
147
|
-
|
|
148
|
-
*Eduardo Alencar*
|
|
149
|
-
|
|
150
|
-
* Do not include redis by default in generated Dev Containers.
|
|
151
|
-
|
|
152
|
-
Now that applications use the Solid Queue and Solid Cache gems by default, we do not need to include redis
|
|
153
|
-
in the Dev Container. We will only include redis if `--skip-solid` is used when generating an app that uses
|
|
154
|
-
Active Job or Action Cable.
|
|
155
|
-
|
|
156
|
-
When generating a Dev Container for an existing app, we will not include redis if either of the solid gems
|
|
157
|
-
are in use.
|
|
158
|
-
|
|
159
|
-
*Andrew Novoselac*
|
|
160
|
-
|
|
161
|
-
* Use [Solid Cable](https://github.com/rails/solid_cable) as the default Action Cable adapter in production, configured as a separate queue database in config/database.yml. It keeps messages in a table and continuously polls for updates. This makes it possible to drop the common dependency on Redis, if it isn't needed for any other purpose. Despite polling, the performance of Solid Cable is comparable to Redis in most situations. And in all circumstances, it makes it easier to deploy Rails when Redis is no longer a required dependency for Action Cable functionality.
|
|
162
|
-
|
|
163
|
-
*DHH*
|
|
164
|
-
|
|
165
|
-
* Use [Solid Queue](https://github.com/rails/solid_queue) as the default Active Job backend in production, configured as a separate queue database in config/database.yml. In a single-server deployment, it'll run as a Puma plugin. This is configured in `config/deploy.yml` and can easily be changed to use a dedicated jobs machine.
|
|
166
|
-
|
|
167
|
-
*DHH*
|
|
168
|
-
|
|
169
|
-
* Use [Solid Cache](https://github.com/rails/solid_cache) as the default Rails.cache backend in production, configured as a separate cache database in config/database.yml.
|
|
170
|
-
|
|
171
|
-
*DHH*
|
|
172
|
-
|
|
173
|
-
* Add Rails::Rack::SilenceRequest middleware and use it via `config.silence_healthcheck_path = path`
|
|
174
|
-
to silence requests to "/up". This prevents the Kamal-required health checks from clogging up
|
|
175
|
-
the production logs.
|
|
112
|
+
*Steve Polito*
|
|
176
113
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
* Introduce `mariadb-mysql` and `mariadb-trilogy` database options for `rails new`
|
|
114
|
+
* Colorize the Rails console prompt even on non standard environments.
|
|
180
115
|
|
|
181
|
-
|
|
182
|
-
Dev Container. The original `mysql` and `trilogy` options will use `mysql`. Users who are not
|
|
183
|
-
generating a Dev Container do not need to use the new options.
|
|
116
|
+
*Lorenzo Zabot*
|
|
184
117
|
|
|
185
|
-
|
|
118
|
+
* Don't enable YJIT in development and test environments
|
|
186
119
|
|
|
187
|
-
|
|
120
|
+
Development and test environments tend to reload code and redefine methods (e.g. mocking),
|
|
121
|
+
hence YJIT isn't generally faster in these environments.
|
|
188
122
|
|
|
189
|
-
|
|
190
|
-
`Rails::CodeStatistics.register_directory`.
|
|
123
|
+
*Ali Ismayilov*, *Jean Boussier*
|
|
191
124
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
```ruby
|
|
195
|
-
require "rails/code_statistics"
|
|
196
|
-
Rails::CodeStatistics.register_directory('My Directory', 'path/to/dir')
|
|
197
|
-
```
|
|
125
|
+
* Only include PermissionsPolicy::Middleware if policy is configured.
|
|
198
126
|
|
|
199
127
|
*Petrik de Heus*
|
|
200
128
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
This can be used to trace troublesome SQL statements back to the application
|
|
204
|
-
code that generated these statements. It is also useful when using multiple
|
|
205
|
-
databases because the query logs can identify which database is being used.
|
|
206
|
-
|
|
207
|
-
*Matheus Richard*
|
|
208
|
-
|
|
209
|
-
* Defer route drawing to the first request, or when url_helpers are called
|
|
210
|
-
|
|
211
|
-
Executes the first routes reload in middleware, or when a route set's
|
|
212
|
-
url_helpers receives a route call / asked if it responds to a route.
|
|
213
|
-
Previously, this was executed unconditionally on boot, which can
|
|
214
|
-
slow down boot time unnecessarily for larger apps with lots of routes.
|
|
215
|
-
|
|
216
|
-
Environments like production that have `config.eager_load = true` will
|
|
217
|
-
continue to eagerly load routes on boot.
|
|
218
|
-
|
|
219
|
-
*Gannon McGibbon*
|
|
220
|
-
|
|
221
|
-
* Generate form helpers to use `textarea*` methods instead of `text_area*` methods
|
|
222
|
-
|
|
223
|
-
*Sean Doyle*
|
|
224
|
-
|
|
225
|
-
* Add authentication generator to give a basic start to an authentication system using database-tracked sessions and password reset.
|
|
226
|
-
|
|
227
|
-
Generate with...
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
bin/rails generate authentication
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
Generated files:
|
|
234
|
-
|
|
235
|
-
```
|
|
236
|
-
app/models/current.rb
|
|
237
|
-
app/models/user.rb
|
|
238
|
-
app/models/session.rb
|
|
239
|
-
app/controllers/sessions_controller.rb
|
|
240
|
-
app/controllers/passwords_controller.rb
|
|
241
|
-
app/mailers/passwords_mailer.rb
|
|
242
|
-
app/views/sessions/new.html.erb
|
|
243
|
-
app/views/passwords/new.html.erb
|
|
244
|
-
app/views/passwords/edit.html.erb
|
|
245
|
-
app/views/passwords_mailer/reset.html.erb
|
|
246
|
-
app/views/passwords_mailer/reset.text.erb
|
|
247
|
-
db/migrate/xxxxxxx_create_users.rb
|
|
248
|
-
db/migrate/xxxxxxx_create_sessions.rb
|
|
249
|
-
test/mailers/previews/passwords_mailer_preview.rb
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
*DHH*
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
* Add not-null type modifier to migration attributes.
|
|
256
|
-
|
|
257
|
-
Generating with...
|
|
258
|
-
|
|
259
|
-
```
|
|
260
|
-
bin/rails generate migration CreateUsers email_address:string!:uniq password_digest:string!
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
Produces:
|
|
264
|
-
|
|
265
|
-
```ruby
|
|
266
|
-
class CreateUsers < ActiveRecord::Migration[8.0]
|
|
267
|
-
def change
|
|
268
|
-
create_table :users do |t|
|
|
269
|
-
t.string :email_address, null: false
|
|
270
|
-
t.string :password_digest, null: false
|
|
271
|
-
|
|
272
|
-
t.timestamps
|
|
273
|
-
end
|
|
274
|
-
add_index :users, :email_address, unique: true
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
*DHH*
|
|
280
|
-
|
|
281
|
-
* Add a `script` folder to applications, and a scripts generator.
|
|
282
|
-
|
|
283
|
-
The new `script` folder is meant to hold one-off or general purpose scripts,
|
|
284
|
-
such as data migration scripts, cleanup scripts, etc.
|
|
285
|
-
|
|
286
|
-
A new script generator allows you to create such scripts:
|
|
287
|
-
|
|
288
|
-
```
|
|
289
|
-
bin/rails generate script my_script
|
|
290
|
-
bin/rails generate script data/backfill
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
You can run the generated script using:
|
|
294
|
-
|
|
295
|
-
```
|
|
296
|
-
bundle exec ruby script/my_script.rb
|
|
297
|
-
bundle exec ruby script/data/backfill.rb
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
*Jerome Dalbert*, *Haroon Ahmed*
|
|
301
|
-
|
|
302
|
-
* Deprecate `bin/rake stats` in favor of `bin/rails stats`.
|
|
303
|
-
|
|
304
|
-
*Juan Vásquez*
|
|
305
|
-
|
|
306
|
-
* Add internal page `/rails/info/notes`, that displays the same information as `bin/rails notes`.
|
|
307
|
-
|
|
308
|
-
*Deepak Mahakale*
|
|
309
|
-
|
|
310
|
-
* Add Rubocop and GitHub Actions to plugin generator.
|
|
311
|
-
This can be skipped using --skip-rubocop and --skip-ci.
|
|
312
|
-
|
|
313
|
-
*Chris Oliver*
|
|
314
|
-
|
|
315
|
-
* Use Kamal for deployment by default, which includes generating a Rails-specific config/deploy.yml.
|
|
316
|
-
This can be skipped using --skip-kamal. See more: https://kamal-deploy.org/
|
|
317
|
-
|
|
318
|
-
*DHH*
|
|
319
|
-
|
|
320
|
-
Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/railties/CHANGELOG.md) for previous changes.
|
|
129
|
+
Please check [8-0-stable](https://github.com/rails/rails/blob/8-0-stable/railties/CHANGELOG.md) for previous changes.
|
|
@@ -26,6 +26,8 @@ module Minitest
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
class ProfileReporter < Reporter
|
|
29
|
+
attr_accessor :results
|
|
30
|
+
|
|
29
31
|
def initialize(io = $stdout, options = {})
|
|
30
32
|
super
|
|
31
33
|
@results = []
|
|
@@ -33,26 +35,49 @@ module Minitest
|
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
def record(result)
|
|
36
|
-
|
|
38
|
+
if output_file = ENV["RAILTIES_OUTPUT_FILE"]
|
|
39
|
+
File.open(output_file, "a") do |f|
|
|
40
|
+
# Round-trip for re-serialization
|
|
41
|
+
data = JSON.parse(result.to_json)
|
|
42
|
+
data[:location] = result.location
|
|
43
|
+
f.puts(data.to_json)
|
|
44
|
+
end
|
|
45
|
+
else
|
|
46
|
+
@results << result
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def passed?
|
|
51
|
+
true
|
|
37
52
|
end
|
|
38
53
|
|
|
39
54
|
def report
|
|
40
|
-
|
|
55
|
+
# Skip if we're outputting to a file
|
|
56
|
+
return if ENV["RAILTIES_OUTPUT_FILE"]
|
|
57
|
+
print_summary
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def summary
|
|
61
|
+
print_summary
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
def print_summary
|
|
66
|
+
total_time = @results.sum(&:time)
|
|
41
67
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
68
|
+
@results.sort! { |a, b| b.time <=> a.time }
|
|
69
|
+
slow_results = @results.take(@count)
|
|
70
|
+
slow_tests_total_time = slow_results.sum(&:time)
|
|
45
71
|
|
|
46
|
-
|
|
72
|
+
ratio = (total_time == 0) ? 0.0 : (slow_tests_total_time / total_time) * 100
|
|
47
73
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
io.puts("\nTop %d slowest tests (%.2f seconds, %.1f%% of total time):\n" % [slow_results.size, slow_tests_total_time, ratio])
|
|
75
|
+
slow_results.each do |result|
|
|
76
|
+
io.puts(" %s\n %.4f seconds %s\n" % [result.location, result.time, source_location(result)])
|
|
77
|
+
end
|
|
78
|
+
io.puts("\n")
|
|
51
79
|
end
|
|
52
|
-
io.puts("\n")
|
|
53
|
-
end
|
|
54
80
|
|
|
55
|
-
private
|
|
56
81
|
def source_location(result)
|
|
57
82
|
filename, line = result.source_location
|
|
58
83
|
return "" unless filename
|
|
@@ -80,13 +105,6 @@ module Minitest
|
|
|
80
105
|
options[:fail_fast] = true
|
|
81
106
|
end
|
|
82
107
|
|
|
83
|
-
if Minitest::VERSION > "6" then
|
|
84
|
-
opts.on "-n", "--name PATTERN", "Include /regexp/ or string for run." do |a|
|
|
85
|
-
warn "Please switch from -n/--name to -i/--include"
|
|
86
|
-
options[:include] = a
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
108
|
opts.on("-c", "--[no-]color", "Enable color in the output") do |value|
|
|
91
109
|
options[:color] = value
|
|
92
110
|
end
|
|
@@ -109,8 +127,19 @@ module Minitest
|
|
|
109
127
|
options[:profile] = count
|
|
110
128
|
end
|
|
111
129
|
|
|
130
|
+
opts.on(/^[^-]/) do |test_file|
|
|
131
|
+
options[:test_files] ||= []
|
|
132
|
+
options[:test_files] << test_file
|
|
133
|
+
end
|
|
134
|
+
|
|
112
135
|
options[:color] = true
|
|
113
136
|
options[:output_inline] = true
|
|
137
|
+
|
|
138
|
+
opts.on do
|
|
139
|
+
if ::Rails::TestUnit::Runner.load_test_files
|
|
140
|
+
::Rails::TestUnit::Runner.load_tests(options.fetch(:test_files, []))
|
|
141
|
+
end
|
|
142
|
+
end
|
|
114
143
|
end
|
|
115
144
|
|
|
116
145
|
# Owes great inspiration to test runner trailblazers like RSpec,
|
|
@@ -71,6 +71,11 @@ module Rails
|
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
+
initializer :initialize_event_reporter, group: :all do
|
|
75
|
+
Rails.event.raise_on_error = config.consider_all_requests_local
|
|
76
|
+
Rails.event.debug_mode = config.consider_all_requests_local
|
|
77
|
+
end
|
|
78
|
+
|
|
74
79
|
# Initialize cache early in the stack so railties can make use of it.
|
|
75
80
|
initializer :initialize_cache, group: :all do
|
|
76
81
|
cache_format_version = config.active_support.delete(:cache_format_version)
|
|
@@ -21,6 +21,7 @@ module Rails
|
|
|
21
21
|
:beginning_of_week, :filter_redirect, :x,
|
|
22
22
|
:content_security_policy_report_only,
|
|
23
23
|
:content_security_policy_nonce_generator, :content_security_policy_nonce_directives,
|
|
24
|
+
:content_security_policy_nonce_auto,
|
|
24
25
|
:require_master_key, :credentials, :disable_sandbox, :sandbox_by_default,
|
|
25
26
|
:add_autoload_paths_to_load_path, :rake_eager_load, :server_timing, :log_file_size,
|
|
26
27
|
:dom_testing_default_html_version, :yjit
|
|
@@ -72,6 +73,7 @@ module Rails
|
|
|
72
73
|
@content_security_policy_report_only = false
|
|
73
74
|
@content_security_policy_nonce_generator = nil
|
|
74
75
|
@content_security_policy_nonce_directives = nil
|
|
76
|
+
@content_security_policy_nonce_auto = false
|
|
75
77
|
@require_master_key = false
|
|
76
78
|
@loaded_config_version = nil
|
|
77
79
|
@credentials = ActiveSupport::InheritableOptions.new(credentials_defaults)
|
|
@@ -346,6 +348,30 @@ module Rails
|
|
|
346
348
|
end
|
|
347
349
|
|
|
348
350
|
Regexp.timeout ||= 1 if Regexp.respond_to?(:timeout=)
|
|
351
|
+
when "8.1"
|
|
352
|
+
load_defaults "8.0"
|
|
353
|
+
|
|
354
|
+
# Development and test environments tend to reload code and
|
|
355
|
+
# redefine methods (e.g. mocking), hence YJIT isn't generally
|
|
356
|
+
# faster in these environments.
|
|
357
|
+
self.yjit = !Rails.env.local?
|
|
358
|
+
|
|
359
|
+
if respond_to?(:action_controller)
|
|
360
|
+
action_controller.escape_json_responses = false
|
|
361
|
+
action_controller.action_on_path_relative_redirect = :raise
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
if respond_to?(:active_record)
|
|
365
|
+
active_record.raise_on_missing_required_finder_order_columns = true
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
if respond_to?(:action_view)
|
|
369
|
+
action_view.render_tracker = :ruby
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
if respond_to?(:action_view)
|
|
373
|
+
action_view.remove_hidden_field_autocomplete = true
|
|
374
|
+
end
|
|
349
375
|
else
|
|
350
376
|
raise "Unknown version #{target_version.to_s.inspect}"
|
|
351
377
|
end
|
|
@@ -83,7 +83,7 @@ module Rails
|
|
|
83
83
|
unless config.api_only
|
|
84
84
|
middleware.use ::ActionDispatch::Flash
|
|
85
85
|
middleware.use ::ActionDispatch::ContentSecurityPolicy::Middleware
|
|
86
|
-
middleware.use ::ActionDispatch::PermissionsPolicy::Middleware
|
|
86
|
+
middleware.use ::ActionDispatch::PermissionsPolicy::Middleware if config.permissions_policy
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
middleware.use ::Rack::Head
|
data/lib/rails/application.rb
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require "yaml"
|
|
4
4
|
require "active_support/core_ext/hash/keys"
|
|
5
|
-
require "active_support/core_ext/object/blank"
|
|
6
5
|
require "active_support/key_generator"
|
|
7
6
|
require "active_support/message_verifiers"
|
|
8
|
-
require "active_support/deprecation"
|
|
9
7
|
require "active_support/encrypted_configuration"
|
|
10
8
|
require "active_support/hash_with_indifferent_access"
|
|
11
9
|
require "active_support/configuration_file"
|
|
@@ -616,7 +614,7 @@ module Rails
|
|
|
616
614
|
end
|
|
617
615
|
|
|
618
616
|
def railties_initializers(current) # :nodoc:
|
|
619
|
-
initializers =
|
|
617
|
+
initializers = Initializable::Collection.new
|
|
620
618
|
ordered_railties.reverse.flatten.each do |r|
|
|
621
619
|
if r == self
|
|
622
620
|
initializers += current
|
data/lib/rails/command/base.rb
CHANGED
data/lib/rails/command.rb
CHANGED
|
@@ -91,9 +91,9 @@ module Rails
|
|
|
91
91
|
IRB.conf[:IRB_NAME] = @app.name if IRB.conf[:IRB_NAME] == "irb"
|
|
92
92
|
|
|
93
93
|
IRB.conf[:PROMPT][:RAILS_PROMPT] = {
|
|
94
|
-
PROMPT_I: "#{prompt_prefix}> ",
|
|
95
|
-
PROMPT_S: "#{prompt_prefix}%l ",
|
|
96
|
-
PROMPT_C: "#{prompt_prefix}* ",
|
|
94
|
+
PROMPT_I: "#{prompt_prefix}:%03n> ",
|
|
95
|
+
PROMPT_S: "#{prompt_prefix}:%03n%l ",
|
|
96
|
+
PROMPT_C: "#{prompt_prefix}:%03n* ",
|
|
97
97
|
RETURN: "=> %s\n"
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -122,7 +122,7 @@ module Rails
|
|
|
122
122
|
when "production"
|
|
123
123
|
IRB::Color.colorize("prod", [:RED])
|
|
124
124
|
else
|
|
125
|
-
Rails.env
|
|
125
|
+
IRB::Color.colorize(Rails.env, [:MAGENTA])
|
|
126
126
|
end
|
|
127
127
|
end
|
|
128
128
|
end
|