mongo-lyon 1.2.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/LICENSE.txt +190 -0
- data/README.md +344 -0
- data/Rakefile +202 -0
- data/bin/mongo_console +34 -0
- data/docs/1.0_UPGRADE.md +21 -0
- data/docs/CREDITS.md +123 -0
- data/docs/FAQ.md +116 -0
- data/docs/GridFS.md +158 -0
- data/docs/HISTORY.md +225 -0
- data/docs/REPLICA_SETS.md +72 -0
- data/docs/TUTORIAL.md +247 -0
- data/docs/WRITE_CONCERN.md +28 -0
- data/lib/mongo.rb +77 -0
- data/lib/mongo/collection.rb +872 -0
- data/lib/mongo/connection.rb +875 -0
- data/lib/mongo/cursor.rb +449 -0
- data/lib/mongo/db.rb +607 -0
- data/lib/mongo/exceptions.rb +68 -0
- data/lib/mongo/gridfs/grid.rb +106 -0
- data/lib/mongo/gridfs/grid_ext.rb +57 -0
- data/lib/mongo/gridfs/grid_file_system.rb +145 -0
- data/lib/mongo/gridfs/grid_io.rb +394 -0
- data/lib/mongo/gridfs/grid_io_fix.rb +38 -0
- data/lib/mongo/repl_set_connection.rb +342 -0
- data/lib/mongo/util/conversions.rb +89 -0
- data/lib/mongo/util/core_ext.rb +60 -0
- data/lib/mongo/util/pool.rb +185 -0
- data/lib/mongo/util/server_version.rb +71 -0
- data/lib/mongo/util/support.rb +82 -0
- data/lib/mongo/util/uri_parser.rb +181 -0
- data/lib/mongo/version.rb +3 -0
- data/mongo.gemspec +34 -0
- data/test/auxillary/1.4_features.rb +166 -0
- data/test/auxillary/authentication_test.rb +68 -0
- data/test/auxillary/autoreconnect_test.rb +41 -0
- data/test/auxillary/repl_set_auth_test.rb +58 -0
- data/test/auxillary/slave_connection_test.rb +36 -0
- data/test/auxillary/threaded_authentication_test.rb +101 -0
- data/test/bson/binary_test.rb +15 -0
- data/test/bson/bson_test.rb +614 -0
- data/test/bson/byte_buffer_test.rb +190 -0
- data/test/bson/hash_with_indifferent_access_test.rb +38 -0
- data/test/bson/json_test.rb +17 -0
- data/test/bson/object_id_test.rb +154 -0
- data/test/bson/ordered_hash_test.rb +197 -0
- data/test/collection_test.rb +893 -0
- data/test/connection_test.rb +303 -0
- data/test/conversions_test.rb +120 -0
- data/test/cursor_fail_test.rb +75 -0
- data/test/cursor_message_test.rb +43 -0
- data/test/cursor_test.rb +457 -0
- data/test/db_api_test.rb +715 -0
- data/test/db_connection_test.rb +15 -0
- data/test/db_test.rb +287 -0
- data/test/grid_file_system_test.rb +244 -0
- data/test/grid_io_test.rb +120 -0
- data/test/grid_test.rb +200 -0
- data/test/load/thin/load.rb +24 -0
- data/test/load/unicorn/load.rb +23 -0
- data/test/replica_sets/connect_test.rb +86 -0
- data/test/replica_sets/connection_string_test.rb +32 -0
- data/test/replica_sets/count_test.rb +35 -0
- data/test/replica_sets/insert_test.rb +53 -0
- data/test/replica_sets/pooled_insert_test.rb +55 -0
- data/test/replica_sets/query_secondaries.rb +96 -0
- data/test/replica_sets/query_test.rb +51 -0
- data/test/replica_sets/replication_ack_test.rb +66 -0
- data/test/replica_sets/rs_test_helper.rb +27 -0
- data/test/safe_test.rb +68 -0
- data/test/support/hash_with_indifferent_access.rb +199 -0
- data/test/support/keys.rb +45 -0
- data/test/support_test.rb +19 -0
- data/test/test_helper.rb +83 -0
- data/test/threading/threading_with_large_pool_test.rb +90 -0
- data/test/threading_test.rb +87 -0
- data/test/tools/auth_repl_set_manager.rb +14 -0
- data/test/tools/repl_set_manager.rb +266 -0
- data/test/unit/collection_test.rb +130 -0
- data/test/unit/connection_test.rb +98 -0
- data/test/unit/cursor_test.rb +99 -0
- data/test/unit/db_test.rb +96 -0
- data/test/unit/grid_test.rb +49 -0
- data/test/unit/pool_test.rb +9 -0
- data/test/unit/repl_set_connection_test.rb +72 -0
- data/test/unit/safe_test.rb +125 -0
- data/test/uri_test.rb +91 -0
- metadata +202 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class CursorTest < Test::Unit::TestCase
|
4
|
+
context "Cursor options" do
|
5
|
+
setup do
|
6
|
+
@logger = mock()
|
7
|
+
@logger.stubs(:debug)
|
8
|
+
@connection = stub(:class => Connection, :logger => @logger)
|
9
|
+
@db = stub(:name => "testing", :slave_ok? => false, :connection => @connection)
|
10
|
+
@collection = stub(:db => @db, :name => "items")
|
11
|
+
@cursor = Cursor.new(@collection)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "set timeout" do
|
15
|
+
assert_equal true, @cursor.timeout
|
16
|
+
end
|
17
|
+
|
18
|
+
should "set selector" do
|
19
|
+
assert @cursor.selector == {}
|
20
|
+
|
21
|
+
@cursor = Cursor.new(@collection, :selector => {:name => "Jones"})
|
22
|
+
assert @cursor.selector == {:name => "Jones"}
|
23
|
+
end
|
24
|
+
|
25
|
+
should "set fields" do
|
26
|
+
assert_nil @cursor.fields
|
27
|
+
|
28
|
+
@cursor = Cursor.new(@collection, :fields => [:name, :date])
|
29
|
+
assert @cursor.fields == {:name => 1, :date => 1}
|
30
|
+
end
|
31
|
+
|
32
|
+
should "set mix fields 0 and 1" do
|
33
|
+
assert_nil @cursor.fields
|
34
|
+
|
35
|
+
@cursor = Cursor.new(@collection, :fields => {:name => 1, :date => 0})
|
36
|
+
assert @cursor.fields == {:name => 1, :date => 0}
|
37
|
+
end
|
38
|
+
|
39
|
+
should "set limit" do
|
40
|
+
assert_equal 0, @cursor.limit
|
41
|
+
|
42
|
+
@cursor = Cursor.new(@collection, :limit => 10)
|
43
|
+
assert_equal 10, @cursor.limit
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
should "set skip" do
|
48
|
+
assert_equal 0, @cursor.skip
|
49
|
+
|
50
|
+
@cursor = Cursor.new(@collection, :skip => 5)
|
51
|
+
assert_equal 5, @cursor.skip
|
52
|
+
end
|
53
|
+
|
54
|
+
should "set sort order" do
|
55
|
+
assert_nil @cursor.order
|
56
|
+
|
57
|
+
@cursor = Cursor.new(@collection, :order => "last_name")
|
58
|
+
assert_equal "last_name", @cursor.order
|
59
|
+
end
|
60
|
+
|
61
|
+
should "set hint" do
|
62
|
+
assert_nil @cursor.hint
|
63
|
+
|
64
|
+
@cursor = Cursor.new(@collection, :hint => "name")
|
65
|
+
assert_equal "name", @cursor.hint
|
66
|
+
end
|
67
|
+
|
68
|
+
should "cache full collection name" do
|
69
|
+
assert_equal "testing.items", @cursor.full_collection_name
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "Query fields" do
|
74
|
+
setup do
|
75
|
+
@connection = stub(:class => Collection, :logger => @logger)
|
76
|
+
@db = stub(:slave_ok? => true, :name => "testing", :connection => @connection)
|
77
|
+
@collection = stub(:db => @db, :name => "items")
|
78
|
+
end
|
79
|
+
|
80
|
+
should "when an array should return a hash with each key" do
|
81
|
+
@cursor = Cursor.new(@collection, :fields => [:name, :age])
|
82
|
+
result = @cursor.fields
|
83
|
+
assert_equal result.keys.sort{|a,b| a.to_s <=> b.to_s}, [:age, :name].sort{|a,b| a.to_s <=> b.to_s}
|
84
|
+
assert result.values.all? {|v| v == 1}
|
85
|
+
end
|
86
|
+
|
87
|
+
should "when a string, return a hash with just the key" do
|
88
|
+
@cursor = Cursor.new(@collection, :fields => "name")
|
89
|
+
result = @cursor.fields
|
90
|
+
assert_equal result.keys.sort, ["name"]
|
91
|
+
assert result.values.all? {|v| v == 1}
|
92
|
+
end
|
93
|
+
|
94
|
+
should "return nil when neither hash nor string nor symbol" do
|
95
|
+
@cursor = Cursor.new(@collection, :fields => 1234567)
|
96
|
+
assert_nil @cursor.fields
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class DBTest < Test::Unit::TestCase
|
4
|
+
context "DBTest: " do
|
5
|
+
setup do
|
6
|
+
def insert_message(db, documents)
|
7
|
+
documents = [documents] unless documents.is_a?(Array)
|
8
|
+
message = ByteBuffer.new
|
9
|
+
message.put_int(0)
|
10
|
+
Mongo::BSON_CODER..serialize_cstr(message, "#{db.name}.test")
|
11
|
+
documents.each { |doc| message.put_array(Mongo::BSON_CODER.new.serialize(doc, true).to_a) }
|
12
|
+
message = db.add_message_headers(Mongo::Constants::OP_INSERT, message)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "DB commands" do
|
17
|
+
setup do
|
18
|
+
@conn = stub()
|
19
|
+
@conn.stubs(:safe)
|
20
|
+
@db = DB.new("testing", @conn)
|
21
|
+
@db.stubs(:safe)
|
22
|
+
@collection = mock()
|
23
|
+
@db.stubs(:system_command_collection).returns(@collection)
|
24
|
+
end
|
25
|
+
|
26
|
+
should "raise an error if given a hash with more than one key" do
|
27
|
+
if RUBY_VERSION < '1.9'
|
28
|
+
assert_raise MongoArgumentError do
|
29
|
+
@db.command(:buildinfo => 1, :somekey => 1)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
should "raise an error if the selector is omitted" do
|
35
|
+
assert_raise MongoArgumentError do
|
36
|
+
@db.command({}, :check_response => true)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
should "create the proper cursor" do
|
41
|
+
@cursor = mock(:next_document => {"ok" => 1})
|
42
|
+
Cursor.expects(:new).with(@collection,
|
43
|
+
:limit => -1, :selector => {:buildinfo => 1}, :socket => nil).returns(@cursor)
|
44
|
+
command = {:buildinfo => 1}
|
45
|
+
@db.command(command, :check_response => true)
|
46
|
+
end
|
47
|
+
|
48
|
+
should "raise an error when the command fails" do
|
49
|
+
@cursor = mock(:next_document => {"ok" => 0})
|
50
|
+
Cursor.expects(:new).with(@collection,
|
51
|
+
:limit => -1, :selector => {:buildinfo => 1}, :socket => nil).returns(@cursor)
|
52
|
+
assert_raise OperationFailure do
|
53
|
+
command = {:buildinfo => 1}
|
54
|
+
@db.command(command, :check_response => true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
should "raise an error if logging out fails" do
|
59
|
+
@db.expects(:command).returns({})
|
60
|
+
@conn.expects(:pool_size).returns(1)
|
61
|
+
assert_raise Mongo::MongoDBError do
|
62
|
+
@db.logout
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
should "raise an error if collection creation fails" do
|
67
|
+
@db.expects(:collection_names).returns([])
|
68
|
+
@db.expects(:command).returns({'ok' => 0})
|
69
|
+
assert_raise Mongo::MongoDBError do
|
70
|
+
@db.create_collection("foo")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
should "raise an error if getlasterror fails" do
|
75
|
+
@db.expects(:command).returns({})
|
76
|
+
assert_raise Mongo::MongoDBError do
|
77
|
+
@db.get_last_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
should "raise an error if drop_index fails" do
|
82
|
+
@db.expects(:command).returns({})
|
83
|
+
assert_raise Mongo::MongoDBError do
|
84
|
+
@db.drop_index("foo", "bar")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
should "raise an error if set_profiling_level fails" do
|
89
|
+
@db.expects(:command).returns({})
|
90
|
+
assert_raise Mongo::MongoDBError do
|
91
|
+
@db.profiling_level = :slow_only
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
|
3
|
+
class GridTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "GridFS: " do
|
6
|
+
setup do
|
7
|
+
@conn = stub()
|
8
|
+
@conn.stubs(:safe)
|
9
|
+
@db = DB.new("testing", @conn)
|
10
|
+
@files = mock()
|
11
|
+
@chunks = mock()
|
12
|
+
|
13
|
+
@db.expects(:[]).with('fs.files').returns(@files)
|
14
|
+
@db.expects(:[]).with('fs.chunks').returns(@chunks)
|
15
|
+
@db.stubs(:safe)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "Grid classe with standard connections" do
|
19
|
+
setup do
|
20
|
+
@conn.expects(:slave_ok?).returns(false)
|
21
|
+
end
|
22
|
+
|
23
|
+
should "create indexes for Grid" do
|
24
|
+
@chunks.expects(:create_index)
|
25
|
+
Grid.new(@db)
|
26
|
+
end
|
27
|
+
|
28
|
+
should "create indexes for GridFileSystem" do
|
29
|
+
@files.expects(:create_index)
|
30
|
+
@chunks.expects(:create_index)
|
31
|
+
GridFileSystem.new(@db)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "Grid classes with slave connection" do
|
36
|
+
setup do
|
37
|
+
@conn.expects(:slave_ok?).returns(true)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "not create indexes for Grid" do
|
41
|
+
Grid.new(@db)
|
42
|
+
end
|
43
|
+
|
44
|
+
should "not create indexes for GridFileSystem" do
|
45
|
+
GridFileSystem.new(@db)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require './test/test_helper'
|
2
|
+
include Mongo
|
3
|
+
|
4
|
+
class ReplSetConnectionTest < Test::Unit::TestCase
|
5
|
+
context "Initialization: " do
|
6
|
+
setup do
|
7
|
+
def new_mock_socket(host='localhost', port=27017)
|
8
|
+
socket = Object.new
|
9
|
+
socket.stubs(:setsockopt).with(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
10
|
+
socket.stubs(:close)
|
11
|
+
socket
|
12
|
+
end
|
13
|
+
|
14
|
+
def new_mock_db
|
15
|
+
db = Object.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "connecting to a replica set" do
|
20
|
+
setup do
|
21
|
+
TCPSocket.stubs(:new).returns(new_mock_socket('localhost', 27017))
|
22
|
+
@conn = ReplSetConnection.new(['localhost', 27017], :connect => false, :read_secondary => true)
|
23
|
+
|
24
|
+
admin_db = new_mock_db
|
25
|
+
@hosts = ['localhost:27018', 'localhost:27019', 'localhost:27020']
|
26
|
+
|
27
|
+
admin_db.stubs(:command).returns({'ok' => 1, 'ismaster' => 1, 'hosts' => @hosts}).
|
28
|
+
then.returns({'ok' => 1, 'ismaster' => 0, 'hosts' => @hosts, 'secondary' => 1}).
|
29
|
+
then.returns({'ok' => 1, 'ismaster' => 0, 'hosts' => @hosts, 'secondary' => 1}).
|
30
|
+
then.returns({'ok' => 1, 'ismaster' => 0, 'arbiterOnly' => 1})
|
31
|
+
|
32
|
+
@conn.stubs(:[]).with('admin').returns(admin_db)
|
33
|
+
@conn.connect
|
34
|
+
end
|
35
|
+
|
36
|
+
should "store the hosts returned from the ismaster command" do
|
37
|
+
assert_equal 'localhost', @conn.primary_pool.host
|
38
|
+
assert_equal 27017, @conn.primary_pool.port
|
39
|
+
|
40
|
+
assert_equal 'localhost', @conn.secondary_pools[0].host
|
41
|
+
assert_equal 27018, @conn.secondary_pools[0].port
|
42
|
+
|
43
|
+
assert_equal 'localhost', @conn.secondary_pools[1].host
|
44
|
+
assert_equal 27019, @conn.secondary_pools[1].port
|
45
|
+
|
46
|
+
assert_equal 2, @conn.secondary_pools.length
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "connecting to a replica set and providing seed nodes" do
|
51
|
+
setup do
|
52
|
+
TCPSocket.stubs(:new).returns(new_mock_socket)
|
53
|
+
@conn = ReplSetConnection.new(['localhost', 27017], ['localhost', 27019], :connect => false)
|
54
|
+
|
55
|
+
admin_db = new_mock_db
|
56
|
+
@hosts = ['localhost:27017', 'localhost:27018', 'localhost:27019']
|
57
|
+
admin_db.stubs(:command).returns({'ok' => 1, 'ismaster' => 1, 'hosts' => @hosts})
|
58
|
+
@conn.stubs(:[]).with('admin').returns(admin_db)
|
59
|
+
@conn.connect
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "initializing with a mongodb uri" do
|
64
|
+
|
65
|
+
should "parse a uri specifying multiple nodes" do
|
66
|
+
@conn = Connection.from_uri("mongodb://localhost:27017,mydb.com:27018", :connect => false)
|
67
|
+
assert_equal ['localhost', 27017], @conn.nodes[0]
|
68
|
+
assert_equal ['mydb.com', 27018], @conn.nodes[1]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require File.expand_path('./test/test_helper.rb')
|
2
|
+
|
3
|
+
class SafeTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context "Safe mode on connection: " do
|
6
|
+
setup do
|
7
|
+
@safe_value = {:w => 7}
|
8
|
+
@con = Mongo::Connection.new('localhost', 27017, :safe => @safe_value, :connect => false)
|
9
|
+
end
|
10
|
+
|
11
|
+
should "propogate to DB" do
|
12
|
+
db = @con['foo']
|
13
|
+
assert_equal @safe_value, db.safe
|
14
|
+
|
15
|
+
|
16
|
+
db = @con.db('foo')
|
17
|
+
assert_equal @safe_value, db.safe
|
18
|
+
|
19
|
+
db = DB.new('foo', @con)
|
20
|
+
assert_equal @safe_value, db.safe
|
21
|
+
end
|
22
|
+
|
23
|
+
should "allow db override" do
|
24
|
+
db = DB.new('foo', @con, :safe => false)
|
25
|
+
assert_equal false, db.safe
|
26
|
+
|
27
|
+
db = @con.db('foo', :safe => false)
|
28
|
+
assert_equal false, db.safe
|
29
|
+
end
|
30
|
+
|
31
|
+
context "on DB: " do
|
32
|
+
setup do
|
33
|
+
@db = @con['foo']
|
34
|
+
end
|
35
|
+
|
36
|
+
should "propogate to collection" do
|
37
|
+
col = @db.collection('bar')
|
38
|
+
assert_equal @safe_value, col.safe
|
39
|
+
|
40
|
+
col = @db['bar']
|
41
|
+
assert_equal @safe_value, col.safe
|
42
|
+
|
43
|
+
col = Collection.new('bar', @db)
|
44
|
+
assert_equal @safe_value, col.safe
|
45
|
+
end
|
46
|
+
|
47
|
+
should "allow override on collection" do
|
48
|
+
col = @db.collection('bar', :safe => false)
|
49
|
+
assert_equal false, col.safe
|
50
|
+
|
51
|
+
col = Collection.new('bar', @db, :safe => false)
|
52
|
+
assert_equal false, col.safe
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "on operations supporting safe mode" do
|
57
|
+
setup do
|
58
|
+
@col = @con['foo']['bar']
|
59
|
+
end
|
60
|
+
|
61
|
+
should "use default value on insert" do
|
62
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
63
|
+
safe == @safe_value
|
64
|
+
end
|
65
|
+
|
66
|
+
@col.insert({:a => 1})
|
67
|
+
end
|
68
|
+
|
69
|
+
should "allow override alternate value on insert" do
|
70
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
71
|
+
safe == {:w => 100}
|
72
|
+
end
|
73
|
+
|
74
|
+
@col.insert({:a => 1}, :safe => {:w => 100})
|
75
|
+
end
|
76
|
+
|
77
|
+
should "allow override to disable on insert" do
|
78
|
+
@con.expects(:send_message)
|
79
|
+
@col.insert({:a => 1}, :safe => false)
|
80
|
+
end
|
81
|
+
|
82
|
+
should "use default value on update" do
|
83
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
84
|
+
safe == @safe_value
|
85
|
+
end
|
86
|
+
|
87
|
+
@col.update({:a => 1}, {:a => 2})
|
88
|
+
end
|
89
|
+
|
90
|
+
should "allow override alternate value on update" do
|
91
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
92
|
+
safe == {:w => 100}
|
93
|
+
end
|
94
|
+
|
95
|
+
@col.update({:a => 1}, {:a => 2}, :safe => {:w => 100})
|
96
|
+
end
|
97
|
+
|
98
|
+
should "allow override to disable on update" do
|
99
|
+
@con.expects(:send_message)
|
100
|
+
@col.update({:a => 1}, {:a => 2}, :safe => false)
|
101
|
+
end
|
102
|
+
|
103
|
+
should "use default value on remove" do
|
104
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
105
|
+
safe == @safe_value
|
106
|
+
end
|
107
|
+
|
108
|
+
@col.remove
|
109
|
+
end
|
110
|
+
|
111
|
+
should "allow override alternate value on remove" do
|
112
|
+
@con.expects(:send_message_with_safe_check).with do |op, msg, log, n, safe|
|
113
|
+
safe == {:w => 100}
|
114
|
+
end
|
115
|
+
|
116
|
+
@col.remove({}, :safe => {:w => 100})
|
117
|
+
end
|
118
|
+
|
119
|
+
should "allow override to disable on remove" do
|
120
|
+
@con.expects(:send_message)
|
121
|
+
@col.remove({}, :safe => false)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|