4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/debugging/howtocall.rb', line 4
def howtocall(object = self, method_or_proc)
if method_or_proc.is_a? Proc
params = method_or_proc.parameters
template = "call(%s)"
else
unless method_or_proc.is_a?(Method) || method_or_proc.is_a?(UnboundMethod)
method_or_proc = object.method(method_or_proc)
end
params = method_or_proc.parameters
template = "#{method_or_proc.name}(%s)"
end
sig = params.map{ |type, name|
param = ""
param << "*" if type == :rest
param << "**" if type == :keyrest
param << "&" if type == :block
name = ?? if !name && !(type == :rest || type == :keyrest)
if type == :opt || type == :key
param << Paint[name, :underline]
else
param << name.to_s
end
param << ":" if type == :key || type == :keyreq
param
}*", "
puts template %(sig)
nil
end
|