Module: Detach::Types

Defined in:
lib/detach.rb

Overview

The Detach::Types module is inserted as a parent of the class which includes the Detach mixin. This module handles inspection and aliasing of instance methods as they are added.

Detach::Types does not need to be extended directly.

Instance Method Summary collapse

Instance Method Details

#[](*types) ⇒ Object

:stopdoc:



87
88
89
# File 'lib/detach.rb', line 87

def [](*types)
	@@types = types.flatten
end

#method_added(name) ⇒ Object

Raises:

  • (ArgumentError)


90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/detach.rb', line 90

def method_added(name)
	return unless @@types

	# query the parameter info for the method just added
	p = instance_method(name).parameters.map &:first
	raise ArgumentError.new('type and parameter mismatch') unless p.size == @@types.size

	# encode our defined types with parameter info into a new name and remove the original
	n = (name.to_s + '(' + p.zip(@@types).collect {|p,t| "#{p}-#{t}" }.join(',') + ')').to_sym
	@@types = nil

	alias_method n, name unless method_defined?(n)
	define_method(name) {|*args, &block| method_missing(name, *args, &block)}
end

#takingObject

Decorator method for defining argument signature.

Example:

taking['String']
def foo(a)
end


83
84
85
# File 'lib/detach.rb', line 83

def taking
	self
end