class Proc

Add javascript-like apply and call methods to Proc, called js_apply and js_call, respectivly.

Public Instance Methods

js_apply(obj,args) click to toggle source

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

# File lib/rubyvis/javascript_behaviour.rb, line 57
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
js_call(obj, *args) click to toggle source

Same as #js_apply, but using explicit arguments

# File lib/rubyvis/javascript_behaviour.rb, line 75
def js_call(obj, *args)
  js_apply(obj,args)
end