Class: Safer::Protocol::Signature
- Inherits:
-
Object
- Object
- Safer::Protocol::Signature
- Defined in:
- lib/safer/protocol.rb
Overview
Hash of method_name => method.arity, describing a set of methods that we expect to see implemented in another class. Protocol will contain two of these objects - one describing class methods, and one describing instance methods.
Class Method Summary collapse
-
.create(object, get_methods, get_method, &filter) ⇒ Object
Derive a Signature from an object.
Instance Method Summary collapse
-
#==(other_object) ⇒ Object
Compare two Protocol::Signature objects for content equality.
-
#find_violations(object, get_method) ⇒ Object
Given an object, and the name of the method for getting a named method from that object, check that the object implements this function signature.
-
#initialize(table) ⇒ Signature
constructor
Create a Protocol::Signature object.
-
#self ⇒ Object
:attr_reader: table
Hash
object, in which the keys are the names of methods, and the value for a key is the required arity of that method.
Constructor Details
#initialize(table) ⇒ Signature
Create a Protocol::Signature object.
182 183 184 |
# File 'lib/safer/protocol.rb', line 182 def initialize(table) self.safer_protocol_signature__table = table end |
Class Method Details
.create(object, get_methods, get_method, &filter) ⇒ Object
Derive a Signature from an object.
224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/safer/protocol.rb', line 224 def self.create(object, get_methods, get_method, &filter) method_names = object.send(get_methods) method_table = Safer::Protocol._array_to_table(method_names) do |h, method_name| if filter.call(method_name) m = object.send(get_method, method_name) m.arity end end self.new(method_table) end |
Instance Method Details
#==(other_object) ⇒ Object
Compare two Protocol::Signature objects for content equality.
187 188 189 190 |
# File 'lib/safer/protocol.rb', line 187 def ==(other_object) self.class == other_object.class && self.safer_protocol_signature__table == other_object.safer_protocol_signature__table end |
#find_violations(object, get_method) ⇒ Object
Given an object, and the name of the method for getting a named method from that object, check that the object implements this function signature.
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'lib/safer/protocol.rb', line 196 def find_violations(object, get_method) report = '' have_error = false error_table = Hash.new self.safer_protocol_signature__table.each_pair do |name, arity| begin m = object.send(get_method, name) if m.arity != arity report += "#{get_method}(#{name}) arity #{m.arity} != desired #{arity}.\n" error_table[name] = m.arity have_error = true end rescue NameError => e report += "#{get_method}(#{name}) unimplemented.\n" error_table[name] = true have_error = true end end if have_error Safer::Protocol::Violation.new(error_table, report) else nil end end |
#self ⇒ Object
:attr_reader: table Hash
object, in which the keys are the names of methods, and the value for a key is the required arity of that method.
178 |
# File 'lib/safer/protocol.rb', line 178 Safer::IVar.export_reader(self, :table) |