Skip to content

Commit 1d6355f

Browse files
committed
Move Zeitwerk to railties
Active Support should not know about Rails. Once classic has been removed, AS should get anything it needs from the application as usual.
1 parent f967bce commit 1d6355f

File tree

5 files changed

+9
-13
lines changed

5 files changed

+9
-13
lines changed

activesupport/activesupport.gemspec

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,5 @@ Gem::Specification.new do |s|
3636
s.add_dependency "i18n", ">= 1.6", "< 2"
3737
s.add_dependency "tzinfo", "~> 2.0"
3838
s.add_dependency "concurrent-ruby", "~> 1.0", ">= 1.0.2"
39-
s.add_dependency "zeitwerk", "~> 2.5.0.beta3"
4039
s.add_dependency "minitest", ">= 5.1"
4140
end

activesupport/lib/active_support/dependencies.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ def self.unload_interlock
5858
# main autoloader. Used to clear state.
5959
mattr_accessor :_autoloaded_tracked_classes, default: Set.new
6060

61+
# If reloading is enabled, this private attribute stores the main autoloader
62+
# of a Rails application. It is `nil` otherwise.
63+
#
64+
# The public interface for this autoloader is `Rails.autoloaders.main`.
65+
mattr_accessor :autoloader
66+
6167
# Private method that reloads constants autoloaded by the main autoloader.
6268
#
6369
# Rails.application.reloader.reload! is the public interface for application
@@ -66,9 +72,7 @@ def self.unload_interlock
6672
def self.clear
6773
unload_interlock do
6874
_autoloaded_tracked_classes.clear
69-
Rails.autoloaders.main.reload
70-
rescue Zeitwerk::ReloadingDisabledError
71-
raise "reloading is disabled because config.cache_classes is true"
75+
autoloader.reload
7276
end
7377
end
7478

railties/lib/rails/application/finisher.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ module Finisher
2929

3030
unless config.cache_classes
3131
autoloader.enable_reloading
32+
ActiveSupport::Dependencies.autoloader = autoloader
3233

3334
autoloader.on_load do |_cpath, value, _abspath|
3435
if value.is_a?(Class) && value.singleton_class < ActiveSupport::DescendantsTracker

railties/railties.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Gem::Specification.new do |s|
4242
s.add_dependency "rake", ">= 0.13"
4343
s.add_dependency "thor", "~> 1.0"
4444
s.add_dependency "method_source"
45+
s.add_dependency "zeitwerk", "~> 2.5.0.beta3"
4546

4647
s.add_development_dependency "actionview", version
4748
end

railties/test/application/zeitwerk_integration_test.rb

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,6 @@ class RESTfulController < ApplicationController
152152
assert_not Rails.autoloaders.once.reloading_enabled?
153153
end
154154

155-
test "reloading raises if config.cache_classes is true" do
156-
boot("production")
157-
158-
e = assert_raises(StandardError) do
159-
deps.clear
160-
end
161-
assert_equal "reloading is disabled because config.cache_classes is true", e.message
162-
end
163-
164155
test "eager loading loads code in engines" do
165156
$test_blog_engine_eager_loaded = false
166157

0 commit comments

Comments
 (0)