Sha256: 2baf204fdd52c0d99a8c98f2e91928bbb80582120a2f90bf8d88adaccfc56005

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

module Sourcerer

  EXT= Module.new
  module EXT::SourceLocation

    #> return a proc source code
    def source

        var= self.source_location.map{|obj| obj.class <= String ? File.absolute_path(obj) : obj }

        file_obj= File.open(var[0],"r")
        file_data= [] #> [*File.open(var[0],"r")]
        (var[1] - 1).times{ file_obj.gets }

        tags= 0
        loop {

          file_data.push(file_obj.gets.chomp)
          new_string_line= file_data.last

          tags += ::Sourcerer::Helpers.scan_count_by new_string_line, /\{/,:def,:do,:if,:unless,:loop,:while,:until
          tags -= ::Sourcerer::Helpers.scan_count_by new_string_line, /\}/,:end

          break if tags <= 0
          break if file_data.last.nil?

        }

        self_obj= file_data.join("\n")
        self_obj.gsub!(";","\n") unless %W[ ' " ].map!{|str| self_obj.include?(str) }.include?(true)

        first_line= self_obj
        case true

          when first_line.include?('Proc')
            self_obj.sub!(/^[\w =]*Proc.new\s*{ */,'Proc.new { ')

          when first_line.include?('lambda')
            self_obj.sub!(/^[\w =]*lambda\s*{ */,'Proc.new { ')

          when first_line.include?('def'),first_line.include?('Method')
            the_params= self_obj.scan(/ *def *[\w\.]*[\( ] *(.*)/)[0][0]
            self_obj.sub!(
                self_obj.split("\n")[0],
                "Proc.new { |#{the_params}|"
            )

            replace_obj= self_obj.split("\n")
            var= replace_obj.last.reverse.sub( /\bdne\b/,"-AAAAAAAAAAAA-").reverse.sub("-AAAAAAAAAAAA-","}")
            replace_obj.pop
            replace_obj.push(var)
            self_obj.replace replace_obj.join("\n")


        end


        return ::Sourcerer::SourceCode.new(self_obj)

    end

  end


end

[Method,UnboundMethod,Proc].each{ |cls| cls.__send__(:include,Sourcerer::EXT::SourceLocation) }

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sourcerer-0.7.0 lib/sourcerer/functions.rb
sourcerer-0.6.0 lib/sourcerer/functions.rb