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/delivered/signature.rb', line 7
def sig(*sig_args, returns: NULL, **sig_kwargs)
meta = class << self; self; end
meta.send :define_method, :method_added do |name|
meta.send :remove_method, :method_added
alias_method :"__#{name}", name
define_method name do |*args, **kwargs, &block|
sig_args.each.with_index do |arg, i|
args[i] => ^arg
end
kwargs.each do |key, value|
value => ^(sig_kwargs[key])
end
result = if block
send(:"__#{name}", *args, **kwargs, &block)
else
send(:"__#{name}", *args, **kwargs)
end
result => ^returns if returns != NULL
result
end
end
end
|