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/use_arguments.rb', line 8
def use_args receiver = self
return self unless self.parameters.empty?
self_ = self
x = proc do |*args, &block|
::Object.new.instance_eval do
args = args[0] if !self_.lambda? && args.size == 1 && args[0].class == Array
define_singleton_method(:_args) { args }
define_singleton_method(:_) { args[0] }
define_singleton_method(:_self) { x }
define_singleton_method(:_receiver) { receiver }
define_singleton_method(:_yield) { |*args, &_block| block.call *args, &_block }
args.size.times do |i|
define_singleton_method("_#{i + 1}") { args[i] }
end
define_singleton_method(:method_missing) do |name, *args, &block|
return nil if name.to_s =~ /^_\d+$/
super(name, *args, &block)
end unless self_.lambda?
instance_exec &self_
end
end
end
|