Class: JsonModel::TypeSpec::Primitive

Inherits:
JsonModel::TypeSpec show all
Defined in:
lib/json_model/type_spec/primitive.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

Direct Known Subclasses

Boolean, Null, Numeric, String

Defined Under Namespace

Classes: Boolean, Integer, Null, Number, Numeric, String

Instance Method Summary collapse

Methods inherited from JsonModel::TypeSpec

#referenced_schemas, #register_validations, resolve

Constructor Details

#initialize(types:, schema_type:) ⇒ Primitive

Returns a new instance of Primitive.

Parameters:

  • types (::Array<Class>)
  • schema_type (String)


8
9
10
11
12
# File 'lib/json_model/type_spec/primitive.rb', line 8

def initialize(types:, schema_type:)
  super()
  @types = types
  @schema_type = schema_type
end

Instance Method Details

#as_schema(**_options) ⇒ Hash

Parameters:

  • _options (Hash)

Returns:

  • (Hash)


16
17
18
# File 'lib/json_model/type_spec/primitive.rb', line 16

def as_schema(**_options)
  { type: @schema_type }
end

#cast(json) ⇒ ::Object?

Parameters:

  • json (::Object)

Returns:

  • (::Object, nil)


22
23
24
25
26
27
28
29
30
# File 'lib/json_model/type_spec/primitive.rb', line 22

def cast(json)
  if json.nil?
    nil
  elsif @types.any? { |type| json.is_a?(type) }
    json
  else
    raise(Errors::TypeError, "Expected one of #{@types.join('/')}, got #{json.class} (#{json.inspect})")
  end
end