Module: UseArguments::ToUseArgs

Defined in:
lib/use_arguments.rb

Instance Method Summary collapse

Instance Method Details

#use_args(receiver = self) ⇒ Object



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