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