Module: Cube::Trait
- Defined in:
- lib/cube/traits.rb
Defined Under Namespace
Classes: IncludeError, MethodConflict
Instance Method Summary
collapse
Instance Method Details
#append_features(mod) ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/cube/traits.rb', line 15
def append_features(mod)
unless mod.instance_variable_defined?(:@__trait_allow_include) &&
mod.instance_variable_get(:@__trait_allow_include)
raise IncludeError, "Traits can only be mixed in using method `with_trait`"
end
conflicts = public_instance_methods & mod.public_instance_methods
errors = conflicts.map { |c|
meth = mod.instance_method(c)
{ meth: meth, owner: meth.owner } unless meth.owner.is_a?(Class)
}.compact
unless errors.empty?
message = "\n" + errors.map { |e| e[:meth].to_s }.join("\n")
raise MethodConflict, message
end
if @__interface__trait_required_interface
intf = @__interface_trait_required_interface
mod.include?(intf) || mod.assert_implements(intf)
end
super(mod)
end
|
#requires_interface(intf) ⇒ Object
8
9
10
11
12
13
|
# File 'lib/cube/traits.rb', line 8
def requires_interface(intf)
unless intf.is_a? Cube::Interface
raise ArgumentError, "#{intf} is not a Cube::Interface"
end
@__interface_trait_required_interface = intf
end
|