Method: BSON#serialize

Defined in:
lib/mongo/util/bson.rb

#serialize(obj) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/mongo/util/bson.rb', line 60

def serialize(obj)
  raise "Document is null" unless obj

  @buf.rewind
  # put in a placeholder for the total size
  @buf.put_int(0)

  obj.each {|k, v|
    type = bson_type(v, k)
    case type
    when STRING, CODE
      serialize_string_element(@buf, k, v, type)
    when NUMBER, NUMBER_INT
      serialize_number_element(@buf, k, v, type)
    when OBJECT
      serialize_object_element(@buf, k, v)
    when OID
      serialize_oid_element(@buf, k, v)
    when ARRAY
      serialize_array_element(@buf, k, v)
    when REGEX
      serialize_regex_element(@buf, k, v)
    when BOOLEAN
      serialize_boolean_element(@buf, k, v)
    when DATE
      serialize_date_element(@buf, k, v)
    when NULL
      serialize_null_element(@buf, k)
    when REF
      serialize_dbref_element(@buf, k, v)
    when SYMBOL
      serialize_symbol_element(@buf, k, v)
    when BINARY
      serialize_binary_element(@buf, k, v)
    when UNDEFINED
      serialize_undefined_element(@buf, k)
    when CODE_W_SCOPE
      # TODO
      raise "unimplemented type #{type}"
    else
      raise "unhandled type #{type}"
    end
  }
  serialize_eoo_element(@buf)
  @buf.put_int(@buf.size, 0)
  self
end