Sha256: 8f27a30712805ac2be76cb7e78dae77abf909ef25accd78d0557f4b595e3901e

Contents?: true

Size: 1.63 KB

Versions: 7

Compression:

Stored size: 1.63 KB

Contents

module Mutant
  class Zombifier
    # File containing source beeing zombified
    class File
      include NodeHelpers, Adamantium::Flat, Concord::Public.new(:path)

      # Zombify contents of file
      #
      # @return [self]
      #
      # @api private
      #
      def zombify(namespace)
        $stderr.puts("Zombifying #{path}")
        eval(
          Unparser.unparse(namespaced_node(namespace)),
          TOPLEVEL_BINDING,
          path.to_s
        )
        self
      end

      # Find file by logical path
      #
      # @param [String] logical_name
      #
      # @return [File]
      #   if found
      #
      # @return [nil]
      #   otherwise
      #
      # @api private
      #
      def self.find(logical_name)
        file_name =
          case ::File.extname(logical_name)
          when '.so'
            return
          when '.rb'
            logical_name
          else
            "#{logical_name}.rb"
          end

        $LOAD_PATH.each do |path|
          path = Pathname.new(path).join(file_name)
          return new(path) if path.file?
        end

        $stderr.puts "Cannot find file #{file_name} in $LOAD_PATH"
        nil
      end

    private

      # Return node
      #
      # @return [Parser::AST::Node]
      #
      # @api private
      #
      def node
        Parser::CurrentRuby.parse(path.read)
      end

      # Return namespaced root
      #
      # @param [Symbol] namespace
      #
      # @return [Parser::AST::Node]
      #
      # @api private
      #
      def namespaced_node(namespace)
        s(:module, s(:const, nil, namespace), node)
      end

    end # File
  end # Zombifier
end # Mutant

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
mutant-0.5.23 lib/mutant/zombifier/file.rb
mutant-0.5.22 lib/mutant/zombifier/file.rb
mutant-0.5.21 lib/mutant/zombifier/file.rb
mutant-0.5.20 lib/mutant/zombifier/file.rb
mutant-0.5.19 lib/mutant/zombifier/file.rb
mutant-0.5.18 lib/mutant/zombifier/file.rb
mutant-0.5.17 lib/mutant/zombifier/file.rb