railties 7.0.0 → 7.0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5cb58ddc9e6fbbf28a0fb9c625cecec9cd282d59ccd697cf37cd1f78f7d25811
4
- data.tar.gz: b6304f9dfa982671da582fb01c63f310b76d3d043aca2826ff5c54acecc7f90c
3
+ metadata.gz: 9b404b6ddf82ab811262c885d71c088c6e150688039b36deef74e5a2cf3a2d2d
4
+ data.tar.gz: 585488b7d32ec75180b0f7da9cf164f8687b934361cdbbab9a97b486b92bfa4d
5
5
  SHA512:
6
- metadata.gz: febb1c2b1fc87226219dc2cf5870c236b801624c9a4d8c62b0853a1e3e033fbfec76e5b418de34774e069aa0b60d8b2c687c68ab729cc7165806974f16373b40
7
- data.tar.gz: a6305f03e1ed58b3afd6a9647b6fb43a48007c08370db1e066c15e135ce159c9adc7ac84c318033264e1c18cafdf2d9446d3e08341e4922c46fb7c7b83a81ff7
6
+ metadata.gz: aa73bd1c301d365a1ad7ed7ce7fe3435f04c5c68390dc5ce88a713de7d4771506326573af95b8a04c8a38daeff6b4e5cf05b781c49d877d53b7f06eb5d566f1f
7
+ data.tar.gz: 576e80f6e59392e2c70ef11ac2c966d5d2fdc2280ae63eee3c9aa7974efe98c3120eca1508448c6c1b242558ea85580fe8956a5383288fd1d7770e1f6f3e2cab
data/CHANGELOG.md CHANGED
@@ -1,3 +1,45 @@
1
+ ## Rails 7.0.2.2 (February 11, 2022) ##
2
+
3
+ * No changes.
4
+
5
+
6
+ ## Rails 7.0.2.1 (February 11, 2022) ##
7
+
8
+ * No changes.
9
+
10
+
11
+ ## Rails 7.0.2 (February 08, 2022) ##
12
+
13
+ * No changes.
14
+
15
+
16
+ ## Rails 7.0.1 (January 06, 2022) ##
17
+
18
+ * Prevent duplicate entries in plugin Gemfile.
19
+
20
+ *Jonathan Hefner*
21
+
22
+ * Fix asset pipeline errors for plugin dummy apps.
23
+
24
+ *Jonathan Hefner*
25
+
26
+ * Fix generated route revocation.
27
+
28
+ *Jonathan Hefner*
29
+
30
+ * Addresses an issue in which Sidekiq jobs could not reload certain
31
+ namespaces.
32
+
33
+ See [fxn/zeitwerk#198](https://github.com/fxn/zeitwerk/issues/198) for
34
+ details.
35
+
36
+ *Xavier Noria*
37
+
38
+ * Fix plugin generator to a plugin that pass all the tests.
39
+
40
+ *Rafael Mendonça França*
41
+
42
+
1
43
  ## Rails 7.0.0 (December 15, 2021) ##
2
44
 
3
45
  * No changes.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2004-2021 David Heinemeier Hansson
1
+ Copyright (c) 2004-2022 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
@@ -81,7 +81,10 @@ module Rails
81
81
  @server_timing = false
82
82
  end
83
83
 
84
- # Loads default configurations. See {the result of the method for each version}[https://guides.rubyonrails.org/configuring.html#results-of-config-load-defaults].
84
+ # Loads default configuration values for a target version. This includes
85
+ # defaults for versions prior to the target version. See the
86
+ # {configuration guide}[https://guides.rubyonrails.org/configuring.html]
87
+ # for the default values associated with a particular version.
85
88
  def load_defaults(target_version)
86
89
  case target_version.to_s
87
90
  when "5.0"
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "zeitwerk"
4
3
  require "active_support/core_ext/string/inflections"
5
4
  require "active_support/core_ext/array/conversions"
6
5
  require "active_support/descendants_tracker"
@@ -10,6 +10,7 @@ require "active_support/hash_with_indifferent_access"
10
10
  require "active_support/configuration_file"
11
11
  require "rails/engine"
12
12
  require "rails/secrets"
13
+ require "rails/autoloaders"
13
14
 
14
15
  module Rails
15
16
  # An Engine with the responsibility of coordinating the whole boot process.
@@ -95,7 +96,7 @@ module Rails
95
96
 
96
97
  attr_accessor :assets, :sandbox
97
98
  alias_method :sandbox?, :sandbox
98
- attr_reader :reloaders, :reloader, :executor
99
+ attr_reader :reloaders, :reloader, :executor, :autoloaders
99
100
 
100
101
  delegate :default_url_options, :default_url_options=, to: :routes
101
102
 
@@ -117,6 +118,8 @@ module Rails
117
118
  @reloader = Class.new(ActiveSupport::Reloader)
118
119
  @reloader.executor = @executor
119
120
 
121
+ @autoloaders = Rails::Autoloaders.new
122
+
120
123
  # are these actually used?
121
124
  @initial_variable_values = initial_variable_values
122
125
  @block = block
@@ -3,7 +3,7 @@
3
3
  require "active_support/inflector"
4
4
 
5
5
  module Rails
6
- module Autoloaders
6
+ class Autoloaders
7
7
  module Inflector # :nodoc:
8
8
  # Concurrent::Map is not needed. This is a private class, and overrides
9
9
  # must be defined while the application boots.
@@ -1,44 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "zeitwerk"
4
-
5
3
  module Rails
6
- module Autoloaders # :nodoc:
4
+ class Autoloaders # :nodoc:
7
5
  require_relative "autoloaders/inflector"
8
6
 
9
- class << self
10
- include Enumerable
11
-
12
- def main
13
- @main ||= Zeitwerk::Loader.new.tap do |loader|
14
- loader.tag = "rails.main"
15
- loader.inflector = Inflector
16
- end
17
- end
18
-
19
- def once
20
- @once ||= Zeitwerk::Loader.new.tap do |loader|
21
- loader.tag = "rails.once"
22
- loader.inflector = Inflector
23
- end
24
- end
25
-
26
- def each
27
- yield main
28
- yield once
29
- end
30
-
31
- def logger=(logger)
32
- each { |loader| loader.logger = logger }
33
- end
34
-
35
- def log!
36
- each(&:log!)
37
- end
38
-
39
- def zeitwerk_enabled?
40
- true
41
- end
7
+ include Enumerable
8
+
9
+ attr_reader :main, :once
10
+
11
+ def initialize
12
+ # This `require` delays loading the library on purpose.
13
+ #
14
+ # In Rails 7.0.0, railties/lib/rails.rb loaded Zeitwerk as a side-effect,
15
+ # but a couple of edge cases related to Bundler and Bootsnap showed up.
16
+ # They had to do with order of decoration of `Kernel#require`, something
17
+ # the three of them do.
18
+ #
19
+ # Delaying this `require` up to this point is a convenient trade-off.
20
+ require "zeitwerk"
21
+
22
+ @main = Zeitwerk::Loader.new
23
+ @main.tag = "rails.main"
24
+ @main.inflector = Inflector
25
+
26
+ @once = Zeitwerk::Loader.new
27
+ @once.tag = "rails.once"
28
+ @once.inflector = Inflector
29
+ end
30
+
31
+ def each
32
+ yield main
33
+ yield once
34
+ end
35
+
36
+ def logger=(logger)
37
+ each { |loader| loader.logger = logger }
38
+ end
39
+
40
+ def log!
41
+ each(&:log!)
42
+ end
43
+
44
+ def zeitwerk_enabled?
45
+ true
42
46
  end
43
47
  end
44
48
  end
@@ -97,15 +97,18 @@ module Rails
97
97
  def db_config
98
98
  return @db_config if defined?(@db_config)
99
99
 
100
- # We need to check whether the user passed the database the
101
- # first time around to show a consistent error message to people
102
- # relying on 2-level database configuration.
103
-
104
- @db_config = configurations.configs_for(env_name: environment, name: database, include_hidden: true)
100
+ # If the user provided a database, use that. Otherwise find
101
+ # the first config in the database.yml
102
+ if database
103
+ @db_config = configurations.configs_for(env_name: environment, name: database, include_hidden: true)
104
+ else
105
+ @db_config = configurations.find_db_config(environment)
106
+ end
105
107
 
106
108
  unless @db_config
109
+ missing_db = database ? "'#{database}' database is not" : "No databases are"
107
110
  raise ActiveRecord::AdapterNotSpecified,
108
- "'#{database}' database is not configured for '#{environment}'. Available configuration: #{configurations.inspect}"
111
+ "#{missing_db} configured for '#{environment}'. Available configuration: #{configurations.inspect}"
109
112
  end
110
113
 
111
114
  @db_config
@@ -116,7 +119,7 @@ module Rails
116
119
  end
117
120
 
118
121
  def database
119
- @options.fetch(:database, "primary")
122
+ @options[:database]
120
123
  end
121
124
 
122
125
  private
@@ -9,8 +9,8 @@ module Rails
9
9
  module VERSION
10
10
  MAJOR = 7
11
11
  MINOR = 0
12
- TINY = 0
13
- PRE = nil
12
+ TINY = 2
13
+ PRE = "2"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -279,26 +279,32 @@ module Rails
279
279
  # route "root 'welcome#index'"
280
280
  # route "root 'admin#index'", namespace: :admin
281
281
  def route(routing_code, namespace: nil)
282
- routing_code = Array(namespace).reverse.reduce(routing_code) do |code, ns|
283
- "namespace :#{ns} do\n#{optimize_indentation(code, 2)}end"
282
+ namespace = Array(namespace)
283
+ namespace_pattern = route_namespace_pattern(namespace)
284
+ routing_code = namespace.reverse.reduce(routing_code) do |code, name|
285
+ "namespace :#{name} do\n#{rebase_indentation(code, 2)}end"
284
286
  end
285
287
 
286
288
  log :route, routing_code
287
289
 
288
- after_pattern = Array(namespace).each_with_index.reverse_each.reduce(nil) do |pattern, (ns, i)|
289
- margin = "\\#{i + 1}[ ]{2}"
290
- "(?:(?:^[ ]*\n|^#{margin}.*\n)*?^(#{margin})namespace :#{ns} do\n#{pattern})?"
291
- end.then do |pattern|
292
- /^([ ]*).+\.routes\.draw do[ ]*\n#{pattern}/
293
- end
294
-
295
290
  in_root do
296
- if existing = match_file("config/routes.rb", after_pattern)
297
- base_indent, *, prev_indent = existing.captures.compact.map(&:length)
298
- routing_code = optimize_indentation(routing_code, base_indent + 2).lines.grep_v(/^[ ]{,#{prev_indent}}\S/).join
291
+ if namespace_match = match_file("config/routes.rb", namespace_pattern)
292
+ base_indent, *, existing_block_indent = namespace_match.captures.compact.map(&:length)
293
+ existing_line_pattern = /^[ ]{,#{existing_block_indent}}\S.+\n?/
294
+ routing_code = rebase_indentation(routing_code, base_indent + 2).gsub(existing_line_pattern, "")
295
+ namespace_pattern = /#{Regexp.escape namespace_match.to_s}/
299
296
  end
300
297
 
301
- inject_into_file "config/routes.rb", routing_code, after: after_pattern, verbose: false, force: false
298
+ inject_into_file "config/routes.rb", routing_code, after: namespace_pattern, verbose: false, force: false
299
+
300
+ if behavior == :revoke && namespace.any? && namespace_match
301
+ empty_block_pattern = /(#{namespace_pattern})((?:\s*end\n){1,#{namespace.size}})/
302
+ gsub_file "config/routes.rb", empty_block_pattern, verbose: false, force: true do |matched|
303
+ beginning, ending = empty_block_pattern.match(matched).captures
304
+ ending.sub!(/\A\s*end\n/, "") while !ending.empty? && beginning.sub!(/^[ ]*namespace .+ do\n\s*\z/, "")
305
+ beginning + ending
306
+ end
307
+ end
302
308
  end
303
309
  end
304
310
 
@@ -363,6 +369,7 @@ module Rails
363
369
  return "#{value}\n" unless value.is_a?(String)
364
370
  "#{value.strip_heredoc.indent(amount).chomp}\n"
365
371
  end
372
+ alias rebase_indentation optimize_indentation
366
373
 
367
374
  # Indent the +Gemfile+ to the depth of @indentation
368
375
  def indentation # :doc:
@@ -387,6 +394,16 @@ module Rails
387
394
  def match_file(path, pattern)
388
395
  File.read(path).match(pattern) if File.exist?(path)
389
396
  end
397
+
398
+ def route_namespace_pattern(namespace)
399
+ namespace.each_with_index.reverse_each.reduce(nil) do |pattern, (name, i)|
400
+ cummulative_margin = "\\#{i + 1}[ ]{2}"
401
+ blank_or_indented_line = "^[ ]*\n|^#{cummulative_margin}.*\n"
402
+ "(?:(?:#{blank_or_indented_line})*?^(#{cummulative_margin})namespace :#{name} do\n#{pattern})?"
403
+ end.then do |pattern|
404
+ /^([ ]*).+\.routes\.draw do[ ]*\n#{pattern}/
405
+ end
406
+ end
390
407
  end
391
408
  end
392
409
  end
@@ -108,16 +108,18 @@ module Rails
108
108
 
109
109
  private
110
110
  def gemfile_entries # :doc:
111
- [rails_gemfile_entry,
112
- asset_pipeline_gemfile_entry,
113
- database_gemfile_entry,
114
- web_server_gemfile_entry,
115
- javascript_gemfile_entry,
116
- hotwire_gemfile_entry,
117
- css_gemfile_entry,
118
- jbuilder_gemfile_entry,
119
- psych_gemfile_entry,
120
- cable_gemfile_entry].flatten.find_all(&@gem_filter)
111
+ [
112
+ rails_gemfile_entry,
113
+ asset_pipeline_gemfile_entry,
114
+ database_gemfile_entry,
115
+ web_server_gemfile_entry,
116
+ javascript_gemfile_entry,
117
+ hotwire_gemfile_entry,
118
+ css_gemfile_entry,
119
+ jbuilder_gemfile_entry,
120
+ psych_gemfile_entry,
121
+ cable_gemfile_entry,
122
+ ].flatten.compact.select(&@gem_filter)
121
123
  end
122
124
 
123
125
  def builder # :doc:
@@ -159,7 +161,8 @@ module Rails
159
161
  end
160
162
 
161
163
  def database_gemfile_entry # :doc:
162
- return [] if options[:skip_active_record]
164
+ return if options[:skip_active_record]
165
+
163
166
  gem_name, gem_version = gem_for_database
164
167
  GemfileEntry.version gem_name, gem_version,
165
168
  "Use #{options[:database]} as the database for Active Record"
@@ -170,15 +173,13 @@ module Rails
170
173
  end
171
174
 
172
175
  def asset_pipeline_gemfile_entry
173
- return [] if options[:skip_asset_pipeline]
176
+ return if options[:skip_asset_pipeline]
174
177
 
175
178
  if options[:asset_pipeline] == "sprockets"
176
179
  GemfileEntry.floats "sprockets-rails",
177
180
  "The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]"
178
181
  elsif options[:asset_pipeline] == "propshaft"
179
182
  GemfileEntry.floats "propshaft", "The modern asset pipeline for Rails [https://github.com/rails/propshaft]"
180
- else
181
- []
182
183
  end
183
184
  end
184
185
 
@@ -264,20 +265,13 @@ module Rails
264
265
  new(name, nil, comment, path: path)
265
266
  end
266
267
 
267
- def version
268
- version = super
269
-
270
- if version.is_a?(Array)
271
- version.join('", "')
272
- else
273
- version
274
- end
275
- end
276
-
277
268
  def to_s
278
- [ ("# #{comment}\n" if comment),
279
- ("# " if commented_out), "gem \"#{name}\"", (", \"#{version}\"" if version),
280
- *options.map { |key, val| ", #{key}: #{val.inspect}" }
269
+ [
270
+ (comment.gsub(/^/, "# ").chomp + "\n" if comment),
271
+ ("# " if commented_out),
272
+ "gem \"#{name}\"",
273
+ *Array(version).map { |constraint| ", \"#{constraint}\"" },
274
+ *options.map { |key, value| ", #{key}: #{value.inspect}" },
281
275
  ].compact.join
282
276
  end
283
277
  end
@@ -314,12 +308,12 @@ module Rails
314
308
  end
315
309
 
316
310
  def jbuilder_gemfile_entry
317
- return [] if options[:skip_jbuilder]
311
+ return if options[:skip_jbuilder]
318
312
  GemfileEntry.new "jbuilder", nil, "Build JSON APIs with ease [https://github.com/rails/jbuilder]", {}, options[:api]
319
313
  end
320
314
 
321
315
  def javascript_gemfile_entry
322
- return [] if options[:skip_javascript]
316
+ return if options[:skip_javascript]
323
317
 
324
318
  if adjusted_javascript_option == "importmap"
325
319
  GemfileEntry.floats "importmap-rails", "Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]"
@@ -329,7 +323,7 @@ module Rails
329
323
  end
330
324
 
331
325
  def hotwire_gemfile_entry
332
- return [] if options[:skip_javascript] || options[:skip_hotwire]
326
+ return if options[:skip_javascript] || options[:skip_hotwire]
333
327
 
334
328
  turbo_rails_entry =
335
329
  GemfileEntry.floats "turbo-rails", "Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]"
@@ -355,7 +349,7 @@ module Rails
355
349
  end
356
350
 
357
351
  def css_gemfile_entry
358
- return [] unless options[:css]
352
+ return unless options[:css]
359
353
 
360
354
  if !using_node? && options[:css] == "tailwind"
361
355
  GemfileEntry.floats "tailwindcss-rails", "Use Tailwind CSS [https://github.com/rails/tailwindcss-rails]"
@@ -365,7 +359,7 @@ module Rails
365
359
  end
366
360
 
367
361
  def psych_gemfile_entry
368
- return [] unless defined?(Rubinius)
362
+ return unless defined?(Rubinius)
369
363
 
370
364
  comment = "Use Psych as the YAML engine, instead of Syck, so serialized " \
371
365
  "data can be read safely from different rubies (see http://git.io/uuLVag)"
@@ -373,11 +367,10 @@ module Rails
373
367
  end
374
368
 
375
369
  def cable_gemfile_entry
376
- return [] if options[:skip_action_cable]
370
+ return if options[:skip_action_cable]
371
+
377
372
  comment = "Use Redis adapter to run Action Cable in production"
378
- gems = []
379
- gems << GemfileEntry.new("redis", "~> 4.0", comment, {}, true)
380
- gems
373
+ GemfileEntry.new("redis", "~> 4.0", comment, {}, true)
381
374
  end
382
375
 
383
376
  def bundle_command(command, env = {})
@@ -123,8 +123,8 @@ module Rails
123
123
  when :integer then 1
124
124
  when :float then 1.5
125
125
  when :decimal then "9.99"
126
- when :datetime, :timestamp, :time then Time.now.to_formatted_s(:db)
127
- when :date then Date.today.to_formatted_s(:db)
126
+ when :datetime, :timestamp, :time then Time.now.to_fs(:db)
127
+ when :date then Date.today.to_fs(:db)
128
128
  when :string then name == "type" ? "" : "MyString"
129
129
  when :text then "MyText"
130
130
  when :boolean then false
@@ -193,6 +193,14 @@ module Rails
193
193
  directory "db"
194
194
  end
195
195
 
196
+ def db_when_updating
197
+ path = File.expand_path("db/schema.rb", destination_root)
198
+
199
+ if File.exist?(path)
200
+ gsub_file("db/schema.rb", /ActiveRecord::Schema\.define/, "ActiveRecord::Schema[6.1].define")
201
+ end
202
+ end
203
+
196
204
  def lib
197
205
  empty_directory "lib"
198
206
  empty_directory_with_keep_file "lib/tasks"
@@ -333,6 +341,11 @@ module Rails
333
341
  end
334
342
  remove_task :update_bin_files
335
343
 
344
+ def update_db_schema
345
+ build(:db_when_updating)
346
+ end
347
+ remove_task :update_db_schema
348
+
336
349
  def update_active_storage
337
350
  unless skip_active_storage?
338
351
  rails_command "active_storage:update", inline: true
@@ -8,7 +8,7 @@ require "active_support/core_ext/integer/time"
8
8
  Rails.application.configure do
9
9
  # Settings specified here will take precedence over those in config/application.rb.
10
10
 
11
- # Turn false under Spring and add config.action_view.cache_template_loading = true
11
+ # Turn false under Spring and add config.action_view.cache_template_loading = true.
12
12
  config.cache_classes = true
13
13
 
14
14
  # Eager loading loads your whole application. When running a single test locally,
@@ -1,6 +1,8 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
- # Configure sensitive parameters which will be filtered from the log file.
3
+ # Configure parameters to be filtered from the log file. Use this to limit dissemination of
4
+ # sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
5
+ # notations and behaviors.
4
6
  Rails.application.config.filter_parameters += [
5
7
  :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
6
8
  ]
@@ -226,6 +226,10 @@ module Rails
226
226
  def initialize(*args)
227
227
  @dummy_path = nil
228
228
  super
229
+
230
+ if !engine? || !with_dummy_app?
231
+ self.options = options.merge(skip_asset_pipeline: true).freeze
232
+ end
229
233
  end
230
234
 
231
235
  public_task :set_default_accessors!
@@ -309,6 +313,33 @@ module Rails
309
313
  end
310
314
 
311
315
  private
316
+ def gemfile_entries
317
+ [
318
+ rails_gemfile_entry,
319
+ simplify_gemfile_entries(
320
+ database_gemfile_entry,
321
+ asset_pipeline_gemfile_entry,
322
+ ),
323
+ ].flatten.compact
324
+ end
325
+
326
+ def rails_gemfile_entry
327
+ if options[:skip_gemspec]
328
+ super
329
+ elsif rails_prerelease?
330
+ super.dup.tap do |entry|
331
+ entry.comment = <<~COMMENT
332
+ Your gem is dependent on a prerelease version of Rails. Once you can lock this
333
+ dependency down to a specific version, move it to your gemspec.
334
+ COMMENT
335
+ end
336
+ end
337
+ end
338
+
339
+ def simplify_gemfile_entries(*gemfile_entries)
340
+ gemfile_entries.flatten.compact.map { |entry| GemfileEntry.floats(entry.name) }
341
+ end
342
+
312
343
  def create_dummy_app(path = nil)
313
344
  dummy_path(path) if path
314
345
 
@@ -1,32 +1,19 @@
1
1
  source "https://rubygems.org"
2
2
  git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+ <% unless options[:skip_gemspec] -%>
3
4
 
4
- <% if options[:skip_gemspec] -%>
5
- <%= "# " if rails_prerelease? -%>gem "rails", "<%= Array(rails_version_specifier).join("', '") %>"
6
- <% else -%>
7
5
  # Specify your gem's dependencies in <%= name %>.gemspec.
8
6
  gemspec
9
7
  <% end -%>
10
- <% unless options[:skip_active_record] -%>
11
-
12
- group :development do
13
- gem "<%= gem_for_database[0] %>"
14
- end
15
- <% end -%>
16
-
17
- <% if rails_prerelease? -%>
18
- # Your gem is dependent on a prerelease version of Rails. Once you can lock this
19
- # dependency down to a specific version, move it to your gemspec.
20
- <% gemfile_entries.each do |gemfile_entry| -%>
8
+ <% gemfile_entries.each do |gemfile_entry| %>
21
9
  <%= gemfile_entry %>
22
- <% end -%>
23
-
24
10
  <% end -%>
25
11
  <% if RUBY_ENGINE == "ruby" -%>
26
- # Start debugger with binding.b -- Read more: https://github.com/ruby/debug
27
- # gem "debug", ">= 1.0.0", group: %i[ development test ]
12
+
13
+ # Start debugger with binding.b [https://github.com/ruby/debug]
14
+ # gem "debug", ">= 1.0.0"
28
15
  <% end -%>
29
- <% if RUBY_PLATFORM.match(/bccwin|cygwin|emx|mingw|mswin|wince|java/) -%>
16
+ <% if RUBY_PLATFORM.match?(/bccwin|cygwin|emx|mingw|mswin|wince|java/) -%>
30
17
 
31
- gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby]
18
+ gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
32
19
  <% end -%>
@@ -2,7 +2,7 @@
2
2
 
3
3
  namespace :app do
4
4
  desc "Update configs and some other initially generated files (or use just update:configs or update:bin)"
5
- task update: [ "update:configs", "update:bin", "update:active_storage", "update:upgrade_guide_info" ]
5
+ task update: [ "update:configs", "update:bin", "update:db", "update:active_storage", "update:upgrade_guide_info" ]
6
6
 
7
7
  desc "Applies the template supplied by LOCATION=(/path/to/template) or URL"
8
8
  task template: :environment do
@@ -51,6 +51,10 @@ namespace :app do
51
51
  Rails::AppUpdater.invoke_from_app_generator :update_bin_files
52
52
  end
53
53
 
54
+ task :db do
55
+ Rails::AppUpdater.invoke_from_app_generator :update_db_schema
56
+ end
57
+
54
58
  task :active_storage do
55
59
  Rails::AppUpdater.invoke_from_app_generator :update_active_storage
56
60
  end
@@ -2,7 +2,7 @@
2
2
  <!DOCTYPE html>
3
3
  <html>
4
4
  <head>
5
- <title>Ruby on Rails</title>
5
+ <title>Ruby on Rails <%= Rails.version %></title>
6
6
  <meta charset="utf-8">
7
7
  <meta name="viewport" content="width=device-width">
8
8
  <link rel="icon" href="<%= ruby_on_rails_logo_favicon_data_uri %>" />
@@ -60,6 +60,7 @@
60
60
  height: auto;
61
61
  max-width: 100%;
62
62
  width: 100%;
63
+ cursor: pointer;
63
64
  }
64
65
 
65
66
  ul {
data/lib/rails.rb CHANGED
@@ -12,7 +12,6 @@ require "active_support/core_ext/object/blank"
12
12
 
13
13
  require "rails/application"
14
14
  require "rails/version"
15
- require "rails/autoloaders"
16
15
 
17
16
  require "active_support/railtie"
18
17
  require "action_dispatch/railtie"
@@ -115,7 +114,7 @@ module Rails
115
114
  end
116
115
 
117
116
  def autoloaders
118
- Autoloaders
117
+ application.autoloaders
119
118
  end
120
119
  end
121
120
  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.0
4
+ version: 7.0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-15 00:00:00.000000000 Z
11
+ date: 2022-02-11 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.0
19
+ version: 7.0.2.2
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.0
26
+ version: 7.0.2.2
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.0
33
+ version: 7.0.2.2
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.0
40
+ version: 7.0.2.2
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.0
103
+ version: 7.0.2.2
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.0
110
+ version: 7.0.2.2
111
111
  description: 'Rails internals: application bootup, plugins, generators, and rake tasks.'
112
112
  email: david@loudthinking.com
113
113
  executables:
@@ -422,12 +422,12 @@ 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.0/railties/CHANGELOG.md
426
- documentation_uri: https://api.rubyonrails.org/v7.0.0/
425
+ changelog_uri: https://github.com/rails/rails/blob/v7.0.2.2/railties/CHANGELOG.md
426
+ documentation_uri: https://api.rubyonrails.org/v7.0.2.2/
427
427
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
428
- source_code_uri: https://github.com/rails/rails/tree/v7.0.0/railties
428
+ source_code_uri: https://github.com/rails/rails/tree/v7.0.2.2/railties
429
429
  rubygems_mfa_required: 'true'
430
- post_install_message:
430
+ post_install_message:
431
431
  rdoc_options:
432
432
  - "--exclude"
433
433
  - "."
@@ -444,8 +444,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
444
444
  - !ruby/object:Gem::Version
445
445
  version: '0'
446
446
  requirements: []
447
- rubygems_version: 3.2.32
448
- signing_key:
447
+ rubygems_version: 3.2.22
448
+ signing_key:
449
449
  specification_version: 4
450
450
  summary: Tools for creating, working with, and running Rails applications.
451
451
  test_files: []