Class: JsonModel::TypeSpec::Array

Inherits:
JsonModel::TypeSpec show all
Defined in:
lib/json_model/type_spec/array.rb

Instance Method Summary collapse

Methods inherited from JsonModel::TypeSpec

resolve

Constructor Details

#initialize(type, min_items: nil, max_items: nil, unique_items: nil) ⇒ Array

Returns a new instance of Array.

Parameters:

  • type (TypeSpec)
  • min_items (Integer, nil) (defaults to: nil)
  • max_items (Integer, nil) (defaults to: nil)
  • unique_items (Boolean, nil) (defaults to: nil)


10
11
12
13
14
15
16
# File 'lib/json_model/type_spec/array.rb', line 10

def initialize(type, min_items: nil, max_items: nil, unique_items: nil)
  super()
  @type = type
  @min_items = min_items
  @max_items = max_items
  @unique_items = unique_items
end

Instance Method Details

#as_schema(**options) ⇒ Hash

Parameters:

  • options (Hash)

Returns:

  • (Hash)


20
21
22
23
24
25
26
27
28
# File 'lib/json_model/type_spec/array.rb', line 20

def as_schema(**options)
  {
    type: 'array',
    items: @type.as_schema(**options),
    minItems: @min_items,
    maxItems: @max_items,
    uniqueItems: @unique_items,
  }.compact
end

#cast(json) ⇒ ::Object?

Parameters:

  • json (::Object)

Returns:

  • (::Object, nil)


50
51
52
53
54
55
56
# File 'lib/json_model/type_spec/array.rb', line 50

def cast(json)
  if json.is_a?(Enumerable)
    json.map { |item| @type.cast(item) }
  else
    raise(Errors::TypeError, "Expected an array, got #{json.class} (#{json.inspect})")
  end
end

#referenced_schemasArray<TypeSpec>

Returns:



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

def referenced_schemas
  @type.referenced_schemas
end

#register_validations(name, klass) ⇒ Object

Parameters:

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


32
33
34
35
36
37
38
39
40
41
# File 'lib/json_model/type_spec/array.rb', line 32

def register_validations(name, klass)
  super

  if @min_items || @max_items
    klass.validates(name, length: { minimum: @min_items, maximum: @max_items }.compact, allow_nil: true)
  end
  if @unique_items
    register_uniqueness_validation(name, klass)
  end
end