class DomainModel::Deserializer

Public Class Methods

deserialize(type, primitive) click to toggle source
# File lib/domain_model.rb, line 139
def self.deserialize(type, primitive)
  new.deserialize(type, primitive)
end

Public Instance Methods

deserialize(type, primitive) click to toggle source
# File lib/domain_model.rb, line 143
def deserialize(type, primitive)
  case
  when type <= DomainModel
    primitive ||= {}
    primitive.each do |k, v|
      field = type.fields.find { |f| f.name.to_s == k.to_s }

      next unless field && field.monotype

      if field.collection?
        primitive[k] = (v || []).map { |e| deserialize(field.monotype, e) }
      else
        primitive[k] = deserialize(field.monotype, v)
      end
    end

    type.new(primitive)
  else
    primitive
  end
end