Class: Accord::InterfaceClass
Instance Attribute Summary collapse
Instance Method Summary
collapse
#ancestors, #bases, #bases=, #extends?, #interfaces
Constructor Details
#initialize(name, bases = []) ⇒ InterfaceClass
Returns a new instance of InterfaceClass.
65
66
67
68
|
# File 'lib/accord/interface.rb', line 65
def initialize(name, bases=[])
super(bases)
@name = name.to_s
end
|
Instance Attribute Details
#doc ⇒ Object
Returns the value of attribute doc.
63
64
65
|
# File 'lib/accord/interface.rb', line 63
def doc
@doc
end
|
Instance Method Details
#[](name) ⇒ Object
128
129
130
131
|
# File 'lib/accord/interface.rb', line 128
def [](name)
owner = iro.detect { |i| i.owns?(name) }
owner.members[name] if owner
end
|
#adapt(*objects) ⇒ Object
86
87
88
89
90
91
92
|
# File 'lib/accord/interface.rb', line 86
def adapt(*objects)
Accord.adapter_hooks.each do |hook|
result = hook.call(self, *objects)
return result if result
end
nil
end
|
#adapt!(*objects) ⇒ Object
94
95
96
97
98
|
# File 'lib/accord/interface.rb', line 94
def adapt!(*objects)
adapt(*objects).tap do |result|
raise TypeError, "could not adapt: #{objects.inspect}" if result.nil?
end
end
|
#assert_invariants(object, errors = nil) ⇒ Object
154
155
156
|
# File 'lib/accord/interface.rb', line 154
def assert_invariants(object, errors=nil)
raise Invalid unless assert_invariants?(object, errors)
end
|
#assert_invariants?(object, errors = nil) ⇒ Boolean
147
148
149
150
151
152
|
# File 'lib/accord/interface.rb', line 147
def assert_invariants?(object, errors=nil)
errors ||= []
(iro - [self]).each { |i| i.assert_invariants?(object, errors) }
invariants.run(object, errors)
errors.empty?
end
|
#defined?(name) ⇒ Boolean
133
134
135
|
# File 'lib/accord/interface.rb', line 133
def defined?(name)
iro.any? { |i| i.owns?(name) }
end
|
#each ⇒ Object
141
142
143
144
145
|
# File 'lib/accord/interface.rb', line 141
def each
member_names.each do |name|
yield(name, self[name])
end
end
|
#each_interface {|_self| ... } ⇒ Object
74
75
76
|
# File 'lib/accord/interface.rb', line 74
def each_interface
yield(self)
end
|
#implemented_by?(cls_or_mod) ⇒ Boolean
#inspect ⇒ Object
82
83
84
|
# File 'lib/accord/interface.rb', line 82
def inspect
"<Interface #{name}>"
end
|
#invariants ⇒ Object
112
113
114
|
# File 'lib/accord/interface.rb', line 112
def invariants
@invariants ||= InterfaceInvariants.new(self)
end
|
#iro ⇒ Object
78
79
80
|
# File 'lib/accord/interface.rb', line 78
def iro
@iro ||= ancestors.select { |spec| spec.is_a?(InterfaceClass) }
end
|
#member_names ⇒ Object
116
117
118
119
120
121
122
|
# File 'lib/accord/interface.rb', line 116
def member_names
iro.reverse.each_with_object([]) do |i, names|
i.members.names.each do |name|
names << name unless names.include?(name)
end
end
end
|
#members ⇒ Object
108
109
110
|
# File 'lib/accord/interface.rb', line 108
def members
@members ||= InterfaceMembers.new(self)
end
|
#name ⇒ Object
70
71
72
|
# File 'lib/accord/interface.rb', line 70
def name
@name
end
|
#own_member_names ⇒ Object
124
125
126
|
# File 'lib/accord/interface.rb', line 124
def own_member_names
members.names
end
|
#owns?(name) ⇒ Boolean
137
138
139
|
# File 'lib/accord/interface.rb', line 137
def owns?(name)
members.added?(name)
end
|
#provided_by?(object) ⇒ Boolean
158
159
160
|
# File 'lib/accord/interface.rb', line 158
def tags
@tags ||= Tags.new
end
|
#verify_module(mod) ⇒ Object
171
172
173
174
175
176
177
178
|
# File 'lib/accord/interface.rb', line 171
def verify_module(mod)
raise DoesNotImplement.new(self) unless implemented_by?(mod)
each do |name, member|
raise BrokenImplementation.new(self, name) unless \
member.compatible_with_module?(mod)
end
end
|
#verify_object(object) ⇒ Object
162
163
164
165
166
167
168
169
|
# File 'lib/accord/interface.rb', line 162
def verify_object(object)
raise DoesNotImplement.new(self) unless provided_by?(object)
each do |name, member|
raise BrokenImplementation.new(self, name) unless \
member.compatible_with_object?(object)
end
end
|