class De::Ser::Ializer

Public Class Methods

parse(data, model_class) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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

Protected Class Methods

create_anon_class() click to toggle source
# File lib/de/ser/ializer.rb, line 49
def create_anon_class
  Class.new(De::Ser::Ializer)
end

Private Class Methods

ostruct?(model_class) click to toggle source
# File lib/de/ser/ializer.rb, line 65
def ostruct?(model_class)
  defined?(OpenStruct) && model_class <= OpenStruct
end
parse_field(object, field, value) click to toggle source
# File lib/de/ser/ializer.rb, line 55
def parse_field(object, field, value)
  return if value.nil?

  parsed_value = field.parse(value)

  return if parsed_value.nil?

  object.public_send(field.setter, parsed_value)
end
parse_ostruct(data) click to toggle source
# File lib/de/ser/ializer.rb, line 69
def parse_ostruct(data)
  object = OpenStruct.new

  data.each do |key, value|
    parse_ostruct_field(object, key, value)
  end

  object
end
parse_ostruct_field(object, key, value) click to toggle source
# File lib/de/ser/ializer.rb, line 79
def parse_ostruct_field(object, key, value)
  field = _attributes[key]

  return unless field

  parse_field(object, field, value)
end