diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2019-07-15 16:36:35 +0200 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2019-07-16 10:56:10 +0200 |
commit | 223a187b9e73d9ad568d7333c4a1d0f84362d547 (patch) | |
tree | 30f8f01ac9bb8bc164c26fd2e18f3fcc1ff59074 | |
parent | 79ef8310bec5eb2e3d05134b36bccda821703652 (diff) | |
download | rails-223a187b9e73d9ad568d7333c4a1d0f84362d547.tar.gz rails-223a187b9e73d9ad568d7333c4a1d0f84362d547.tar.bz2 rails-223a187b9e73d9ad568d7333c4a1d0f84362d547.zip |
Fix Loadable.exclude_from to also reset Kernel#require
-rw-r--r-- | activesupport/lib/active_support/dependencies.rb | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb index 5dc47b20c6..32cb3a53f4 100644 --- a/activesupport/lib/active_support/dependencies.rb +++ b/activesupport/lib/active_support/dependencies.rb @@ -201,6 +201,11 @@ module ActiveSupport #:nodoc: end end + def self.include_into(base) + base.include(self) + append_features(base) + end + def const_missing(const_name) from_mod = anonymous? ? guess_for_anonymous(const_name) : self Dependencies.load_missing_constant(from_mod, const_name) @@ -230,6 +235,21 @@ module ActiveSupport #:nodoc: base.class_eval do define_method(:load, Kernel.instance_method(:load)) private :load + + define_method(:require, Kernel.instance_method(:require)) + private :require + end + end + + def self.include_into(base) + base.include(self) + + if base.instance_method(:load).owner == base + base.remove_method(:load) + end + + if base.instance_method(:require).owner == base + base.remove_method(:require) end end @@ -325,9 +345,9 @@ module ActiveSupport #:nodoc: end def hook! - Object.class_eval { include Loadable } - Module.class_eval { include ModuleConstMissing } - Exception.class_eval { include Blamable } + Loadable.include_into(Object) + ModuleConstMissing.include_into(Module) + Exception.include(Blamable) end def unhook! |