Class: CommandTower::Deserializers::Clients::Result

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Attributes, ActiveModel::Model
Defined in:
app/deserializers/command_tower/deserializers/clients/result.rb

Overview

Validated response Result contracts for client deserializers. ActiveModel attributes are storage only; validation policy lives in field / build!.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build!(**attrs) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'app/deserializers/command_tower/deserializers/clients/result.rb', line 40

def build!(**attrs)
  values = {}
  field_definitions.each do |name, meta|
    raw = attrs.key?(name) ? attrs[name] : Missing
    values[name] = resolve_field(name, meta, raw)
  end

  new(**values)
end

.field(name, type:, required: false, nullable: false, default: DEFAULT_UNSET) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/deserializers/command_tower/deserializers/clients/result.rb', line 16

def field(name, type:, required: false, nullable: false, default: DEFAULT_UNSET)
  name = name.to_sym
  normalized_type = Types.normalize(type)

  if default.equal?(DEFAULT_UNSET)
    has_default = false
    default_value = nil
  else
    validate_default!(default)
    has_default = true
    default_value = default
  end

  field_definitions[name] = {
    type: normalized_type,
    required: required,
    nullable: nullable,
    has_default: has_default,
    default: default_value
  }

  attribute name
end

.field_definitionsObject



50
51
52
# File 'app/deserializers/command_tower/deserializers/clients/result.rb', line 50

def field_definitions
  @field_definitions ||= {}
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



115
116
117
# File 'app/deserializers/command_tower/deserializers/clients/result.rb', line 115

def ==(other)
  other.instance_of?(self.class) && attributes == other.attributes
end