railties 7.0.2.4 → 7.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +70 -0
- data/lib/minitest/rails_plugin.rb +1 -1
- data/lib/rails/app_updater.rb +6 -1
- data/lib/rails/application/bootstrap.rb +3 -0
- data/lib/rails/application/configuration.rb +24 -2
- data/lib/rails/application/default_middleware_stack.rb +15 -0
- data/lib/rails/application/finisher.rb +14 -12
- data/lib/rails/application.rb +21 -20
- data/lib/rails/command.rb +1 -1
- data/lib/rails/commands/server/server_command.rb +6 -1
- data/lib/rails/console/helpers.rb +2 -2
- data/lib/rails/engine.rb +13 -13
- data/lib/rails/gem_version.rb +3 -3
- data/lib/rails/generators/app_base.rb +10 -2
- data/lib/rails/generators/base.rb +3 -3
- data/lib/rails/generators/named_base.rb +2 -2
- data/lib/rails/generators/rails/app/app_generator.rb +6 -3
- data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +4 -5
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt +38 -20
- data/lib/rails/generators.rb +9 -3
- data/lib/rails/paths.rb +1 -1
- data/lib/rails/rack/logger.rb +7 -8
- data/lib/rails/railtie.rb +9 -3
- data/lib/rails/source_annotation_extractor.rb +1 -1
- data/lib/rails/version.rb +1 -1
- data/lib/rails.rb +7 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8426dae672be312fe1692dddb173520cb38cab1d146901da4e8321a731c4d309
|
4
|
+
data.tar.gz: '086173aa65cfba04c54b052ad3725f2cb55caafc7b2eef3255883f86a51dea3b'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a936aed24714e95363c55d50c008a2d85a4b22951647172b79b7d5faaaa2b49dce611f43bc6099001cc400b91614a49f003f5c68834c218596434c2d6e5ae71
|
7
|
+
data.tar.gz: b863940381ffc5819d6cd191735d30af40603d04946630781ab01ba6d0b6ab3ead22449b95f99fca4f84bbfa06b85b6aa9d3d05cce5ab1df0bd2a8841420d76e
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,73 @@
|
|
1
|
+
## Rails 7.0.4 (September 09, 2022) ##
|
2
|
+
|
3
|
+
* `config.allow_concurrency = false` now use a `Monitor` instead of a `Mutex`
|
4
|
+
|
5
|
+
This allows to enable `config.active_support.executor_around_test_case` even
|
6
|
+
when `config.allow_concurrency` is disabled.
|
7
|
+
|
8
|
+
*Jean Boussier*
|
9
|
+
|
10
|
+
* Skip Active Storage and Action Mailer if Active Job is skipped.
|
11
|
+
|
12
|
+
*Étienne Barrié*
|
13
|
+
|
14
|
+
* Correctly check if frameworks are disabled when running app:update.
|
15
|
+
|
16
|
+
*Étienne Barrié* and *Paulo Barros*
|
17
|
+
|
18
|
+
* Fixed `config.active_support.cache_format_version` never being applied.
|
19
|
+
|
20
|
+
Rails 7.0 shipped with a new serializer for Rails.cache, but the associated config
|
21
|
+
wasn't working properly. Note that even after this fix, it can only be applied from
|
22
|
+
the `application.rb` file.
|
23
|
+
|
24
|
+
*Alex Ghiculescu*
|
25
|
+
|
26
|
+
|
27
|
+
## Rails 7.0.3.1 (July 12, 2022) ##
|
28
|
+
|
29
|
+
* No changes.
|
30
|
+
|
31
|
+
|
32
|
+
## Rails 7.0.3 (May 09, 2022) ##
|
33
|
+
|
34
|
+
* If reloading and eager loading are both enabled, after a reload Rails eager loads again the application code.
|
35
|
+
|
36
|
+
*Xavier Noria*
|
37
|
+
|
38
|
+
* Use `controller_class_path` in `Rails::Generators::NamedBase#route_url`
|
39
|
+
|
40
|
+
The `route_url` method now returns the correct path when generating
|
41
|
+
a namespaced controller with a top-level model using `--model-name`.
|
42
|
+
|
43
|
+
Previously, when running this command:
|
44
|
+
|
45
|
+
``` sh
|
46
|
+
bin/rails generate scaffold_controller Admin/Post --model-name Post
|
47
|
+
```
|
48
|
+
|
49
|
+
the comments above the controller action would look like:
|
50
|
+
|
51
|
+
``` ruby
|
52
|
+
# GET /posts
|
53
|
+
def index
|
54
|
+
@posts = Post.all
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
afterwards, they now look like this:
|
59
|
+
|
60
|
+
``` ruby
|
61
|
+
# GET /admin/posts
|
62
|
+
def index
|
63
|
+
@posts = Post.all
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
Fixes #44662.
|
68
|
+
|
69
|
+
*Andrew White*
|
70
|
+
|
1
71
|
## Rails 7.0.2.4 (April 26, 2022) ##
|
2
72
|
|
3
73
|
* No changes.
|
@@ -49,7 +49,7 @@ module Minitest
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# Owes great inspiration to test runner trailblazers like RSpec,
|
52
|
-
# minitest-reporters, maxitest and others.
|
52
|
+
# minitest-reporters, maxitest, and others.
|
53
53
|
def self.plugin_rails_init(options)
|
54
54
|
unless options[:full_backtrace] || ENV["BACKTRACE"]
|
55
55
|
# Plugin can run without Rails loaded, check before filtering.
|
data/lib/rails/app_updater.rb
CHANGED
@@ -21,10 +21,15 @@ module Rails
|
|
21
21
|
private
|
22
22
|
def generator_options
|
23
23
|
options = { api: !!Rails.application.config.api_only, update: true }
|
24
|
+
options[:skip_active_job] = !defined?(ActiveJob::Railtie)
|
24
25
|
options[:skip_active_record] = !defined?(ActiveRecord::Railtie)
|
25
|
-
options[:skip_active_storage] = !defined?(ActiveStorage::Engine)
|
26
|
+
options[:skip_active_storage] = !defined?(ActiveStorage::Engine)
|
26
27
|
options[:skip_action_mailer] = !defined?(ActionMailer::Railtie)
|
28
|
+
options[:skip_action_mailbox] = !defined?(ActionMailbox::Engine)
|
29
|
+
options[:skip_action_text] = !defined?(ActionText::Engine)
|
27
30
|
options[:skip_action_cable] = !defined?(ActionCable::Engine)
|
31
|
+
options[:skip_test] = !defined?(Rails::TestUnitRailtie)
|
32
|
+
options[:skip_system_test] = Rails.application.config.generators.system_tests.nil?
|
28
33
|
options[:skip_asset_pipeline] = !defined?(Sprockets::Railtie) && !defined?(Propshaft::Railtie)
|
29
34
|
options[:skip_bootsnap] = !defined?(Bootsnap)
|
30
35
|
options[:updating] = true
|
@@ -59,6 +59,9 @@ module Rails
|
|
59
59
|
|
60
60
|
# Initialize cache early in the stack so railties can make use of it.
|
61
61
|
initializer :initialize_cache, group: :all do
|
62
|
+
cache_format_version = config.active_support.delete(:cache_format_version)
|
63
|
+
ActiveSupport.cache_format_version = cache_format_version if cache_format_version
|
64
|
+
|
62
65
|
unless Rails.cache
|
63
66
|
Rails.cache = ActiveSupport::Cache.lookup_store(*config.cache_store)
|
64
67
|
|
@@ -334,8 +334,14 @@ module Rails
|
|
334
334
|
config = if yaml&.exist?
|
335
335
|
loaded_yaml = ActiveSupport::ConfigurationFile.parse(yaml)
|
336
336
|
if (shared = loaded_yaml.delete("shared"))
|
337
|
-
loaded_yaml.each do |
|
338
|
-
values.
|
337
|
+
loaded_yaml.each do |env, config|
|
338
|
+
if config.is_a?(Hash) && config.values.all?(Hash)
|
339
|
+
config.map do |name, sub_config|
|
340
|
+
sub_config.reverse_merge!(shared)
|
341
|
+
end
|
342
|
+
else
|
343
|
+
config.reverse_merge!(shared)
|
344
|
+
end
|
339
345
|
end
|
340
346
|
end
|
341
347
|
Hash.new(shared).merge(loaded_yaml)
|
@@ -361,6 +367,20 @@ module Rails
|
|
361
367
|
generators.colorize_logging = val
|
362
368
|
end
|
363
369
|
|
370
|
+
# Specifies what class to use to store the session. Possible values
|
371
|
+
# are +:cookie_store+, +:mem_cache_store+, a custom store, or
|
372
|
+
# +:disabled+. +:disabled+ tells Rails not to deal with sessions.
|
373
|
+
#
|
374
|
+
# Additional options will be set as +session_options+:
|
375
|
+
#
|
376
|
+
# config.session_store :cookie_store, key: "_your_app_session"
|
377
|
+
# config.session_options # => {key: "_your_app_session"}
|
378
|
+
#
|
379
|
+
# If a custom store is specified as a symbol, it will be resolved to
|
380
|
+
# the +ActionDispatch::Session+ namespace:
|
381
|
+
#
|
382
|
+
# # use ActionDispatch::Session::MyCustomStore as the session store
|
383
|
+
# config.session_store :my_custom_store
|
364
384
|
def session_store(new_session_store = nil, **options)
|
365
385
|
if new_session_store
|
366
386
|
if new_session_store == :active_record_store
|
@@ -396,6 +416,7 @@ module Rails
|
|
396
416
|
Rails::SourceAnnotationExtractor::Annotation
|
397
417
|
end
|
398
418
|
|
419
|
+
# Configures the ActionDispatch::ContentSecurityPolicy.
|
399
420
|
def content_security_policy(&block)
|
400
421
|
if block_given?
|
401
422
|
@content_security_policy = ActionDispatch::ContentSecurityPolicy.new(&block)
|
@@ -404,6 +425,7 @@ module Rails
|
|
404
425
|
end
|
405
426
|
end
|
406
427
|
|
428
|
+
# Configures the ActionDispatch::PermissionsPolicy.
|
407
429
|
def permissions_policy(&block)
|
408
430
|
if block_given?
|
409
431
|
@permissions_policy = ActionDispatch::PermissionsPolicy.new(&block)
|
@@ -81,6 +81,21 @@ module Rails
|
|
81
81
|
middleware.use ::Rack::ETag, "no-cache"
|
82
82
|
|
83
83
|
middleware.use ::Rack::TempfileReaper unless config.api_only
|
84
|
+
|
85
|
+
if config.respond_to?(:active_record)
|
86
|
+
if selector_options = config.active_record.database_selector
|
87
|
+
resolver = config.active_record.database_resolver
|
88
|
+
context = config.active_record.database_resolver_context
|
89
|
+
|
90
|
+
middleware.use ::ActiveRecord::Middleware::DatabaseSelector, resolver, context, selector_options
|
91
|
+
end
|
92
|
+
|
93
|
+
if shard_resolver = config.active_record.shard_resolver
|
94
|
+
options = config.active_record.shard_selector || {}
|
95
|
+
|
96
|
+
middleware.use ::ActiveRecord::Middleware::ShardSelector, shard_resolver, options
|
97
|
+
end
|
98
|
+
end
|
84
99
|
end
|
85
100
|
end
|
86
101
|
|
@@ -35,10 +35,6 @@ module Rails
|
|
35
35
|
ActiveSupport::Dependencies._autoloaded_tracked_classes << value
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
39
|
-
autoloader.on_unload do |_cpath, value, _abspath|
|
40
|
-
value.before_remove_const if value.respond_to?(:before_remove_const)
|
41
|
-
end
|
42
38
|
end
|
43
39
|
|
44
40
|
autoloader.setup
|
@@ -72,11 +68,17 @@ module Rails
|
|
72
68
|
app.reloader.prepare!
|
73
69
|
end
|
74
70
|
|
75
|
-
initializer :eager_load! do
|
71
|
+
initializer :eager_load! do |app|
|
76
72
|
if config.eager_load
|
77
73
|
ActiveSupport.run_load_hooks(:before_eager_load, self)
|
78
74
|
Zeitwerk::Loader.eager_load_all
|
79
75
|
config.eager_load_namespaces.each(&:eager_load!)
|
76
|
+
|
77
|
+
unless config.cache_classes
|
78
|
+
app.reloader.after_class_unload do
|
79
|
+
Rails.autoloaders.main.eager_load
|
80
|
+
end
|
81
|
+
end
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -85,21 +87,21 @@ module Rails
|
|
85
87
|
ActiveSupport.run_load_hooks(:after_initialize, self)
|
86
88
|
end
|
87
89
|
|
88
|
-
class
|
89
|
-
def initialize(
|
90
|
-
@
|
90
|
+
class MonitorHook # :nodoc:
|
91
|
+
def initialize(monitor = Monitor.new)
|
92
|
+
@monitor = monitor
|
91
93
|
end
|
92
94
|
|
93
95
|
def run
|
94
|
-
@
|
96
|
+
@monitor.enter
|
95
97
|
end
|
96
98
|
|
97
99
|
def complete(_state)
|
98
|
-
@
|
100
|
+
@monitor.exit
|
99
101
|
end
|
100
102
|
end
|
101
103
|
|
102
|
-
module InterlockHook
|
104
|
+
module InterlockHook # :nodoc:
|
103
105
|
def self.run
|
104
106
|
ActiveSupport::Dependencies.interlock.start_running
|
105
107
|
end
|
@@ -114,7 +116,7 @@ module Rails
|
|
114
116
|
# User has explicitly opted out of concurrent request
|
115
117
|
# handling: presumably their code is not threadsafe
|
116
118
|
|
117
|
-
app.executor.register_hook(
|
119
|
+
app.executor.register_hook(MonitorHook.new, outer: true)
|
118
120
|
|
119
121
|
elsif config.allow_concurrency == :unsafe
|
120
122
|
# Do nothing, even if we know this is dangerous. This is the
|
data/lib/rails/application.rb
CHANGED
@@ -22,12 +22,12 @@ module Rails
|
|
22
22
|
# Rails::Application::Bootstrap) and finishing initializers, after all the others
|
23
23
|
# are executed (check Rails::Application::Finisher).
|
24
24
|
#
|
25
|
-
# == Configuration
|
25
|
+
# == \Configuration
|
26
26
|
#
|
27
27
|
# Besides providing the same configuration as Rails::Engine and Rails::Railtie,
|
28
28
|
# the application object has several specific configurations, for example
|
29
|
-
#
|
30
|
-
#
|
29
|
+
# +cache_classes+, +consider_all_requests_local+, +filter_parameters+,
|
30
|
+
# +logger+, and so forth.
|
31
31
|
#
|
32
32
|
# Check Rails::Application::Configuration to see them all.
|
33
33
|
#
|
@@ -43,21 +43,21 @@ module Rails
|
|
43
43
|
# == Booting process
|
44
44
|
#
|
45
45
|
# The application is also responsible for setting up and executing the booting
|
46
|
-
# process. From the moment you require
|
46
|
+
# process. From the moment you require <tt>config/application.rb</tt> in your app,
|
47
47
|
# the booting process goes like this:
|
48
48
|
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
49
|
+
# 1. <tt>require "config/boot.rb"</tt> to set up load paths.
|
50
|
+
# 2. +require+ railties and engines.
|
51
|
+
# 3. Define +Rails.application+ as <tt>class MyApp::Application < Rails::Application</tt>.
|
52
|
+
# 4. Run +config.before_configuration+ callbacks.
|
53
|
+
# 5. Load <tt>config/environments/ENV.rb</tt>.
|
54
|
+
# 6. Run +config.before_initialize+ callbacks.
|
55
|
+
# 7. Run <tt>Railtie#initializer</tt> defined by railties, engines, and application.
|
56
|
+
# One by one, each engine sets up its load paths and routes, and runs its <tt>config/initializers/*</tt> files.
|
57
|
+
# 8. Custom <tt>Railtie#initializers</tt> added by railties, engines, and applications are executed.
|
58
|
+
# 9. Build the middleware stack and run +to_prepare+ callbacks.
|
59
|
+
# 10. Run +config.before_eager_load+ and +eager_load!+ if +eager_load+ is +true+.
|
60
|
+
# 11. Run +config.after_initialize+ callbacks.
|
61
61
|
class Application < Engine
|
62
62
|
autoload :Bootstrap, "rails/application/bootstrap"
|
63
63
|
autoload :Configuration, "rails/application/configuration"
|
@@ -175,7 +175,7 @@ module Rails
|
|
175
175
|
# Rails.application.message_verifier('sensitive_data').verify(message)
|
176
176
|
# # => 'my sensible data'
|
177
177
|
#
|
178
|
-
# See the
|
178
|
+
# See the ActiveSupport::MessageVerifier documentation for more information.
|
179
179
|
def message_verifier(verifier_name)
|
180
180
|
@message_verifiers[verifier_name] ||= begin
|
181
181
|
secret = key_generator.generate_key(verifier_name.to_s)
|
@@ -403,13 +403,14 @@ module Rails
|
|
403
403
|
attr_writer :secrets, :credentials
|
404
404
|
|
405
405
|
# The secret_key_base is used as the input secret to the application's key generator, which in turn
|
406
|
-
# is used to create all
|
406
|
+
# is used to create all ActiveSupport::MessageVerifier and ActiveSupport::MessageEncryptor instances,
|
407
|
+
# including the ones that sign and encrypt cookies.
|
407
408
|
#
|
408
409
|
# In development and test, this is randomly generated and stored in a
|
409
410
|
# temporary file in <tt>tmp/development_secret.txt</tt>.
|
410
411
|
#
|
411
|
-
# In all other environments, we look for it first in ENV["SECRET_KEY_BASE"]
|
412
|
-
# then credentials.secret_key_base
|
412
|
+
# In all other environments, we look for it first in <tt>ENV["SECRET_KEY_BASE"]</tt>,
|
413
|
+
# then +credentials.secret_key_base+, and finally +secrets.secret_key_base+. For most applications,
|
413
414
|
# the correct place to store it is in the encrypted credentials file.
|
414
415
|
def secret_key_base
|
415
416
|
if Rails.env.development? || Rails.env.test?
|
data/lib/rails/command.rb
CHANGED
@@ -26,7 +26,7 @@ module Rails
|
|
26
26
|
ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development"
|
27
27
|
end
|
28
28
|
|
29
|
-
# Receives a namespace, arguments and the behavior to invoke the command.
|
29
|
+
# Receives a namespace, arguments, and the behavior to invoke the command.
|
30
30
|
def invoke(full_namespace, args = [], **config)
|
31
31
|
namespace = full_namespace = full_namespace.to_s
|
32
32
|
|
@@ -263,8 +263,13 @@ module Rails
|
|
263
263
|
MSG
|
264
264
|
else
|
265
265
|
error = CorrectableError.new("Could not find server '#{server}'.", server, RACK_SERVERS)
|
266
|
+
if error.respond_to?(:detailed_message)
|
267
|
+
formatted_message = error.detailed_message
|
268
|
+
else
|
269
|
+
formatted_message = error.message
|
270
|
+
end
|
266
271
|
<<~MSG
|
267
|
-
#{
|
272
|
+
#{formatted_message}
|
268
273
|
Run `bin/rails server --help` for more options.
|
269
274
|
MSG
|
270
275
|
end
|
@@ -4,14 +4,14 @@ module Rails
|
|
4
4
|
module ConsoleMethods
|
5
5
|
# Gets the helper methods available to the controller.
|
6
6
|
#
|
7
|
-
# This method assumes an +ApplicationController+ exists, and it extends
|
7
|
+
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
8
8
|
def helper
|
9
9
|
ApplicationController.helpers
|
10
10
|
end
|
11
11
|
|
12
12
|
# Gets a new instance of a controller object.
|
13
13
|
#
|
14
|
-
# This method assumes an +ApplicationController+ exists, and it extends
|
14
|
+
# This method assumes an +ApplicationController+ exists, and that it extends ActionController::Base.
|
15
15
|
def controller
|
16
16
|
@controller ||= ApplicationController.new
|
17
17
|
end
|
data/lib/rails/engine.rb
CHANGED
@@ -11,10 +11,10 @@ require "thread"
|
|
11
11
|
module Rails
|
12
12
|
# <tt>Rails::Engine</tt> allows you to wrap a specific Rails application or subset of
|
13
13
|
# functionality and share it with other applications or within a larger packaged application.
|
14
|
-
# Every
|
14
|
+
# Every Rails::Application is just an engine, which allows for simple
|
15
15
|
# feature and application sharing.
|
16
16
|
#
|
17
|
-
# Any <tt>Rails::Engine</tt> is also a
|
17
|
+
# Any <tt>Rails::Engine</tt> is also a Rails::Railtie, so the same
|
18
18
|
# methods (like <tt>rake_tasks</tt> and +generators+) and configuration
|
19
19
|
# options that are available in railties can also be used in engines.
|
20
20
|
#
|
@@ -31,7 +31,7 @@ module Rails
|
|
31
31
|
# end
|
32
32
|
#
|
33
33
|
# Then ensure that this file is loaded at the top of your <tt>config/application.rb</tt>
|
34
|
-
# (or in your +Gemfile+) and it will automatically load models, controllers and helpers
|
34
|
+
# (or in your +Gemfile+), and it will automatically load models, controllers, and helpers
|
35
35
|
# inside +app+, load routes at <tt>config/routes.rb</tt>, load locales at
|
36
36
|
# <tt>config/locales/**/*</tt>, and load tasks at <tt>lib/tasks/**/*</tt>.
|
37
37
|
#
|
@@ -192,13 +192,13 @@ module Rails
|
|
192
192
|
#
|
193
193
|
# == Isolated Engine
|
194
194
|
#
|
195
|
-
# Normally when you create controllers, helpers and models inside an engine, they are treated
|
195
|
+
# Normally when you create controllers, helpers, and models inside an engine, they are treated
|
196
196
|
# as if they were created inside the application itself. This means that all helpers and
|
197
197
|
# named routes from the application will be available to your engine's controllers as well.
|
198
198
|
#
|
199
199
|
# However, sometimes you want to isolate your engine from the application, especially if your engine
|
200
200
|
# has its own router. To do that, you simply need to call +isolate_namespace+. This method requires
|
201
|
-
# you to pass a module where all your controllers, helpers and models should be nested to:
|
201
|
+
# you to pass a module where all your controllers, helpers, and models should be nested to:
|
202
202
|
#
|
203
203
|
# module MyEngine
|
204
204
|
# class Engine < Rails::Engine
|
@@ -236,9 +236,9 @@ module Rails
|
|
236
236
|
# +articles_path+, like you would do with your main application.
|
237
237
|
#
|
238
238
|
# To make this behavior consistent with other parts of the framework,
|
239
|
-
# isolated engines also have an effect on
|
239
|
+
# isolated engines also have an effect on ActiveModel::Naming. In a
|
240
240
|
# normal Rails app, when you use a namespaced model such as
|
241
|
-
# <tt>Namespace::Article</tt>,
|
241
|
+
# <tt>Namespace::Article</tt>, ActiveModel::Naming will generate
|
242
242
|
# names with the prefix "namespace". In an isolated engine, the prefix will
|
243
243
|
# be omitted in URL helpers and form fields, for convenience.
|
244
244
|
#
|
@@ -442,7 +442,7 @@ module Rails
|
|
442
442
|
end
|
443
443
|
|
444
444
|
# Load console and invoke the registered hooks.
|
445
|
-
# Check
|
445
|
+
# Check Rails::Railtie.console for more info.
|
446
446
|
def load_console(app = self)
|
447
447
|
require "rails/console/app"
|
448
448
|
require "rails/console/helpers"
|
@@ -451,14 +451,14 @@ module Rails
|
|
451
451
|
end
|
452
452
|
|
453
453
|
# Load Rails runner and invoke the registered hooks.
|
454
|
-
# Check
|
454
|
+
# Check Rails::Railtie.runner for more info.
|
455
455
|
def load_runner(app = self)
|
456
456
|
run_runner_blocks(app)
|
457
457
|
self
|
458
458
|
end
|
459
459
|
|
460
|
-
# Load Rake
|
461
|
-
# Check
|
460
|
+
# Load Rake and railties tasks, and invoke the registered hooks.
|
461
|
+
# Check Rails::Railtie.rake_tasks for more info.
|
462
462
|
def load_tasks(app = self)
|
463
463
|
require "rake"
|
464
464
|
run_tasks_blocks(app)
|
@@ -466,7 +466,7 @@ module Rails
|
|
466
466
|
end
|
467
467
|
|
468
468
|
# Load Rails generators and invoke the registered hooks.
|
469
|
-
# Check
|
469
|
+
# Check Rails::Railtie.generators for more info.
|
470
470
|
def load_generators(app = self)
|
471
471
|
require "rails/generators"
|
472
472
|
run_generators_blocks(app)
|
@@ -475,7 +475,7 @@ module Rails
|
|
475
475
|
end
|
476
476
|
|
477
477
|
# Invoke the server registered hooks.
|
478
|
-
# Check
|
478
|
+
# Check Rails::Railtie.server for more info.
|
479
479
|
def load_server(app = self)
|
480
480
|
run_server_blocks(app)
|
481
481
|
self
|
data/lib/rails/gem_version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Rails
|
4
|
-
# Returns the version of
|
4
|
+
# Returns the currently loaded version of Rails as a <tt>Gem::Version</tt>.
|
5
5
|
def self.gem_version
|
6
6
|
Gem::Version.new VERSION::STRING
|
7
7
|
end
|
@@ -9,8 +9,8 @@ module Rails
|
|
9
9
|
module VERSION
|
10
10
|
MAJOR = 7
|
11
11
|
MINOR = 0
|
12
|
-
TINY =
|
13
|
-
PRE =
|
12
|
+
TINY = 4
|
13
|
+
PRE = nil
|
14
14
|
|
15
15
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
16
16
|
end
|
@@ -187,12 +187,12 @@ module Rails
|
|
187
187
|
[
|
188
188
|
options.values_at(
|
189
189
|
:skip_active_record,
|
190
|
-
:skip_action_mailer,
|
191
190
|
:skip_test,
|
192
191
|
:skip_action_cable,
|
193
192
|
:skip_active_job
|
194
193
|
),
|
195
194
|
skip_active_storage?,
|
195
|
+
skip_action_mailer?,
|
196
196
|
skip_action_mailbox?,
|
197
197
|
skip_action_text?
|
198
198
|
].flatten.none?
|
@@ -220,7 +220,11 @@ module Rails
|
|
220
220
|
end
|
221
221
|
|
222
222
|
def skip_active_storage? # :doc:
|
223
|
-
options[:skip_active_storage] || options[:skip_active_record]
|
223
|
+
options[:skip_active_storage] || options[:skip_active_record] || options[:skip_active_job]
|
224
|
+
end
|
225
|
+
|
226
|
+
def skip_action_mailer? # :doc:
|
227
|
+
options[:skip_action_mailer] || options[:skip_active_job]
|
224
228
|
end
|
225
229
|
|
226
230
|
def skip_action_mailbox? # :doc:
|
@@ -239,6 +243,10 @@ module Rails
|
|
239
243
|
options[:skip_asset_pipeline] || options[:asset_pipeline] != "sprockets"
|
240
244
|
end
|
241
245
|
|
246
|
+
def skip_propshaft?
|
247
|
+
options[:skip_asset_pipeline] || options[:asset_pipeline] != "propshaft"
|
248
|
+
end
|
249
|
+
|
242
250
|
|
243
251
|
class GemfileEntry < Struct.new(:name, :version, :comment, :options, :commented_out)
|
244
252
|
def initialize(name, version, comment, options = {}, commented_out = false)
|
@@ -94,7 +94,7 @@ module Rails
|
|
94
94
|
#
|
95
95
|
# The first and last part used to find the generator to be invoked are
|
96
96
|
# guessed based on class invokes hook_for, as noticed in the example above.
|
97
|
-
# This can be customized with two options:
|
97
|
+
# This can be customized with two options: +:in+ and +:as+.
|
98
98
|
#
|
99
99
|
# Let's suppose you are creating a generator that needs to invoke the
|
100
100
|
# controller generator from test unit. Your first attempt is:
|
@@ -108,7 +108,7 @@ module Rails
|
|
108
108
|
# "test_unit:awesome", "test_unit"
|
109
109
|
#
|
110
110
|
# Which is not the desired lookup. You can change it by providing the
|
111
|
-
#
|
111
|
+
# +:as+ option:
|
112
112
|
#
|
113
113
|
# class AwesomeGenerator < Rails::Generators::Base
|
114
114
|
# hook_for :test_framework, as: :controller
|
@@ -119,7 +119,7 @@ module Rails
|
|
119
119
|
# "test_unit:controller", "test_unit"
|
120
120
|
#
|
121
121
|
# Similarly, if you want it to also look up in the rails namespace, you
|
122
|
-
# just need to provide the
|
122
|
+
# just need to provide the +:in+ value:
|
123
123
|
#
|
124
124
|
# class AwesomeGenerator < Rails::Generators::Base
|
125
125
|
# hook_for :test_framework, in: :rails, as: :controller
|
@@ -127,7 +127,7 @@ module Rails
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def route_url # :doc:
|
130
|
-
@route_url ||=
|
130
|
+
@route_url ||= controller_class_path.collect { |dname| "/" + dname }.join + "/" + plural_file_name
|
131
131
|
end
|
132
132
|
|
133
133
|
def url_helper_prefix # :doc:
|
@@ -202,7 +202,7 @@ module Rails
|
|
202
202
|
end
|
203
203
|
|
204
204
|
# Add a class collisions name to be checked on class initialization. You
|
205
|
-
# can supply a hash with a
|
205
|
+
# can supply a hash with a +:prefix+ or +:suffix+ to be tested.
|
206
206
|
#
|
207
207
|
# ==== Examples
|
208
208
|
#
|
@@ -138,7 +138,7 @@ module Rails
|
|
138
138
|
template "config/storage.yml"
|
139
139
|
end
|
140
140
|
|
141
|
-
if skip_sprockets? && !assets_config_exist
|
141
|
+
if skip_sprockets? && skip_propshaft? && !assets_config_exist
|
142
142
|
remove_file "config/initializers/assets.rb"
|
143
143
|
end
|
144
144
|
|
@@ -457,9 +457,12 @@ module Rails
|
|
457
457
|
end
|
458
458
|
end
|
459
459
|
|
460
|
-
def
|
461
|
-
if skip_sprockets?
|
460
|
+
def delete_assets_initializer_skipping_sprockets_and_propshaft
|
461
|
+
if skip_sprockets? && skip_propshaft?
|
462
462
|
remove_file "config/initializers/assets.rb"
|
463
|
+
end
|
464
|
+
|
465
|
+
if skip_sprockets?
|
463
466
|
remove_file "app/assets/config/manifest.js"
|
464
467
|
remove_dir "app/assets/config"
|
465
468
|
remove_file "app/assets/stylesheets/application.css"
|
data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
|
-
# Define an application-wide content security policy
|
4
|
-
#
|
5
|
-
# https://
|
3
|
+
# Define an application-wide content security policy.
|
4
|
+
# See the Securing Rails Applications Guide for more information:
|
5
|
+
# https://guides.rubyonrails.org/security.html#content-security-policy-header
|
6
6
|
|
7
7
|
# Rails.application.configure do
|
8
8
|
# config.content_security_policy do |policy|
|
@@ -20,7 +20,6 @@
|
|
20
20
|
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
|
21
21
|
# config.content_security_policy_nonce_directives = %w(script-src)
|
22
22
|
#
|
23
|
-
# # Report
|
24
|
-
# # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
|
23
|
+
# # Report violations without enforcing the policy.
|
25
24
|
# # config.content_security_policy_report_only = true
|
26
25
|
# end
|
data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_7_0.rb.tt
CHANGED
@@ -34,13 +34,6 @@
|
|
34
34
|
# implementation.
|
35
35
|
# Rails.application.config.active_support.remove_deprecated_time_with_zone_name = true
|
36
36
|
|
37
|
-
# Change the format of the cache entry.
|
38
|
-
# Changing this default means that all new cache entries added to the cache
|
39
|
-
# will have a different format that is not supported by Rails 6.1 applications.
|
40
|
-
# Only change this value after your application is fully deployed to Rails 7.0
|
41
|
-
# and you have no plans to rollback.
|
42
|
-
# Rails.application.config.active_support.cache_format_version = 7.0
|
43
|
-
|
44
37
|
# Calls `Rails.application.executor.wrap` around test cases.
|
45
38
|
# This makes test cases behave closer to an actual request or job.
|
46
39
|
# Several features that are normally disabled in test, such as Active Record query cache
|
@@ -71,7 +64,7 @@
|
|
71
64
|
# This default means that all columns will be referenced in INSERT queries
|
72
65
|
# regardless of whether they have a default or not.
|
73
66
|
# Rails.application.config.active_record.partial_inserts = false
|
74
|
-
|
67
|
+
|
75
68
|
# Protect from open redirect attacks in `redirect_back_or_to` and `redirect_to`.
|
76
69
|
# Rails.application.config.action_controller.raise_on_open_redirects = true
|
77
70
|
|
@@ -82,18 +75,6 @@
|
|
82
75
|
# The `:mini_magick` option is not deprecated; it's fine to keep using it.
|
83
76
|
# Rails.application.config.active_storage.variant_processor = :vips
|
84
77
|
|
85
|
-
# If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
|
86
|
-
# was `:marshal`. Convert all cookies to JSON, using the `:hybrid` formatter.
|
87
|
-
#
|
88
|
-
# If you're confident all your cookies are JSON formatted, you can switch to the `:json` formatter.
|
89
|
-
#
|
90
|
-
# Continue to use `:marshal` for backward-compatibility with old cookies.
|
91
|
-
#
|
92
|
-
# If you have configured the serializer elsewhere, you can remove this.
|
93
|
-
#
|
94
|
-
# See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
|
95
|
-
# Rails.application.config.action_dispatch.cookies_serializer = :hybrid
|
96
|
-
|
97
78
|
# Enable parameter wrapping for JSON.
|
98
79
|
# Previously this was set in an initializer. It's fine to keep using that initializer if you've customized it.
|
99
80
|
# To disable parameter wrapping entirely, set this config to `false`.
|
@@ -115,3 +96,40 @@
|
|
115
96
|
# "X-Permitted-Cross-Domain-Policies" => "none",
|
116
97
|
# "Referrer-Policy" => "strict-origin-when-cross-origin"
|
117
98
|
# }
|
99
|
+
|
100
|
+
|
101
|
+
# ** Please read carefully, this must be configured in config/application.rb **
|
102
|
+
# Change the format of the cache entry.
|
103
|
+
# Changing this default means that all new cache entries added to the cache
|
104
|
+
# will have a different format that is not supported by Rails 6.1 applications.
|
105
|
+
# Only change this value after your application is fully deployed to Rails 7.0
|
106
|
+
# and you have no plans to rollback.
|
107
|
+
# When you're ready to change format, add this to `config/application.rb` (NOT this file):
|
108
|
+
# config.active_support.cache_format_version = 7.0
|
109
|
+
|
110
|
+
|
111
|
+
# Cookie serializer: 2 options
|
112
|
+
#
|
113
|
+
# If you're upgrading and haven't set `cookies_serializer` previously, your cookie serializer
|
114
|
+
# is `:marshal`. The default for new apps is `:json`.
|
115
|
+
#
|
116
|
+
# Rails.application.config.action_dispatch.cookies_serializer = :json
|
117
|
+
#
|
118
|
+
#
|
119
|
+
# To migrate an existing application to the `:json` serializer, use the `:hybrid` option.
|
120
|
+
#
|
121
|
+
# Rails transparently deserializes existing (Marshal-serialized) cookies on read and
|
122
|
+
# re-writes them in the JSON format.
|
123
|
+
#
|
124
|
+
# It is fine to use `:hybrid` long term; you should do that until you're confident *all* your cookies
|
125
|
+
# have been converted to JSON. To keep using `:hybrid` long term, move this config to its own
|
126
|
+
# initializer or to `config/application.rb`.
|
127
|
+
#
|
128
|
+
# Rails.application.config.action_dispatch.cookies_serializer = :hybrid
|
129
|
+
#
|
130
|
+
#
|
131
|
+
# If your cookies can't yet be serialized to JSON, keep using `:marshal` for backward-compatibility.
|
132
|
+
#
|
133
|
+
# If you have configured the serializer elsewhere, you can remove this section of the file.
|
134
|
+
#
|
135
|
+
# See https://guides.rubyonrails.org/action_controller_overview.html#cookies for more information.
|
data/lib/rails/generators.rb
CHANGED
@@ -253,8 +253,8 @@ module Rails
|
|
253
253
|
invoke_fallbacks_for(name, base) || invoke_fallbacks_for(context, name)
|
254
254
|
end
|
255
255
|
|
256
|
-
# Receives a namespace, arguments and the behavior to invoke the generator.
|
257
|
-
# It's used as the default entry point for generate, destroy and update
|
256
|
+
# Receives a namespace, arguments, and the behavior to invoke the generator.
|
257
|
+
# It's used as the default entry point for generate, destroy, and update
|
258
258
|
# commands.
|
259
259
|
def invoke(namespace, args = ARGV, config = {})
|
260
260
|
names = namespace.to_s.split(":")
|
@@ -266,8 +266,14 @@ module Rails
|
|
266
266
|
options = sorted_groups.flat_map(&:last)
|
267
267
|
error = Command::Base::CorrectableError.new("Could not find generator '#{namespace}'.", namespace, options)
|
268
268
|
|
269
|
+
if error.respond_to?(:detailed_message)
|
270
|
+
formatted_message = error.detailed_message
|
271
|
+
else
|
272
|
+
formatted_message = error.message
|
273
|
+
end
|
274
|
+
|
269
275
|
puts <<~MSG
|
270
|
-
#{
|
276
|
+
#{formatted_message}
|
271
277
|
Run `bin/rails generate --help` for more options.
|
272
278
|
MSG
|
273
279
|
end
|
data/lib/rails/paths.rb
CHANGED
@@ -12,7 +12,7 @@ module Rails
|
|
12
12
|
# root.add "app/controllers", eager_load: true
|
13
13
|
#
|
14
14
|
# The above command creates a new root object and adds "app/controllers" as a path.
|
15
|
-
# This means we can get a
|
15
|
+
# This means we can get a Rails::Paths::Path object back like below:
|
16
16
|
#
|
17
17
|
# path = root["app/controllers"]
|
18
18
|
# path.eager_load? # => true
|
data/lib/rails/rack/logger.rb
CHANGED
@@ -31,13 +31,17 @@ module Rails
|
|
31
31
|
private
|
32
32
|
def call_app(request, env) # :doc:
|
33
33
|
instrumenter = ActiveSupport::Notifications.instrumenter
|
34
|
-
instrumenter.start "request.action_dispatch", request: request
|
34
|
+
instrumenter_state = instrumenter.start "request.action_dispatch", request: request
|
35
|
+
instrumenter_finish = -> () {
|
36
|
+
instrumenter.finish_with_state(instrumenter_state, "request.action_dispatch", request: request)
|
37
|
+
}
|
38
|
+
|
35
39
|
logger.info { started_request_message(request) }
|
36
40
|
status, headers, body = @app.call(env)
|
37
|
-
body = ::Rack::BodyProxy.new(body
|
41
|
+
body = ::Rack::BodyProxy.new(body, &instrumenter_finish)
|
38
42
|
[status, headers, body]
|
39
43
|
rescue Exception
|
40
|
-
|
44
|
+
instrumenter_finish.call
|
41
45
|
raise
|
42
46
|
ensure
|
43
47
|
ActiveSupport::LogSubscriber.flush_all!
|
@@ -65,11 +69,6 @@ module Rails
|
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
def finish(request)
|
69
|
-
instrumenter = ActiveSupport::Notifications.instrumenter
|
70
|
-
instrumenter.finish "request.action_dispatch", request: request
|
71
|
-
end
|
72
|
-
|
73
72
|
def logger
|
74
73
|
Rails.logger
|
75
74
|
end
|
data/lib/rails/railtie.rb
CHANGED
@@ -24,7 +24,7 @@ module Rails
|
|
24
24
|
# * creating initializers
|
25
25
|
# * configuring a Rails framework for the application, like setting a generator
|
26
26
|
# * adding <tt>config.*</tt> keys to the environment
|
27
|
-
# * setting up a subscriber with
|
27
|
+
# * setting up a subscriber with ActiveSupport::Notifications
|
28
28
|
# * adding Rake tasks
|
29
29
|
#
|
30
30
|
# == Creating a Railtie
|
@@ -129,7 +129,7 @@ module Rails
|
|
129
129
|
# == Application and Engine
|
130
130
|
#
|
131
131
|
# An engine is nothing more than a railtie with some initializers already set. And since
|
132
|
-
#
|
132
|
+
# Rails::Application is an engine, the same configuration described here can be
|
133
133
|
# used in both.
|
134
134
|
#
|
135
135
|
# Be sure to look at the documentation of those specific classes for more information.
|
@@ -214,13 +214,15 @@ module Rails
|
|
214
214
|
end
|
215
215
|
|
216
216
|
def respond_to_missing?(name, _)
|
217
|
+
return super if abstract_railtie?
|
218
|
+
|
217
219
|
instance.respond_to?(name) || super
|
218
220
|
end
|
219
221
|
|
220
222
|
# If the class method does not have a method, then send the method call
|
221
223
|
# to the Railtie instance.
|
222
224
|
def method_missing(name, *args, &block)
|
223
|
-
if instance.respond_to?(name)
|
225
|
+
if !abstract_railtie? && instance.respond_to?(name)
|
224
226
|
instance.public_send(name, *args, &block)
|
225
227
|
else
|
226
228
|
super
|
@@ -247,6 +249,10 @@ module Rails
|
|
247
249
|
end
|
248
250
|
end
|
249
251
|
|
252
|
+
def inspect # :nodoc:
|
253
|
+
"#<#{self.class.name}>"
|
254
|
+
end
|
255
|
+
|
250
256
|
def configure(&block) # :nodoc:
|
251
257
|
instance_eval(&block)
|
252
258
|
end
|
@@ -70,7 +70,7 @@ module Rails
|
|
70
70
|
#
|
71
71
|
# If +options+ has a <tt>:tag</tt> flag, it will be passed to each annotation's +to_s+.
|
72
72
|
#
|
73
|
-
# See
|
73
|
+
# See SourceAnnotationExtractor#find_in for a list of file extensions that will be taken into account.
|
74
74
|
#
|
75
75
|
# This class method is the single entry point for the <tt>rails notes</tt> command.
|
76
76
|
def self.enumerate(tag = nil, options = {})
|
data/lib/rails/version.rb
CHANGED
data/lib/rails.rb
CHANGED
@@ -80,6 +80,13 @@ module Rails
|
|
80
80
|
@_env = ActiveSupport::EnvironmentInquirer.new(environment)
|
81
81
|
end
|
82
82
|
|
83
|
+
# Returns the ActiveSupport::ErrorReporter of the current Rails project,
|
84
|
+
# otherwise it returns +nil+ if there is no project.
|
85
|
+
#
|
86
|
+
# Rails.error.handle(IOError) do
|
87
|
+
# # ...
|
88
|
+
# end
|
89
|
+
# Rails.error.report(error)
|
83
90
|
def error
|
84
91
|
application && application.executor.error_reporter
|
85
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: railties
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 7.0.
|
19
|
+
version: 7.0.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 7.0.
|
26
|
+
version: 7.0.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: actionpack
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 7.0.
|
33
|
+
version: 7.0.4
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 7.0.
|
40
|
+
version: 7.0.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - '='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 7.0.
|
103
|
+
version: 7.0.4
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 7.0.
|
110
|
+
version: 7.0.4
|
111
111
|
description: 'Rails internals: application bootup, plugins, generators, and rake tasks.'
|
112
112
|
email: david@loudthinking.com
|
113
113
|
executables:
|
@@ -422,10 +422,10 @@ licenses:
|
|
422
422
|
- MIT
|
423
423
|
metadata:
|
424
424
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
425
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.0.
|
426
|
-
documentation_uri: https://api.rubyonrails.org/v7.0.
|
425
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.0.4/railties/CHANGELOG.md
|
426
|
+
documentation_uri: https://api.rubyonrails.org/v7.0.4/
|
427
427
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
428
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.0.
|
428
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.0.4/railties
|
429
429
|
rubygems_mfa_required: 'true'
|
430
430
|
post_install_message:
|
431
431
|
rdoc_options:
|
@@ -444,7 +444,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
444
444
|
- !ruby/object:Gem::Version
|
445
445
|
version: '0'
|
446
446
|
requirements: []
|
447
|
-
rubygems_version: 3.
|
447
|
+
rubygems_version: 3.3.3
|
448
448
|
signing_key:
|
449
449
|
specification_version: 4
|
450
450
|
summary: Tools for creating, working with, and running Rails applications.
|