Module: CompactData::Model

Defined in:
lib/compactdata/model/model.rb

Overview

A Model module for CompactData

Defined Under Namespace

Classes: CompactData, CompactDataArray, CompactDataBoolNull, CompactDataFloat, CompactDataInteger, CompactDataMap, CompactDataPair, CompactDataPrimitive, CompactDataQuoted, CompactDataString

Class Method Summary collapse

Class Method Details

.to_compactdata(obj) ⇒ Object

Convert a Ruby Hash/Array/Primitive to a CompactData object.



236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
# File 'lib/compactdata/model/model.rb', line 236

def self.to_compactdata(obj)
  if obj.instance_of? Float
    CompactDataFloat.new obj
  elsif obj.instance_of? Integer
    CompactDataInteger.new obj
  elsif obj.instance_of? String
    CompactDataString.new obj
  elsif obj.instance_of? Hash
    if obj.keys.length == 1
      key = obj.keys[0]
      CompactDataPair.new key, to_compactdata(obj[key])
    else
      CompactDataMap.new(obj.keys.map { |k| CompactDataPair.new k, to_compactdata(obj[k]) })
    end
  elsif obj.instance_of? Array
    CompactDataArray.new(obj.map { |i| to_compactdata i })
  elsif obj.instance_of? TrueClass
    CompactDataBoolNull::CompactData_TRUE
  elsif obj.instance_of? FalseClass
    CompactDataBoolNull::CompactData_FALSE
  elsif obj.instance_of? NilClass
    CompactDataBoolNull::CompactData_NULL
  else
    puts "Cannot handle #{obj}"
    exit
  end
end