lib/procemon/mpatch/proc.rb in procemon-0.1.4 vs lib/procemon/mpatch/proc.rb in procemon-0.1.5

- old
+ new

@@ -7,33 +7,26 @@ # 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 + + unless @@source_cache[self.object_id].nil? return @@source_cache[self.object_id] else - File.open(Dir.pwd.dup.concat(File::Separator).concat(self.source_location[0]) + File.open(File.expand_path(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 /}/ - + block += line.source_formater_for_line_sub return_string.concat(line) break if block == 0 end return_string.sub!(/^[\w\W]*Proc.new\s*{/,'Proc.new{') @@ -45,10 +38,23 @@ @@source_cache[self.object_id]= return_string return return_string end - end alias :source_string :source + + def call_with_binding(bind, *args) + Bindless.new([bind]).run_proc(self, *args) + end + + def call_with_obj(obj, *args) + m = nil + p = self + Object.class_eval do + define_method :a_temp_method_name, &p + m = instance_method :a_temp_method_name; remove_method :a_temp_method_name + end + m.bind(obj).call(*args) + end end