Module: AppleNews::Properties

Extended by:
ActiveSupport::Concern
Included in:
Addition::Base, Animation::Base, Article, Behavior::Base, Component::Base, ComponentLayout, Document, Layout, Metadata, AppleNews::Property::Base, Scene::Base, Style::Base
Defined in:
lib/apple-news/properties.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#initialize(opts = nil) ⇒ Object



5
6
7
# File 'lib/apple-news/properties.rb', line 5

def initialize(opts = nil)
  load_properties(opts)
end

#load_properties(opts) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/apple-news/properties.rb', line 9

def load_properties(opts)
  opts = ActiveSupport::HashWithIndifferentAccess.new(opts || {})
  self.class.properties.each do |prop, settings|
    json_key = _property_inflection[prop] || prop.to_s.camelize(:lower)
    val = if !settings[:klass].nil?
      assigned_val = opts.fetch(json_key, settings[:default])

      if settings[:default].is_a?(Array)
        assigned_val.map { |v|
          v.is_a?(Hash) ? settings[:klass].send(settings[:init_method], v) : v
        }
      elsif settings[:default].is_a?(Hash)
        Hash[assigned_val.map { |k, v|
          [k, v.is_a?(Hash) ? settings[:klass].send(settings[:init_method], v) : v]
        }]
      elsif !assigned_val.nil? && !assigned_val.is_a?(Class)
        assigned_val
      else
        assigned_val.nil? ? nil : settings[:klass].send(settings[:init_method], assigned_val)
      end
    else
      opts.fetch(json_key, settings[:default])
    end

    instance_variable_set "@#{prop}", val
  end
end