Class: Type
- Inherits:
-
Object
show all
- Defined in:
- lib/carat-dev/interface_work/type.rb
Defined Under Namespace
Classes: TypeRepositoryError, TypeSignitureError, TypeValidationError
Constant Summary
collapse
- @@repository =
{}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(name, responders, &validator) ⇒ Type
Returns a new instance of Type.
108
109
110
111
112
113
|
# File 'lib/carat-dev/interface_work/type.rb', line 108
def initialize(name, responders, &validator)
@name = name
@responders = responders
@validator = validator
Type.add(self)
end
|
Instance Attribute Details
Returns the value of attribute name.
107
108
109
|
# File 'lib/carat-dev/interface_work/type.rb', line 107
def name
@name
end
|
#responders ⇒ Object
Returns the value of attribute responders.
107
108
109
|
# File 'lib/carat-dev/interface_work/type.rb', line 107
def responders
@responders
end
|
#validator ⇒ Object
Returns the value of attribute validator.
107
108
109
|
# File 'lib/carat-dev/interface_work/type.rb', line 107
def validator
@validator
end
|
Class Method Details
104
105
106
|
# File 'lib/carat-dev/interface_work/type.rb', line 104
def Type.[](name)
@@repository[name]
end
|
100
101
102
103
|
# File 'lib/carat-dev/interface_work/type.rb', line 100
def Type.add(t)
raise TypeRepositoryError if !t.kind_of?(Type)
@@repository[t.name] = t
end
|
Instance Method Details
#check(obj) ⇒ Object
133
134
135
136
|
# File 'lib/carat-dev/interface_work/type.rb', line 133
def check(obj)
ensigniate(obj)
validate(obj)
end
|
#check?(obj) ⇒ Boolean
130
131
132
|
# File 'lib/carat-dev/interface_work/type.rb', line 130
def check?(obj)
ensign?(obj) && valid?(obj)
end
|
#ensign?(obj) ⇒ Boolean
114
115
116
|
# File 'lib/carat-dev/interface_work/type.rb', line 114
def ensign?(obj)
@responders.all? { |r| @r = r; obj.send(:respond_to?, r) }
end
|
#ensigniate(obj) ⇒ Object
117
118
119
120
121
|
# File 'lib/carat-dev/interface_work/type.rb', line 117
def ensigniate(obj)
unless ensign?(obj)
raise TypeSignitureError, "#{self.name} #{obj} (#{@r})"
end
end
|
#valid?(obj) ⇒ Boolean
122
123
124
|
# File 'lib/carat-dev/interface_work/type.rb', line 122
def valid?(obj)
@validator ? @validator.call(obj) : true
end
|
#validate(obj) ⇒ Object
125
126
127
128
129
|
# File 'lib/carat-dev/interface_work/type.rb', line 125
def validate(obj)
unless valid?(obj)
raise TypeValidationError, "#{self.name} #{obj}"
end
end
|