diff options
author | Xavier Noria <fxn@hashref.com> | 2019-02-14 15:12:57 -0800 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2019-02-14 22:34:16 -0800 |
commit | 870377915af301c98a54f7f588e077610b2190aa (patch) | |
tree | bb370790a0da8075fef47e2574581c6ba595deb8 /railties/lib | |
parent | 16e235126ef0187a93b81ee959a8127097e2f394 (diff) | |
download | rails-870377915af301c98a54f7f588e077610b2190aa.tar.gz rails-870377915af301c98a54f7f588e077610b2190aa.tar.bz2 rails-870377915af301c98a54f7f588e077610b2190aa.zip |
Replace autoloader accessors with Rails.autoloaders.{main,once}
Rails.autoloader and Rails.once_autoloader was just tentative API good
enough for a first patch. Rails.autoloader is singular and does not
convey in its name that there is another autoloader. That might be
confusing, for example if you set a logger and miss traces. On the other
hand, the name `once_autoloader` is very close to being horrible.
Rails.autoloaders.main and Rails.autoloaders.once read better for my
taste, and have a nice symmetry. Also, both "main" and "once" are four
letters long, short and same length.
They are tagged as "rails.main" and "rails.once", respectively.
References #35235.
Diffstat (limited to 'railties/lib')
-rw-r--r-- | railties/lib/rails.rb | 19 | ||||
-rw-r--r-- | railties/lib/rails/autoloaders.rb | 30 | ||||
-rw-r--r-- | railties/lib/rails/engine.rb | 2 |
3 files changed, 33 insertions, 18 deletions
diff --git a/railties/lib/rails.rb b/railties/lib/rails.rb index bca2cf34e1..1f533a8c04 100644 --- a/railties/lib/rails.rb +++ b/railties/lib/rails.rb @@ -13,6 +13,7 @@ require "active_support/core_ext/object/blank" require "rails/application" require "rails/version" +require "rails/autoloaders" require "active_support/railtie" require "action_dispatch/railtie" @@ -111,24 +112,8 @@ module Rails application && Pathname.new(application.paths["public"].first) end - def autoloader - if configuration.autoloader == :zeitwerk - @autoloader ||= Zeitwerk::Loader.new - end - end - - def once_autoloader - if configuration.autoloader == :zeitwerk - @once_autoloader ||= Zeitwerk::Loader.new - end - end - def autoloaders - if configuration.autoloader == :zeitwerk - [autoloader, once_autoloader] - else - [] - end + Autoloaders end end end diff --git a/railties/lib/rails/autoloaders.rb b/railties/lib/rails/autoloaders.rb new file mode 100644 index 0000000000..4b71f90c6b --- /dev/null +++ b/railties/lib/rails/autoloaders.rb @@ -0,0 +1,30 @@ +module Rails + module Autoloaders # :nodoc: + class << self + include Enumerable + + def main + if zeitwerk_enabled? + @main ||= Zeitwerk::Loader.new.tap { |loader| loader.tag = "rails.main" } + end + end + + def once + if zeitwerk_enabled? + @once ||= Zeitwerk::Loader.new.tap { |loader| loader.tag = "rails.once" } + end + end + + def each + if zeitwerk_enabled? + yield main + yield once + end + end + + def zeitwerk_enabled? + Rails.configuration.autoloader == :zeitwerk + end + end + end +end diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index 2485158a7b..76be6a8ac7 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -472,7 +472,7 @@ module Rails # Eager load the application by loading all ruby # files inside eager_load paths. def eager_load! - if Rails.autoloader + if Rails.autoloaders.zeitwerk_enabled? eager_load_with_zeitwerk! else eager_load_with_dependencies! |