Sha256: a3a8bf55a6b71e8efc264881185109530ff29988cf1c52341ed0817fa774591f

Contents?: true

Size: 1.14 KB

Versions: 15

Compression:

Stored size: 1.14 KB

Contents

module Mutant
  # Require highjack
  class RequireHighjack
    include Concord.new(:target, :callback)

    # Return original method
    #
    # @return [#call]
    #
    # @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)
        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

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
mutant-0.7.9 lib/mutant/require_highjack.rb
mutant-0.7.8 lib/mutant/require_highjack.rb
mutant-0.7.7 lib/mutant/require_highjack.rb
mutant-0.7.6 lib/mutant/require_highjack.rb
mutant-0.7.5 lib/mutant/require_highjack.rb
mutant-0.7.4 lib/mutant/require_highjack.rb
mutant-0.7.3 lib/mutant/require_highjack.rb
mutant-0.7.2 lib/mutant/require_highjack.rb
mutant-0.7.1 lib/mutant/require_highjack.rb
mutant-0.6.7 lib/mutant/require_highjack.rb
mutant-0.6.6 lib/mutant/require_highjack.rb
mutant-0.6.5 lib/mutant/require_highjack.rb
mutant-0.6.4 lib/mutant/require_highjack.rb
mutant-0.6.3 lib/mutant/require_highjack.rb
mutant-0.6.2 lib/mutant/require_highjack.rb