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
|