Class: TSJSON::Enum
Instance Method Summary
collapse
Methods inherited from Base
#compile, #index, #valid?
Constructor Details
#initialize(members = {}) ⇒ Enum
3
4
5
6
7
8
|
# File 'lib/types/enum.rb', line 3
def initialize(members = {})
super()
@members = members
@members.each { |name, type| validate_type!(type) }
end
|
Instance Method Details
#has?(type) ⇒ Boolean
28
29
30
|
# File 'lib/types/enum.rb', line 28
def has?(type)
types.include?(type)
end
|
#member(name) ⇒ Object
Also known as:
property
10
11
12
13
14
15
|
# File 'lib/types/enum.rb', line 10
def member(name)
m = @members[name]
raise "Can't access property #{name} of #{self.class.name}" unless m
m
end
|
#push_type(type) ⇒ Object
18
19
20
21
22
|
# File 'lib/types/enum.rb', line 18
def push_type(type)
validate_type!(type)
return self if types.include?(type)
return Enum.new(@types.dup.push(type))
end
|
#types ⇒ Object
24
25
26
|
# File 'lib/types/enum.rb', line 24
def types
@types ||= @members.values
end
|
#validate(value) ⇒ Object
38
39
40
41
42
43
44
45
|
# File 'lib/types/enum.rb', line 38
def validate(value)
types.each { |type| return true if type.valid?(value) }
raise LiteralUnionValidationError.new(
expected_values: types.map(&:value),
received_value: value
)
end
|
#validate_type!(type) ⇒ Object
32
33
34
35
36
|
# File 'lib/types/enum.rb', line 32
def validate_type!(type)
unless type.is_a?(Literal)
raise "Enum can contain only literal values received #{type.class}"
end
end
|