Class: De::Ser::Ializer

Inherits:
Ser::Ializer show all
Defined in:
lib/de/ser/ializer.rb

Class Method Summary collapse

Methods inherited from Ser::Ializer

attribute_names, attributes, config, deser_types, nested, property, register, register_default, serialize, serialize_json, setup, with

Class Method Details

.parse(data, model_class) ⇒ Object



7
8
9
10
11
# File 'lib/de/ser/ializer.rb', line 7

def parse(data, model_class)
  return parse_many(data, model_class) if data.is_a? Array

  parse_one(data, model_class)
end

.parse_attribute(object, key, value) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/de/ser/ializer.rb', line 37

def parse_attribute(object, key, value)
  field = attributes[key]

  return unless field

  return unless object.respond_to?(field.setter)

  parse_field(object, field, value)
end

.parse_json(json, model_class) ⇒ Object



32
33
34
35
# File 'lib/de/ser/ializer.rb', line 32

def parse_json(json, model_class)
  data = MultiJson.load(json)
  parse(data, model_class)
end

.parse_many(data, model_class) ⇒ Object



13
14
15
# File 'lib/de/ser/ializer.rb', line 13

def parse_many(data, model_class)
  data.map { |obj_data| parse_one(obj_data, model_class) }
end

.parse_object(data, object) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/de/ser/ializer.rb', line 24

def parse_object(data, object)
  data.each do |key, value|
    parse_attribute(object, key, value)
  end

  object
end

.parse_one(data, model_class) ⇒ Object



17
18
19
20
21
22
# File 'lib/de/ser/ializer.rb', line 17

def parse_one(data, model_class)
  # OpenStruct lazily defines methods so respond_to? fails initially
  return parse_ostruct(data) if ostruct?(model_class)

  parse_object(data, model_class.new)
end