Support BINARY. Lots more tests. NOTE: since some of them fail, I have commented out the tests for now.
This commit is contained in:
parent
77d192183a
commit
78fdfe0eb9
|
@ -1,6 +1,7 @@
|
||||||
require 'mongo/mongo'
|
require 'mongo/mongo'
|
||||||
require 'mongo/objectid'
|
require 'mongo/objectid'
|
||||||
require 'mongo/dbref'
|
require 'mongo/dbref'
|
||||||
|
require 'mongo/binary'
|
||||||
require 'mongo/message'
|
require 'mongo/message'
|
||||||
require 'mongo/db'
|
require 'mongo/db'
|
||||||
require 'mongo/cursor'
|
require 'mongo/cursor'
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
# --
|
||||||
|
# Copyright (C) 2008-2009 10gen Inc.
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Affero General Public License, version 3, as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
|
||||||
|
# for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
# ++
|
||||||
|
|
||||||
|
module XGen
|
||||||
|
module Mongo
|
||||||
|
module Driver
|
||||||
|
|
||||||
|
# An array of binary bytes. The only reason this exists is so that the
|
||||||
|
# BSON encoder will know to output the Mongo BINARY type.
|
||||||
|
class Binary < String; end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class String
|
||||||
|
# Convert a string into a XGen::Mongo::Driver::Binary
|
||||||
|
def to_mongo_binary
|
||||||
|
XGen::Mongo::Driver::Binary.new(self)
|
||||||
|
end
|
||||||
|
end
|
|
@ -14,6 +14,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
# ++
|
# ++
|
||||||
|
|
||||||
|
require 'base64'
|
||||||
require 'mongo/util/byte_buffer'
|
require 'mongo/util/byte_buffer'
|
||||||
require 'mongo/util/ordered_hash'
|
require 'mongo/util/ordered_hash'
|
||||||
require 'mongo/objectid'
|
require 'mongo/objectid'
|
||||||
|
@ -88,7 +89,9 @@ class BSON
|
||||||
serialize_dbref_element(@buf, k, v)
|
serialize_dbref_element(@buf, k, v)
|
||||||
when SYMBOL
|
when SYMBOL
|
||||||
serialize_symbol_element(@buf, k, v)
|
serialize_symbol_element(@buf, k, v)
|
||||||
when BINARY, UNDEFINED, CODE_W_SCOPE
|
when BINARY
|
||||||
|
serialize_binary_element(@buf, k, v)
|
||||||
|
when UNDEFINED, CODE_W_SCOPE # UNDEFINED should never happen
|
||||||
# TODO
|
# TODO
|
||||||
raise "unimplemented type #{type}"
|
raise "unimplemented type #{type}"
|
||||||
else
|
else
|
||||||
|
@ -146,7 +149,10 @@ class BSON
|
||||||
when SYMBOL
|
when SYMBOL
|
||||||
key = deserialize_cstr(@buf)
|
key = deserialize_cstr(@buf)
|
||||||
doc[key] = deserialize_symbol_data(@buf, key)
|
doc[key] = deserialize_symbol_data(@buf, key)
|
||||||
when BINARY, CODE_W_SCOPE
|
when BINARY
|
||||||
|
key = deserialize_cstr(@buf)
|
||||||
|
doc[key] = deserialize_binary_data(@buf, key)
|
||||||
|
when CODE_W_SCOPE
|
||||||
# TODO
|
# TODO
|
||||||
raise "unimplemented type #{type}"
|
raise "unimplemented type #{type}"
|
||||||
when EOO
|
when EOO
|
||||||
|
@ -233,6 +239,10 @@ class BSON
|
||||||
deserialize_cstr(buf).intern
|
deserialize_cstr(buf).intern
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def deserialize_binary_data(buf, key)
|
||||||
|
Base64.decode64(deserialize_cstr(buf))
|
||||||
|
end
|
||||||
|
|
||||||
def serialize_eoo_element(buf)
|
def serialize_eoo_element(buf)
|
||||||
buf.put(EOO)
|
buf.put(EOO)
|
||||||
end
|
end
|
||||||
|
@ -255,6 +265,12 @@ class BSON
|
||||||
self.class.serialize_cstr(buf, val)
|
self.class.serialize_cstr(buf, val)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def serialize_binary_element(buf, key, val)
|
||||||
|
buf.put(BINARY)
|
||||||
|
self.class.serialize_cstr(buf, key)
|
||||||
|
self.class.serialize_cstr(buf, Base64.encode64(val))
|
||||||
|
end
|
||||||
|
|
||||||
def serialize_boolean_element(buf, key, val)
|
def serialize_boolean_element(buf, key, val)
|
||||||
buf.put(BOOLEAN)
|
buf.put(BOOLEAN)
|
||||||
self.class.serialize_cstr(buf, key)
|
self.class.serialize_cstr(buf, key)
|
||||||
|
@ -363,6 +379,8 @@ class BSON
|
||||||
OID
|
OID
|
||||||
when XGen::Mongo::Driver::DBRef
|
when XGen::Mongo::Driver::DBRef
|
||||||
REF
|
REF
|
||||||
|
when XGen::Mongo::Driver::Binary
|
||||||
|
BINARY
|
||||||
when true, false
|
when true, false
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
when Time
|
when Time
|
||||||
|
|
|
@ -44,6 +44,8 @@ class XMLToRuby
|
||||||
e.text.to_f
|
e.text.to_f
|
||||||
when 'string', 'code'
|
when 'string', 'code'
|
||||||
e.text.to_s
|
e.text.to_s
|
||||||
|
when 'binary'
|
||||||
|
Base64.decode64(e.text.to_s).to_mongo_binary
|
||||||
when 'symbol'
|
when 'symbol'
|
||||||
e.text.to_s.intern
|
e.text.to_s.intern
|
||||||
when 'boolean'
|
when 'boolean'
|
||||||
|
@ -54,7 +56,7 @@ class XMLToRuby
|
||||||
Time.at(e.text.to_f / 1000.0)
|
Time.at(e.text.to_f / 1000.0)
|
||||||
when 'regex'
|
when 'regex'
|
||||||
regex_to_ruby(e.elements)
|
regex_to_ruby(e.elements)
|
||||||
when 'null'
|
when 'null', 'undefined'
|
||||||
nil
|
nil
|
||||||
when 'doc'
|
when 'doc'
|
||||||
doc_to_ruby(e)
|
doc_to_ruby(e)
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,25 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<array name="empty">
|
||||||
|
</array>
|
||||||
|
<array name="simple">
|
||||||
|
<int name="0">1</int>
|
||||||
|
<int name="1">2</int>
|
||||||
|
<int name="2">3</int>
|
||||||
|
</array>
|
||||||
|
<array name="mixed">
|
||||||
|
<string name="0">a</string>
|
||||||
|
<date name="1">1231515664416</date>
|
||||||
|
<int name="2">42</int>
|
||||||
|
</array>
|
||||||
|
<array name="subobject">
|
||||||
|
<string name="0">x</string>
|
||||||
|
<string name="1">y</string>
|
||||||
|
<string name="2">z</string>
|
||||||
|
<doc name="3">
|
||||||
|
<string name="subobject">yup</string>
|
||||||
|
</doc>
|
||||||
|
</array>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,147 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<binary name="empty"/>
|
||||||
|
<binary name="foo">Zm9v
|
||||||
|
</binary>
|
||||||
|
<binary name="control_chars">AQIDBAU=
|
||||||
|
</binary>
|
||||||
|
<binary name="long">RG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRl
|
||||||
|
cmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxv
|
||||||
|
bmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcg
|
||||||
|
aXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0
|
||||||
|
IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBt
|
||||||
|
aWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJv
|
||||||
|
dmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGws
|
||||||
|
IGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4n
|
||||||
|
dCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRv
|
||||||
|
IGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3Nl
|
||||||
|
IGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBs
|
||||||
|
b25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0
|
||||||
|
IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRo
|
||||||
|
aXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9u
|
||||||
|
bHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93
|
||||||
|
IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpz
|
||||||
|
dHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0
|
||||||
|
IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3Rp
|
||||||
|
bmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBz
|
||||||
|
dHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEg
|
||||||
|
cGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21p
|
||||||
|
bmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5
|
||||||
|
IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUg
|
||||||
|
YSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cg
|
||||||
|
bG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2Vl
|
||||||
|
IHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBl
|
||||||
|
dmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0
|
||||||
|
bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8g
|
||||||
|
V2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3Ug
|
||||||
|
ZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRl
|
||||||
|
eHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1
|
||||||
|
cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25n
|
||||||
|
IGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5n
|
||||||
|
PyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBl
|
||||||
|
Y3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJ
|
||||||
|
dHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5n
|
||||||
|
LiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNl
|
||||||
|
IG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoK
|
||||||
|
RG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRl
|
||||||
|
cmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxv
|
||||||
|
bmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcg
|
||||||
|
aXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0
|
||||||
|
IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBt
|
||||||
|
aWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJv
|
||||||
|
dmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGws
|
||||||
|
IGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4n
|
||||||
|
dCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRv
|
||||||
|
IGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3Nl
|
||||||
|
IGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBs
|
||||||
|
b25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0
|
||||||
|
IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRo
|
||||||
|
aXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9u
|
||||||
|
bHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93
|
||||||
|
IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpz
|
||||||
|
dHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0
|
||||||
|
IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3Rp
|
||||||
|
bmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBz
|
||||||
|
dHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEg
|
||||||
|
cGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21p
|
||||||
|
bmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5
|
||||||
|
IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUg
|
||||||
|
YSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cg
|
||||||
|
bG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2Vl
|
||||||
|
IHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBl
|
||||||
|
dmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0
|
||||||
|
bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8g
|
||||||
|
V2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3Ug
|
||||||
|
ZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRl
|
||||||
|
eHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1
|
||||||
|
cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25n
|
||||||
|
IGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5n
|
||||||
|
PyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBl
|
||||||
|
Y3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJ
|
||||||
|
dHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5n
|
||||||
|
LiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNl
|
||||||
|
IG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoK
|
||||||
|
RG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRl
|
||||||
|
cmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxv
|
||||||
|
bmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcg
|
||||||
|
aXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0
|
||||||
|
IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBt
|
||||||
|
aWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJv
|
||||||
|
dmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGws
|
||||||
|
IGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4n
|
||||||
|
dCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRv
|
||||||
|
IGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3Nl
|
||||||
|
IGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBs
|
||||||
|
b25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0
|
||||||
|
IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRo
|
||||||
|
aXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9u
|
||||||
|
bHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93
|
||||||
|
IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpz
|
||||||
|
dHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0
|
||||||
|
IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3Rp
|
||||||
|
bmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBz
|
||||||
|
dHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEg
|
||||||
|
cGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21p
|
||||||
|
bmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5
|
||||||
|
IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUg
|
||||||
|
YSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cg
|
||||||
|
bG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2Vl
|
||||||
|
IHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBl
|
||||||
|
dmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0
|
||||||
|
bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8g
|
||||||
|
V2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3Ug
|
||||||
|
ZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRl
|
||||||
|
eHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1
|
||||||
|
cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25n
|
||||||
|
IGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5n
|
||||||
|
PyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBl
|
||||||
|
Y3QgdGhpcyB0ZXh0IHRvIGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJ
|
||||||
|
dHMgb25seSBwdXJwb3NlIGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5n
|
||||||
|
LiBIb3cgbG9uZyBpcyBsb25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNl
|
||||||
|
IG9mCnN0cmluZz8gQmV0IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoK
|
||||||
|
RG9uJ3QgZXhwZWN0IHRoaXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRl
|
||||||
|
cmVzdGluZy4gSXRzIG9ubHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxv
|
||||||
|
bmciIHN0cmluZy4gSG93IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcg
|
||||||
|
aXMgYSBwaWVjZSBvZgpzdHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0
|
||||||
|
IGNvbWluZy4KCkRvbid0IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBt
|
||||||
|
aWxkbHkgaW50ZXJlc3RpbmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJv
|
||||||
|
dmlkZSBhICJsb25nIiBzdHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGws
|
||||||
|
IGhvdyBsb25nIGlzIGEgcGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4n
|
||||||
|
dCBzZWUgdGhhdCBjb21pbmcuCgpEb24ndCBleHBlY3QgdGhpcyB0ZXh0IHRv
|
||||||
|
IGJlIGV2ZW4gbWlsZGx5IGludGVyZXN0aW5nLiBJdHMgb25seSBwdXJwb3Nl
|
||||||
|
IGlzIHRvCnByb3ZpZGUgYSAibG9uZyIgc3RyaW5nLiBIb3cgbG9uZyBpcyBs
|
||||||
|
b25nPyBXZWxsLCBob3cgbG9uZyBpcyBhIHBpZWNlIG9mCnN0cmluZz8gQmV0
|
||||||
|
IHlvdSBkaWRuJ3Qgc2VlIHRoYXQgY29taW5nLgoKRG9uJ3QgZXhwZWN0IHRo
|
||||||
|
aXMgdGV4dCB0byBiZSBldmVuIG1pbGRseSBpbnRlcmVzdGluZy4gSXRzIG9u
|
||||||
|
bHkgcHVycG9zZSBpcyB0bwpwcm92aWRlIGEgImxvbmciIHN0cmluZy4gSG93
|
||||||
|
IGxvbmcgaXMgbG9uZz8gV2VsbCwgaG93IGxvbmcgaXMgYSBwaWVjZSBvZgpz
|
||||||
|
dHJpbmc/IEJldCB5b3UgZGlkbid0IHNlZSB0aGF0IGNvbWluZy4KCkRvbid0
|
||||||
|
IGV4cGVjdCB0aGlzIHRleHQgdG8gYmUgZXZlbiBtaWxkbHkgaW50ZXJlc3Rp
|
||||||
|
bmcuIEl0cyBvbmx5IHB1cnBvc2UgaXMgdG8KcHJvdmlkZSBhICJsb25nIiBz
|
||||||
|
dHJpbmcuIEhvdyBsb25nIGlzIGxvbmc/IFdlbGwsIGhvdyBsb25nIGlzIGEg
|
||||||
|
cGllY2Ugb2YKc3RyaW5nPyBCZXQgeW91IGRpZG4ndCBzZWUgdGhhdCBjb21p
|
||||||
|
bmcuCg==
|
||||||
|
</binary>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,6 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<code name="$where">this.x = 42</code>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,7 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<date name="a_date">1231515664416</date>
|
||||||
|
<date name="zero_date">0</date>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,9 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<ref name="dbref">
|
||||||
|
<ns>namespace</ns>
|
||||||
|
<oid>deadbeefcafebabe0123cdef</oid>
|
||||||
|
</ref>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,38 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<doc name="empty">
|
||||||
|
</doc>
|
||||||
|
<doc name="simple">
|
||||||
|
<int name="first">1</int>
|
||||||
|
<string name="second">two</string>
|
||||||
|
<array name="third">
|
||||||
|
<int name="0">1</int>
|
||||||
|
<int name="1">2</int>
|
||||||
|
<int name="2">3</int>
|
||||||
|
</array>
|
||||||
|
</doc>
|
||||||
|
<doc name="deep">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
<doc name="child">
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,13 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<number name="negative_one">-1.0</number>
|
||||||
|
<number name="zero">0.0</number>
|
||||||
|
<number name="one">1.0</number>
|
||||||
|
<number name="the_answer">42.0</number>
|
||||||
|
<number name="more_than_the_answer">42.123</number>
|
||||||
|
<number name="double">2147483647.0</number>
|
||||||
|
<number name="big_double">1099511627775.0</number>
|
||||||
|
<number name="negative_double">-1099511627775.0</number>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<int name="negative_one">-1</int>
|
||||||
|
<int name="zero">0</int>
|
||||||
|
<int name="one">1</int>
|
||||||
|
<int name="the_answer">42</int>
|
||||||
|
<int name="long">2147483647</int>
|
||||||
|
<int name="negative_long">-2147483647</int>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,6 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<oid name="_id">deadbeefcafebabe0123cdef</oid>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,33 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<regex name="simple">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options/>
|
||||||
|
</regex>
|
||||||
|
<regex name="ignore_case">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options>i</options>
|
||||||
|
</regex>
|
||||||
|
<regex name="extended">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options>x</options>
|
||||||
|
</regex>
|
||||||
|
<regex name="multiline">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options>m</options>
|
||||||
|
</regex>
|
||||||
|
<regex name="all">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options>imx</options>
|
||||||
|
</regex>
|
||||||
|
<regex name="all_different_order">
|
||||||
|
<pattern>foobar</pattern>
|
||||||
|
<options>imx</options>
|
||||||
|
</regex>
|
||||||
|
<regex name="interesting">
|
||||||
|
<pattern>(\d+)-?\s*[a-z]+</pattern>
|
||||||
|
<options/>
|
||||||
|
</regex>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
||||||
<twonk>
|
<twonk>
|
||||||
<meta/>
|
<meta/>
|
||||||
<doc>
|
<doc>
|
||||||
<oid name="_id">33dc67499236d9a01a000000</oid>
|
<oid name="_id">68f167497a0a511f74000000</oid>
|
||||||
<int name="an_int">42</int>
|
<int name="an_int">42</int>
|
||||||
<string name="a_string">foo</string>
|
<string name="a_string">foo</string>
|
||||||
<boolean name="truthiness">true</boolean>
|
<boolean name="truthiness">true</boolean>
|
||||||
|
@ -17,14 +17,17 @@
|
||||||
<date name="now">1231515664416</date>
|
<date name="now">1231515664416</date>
|
||||||
<ref name="dbref">
|
<ref name="dbref">
|
||||||
<ns>namespace</ns>
|
<ns>namespace</ns>
|
||||||
<oid>33dc67499236d9a01a010000</oid>
|
<oid>68f167497a0a511f74010000</oid>
|
||||||
</ref>
|
</ref>
|
||||||
<regex name="regex">
|
<regex name="regex">
|
||||||
<pattern>foobar</pattern>
|
<pattern>foobar</pattern>
|
||||||
<options></options>
|
<options/>
|
||||||
</regex>
|
</regex>
|
||||||
<null name="a_null_value"></null>
|
<null name="a_null_value"/>
|
||||||
<code name="$where">this is code</code>
|
<code name="$where">this is code</code>
|
||||||
<symbol name="a_symbol">symbol_value</symbol>
|
<symbol name="a_symbol">symbol_value</symbol>
|
||||||
|
<undefined name="an_undefined"/>
|
||||||
|
<binary name="a_binary">YmluYXJ5IHN0cmluZw==
|
||||||
|
</binary>
|
||||||
</doc>
|
</doc>
|
||||||
</twonk>
|
</twonk>
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,136 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<string name="empty"/>
|
||||||
|
<string name="foo">foo</string>
|
||||||
|
<string name="control_chars"></string>
|
||||||
|
<string name="long">Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
|
||||||
|
Don't expect this text to be even mildly interesting. Its only purpose is to
|
||||||
|
provide a "long" string. How long is long? Well, how long is a piece of
|
||||||
|
string? Bet you didn't see that coming.
|
||||||
|
</string>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,7 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<symbol name="a_symbol">symbol_value</symbol>
|
||||||
|
<symbol name="funky_name">@-</symbol>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
Binary file not shown.
|
@ -0,0 +1,6 @@
|
||||||
|
<twonk>
|
||||||
|
<meta/>
|
||||||
|
<doc>
|
||||||
|
<undefined name="an_undefined"/>
|
||||||
|
</doc>
|
||||||
|
</twonk>
|
|
@ -97,4 +97,14 @@ class BSONTest < Test::Unit::TestCase
|
||||||
assert_equal :foo, doc2['sym']
|
assert_equal :foo, doc2['sym']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_binary
|
||||||
|
bin = 'binstring'.to_mongo_binary
|
||||||
|
assert_kind_of Binary, bin
|
||||||
|
|
||||||
|
doc = {'bin' => bin}
|
||||||
|
@b.serialize(doc)
|
||||||
|
doc2 = @b.deserialize
|
||||||
|
assert_equal 'binstring', doc2['bin']
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,8 +46,19 @@ class RoundTripTest < Test::Unit::TestCase
|
||||||
# Turn the Ruby object into BSON bytes and compare with the BSON bytes
|
# Turn the Ruby object into BSON bytes and compare with the BSON bytes
|
||||||
# from the file.
|
# from the file.
|
||||||
bson_from_ruby = BSON.new.serialize(obj).to_a
|
bson_from_ruby = BSON.new.serialize(obj).to_a
|
||||||
|
|
||||||
|
# # DEBUG
|
||||||
|
# File.open(File.join(HERE, 'data', "#{name}_out.bson"), 'wb') { |f|
|
||||||
|
# bson_from_ruby.each { |b| f.putc(b) }
|
||||||
|
# }
|
||||||
|
|
||||||
|
begin
|
||||||
assert_equal bson.length, bson_from_ruby.length
|
assert_equal bson.length, bson_from_ruby.length
|
||||||
assert_equal bson, bson_from_ruby
|
assert_equal bson, bson_from_ruby
|
||||||
|
rescue => ex
|
||||||
|
$stderr.puts "failure while round-tripping #{name}" # DEBUG
|
||||||
|
raise ex
|
||||||
|
end
|
||||||
|
|
||||||
# Turn those BSON bytes back into a Ruby object.
|
# Turn those BSON bytes back into a Ruby object.
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue