lib/mutant/require_highjack.rb in mutant-0.7.9 vs lib/mutant/require_highjack.rb in mutant-0.8.0
- old
+ new
@@ -1,63 +1,24 @@
module Mutant
# Require highjack
- class RequireHighjack
- include Concord.new(:target, :callback)
+ module RequireHighjack
- # Return original method
+ # Install require callback
#
+ # @param [Module] target
+ # @param [#call] callback
+ #
# @return [#call]
+ # the original implementation on singleton
#
# @api private
#
- attr_reader :original
-
- # Run block with highjacked require
- #
- # @return [self]
- #
- # @api private
- #
- def run
- infect
- yield
- self
- ensure
- disinfect
- end
-
- # Infect kernel with highjack
- #
- # @return [self]
- #
- # @api private
- #
- def infect
- callback = @callback
- @original = target.method(:require)
- target.module_eval do
- undef :require
- define_method(:require) do |logical_name|
- callback.call(logical_name)
+ def self.call(target, callback)
+ target.method(:require).tap do
+ target.module_eval do
+ define_method(:require, &callback)
+ public :require
end
- module_function :require
- end
- end
-
- # Imperfectly disinfect kernel from highjack
- #
- # @return [self]
- #
- # @api private
- #
- def disinfect
- original = @original
- target.module_eval do
- undef :require
- define_method(:require) do |logical_name|
- original.call(logical_name)
- end
- module_function :require
end
end
end # RequireHighjack
end # Mutant