aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2019-07-28 13:49:26 +0200
committerXavier Noria <fxn@hashref.com>2019-07-28 14:09:01 +0200
commitbfc9065d58508fb19dd1a4170406604dd3b3234a (patch)
treea726cc631382a206ef6bd5f5bee9214a7764a615 /activesupport
parent71e41a5b9495ba6ebe3cdf1e10afa27bcc0db208 (diff)
downloadrails-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.rb13
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