Sha256: be74e18627e2fdd6576e1c9a14f849f6c66d64862f27fb3402f508a89bf286f8

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

# encoding: utf-8

module Mutant
  # Zombifier namespace
  class Zombifier
    include Adamantium::Flat, Concord.new(:namespace)

    # Excluded into zombification
    includes = %w[
      mutant
      morpher
      adamantium
      equalizer
      anima
      concord
    ]

    INCLUDES = %r{\A#{Regexp.union(includes)}(?:/.*)?\z}.freeze

    # Initialize object
    #
    # @param [Symbol] namespace
    #
    # @return [undefined]
    #
    # @api private
    #
    def initialize(namespace)
      @zombified = Set.new
      @highjack = RequireHighjack.new(Kernel, method(:require))
      super(namespace)
    end

    # Perform zombification of target library
    #
    # @param [String] logical_name
    # @param [Symbol] namespace
    #
    # @api private
    #
    def self.run(logical_name, namespace)
      new(namespace).run(logical_name)
    end

    # Run zombifier
    #
    # @param [String] logical_name
    #
    # @return [undefined]
    #
    # @api private
    #
    def run(logical_name)
      @highjack.infect
      require(logical_name)
    end

    # Test if logical name is subjected to zombification
    #
    # @param [String]
    #
    # @api private
    #
    def include?(logical_name)
      !@zombified.include?(logical_name) && INCLUDES =~ logical_name
    end

    # Require file in zombie namespace
    #
    # @param [String] logical_name
    #
    # @return [self]
    #
    # @api private
    #
    def require(logical_name)
      @highjack.original.call(logical_name)
      return unless include?(logical_name)
      @zombified << logical_name
      file = File.find(logical_name)
      file.zombify(namespace) if file
      self
    end

  end # Zombifier
end # Mutant

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mutant-0.5.19 lib/mutant/zombifier.rb
mutant-0.5.18 lib/mutant/zombifier.rb
mutant-0.5.17 lib/mutant/zombifier.rb