Class: JsonModel::Property

Inherits:
Object
  • Object
show all
Defined in:
lib/json_model/property.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type:, default: nil, optional: false, ref_mode: RefMode::INLINE, as: nil) ⇒ Property

Returns a new instance of Property.

Parameters:

  • name (Symbol)
  • type (TypeSpec)
  • default (Object, nil) (defaults to: nil)
  • optional (Boolean) (defaults to: false)
  • ref_mode (Symbol) (defaults to: RefMode::INLINE)
  • as (Symbol, nil) (defaults to: nil)


13
14
15
16
17
18
19
20
# File 'lib/json_model/property.rb', line 13

def initialize(name, type:, default: nil, optional: false, ref_mode: RefMode::INLINE, as: nil)
  @name = name
  @type = type
  @default = default
  @optional = optional
  @ref_mode = ref_mode
  @alias = as || JsonModel.config.property_naming_strategy.call(name).to_sym
end

Instance Attribute Details

#aliasObject (readonly)

Returns the value of attribute alias.



5
6
7
# File 'lib/json_model/property.rb', line 5

def alias
  @alias
end

#defaultObject (readonly)

Returns the value of attribute default.



5
6
7
# File 'lib/json_model/property.rb', line 5

def default
  @default
end

#nameObject (readonly)

Returns the value of attribute name.



5
6
7
# File 'lib/json_model/property.rb', line 5

def name
  @name
end

#optionalObject (readonly)

Returns the value of attribute optional.



5
6
7
# File 'lib/json_model/property.rb', line 5

def optional
  @optional
end

#typeObject (readonly)

Returns the value of attribute type.



5
6
7
# File 'lib/json_model/property.rb', line 5

def type
  @type
end

Instance Method Details

#as_schema(**options) ⇒ Hash

Parameters:

  • options (Hash)

Returns:

  • (Hash)


24
25
26
27
28
29
30
# File 'lib/json_model/property.rb', line 24

def as_schema(**options)
  {
    self.alias => type
                    .as_schema(**options, ref_mode: @ref_mode)
                    .merge({ default: default }.compact),
  }
end

#referenced_schemasArray

Returns:

  • (Array)


46
47
48
49
50
51
52
# File 'lib/json_model/property.rb', line 46

def referenced_schemas
  if @ref_mode == RefMode::LOCAL
    type.referenced_schemas
  else
    []
  end
end

#register_validations(klass) ⇒ Object

Parameters:

  • (ActiveModel::Validations)


33
34
35
36
37
38
# File 'lib/json_model/property.rb', line 33

def register_validations(klass)
  if required?
    klass.validates(name, presence: true)
  end
  type.register_validations(name, klass)
end

#required?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/json_model/property.rb', line 41

def required?
  !optional
end