diff options
author | Xavier Noria <fxn@hashref.com> | 2019-07-28 13:49:26 +0200 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2019-07-28 14:09:01 +0200 |
commit | bfc9065d58508fb19dd1a4170406604dd3b3234a (patch) | |
tree | a726cc631382a206ef6bd5f5bee9214a7764a615 /activesupport | |
parent | 71e41a5b9495ba6ebe3cdf1e10afa27bcc0db208 (diff) | |
download | rails-bfc9065d58508fb19dd1a4170406604dd3b3234a.tar.gz rails-bfc9065d58508fb19dd1a4170406604dd3b3234a.tar.bz2 rails-bfc9065d58508fb19dd1a4170406604dd3b3234a.zip |
Improves compatibility of require_dependency in zeitwerk mode [Closes #36774]
Applications are not supposed to use require_dependency in their own
code if running in zeitwerk mode, and require_dependency was initially
aliased to require with that use case in mind.
However, there are situations in which you cannot control the mode and
need to be compatible with both. There, you might need require_dependency
in case you are being executed in classic mode. Think about engines that
want to support both modes in their parent applications, for example.
Furthermore, Rails itself loads helpers using require_dependency.
Therefore, we need better compatibility.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/dependencies/zeitwerk_integration.rb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb b/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb index f75083a05a..2cf55713bd 100644 --- a/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb +++ b/activesupport/lib/active_support/dependencies/zeitwerk_integration.rb @@ -42,6 +42,17 @@ module ActiveSupport end end + module RequireDependency + def require_dependency(filename) + filename = filename.to_path if filename.respond_to?(:to_path) + if abspath = ActiveSupport::Dependencies.search_for_file(filename) + require abspath + else + require filename + end + end + end + module Inflector def self.camelize(basename, _abspath) basename.camelize @@ -90,7 +101,7 @@ module ActiveSupport def decorate_dependencies Dependencies.unhook! Dependencies.singleton_class.prepend(Decorations) - Object.class_eval { alias_method :require_dependency, :require } + Object.prepend(RequireDependency) end end end |