Module: Diva::Type
- Extended by:
- Type
- Included in:
- Type
- Defined in:
- lib/diva/type.rb
Defined Under Namespace
Classes: ArrayType, AtomicType, MetaType, ModelType, TimeType, UnionType
Constant Summary
collapse
- INT =
AtomicType.new(:int, [Integer]) do |v|
case v
when Integer
v
when Numeric, String, Time
v.to_i
when TrueClass
1
when FalseClass
0
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
- FLOAT =
AtomicType.new(:float, [Float]) do |v|
case v
when Float
v
when Numeric, String, Time
v.to_f
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
- BOOL =
AtomicType.new(:bool, [TrueClass, FalseClass]) do |v|
case v
when TrueClass, FalseClass
v
when String
!v.empty?
when Integer
v != 0
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
- STRING =
AtomicType.new(:string, String) do |v|
case v
when Diva::Model, Enumerable
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
else
v.to_s
end
end
- TIME =
TimeType.new(:time, [Time, String]) do |v|
case v
when Time
v
when Integer, Float
Time.at(v)
when String
begin
Time.iso8601(v)
rescue StandardError
Time.parse(v)
end
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
- URI =
AtomicType.new(:uri, [Diva::URI, Addressable::URI, ::URI::Generic]) do |v|
case v
when Diva::URI, Addressable::URI, ::URI::Generic
v
when String
Diva::URI.new(v)
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
- NULL =
AtomicType.new(:null, NilClass) do |v|
if v == nil
v
else
raise Diva::InvalidTypeError, "The value is not a `#{name}'."
end
end
Instance Method Summary
collapse
Instance Method Details
#array_of(type) ⇒ Object
40
41
42
|
# File 'lib/diva/type.rb', line 40
def array_of(type)
ArrayType.new(type)
end
|
#model_of(model) ⇒ Object
36
37
38
|
# File 'lib/diva/type.rb', line 36
def model_of(model)
ModelType.new(model)
end
|
#optional(type) ⇒ Object
44
45
46
|
# File 'lib/diva/type.rb', line 44
def optional(type)
UnionType.new(NULL, type)
end
|
#union(*types) ⇒ Object
48
49
50
|
# File 'lib/diva/type.rb', line 48
def union(*types)
UnionType.new(*types)
end
|