lib/procemon/mpatch/proc.rb in procemon-0.1.1 vs lib/procemon/mpatch/proc.rb in procemon-0.1.3

- old
+ new

@@ -7,6 +7,42 @@ # c.call(1) #=> 20 def *(other) Proc.new { |*args| self[*other[*args]] } end unless method_defined? :* + + # create a raw eval-able process source, so you can set + # the right bindings using the .to_proc call from String methods + @@source_cache= Hash.new + def source + + # defaults + begin + return_string= String.new + block= 0 + end + + if @@source_cache.keys.include? self.object_id + return @@source_cache[self.object_id] + else + File.open(Dir.pwd.dup.concat(File::Separator).concat(self.source_location[0]) + ).each_line_from self.source_location[1] do |line| + + line.gsub!(/\bdo\b/,'{') + line.gsub!(/\bend\b/,'}') + + block += line.frequency /{/ + block -= line.frequency /}/ + + return_string.concat(line) + break if block == 0 + end + + return_string.sub!(/^[\w\W]*Proc.new\s*{/,'Proc.new{') + return_string.sub!(/}[^}]*$/,"}") + @@source_cache[self.object_id]= return_string + return return_string + end + + end + end