Sha256: 70ed782e28710b0695c8eee5bcbfdd825b42e3a344e3f1f649c128e760f199b7

Contents?: true

Size: 1.14 KB

Versions: 13

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 pivate
    #
    def run
      infect
      yield
      self
    ensure
      desinfect
    end

    # Infect kernel with highjack
    #
    # @return [self]
    #
    # @api pivate
    #
    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 desinfect kernel from highjack
    #
    # @return [self]
    #
    # @api private
    #
    def desinfect
      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

13 entries across 13 versions & 1 rubygems

Version Path
mutant-0.5.23 lib/mutant/require_highjack.rb
mutant-0.5.22 lib/mutant/require_highjack.rb
mutant-0.5.21 lib/mutant/require_highjack.rb
mutant-0.5.20 lib/mutant/require_highjack.rb
mutant-0.5.19 lib/mutant/require_highjack.rb
mutant-0.5.18 lib/mutant/require_highjack.rb
mutant-0.5.17 lib/mutant/require_highjack.rb
mutant-0.5.16 lib/mutant/require_highjack.rb
mutant-0.5.15 lib/mutant/require_highjack.rb
mutant-0.5.14 lib/mutant/require_highjack.rb
mutant-0.5.13 lib/mutant/require_highjack.rb
mutant-0.5.12 lib/mutant/require_highjack.rb
mutant-0.5.11 lib/mutant/require_highjack.rb