Sha256: ab47af04f75dd6892b3c62cff8c2a9c9b39287f09fd35bc2362e9cc21f0071e4
Contents?: true
Size: 1.95 KB
Versions: 16
Compression:
Stored size: 1.95 KB
Contents
class TrueClass # Return 1 def to_i 1 end end class FalseClass # Return 0 def to_i 0 end end # :stopdoc: unless Object.public_method_defined? :instance_exec class Object module InstanceExecHelper; end include InstanceExecHelper def instance_exec(*args, &block) # :nodoc: begin old_critical, Thread.critical = Thread.critical, true n = 0 n += 1 while respond_to?(mname="__instance_exec#{n}") InstanceExecHelper.module_eval{ define_method(mname, &block) } ensure Thread.critical = old_critical end begin ret = send(mname, *args) ensure InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil end ret end end end # :startdoc: # Add javascript-like +apply+ and +call+ methods to Proc, # called +js_apply+ and +js_call+, respectivly. class Proc # Used on Rubyvis::Nest attr_accessor :order # :nodoc: # Emulation of +apply+ javascript method. # +apply+ has this signature # my_proc.apply(my_obj, args) # where # [+my_proc+] a proc # [+my_obj+] object inside proc is eval'ed # [args] array of arguments for proc # # +apply+ on javascript is very flexible. Can accept more or less # variables than explicitly defined parameters on lambda, so this # method adds or remove elements according to lambda arity # def js_apply(obj,args) arguments=args.dup # Modify numbers of args to works with arity min_args=self.arity > 0 ? self.arity : (-self.arity)-1 if args.size > min_args and self.arity>0 arguments=arguments[0,self.arity] elsif args.size < min_args arguments+=[nil]*(min_args-args.size) end #puts "#{args}->#{arguments} (#{self.arity})" if self.arity==0 obj.instance_exec(&self) else obj.instance_exec(*arguments, &self) end end # Same as js_apply, but using explicit arguments def js_call(obj, *args) js_apply(obj,args) end end
Version data entries
16 entries across 16 versions & 1 rubygems