Class: JsonModel::TypeSpec

Inherits:
Object
  • Object
show all
Defined in:
lib/json_model/type_spec.rb,
lib/json_model/type_spec/enum.rb,
lib/json_model/type_spec/array.rb,
lib/json_model/type_spec/const.rb,
lib/json_model/type_spec/object.rb,
lib/json_model/type_spec/castable.rb,
lib/json_model/type_spec/primitive.rb,
lib/json_model/type_spec/composition.rb,
lib/json_model/type_spec/primitive/null.rb,
lib/json_model/type_spec/primitive/number.rb,
lib/json_model/type_spec/primitive/string.rb,
lib/json_model/type_spec/primitive/boolean.rb,
lib/json_model/type_spec/primitive/integer.rb,
lib/json_model/type_spec/primitive/numeric.rb,
lib/json_model/type_spec/composition/all_of.rb,
lib/json_model/type_spec/composition/any_of.rb,
lib/json_model/type_spec/composition/one_of.rb

Direct Known Subclasses

Array, Castable, Composition, Const, Enum, Object, Primitive

Defined Under Namespace

Classes: Array, Castable, Composition, Const, Enum, Object, Primitive

Constant Summary collapse

TYPE_MAP =
{
  Date => Castable.new(format: 'date') { |v| ::DateTime.iso8601(v) },
  DateTime => Castable.new(format: 'date-time') { |v| ::DateTime.iso8601(v) },
  FalseClass => Primitive::Boolean.new,
  Float => Primitive::Number.new,
  Integer => Primitive::Integer.new,
  NilClass => Primitive::Null.new,
  Regexp => Castable.new(format: 'regex') { |v| Regexp.new(v) },
  String => Primitive::String.new,
  Time => Castable.new(format: 'time') { |v| ::Time.iso8601(v) },
  TrueClass => Primitive::Boolean.new,
  URI => Castable.new(format: 'uri') { |v| URI.parse(v) },
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.resolve(type) ⇒ TypeSpec

Parameters:

Returns:



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/json_model/type_spec.rb', line 51

def resolve(type)
  if type.is_a?(TypeSpec)
    return type
  end

  if TYPE_MAP.key?(type)
    TYPE_MAP[type]
  elsif type.respond_to?(:to_type_spec)
    type.to_type_spec
  elsif type.is_a?(Class) && type < Schema
    TypeSpec::Object.new(type)
  else
    raise(ArgumentError, "Unsupported type: #{type}")
  end
end

Instance Method Details

#as_schema(**options) ⇒ Hash

Parameters:

  • options (Hash)

Returns:

  • (Hash)

Raises:

  • (NotImplementedError)


29
30
31
# File 'lib/json_model/type_spec.rb', line 29

def as_schema(**options)
  raise(NotImplementedError)
end

#cast(json) ⇒ ::Object?

Parameters:

  • json (::Object)

Returns:

  • (::Object, nil)


44
45
46
# File 'lib/json_model/type_spec.rb', line 44

def cast(json)
  json
end

#referenced_schemasArray<TypeSpec>

Returns:



38
39
40
# File 'lib/json_model/type_spec.rb', line 38

def referenced_schemas
  []
end

#register_validations(name, klass) ⇒ Object

Parameters:

  • name (Symbol)
  • klass (ActiveModel::Validations)


35
# File 'lib/json_model/type_spec.rb', line 35

def register_validations(name, klass) end