railties 7.0.0 → 7.0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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: []