Method: EasyApi::Object#initialize

Defined in:
lib/easy_api/object.rb

#initialize(data) ⇒ Object

Returns a new instance of Object.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/easy_api/object.rb', line 14

def initialize(data)
  raise EasyApi::MissingRequiredAttributeError unless required_attribute_names.all? do |name|
    data.keys.include?(name) || data.keys.include?(name.to_s)
  end

  raise EasyApi::UnknownAttributeError if data.keys.any? do |key|
    !attribute_names.include?(key) && !attribute_names.include?(key.to_sym)
  end

  @attributes = data.map do |k, v|
    [k.to_sym, v]
  end.map do |k, v|
    next [k, v] unless v.instance_of? Hash

    v =
      if object_class = schema[k]
        object_class.new(v)
      else
        OpenStruct.new(v)
      end

    [k, v]
  end.to_h

  @attributes = empty_optional_attributes.merge(@attributes)
end