mongodb-mongo 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +2 -2
- data/lib/mongo/mongo.rb +28 -13
- data/lib/mongo/util/bson.rb +10 -1
- data/mongo-ruby-driver.gemspec +2 -1
- data/tests/test_mongo.rb +44 -0
- metadata +2 -1
data/README.rdoc
CHANGED
@@ -75,7 +75,7 @@ how to interpret them. You can tell the Ruby Mongo driver how to create
|
|
75
75
|
primary keys by passing in the :pk option to the Mongo#db method.
|
76
76
|
|
77
77
|
include XGen::Mongo::Driver
|
78
|
-
db = Mongo.new.db('dbname', :pk => MyPKFactory)
|
78
|
+
db = Mongo.new.db('dbname', :pk => MyPKFactory.new)
|
79
79
|
|
80
80
|
A primary key factory object must respond to :create_pk, which should take a
|
81
81
|
hash and return a hash which merges the original hash with any primary key
|
@@ -94,7 +94,7 @@ Here is a sample primary key factory, taken from the tests:
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
A database's PK factory object may be
|
97
|
+
A database's PK factory object may be set after you obtain it, but only once.
|
98
98
|
The only reason it is changeable is so that libraries such as MongoRecord that
|
99
99
|
use this driver can set the PK factory after obtaining the database but before
|
100
100
|
using it for the first time.
|
data/lib/mongo/mongo.rb
CHANGED
@@ -61,19 +61,12 @@ module XGen
|
|
61
61
|
# Returns a hash containing database names as keys and disk space for
|
62
62
|
# each as values.
|
63
63
|
def database_info
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
doc['databases'].each { |db|
|
71
|
-
h[db['name']] = db['sizeOnDisk'].to_i
|
72
|
-
}
|
73
|
-
h
|
74
|
-
ensure
|
75
|
-
admin_db.close
|
76
|
-
end
|
64
|
+
doc = single_db_command('admin', :listDatabases => 1)
|
65
|
+
h = {}
|
66
|
+
doc['databases'].each { |db|
|
67
|
+
h[db['name']] = db['sizeOnDisk'].to_i
|
68
|
+
}
|
69
|
+
h
|
77
70
|
end
|
78
71
|
|
79
72
|
# Returns an array of database names.
|
@@ -91,6 +84,28 @@ module XGen
|
|
91
84
|
raise "not implemented"
|
92
85
|
end
|
93
86
|
|
87
|
+
# Drops the database +name+.
|
88
|
+
def drop_database(name)
|
89
|
+
single_db_command(name, :dropDatabase => 1)
|
90
|
+
end
|
91
|
+
|
92
|
+
protected
|
93
|
+
|
94
|
+
# Send cmd (a hash, possibly ordered) to the admin database and return
|
95
|
+
# the answer. Raises an error unless the return is "ok" (DB#ok?
|
96
|
+
# returns +true+).
|
97
|
+
def single_db_command(db_name, cmd)
|
98
|
+
db = nil
|
99
|
+
begin
|
100
|
+
db = db(db_name)
|
101
|
+
doc = db.db_command(cmd)
|
102
|
+
raise "error retrieving database info" unless db.ok?(doc)
|
103
|
+
doc
|
104
|
+
ensure
|
105
|
+
db.close
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
94
109
|
end
|
95
110
|
end
|
96
111
|
end
|
data/lib/mongo/util/bson.rb
CHANGED
@@ -46,6 +46,8 @@ class BSON
|
|
46
46
|
NUMBER_INT = 16
|
47
47
|
MAXKEY = 127
|
48
48
|
|
49
|
+
BYTE_TYPE = 2
|
50
|
+
|
49
51
|
if RUBY_VERSION >= '1.9'
|
50
52
|
def self.to_utf8(str)
|
51
53
|
str.encode("utf-8")
|
@@ -258,6 +260,8 @@ class BSON
|
|
258
260
|
end
|
259
261
|
|
260
262
|
def deserialize_binary_data(buf)
|
263
|
+
buf.get_int # length + 4; ignored
|
264
|
+
buf.get # byte type; ignored
|
261
265
|
len = buf.get_int
|
262
266
|
bytes = buf.get(len)
|
263
267
|
str = ''
|
@@ -282,7 +286,7 @@ class BSON
|
|
282
286
|
def serialize_binary_element(buf, key, val)
|
283
287
|
buf.put(BINARY)
|
284
288
|
self.class.serialize_cstr(buf, key)
|
285
|
-
|
289
|
+
|
286
290
|
bytes = if RUBY_VERSION >= '1.9'
|
287
291
|
val.bytes.to_a
|
288
292
|
else
|
@@ -290,6 +294,11 @@ class BSON
|
|
290
294
|
val.each_byte { |byte| a << byte }
|
291
295
|
a
|
292
296
|
end
|
297
|
+
|
298
|
+
num_bytes = bytes.length
|
299
|
+
buf.put_int(num_bytes + 4)
|
300
|
+
buf.put(BYTE_TYPE)
|
301
|
+
buf.put_int(num_bytes)
|
293
302
|
buf.put_array(bytes)
|
294
303
|
end
|
295
304
|
|
data/mongo-ruby-driver.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'mongo'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.4'
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.summary = 'Simple pure-Ruby driver for the 10gen Mongo DB'
|
6
6
|
s.description = 'A pure-Ruby driver for the 10gen Mongo DB. For more information about Mongo, see http://www.mongodb.org.'
|
@@ -48,6 +48,7 @@ Gem::Specification.new do |s|
|
|
48
48
|
'tests/test_db_api.rb',
|
49
49
|
'tests/test_db_connection.rb',
|
50
50
|
'tests/test_message.rb',
|
51
|
+
'tests/test_mongo.rb',
|
51
52
|
'tests/test_objectid.rb',
|
52
53
|
'tests/test_ordered_hash.rb',
|
53
54
|
'tests/test_round_trip.rb']
|
data/tests/test_mongo.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
$LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'mongo'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
# NOTE: assumes Mongo is running
|
6
|
+
class MongoTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
include XGen::Mongo::Driver
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
12
|
+
@port = ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::DEFAULT_PORT
|
13
|
+
@mongo = Mongo.new(@host, @port)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_database_info
|
17
|
+
info = @mongo.database_info
|
18
|
+
assert_not_nil info
|
19
|
+
assert_kind_of Hash, info
|
20
|
+
assert_not_nil info['admin']
|
21
|
+
assert info['admin'] > 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_database_names
|
25
|
+
names = @mongo.database_names
|
26
|
+
assert_not_nil names
|
27
|
+
assert_kind_of Array, names
|
28
|
+
assert names.length >= 1
|
29
|
+
assert names.include?('admin')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_drop_database
|
33
|
+
db = @mongo.db('will-be-deleted')
|
34
|
+
coll = db.collection('temp')
|
35
|
+
coll.clear
|
36
|
+
coll.insert(:name => 'temp')
|
37
|
+
assert_equal 1, coll.count()
|
38
|
+
assert @mongo.database_names.include?('will-be-deleted')
|
39
|
+
|
40
|
+
@mongo.drop_database('will-be-deleted')
|
41
|
+
assert !@mongo.database_names.include?('will-be-deleted')
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongodb-mongo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Menard
|
@@ -95,6 +95,7 @@ test_files:
|
|
95
95
|
- tests/test_db_api.rb
|
96
96
|
- tests/test_db_connection.rb
|
97
97
|
- tests/test_message.rb
|
98
|
+
- tests/test_mongo.rb
|
98
99
|
- tests/test_objectid.rb
|
99
100
|
- tests/test_ordered_hash.rb
|
100
101
|
- tests/test_round_trip.rb
|