Module: Diva::Type
Overview
Modelの各キーに格納できる値の制約。この制約に満たない場合は、アトミックな制約であれば値の変換が行われ、そうでない場合はDiva::InvalidTypeError 例外を投げる。
これは新しくインスタンスなどを作らず、INT、FLOATなどのプリセットを利用する。
設定できる制約
Modelフィールドの制約には以下のようなものがある。
アトミックな制約
以下のような値は、DivaのModelフィールドにおいてはアトミックな制約と呼び、そのまま格納できる。
- INT
-
数値(Integer)
- FLOAT
-
少数(Float)
- BOOL
-
真理値(true|false)
- STRING
-
文字列(String)
- TIME
-
時刻(Time)
- URI
-
URI(Diva::URI|URI::Generic|Addressable::URI)
Model
Diva::Modelのサブクラスであれば、それを制約とすることができる。
配列
アトミックな制約またはModel制約を満たした値の配列を格納することができる。配列の全ての要素が設定された制約を満たしていれば、配列制約が満たされたことになる。
Defined Under Namespace
Classes: ArrayType, AtomicType, MetaType, ModelType, OptionalType
Constant Summary collapse
- INT =
AtomicType.new(:int) 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) 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) 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) do |v| case v when Diva::Model, Enumerable raise Diva::InvalidTypeError, "The value is not a `#{name}'." else v.to_s end end
- TIME =
AtomicType.new(:time) do |v| case v when Time v when Integer, Float Time.at(v) when String Time.new(v) else raise Diva::InvalidTypeError, "The value is not a `#{name}'." end end
- URI =
AtomicType.new(:uri) 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
Instance Method Summary collapse
Instance Method Details
#array_of(type) ⇒ Object
37 38 39 |
# File 'lib/diva/type.rb', line 37 def array_of(type) ArrayType.new(type) end |
#model_of(model) ⇒ Object
33 34 35 |
# File 'lib/diva/type.rb', line 33 def model_of(model) ModelType.new(model) end |
#optional(type) ⇒ Object
41 42 43 |
# File 'lib/diva/type.rb', line 41 def optional(type) OptionalType.new(type) end |