mongodb-mongo 0.6.5 → 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +13 -0
- data/Rakefile +11 -6
- data/bin/standard_benchmark +3 -2
- data/lib/mongo/collection.rb +4 -2
- data/lib/mongo/db.rb +5 -5
- data/lib/mongo/util/bson.rb +5 -0
- data/lib/mongo/util/ordered_hash.rb +6 -6
- data/mongo-ruby-driver.gemspec +1 -1
- data/tests/test_bson.rb +9 -0
- data/tests/test_db_api.rb +26 -4
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -48,6 +48,19 @@ you can install it as a gem from the source by typing
|
|
48
48
|
Note: when you install the gem this way it is called "mongo", not
|
49
49
|
"mongodb-mongo". In either case, you "require 'mongo'" in your source code.
|
50
50
|
|
51
|
+
=== Optional C Extension
|
52
|
+
|
53
|
+
There is a separate gem containing optional C extensions that will increase the
|
54
|
+
performance of the driver. To use the optional extensions just install the gem
|
55
|
+
by typing
|
56
|
+
|
57
|
+
$ sudo gem install mongodb-mongo_ext
|
58
|
+
|
59
|
+
To install from source type this instead
|
60
|
+
|
61
|
+
$ rake gem:install_extensions
|
62
|
+
|
63
|
+
That's all there is to it!
|
51
64
|
|
52
65
|
= Examples
|
53
66
|
|
data/Rakefile
CHANGED
@@ -11,6 +11,9 @@ end
|
|
11
11
|
require 'rbconfig'
|
12
12
|
include Config
|
13
13
|
|
14
|
+
gem_command = "gem"
|
15
|
+
gem_command = "gem1.9" if CONFIG["MAJOR"] == "1" && CONFIG["MINOR"] == "9"
|
16
|
+
|
14
17
|
# NOTE: some of the tests assume Mongo is running
|
15
18
|
Rake::TestTask.new do |t|
|
16
19
|
t.test_files = FileList['tests/test*.rb']
|
@@ -18,8 +21,10 @@ end
|
|
18
21
|
|
19
22
|
desc "Generate documentation"
|
20
23
|
task :rdoc do
|
21
|
-
|
22
|
-
|
24
|
+
version = eval(File.read("mongo-ruby-driver.gemspec")).version
|
25
|
+
out = File.join('html', version.to_s)
|
26
|
+
FileUtils.rm_rf(out)
|
27
|
+
system "rdoc --main README.rdoc --op #{out} --inline-source --quiet README.rdoc `find lib -name '*.rb'`"
|
23
28
|
end
|
24
29
|
|
25
30
|
desc "Publish documentation to mongo.rubyforge.org"
|
@@ -33,8 +38,8 @@ namespace :gem do
|
|
33
38
|
desc "Install the gem locally"
|
34
39
|
task :install do
|
35
40
|
sh <<EOS
|
36
|
-
|
37
|
-
sudo
|
41
|
+
#{gem_command} build mongo-ruby-driver.gemspec &&
|
42
|
+
sudo #{gem_command} install mongo-*.gem &&
|
38
43
|
rm mongo-*.gem
|
39
44
|
EOS
|
40
45
|
end
|
@@ -42,8 +47,8 @@ EOS
|
|
42
47
|
desc "Install the optional c extensions"
|
43
48
|
task :install_extensions do
|
44
49
|
sh <<EOS
|
45
|
-
|
46
|
-
sudo
|
50
|
+
#{gem_command} build mongo-extensions.gemspec &&
|
51
|
+
sudo #{gem_command} install mongo_ext-*.gem &&
|
47
52
|
rm mongo_ext-*.gem
|
48
53
|
EOS
|
49
54
|
end
|
data/bin/standard_benchmark
CHANGED
@@ -52,8 +52,9 @@ end
|
|
52
52
|
host = ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost'
|
53
53
|
port = ENV['MONGO_RUBY_DRIVER_PORT'] || XGen::Mongo::Driver::Mongo::DEFAULT_PORT
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
connection = Mongo.new(host, port)
|
56
|
+
connection.drop_database("benchmark")
|
57
|
+
db = connection.db('benchmark')
|
57
58
|
|
58
59
|
insert = Proc.new { |coll, object, i|
|
59
60
|
object['x'] = i
|
data/lib/mongo/collection.rb
CHANGED
@@ -117,8 +117,10 @@ module XGen
|
|
117
117
|
# should be either a single field name or a Array of [field name,
|
118
118
|
# direction] pairs. Directions should be specified as
|
119
119
|
# XGen::Mongo::ASCENDING or XGen::Mongo::DESCENDING.
|
120
|
-
|
121
|
-
|
120
|
+
# +unique+ is an optional boolean indicating whether this index
|
121
|
+
# should enforce a uniqueness constraint.
|
122
|
+
def create_index(field_or_spec, unique=false)
|
123
|
+
@db.create_index(@name, field_or_spec, unique)
|
122
124
|
end
|
123
125
|
|
124
126
|
# Drop index +name+.
|
data/lib/mongo/db.rb
CHANGED
@@ -239,8 +239,6 @@ module XGen
|
|
239
239
|
def drop_collection(name)
|
240
240
|
return true unless collection_names.include?(full_coll_name(name))
|
241
241
|
|
242
|
-
coll = collection(name)
|
243
|
-
coll.drop_indexes # Mongo requires that we drop indexes manually
|
244
242
|
ok?(db_command(:drop => name))
|
245
243
|
end
|
246
244
|
|
@@ -432,8 +430,9 @@ module XGen
|
|
432
430
|
# should be either a single field name or a Array of [field name,
|
433
431
|
# direction] pairs. Directions should be specified as
|
434
432
|
# XGen::Mongo::ASCENDING or XGen::Mongo::DESCENDING. Normally called
|
435
|
-
# by Collection#create_index.
|
436
|
-
|
433
|
+
# by Collection#create_index. If +unique+ is true the index will
|
434
|
+
# enforce a uniqueness constraint.
|
435
|
+
def create_index(collection_name, field_or_spec, unique=false)
|
437
436
|
field_h = OrderedHash.new
|
438
437
|
if field_or_spec.is_a? String
|
439
438
|
field_h[field_or_spec] = 1
|
@@ -444,7 +443,8 @@ module XGen
|
|
444
443
|
sel = {
|
445
444
|
:name => name,
|
446
445
|
:ns => full_coll_name(collection_name),
|
447
|
-
:key => field_h
|
446
|
+
:key => field_h,
|
447
|
+
:unique => unique
|
448
448
|
}
|
449
449
|
@semaphore.synchronize {
|
450
450
|
send_to_db(InsertMessage.new(@name, SYSTEM_INDEX_COLLECTION, sel))
|
data/lib/mongo/util/bson.rb
CHANGED
@@ -46,6 +46,7 @@ class BSON
|
|
46
46
|
SYMBOL = 14
|
47
47
|
CODE_W_SCOPE = 15
|
48
48
|
NUMBER_INT = 16
|
49
|
+
TIMESTAMP = 17
|
49
50
|
MAXKEY = 127
|
50
51
|
|
51
52
|
if RUBY_VERSION >= '1.9'
|
@@ -199,6 +200,10 @@ class BSON
|
|
199
200
|
when CODE_W_SCOPE
|
200
201
|
key = deserialize_cstr(@buf)
|
201
202
|
doc[key] = deserialize_code_w_scope_data(@buf)
|
203
|
+
when TIMESTAMP
|
204
|
+
key = deserialize_cstr(@buf)
|
205
|
+
doc[key] = [deserialize_number_int_data(@buf),
|
206
|
+
deserialize_number_int_data(@buf)]
|
202
207
|
when EOO
|
203
208
|
break
|
204
209
|
else
|
@@ -20,6 +20,12 @@
|
|
20
20
|
# Hash already keeps its keys ordered by order of insertion.
|
21
21
|
class OrderedHash < Hash
|
22
22
|
|
23
|
+
def ==(other)
|
24
|
+
!other.nil? &&
|
25
|
+
keys == other.keys &&
|
26
|
+
values == other.values
|
27
|
+
end
|
28
|
+
|
23
29
|
# We only need the body of this class if the RUBY_VERSION is before 1.9
|
24
30
|
if RUBY_VERSION < '1.9'
|
25
31
|
|
@@ -35,12 +41,6 @@ class OrderedHash < Hash
|
|
35
41
|
super(key, value)
|
36
42
|
end
|
37
43
|
|
38
|
-
def ==(other)
|
39
|
-
!other.nil? &&
|
40
|
-
keys == other.keys &&
|
41
|
-
values == other.values
|
42
|
-
end
|
43
|
-
|
44
44
|
def each
|
45
45
|
@ordered_keys ||= []
|
46
46
|
@ordered_keys.each { |k| yield k, self[k] }
|
data/mongo-ruby-driver.gemspec
CHANGED
@@ -79,7 +79,7 @@ TEST_FILES = ['tests/mongo-qa/_common.rb',
|
|
79
79
|
|
80
80
|
Gem::Specification.new do |s|
|
81
81
|
s.name = 'mongo'
|
82
|
-
s.version = '0.6.
|
82
|
+
s.version = '0.6.6'
|
83
83
|
s.platform = Gem::Platform::RUBY
|
84
84
|
s.summary = 'Ruby driver for the 10gen Mongo DB'
|
85
85
|
s.description = 'A Ruby driver for the 10gen Mongo DB. For more information about Mongo, see http://www.mongodb.org.'
|
data/tests/test_bson.rb
CHANGED
@@ -181,6 +181,15 @@ class BSONTest < Test::Unit::TestCase
|
|
181
181
|
assert_equal '_id', roundtrip.keys.first
|
182
182
|
end
|
183
183
|
|
184
|
+
def test_timestamp
|
185
|
+
val = {"test" => [4, 20]}
|
186
|
+
assert_equal val, @b.deserialize([0x13, 0x00, 0x00, 0x00,
|
187
|
+
0x11, 0x74, 0x65, 0x73,
|
188
|
+
0x74, 0x00, 0x04, 0x00,
|
189
|
+
0x00, 0x00, 0x14, 0x00,
|
190
|
+
0x00, 0x00, 0x00])
|
191
|
+
end
|
192
|
+
|
184
193
|
def test_do_not_change_original_object
|
185
194
|
val = OrderedHash.new
|
186
195
|
val['not_id'] = 1
|
data/tests/test_db_api.rb
CHANGED
@@ -285,9 +285,9 @@ class DBAPITest < Test::Unit::TestCase
|
|
285
285
|
name = @@db.create_index(@@coll.name, 'a')
|
286
286
|
list = @@db.index_information(@@coll.name)
|
287
287
|
assert_equal @@coll.index_information, list
|
288
|
-
assert_equal
|
288
|
+
assert_equal 2, list.length
|
289
289
|
|
290
|
-
info = list[
|
290
|
+
info = list[1]
|
291
291
|
assert_equal name, 'a_1'
|
292
292
|
assert_equal name, info[:name]
|
293
293
|
assert_equal 1, info[:keys]['a']
|
@@ -298,9 +298,9 @@ class DBAPITest < Test::Unit::TestCase
|
|
298
298
|
def test_multiple_index_cols
|
299
299
|
name = @@db.create_index(@@coll.name, [['a', DESCENDING], ['b', ASCENDING], ['c', DESCENDING]])
|
300
300
|
list = @@db.index_information(@@coll.name)
|
301
|
-
assert_equal
|
301
|
+
assert_equal 2, list.length
|
302
302
|
|
303
|
-
info = list[
|
303
|
+
info = list[1]
|
304
304
|
assert_equal name, 'a_-1_b_1_c_-1'
|
305
305
|
assert_equal name, info[:name]
|
306
306
|
keys = info[:keys].keys
|
@@ -309,6 +309,28 @@ class DBAPITest < Test::Unit::TestCase
|
|
309
309
|
@@db.drop_index(@@coll.name, name)
|
310
310
|
end
|
311
311
|
|
312
|
+
def test_unique_index
|
313
|
+
@@db.drop_collection("blah")
|
314
|
+
test = @@db.collection("blah")
|
315
|
+
test.create_index("hello")
|
316
|
+
|
317
|
+
test.insert("hello" => "world")
|
318
|
+
test.insert("hello" => "mike")
|
319
|
+
test.insert("hello" => "world")
|
320
|
+
assert !@@db.error?
|
321
|
+
|
322
|
+
@@db.drop_collection("blah")
|
323
|
+
test = @@db.collection("blah")
|
324
|
+
test.create_index("hello", unique=true)
|
325
|
+
|
326
|
+
test.insert("hello" => "world")
|
327
|
+
test.insert("hello" => "mike")
|
328
|
+
test.insert("hello" => "world")
|
329
|
+
assert @@db.error?
|
330
|
+
|
331
|
+
@@db.drop_collection("blah")
|
332
|
+
end
|
333
|
+
|
312
334
|
def test_array
|
313
335
|
@@coll << {'b' => [1, 2, 3]}
|
314
336
|
rows = @@coll.find({}, {:fields => ['b']}).to_a
|
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.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Menard
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-04-08 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|