class TinyDyno::Adapter::AttributeValue::Unmarshaler

Public Instance Methods

format(obj) click to toggle source
# File lib/tiny_dyno/adapter/attributes.rb, line 105
def format(obj)
  type, value = extract_type_and_value(obj)
  case type
    when :m
      value.each.with_object({}) do |(k, v), map|
        map[k] = format(v)
      end
    when :l then value.map { |v| format(v) }
    when :s then value
    when :n
      if value.nil?
        nil
      else
        BigDecimal.new(value)
      end
    when :b then StringIO.new(value)
    when :null then nil
    when :bool then value
    when :ss then Set.new(value)
    when :ns then Set.new(value.map { |n| BigDecimal.new(n) })
    when :bs then Set.new(value.map { |b| StringIO.new(b) })
    else
      raise ArgumentError, "unhandled type #{type.inspect}"
  end
end

Private Instance Methods

extract_type_and_value(obj) click to toggle source
# File lib/tiny_dyno/adapter/attributes.rb, line 133
def extract_type_and_value(obj)
  case obj
    when Hash then obj.to_a.first
    when Struct
      obj.members.each do |key|
        value = obj[key]
        return [key, value] unless value.nil?
      end
    else
      raise ArgumentError, "unhandled type #{obj.inspect}"
  end
end