Top Level Namespace
Defined Under Namespace
Modules: PatternMatching
Classes: Object
Instance Method Summary
collapse
Instance Method Details
#behavior(name) ⇒ Object
Also known as:
behaviour, behaves_as
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/behavior.rb', line 28
def behavior(name)
name = name.to_sym
raise ArgumentError.new("undefined behavior '#{name}'") if $__behavior_info__[name].nil?
clazz = self.method(:behavior).receiver
unless clazz.instance_methods(false).include?(:behaviors)
class << clazz
def behaviors
@behaviors ||= []
end
end
end
clazz.behaviors << name
class << clazz
def new(*args, &block)
name = self.behaviors.first
obj = super
unless obj.behaves_as?(name)
raise ArgumentError.new("undefined callback functions in #{self} (behavior '#{name}')")
else
return obj
end
end
end
end
|
#behavior_info(name, callbacks = {}) ⇒ Object
Also known as:
behaviour_info, interface
1
2
3
4
|
# File 'lib/behavior.rb', line 1
def behavior_info(name, callbacks = {})
$__behavior_info__ ||= {}
$__behavior_info__[name.to_sym] = callbacks.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
end
|