mongo_db 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongo_db/driver/core/collection.rb +92 -43
- data/lib/mongo_db/driver/core.rb +2 -3
- data/lib/mongo_db/driver/more/{collection.rb → collection_finders.rb} +16 -20
- data/lib/mongo_db/driver/more.rb +5 -2
- data/lib/mongo_db/driver/spec.rb +8 -8
- data/lib/mongo_db/model/model_helper.rb +154 -0
- data/lib/mongo_db/model/model_serializer.rb +3 -0
- data/lib/mongo_db/model.rb +13 -1
- data/lib/mongo_db/support.rb +4 -4
- data/readme.md +78 -17
- data/spec/driver/core/collection_spec.rb +11 -11
- data/spec/driver/core/crud_spec.rb +11 -11
- data/spec/driver/core/hash_helper_spec.rb +7 -2
- data/spec/{driver_example_spec.rb → driver/example_spec.rb} +25 -28
- data/spec/driver/fixes_spec.rb +12 -0
- data/spec/driver/more/querying_spec.rb +16 -16
- data/spec/driver/spec_helper.rb +2 -2
- data/spec/model/{object/callbacks.rb → callbacks.rb} +13 -13
- data/spec/model/{model/query.rb → example.rb} +0 -0
- data/spec/model/{model/crud.rb → model_crud.rb} +25 -25
- data/spec/model/{object/validation.rb → validation.rb} +18 -18
- data/spec/{model/object → object}/crud_shared.rb +8 -8
- data/spec/object/example_spec.rb +64 -0
- data/spec/{model/object/crud.rb → object/object_crud_spec.rb} +17 -17
- data/spec/object/spec_helper.rb +3 -0
- data/spec/test.rb +9 -4
- metadata +17 -17
- data/lib/mongo_db/driver/core/hash_helper.rb +0 -67
- data/lib/old/advanced_finders.rb +0 -26
- data/lib/old/query.rb +0 -91
- data/lib/old/query_spec.rb +0 -77
- data/spec/model/spec_helper.rb +0 -1
@@ -2,7 +2,7 @@ require 'driver/spec_helper'
|
|
2
2
|
|
3
3
|
describe "Collection" do
|
4
4
|
with_mongo
|
5
|
-
|
5
|
+
|
6
6
|
it 'by default save must update all matched by criteria (not first as defautl in mongo)' do
|
7
7
|
db.units.save name: 'Probe', race: 'Protoss', status: 'alive'
|
8
8
|
db.units.save name: 'Zealot', race: 'Protoss', status: 'alive'
|
@@ -10,12 +10,12 @@ describe "Collection" do
|
|
10
10
|
# update
|
11
11
|
db.units.update({race: 'Protoss'}, :$set => {status: 'dead'})
|
12
12
|
db.units.all.collect{|u| u[:status]}.should == %w(dead dead)
|
13
|
-
|
13
|
+
|
14
14
|
# destroy
|
15
15
|
db.units.destroy race: 'Protoss'
|
16
16
|
db.units.count.should == 0
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
describe "symbolize" do
|
20
20
|
it 'should always return symbolized hashes' do
|
21
21
|
zeratul = {name: 'Zeratul'}
|
@@ -26,12 +26,12 @@ describe "Collection" do
|
|
26
26
|
r[:name].should == 'Zeratul'
|
27
27
|
r['name'].should be_nil
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
it "should be able to disable symbolization" do
|
31
31
|
old = Mongo.defaults[:symbolize]
|
32
32
|
begin
|
33
33
|
Mongo.defaults[:symbolize] = false
|
34
|
-
|
34
|
+
|
35
35
|
zeratul = {name: 'Zeratul'}
|
36
36
|
db.units.save(zeratul).should be_mongo_id
|
37
37
|
r = db.units.first(name: 'Zeratul')
|
@@ -44,24 +44,24 @@ describe "Collection" do
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
it "first" do
|
49
49
|
db.units.first.should be_nil
|
50
50
|
zeratul = {name: 'Zeratul'}
|
51
51
|
db.units.save(zeratul).should be_mongo_id
|
52
52
|
db.units.first(name: 'Zeratul')[:name].should == 'Zeratul'
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
it 'all' do
|
56
|
-
db.units.all.should == []
|
57
|
-
|
56
|
+
db.units.all.should == []
|
57
|
+
|
58
58
|
zeratul = {name: 'Zeratul'}
|
59
59
|
db.units.save(zeratul).should be_mongo_id
|
60
|
-
|
60
|
+
|
61
61
|
list = db.units.all(name: 'Zeratul')
|
62
62
|
list.size.should == 1
|
63
63
|
list.first[:name].should == 'Zeratul'
|
64
|
-
|
64
|
+
|
65
65
|
# with block
|
66
66
|
list = []; db.units.all{|o| list << o}
|
67
67
|
list.size.should == 1
|
@@ -2,50 +2,50 @@ require 'driver/spec_helper'
|
|
2
2
|
|
3
3
|
describe "Hash CRUD" do
|
4
4
|
with_mongo
|
5
|
-
|
5
|
+
|
6
6
|
describe 'simple' do
|
7
7
|
before do
|
8
8
|
@zeratul = {name: 'Zeratul', info: 'Dark Templar'}
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it 'crud' do
|
12
12
|
# read
|
13
13
|
db.units.count.should == 0
|
14
14
|
db.units.all.should == []
|
15
15
|
db.units.first.should == nil
|
16
|
-
|
16
|
+
|
17
17
|
# create
|
18
18
|
db.units.save(@zeratul).should be_mongo_id
|
19
19
|
@zeratul[:_id].should be_mongo_id
|
20
|
-
|
20
|
+
|
21
21
|
# read
|
22
22
|
db.units.all.should == [@zeratul]
|
23
23
|
db.units.count.should == 1
|
24
24
|
db.units.first.should == @zeratul
|
25
|
-
|
25
|
+
|
26
26
|
# update
|
27
27
|
@zeratul[:info] = 'Killer of Cerebrates'
|
28
28
|
db.units.save @zeratul
|
29
29
|
db.units.count.should == 1
|
30
30
|
db.units.first(name: 'Zeratul')[:info].should == 'Killer of Cerebrates'
|
31
|
-
|
31
|
+
|
32
32
|
# destroy
|
33
33
|
db.units.destroy @zeratul
|
34
34
|
db.units.count.should == 0
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
describe 'embedded' do
|
39
|
-
before do
|
39
|
+
before do
|
40
40
|
@player = {
|
41
41
|
name: 'Alex',
|
42
42
|
missions: [
|
43
43
|
{name: 'Wasteland', stats: {buildings: 5, units: 10}},
|
44
44
|
{name: 'Backwater Station', stats: {buildings: 8, units: 25}}
|
45
45
|
]
|
46
|
-
}
|
46
|
+
}
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it 'crud' do
|
50
50
|
# create
|
51
51
|
db.players.save(@player).should be_mongo_id
|
@@ -66,5 +66,5 @@ describe "Hash CRUD" do
|
|
66
66
|
db.players.destroy @player
|
67
67
|
db.players.count.should == 0
|
68
68
|
end
|
69
|
-
end
|
69
|
+
end
|
70
70
|
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'driver/spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Collection" do
|
4
|
+
before do
|
5
|
+
@helper = Object.new
|
6
|
+
@helper.send :extend, Mongo::Ext::Collection
|
7
|
+
end
|
8
|
+
|
4
9
|
it "symbolize" do
|
5
|
-
|
10
|
+
@helper.send(:symbolize_doc, {
|
6
11
|
'a' => 1,
|
7
12
|
'b' => {
|
8
13
|
'c' => 2,
|
@@ -1,58 +1,55 @@
|
|
1
|
-
require 'driver/
|
1
|
+
require 'mongo_db/driver/core'
|
2
|
+
require 'rspec'
|
2
3
|
|
3
|
-
describe "
|
4
|
-
with_mongo
|
5
|
-
|
4
|
+
describe "Driver example" do
|
6
5
|
defaults = nil
|
7
6
|
before(:all){defaults = Mongo.defaults.clone}
|
8
7
|
after(:all){Mongo.defaults = defaults}
|
9
|
-
|
10
|
-
it "core" do
|
11
|
-
require 'mongo_db/driver'
|
12
|
-
|
8
|
+
|
9
|
+
it "core" do
|
10
|
+
require 'mongo_db/driver/core'
|
11
|
+
|
13
12
|
# changing some defaults
|
14
13
|
Mongo.defaults.merge! symbolize: true, multi: true, safe: true
|
15
|
-
|
14
|
+
|
16
15
|
# connection & db
|
17
16
|
connection = Mongo::Connection.new
|
18
17
|
db = connection.db 'default_test'
|
19
|
-
|
18
|
+
|
20
19
|
# collection shortcuts
|
21
20
|
db.some_collection
|
22
|
-
|
21
|
+
|
23
22
|
# create
|
24
23
|
zeratul = {name: 'Zeratul', stats: {attack: 85, life: 300, shield: 100}}
|
25
24
|
tassadar = {name: 'Tassadar', stats: {attack: 0, life: 80, shield: 300}}
|
26
|
-
|
25
|
+
|
27
26
|
db.units.save zeratul
|
28
27
|
db.units.save tassadar
|
29
|
-
|
28
|
+
|
30
29
|
# udate (we made error - mistakenly set Tassadar's attack as zero, let's fix it)
|
31
30
|
tassadar[:stats][:attack] = 20
|
32
31
|
db.units.save tassadar
|
33
|
-
|
32
|
+
|
34
33
|
# querying first & all, there's also :each, the same as :all
|
35
34
|
db.units.first name: 'Zeratul' # => zeratul
|
36
35
|
db.units.all name: 'Zeratul' # => [zeratul]
|
37
|
-
db.units.all name: 'Zeratul' do |
|
38
|
-
|
36
|
+
db.units.all name: 'Zeratul' do |unit|
|
37
|
+
unit # => zeratul
|
39
38
|
end
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
|
40
|
+
|
41
|
+
#
|
42
|
+
# optional
|
43
|
+
#
|
44
|
+
require 'mongo_db/driver/more'
|
45
|
+
|
43
46
|
# simple finders (bang versions also availiable)
|
44
47
|
db.units.by_name 'Zeratul' # => zeratul
|
45
48
|
db.units.first_by_name 'Zeratul' # => zeratul
|
46
49
|
db.units.all_by_name 'Zeratul' # => [zeratul]
|
47
|
-
|
50
|
+
|
48
51
|
# query sugar, use {life: {_lt: 100}} instead of {life: {:$lt => 100}}
|
49
|
-
|
50
|
-
|
51
|
-
Mongo.defaults.merge! convert_underscore_to_dollar: true
|
52
|
-
db.units.all life: {_lt: 100} # => [tassadar]
|
53
|
-
|
54
|
-
# it's also trivial to add support for {:life.lt => 100} notion, but
|
55
|
-
# it uses ugly '=>' hash notation instead of ':' and it differs from
|
56
|
-
# how it looks in native MongoDB JSON query.
|
52
|
+
Mongo.defaults.merge! convert_underscore_to_dollar: true
|
53
|
+
db.units.all 'stats.life' => {_lt: 100} # => [tassadar]
|
57
54
|
end
|
58
55
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'driver/spec_helper'
|
2
|
+
|
3
|
+
describe "Driver fixes" do
|
4
|
+
with_mongo
|
5
|
+
|
6
|
+
it "should always return array if input is array" do
|
7
|
+
db.units.insert([{name: 'Zeratul'}]).class.should == Array
|
8
|
+
|
9
|
+
db.units.insert(name: 'Zeratul').class.should == BSON::ObjectId
|
10
|
+
db.units.insert([{name: 'Zeratul'}, {name: 'Tassadar'}]).class.should == Array
|
11
|
+
end
|
12
|
+
end
|
@@ -2,23 +2,23 @@ require 'driver/spec_helper'
|
|
2
2
|
|
3
3
|
describe "Querying" do
|
4
4
|
with_mongo
|
5
|
-
|
5
|
+
|
6
6
|
before do
|
7
7
|
@jim = {name: 'Jim', age: 34}
|
8
8
|
@units = db.units
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
describe "dynamic finders" do
|
12
12
|
it "find, first, by" do
|
13
|
-
@units.first_by_name('Jim').should be_nil
|
13
|
+
@units.first_by_name('Jim').should be_nil
|
14
14
|
-> {@units.first_by_name!('Jim')}.should raise_error(Mongo::NotFound)
|
15
|
-
@units.by_name('Jim').should be_nil
|
15
|
+
@units.by_name('Jim').should be_nil
|
16
16
|
-> {@units.by_name!('Jim')}.should raise_error(Mongo::NotFound)
|
17
|
-
@units.first_by_name('Jim').should be_nil
|
17
|
+
@units.first_by_name('Jim').should be_nil
|
18
18
|
-> {@units.first_by_name!('Jim')}.should raise_error(Mongo::NotFound)
|
19
|
-
|
19
|
+
|
20
20
|
@units.save @jim
|
21
|
-
|
21
|
+
|
22
22
|
@units.first_by_name('Jim').should == @jim
|
23
23
|
@units.first_by_name!('Jim').should == @jim
|
24
24
|
@units.by_name('Jim').should == @jim
|
@@ -26,31 +26,31 @@ describe "Querying" do
|
|
26
26
|
@units.first_by_name('Jim').should == @jim
|
27
27
|
@units.first_by_name!('Jim').should == @jim
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
it "all" do
|
31
|
-
@units.all_by_name('Jim').should == []
|
31
|
+
@units.all_by_name('Jim').should == []
|
32
32
|
@units.save @jim
|
33
33
|
@units.all_by_name('Jim').should == [@jim]
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it "should allow to use bang version only with :first" do
|
37
37
|
-> {@units.all_by_name!('Jim')}.should raise_error(/can't use bang/)
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
it "by_id (special case)" do
|
41
41
|
@units.method(:by_id).should == @units.method(:first_by_id)
|
42
42
|
@units.method(:by_id!).should == @units.method(:first_by_id!)
|
43
|
-
|
44
|
-
@units.by_id('4de81858cf26bde569000009').should be_nil
|
43
|
+
|
44
|
+
@units.by_id('4de81858cf26bde569000009').should be_nil
|
45
45
|
-> {@units.by_id!('4de81858cf26bde569000009')}.should raise_error(Mongo::NotFound)
|
46
|
-
|
46
|
+
|
47
47
|
@units.save @jim
|
48
|
-
|
48
|
+
|
49
49
|
@units.by_id(@jim[:_id]).should == @jim
|
50
50
|
@units.by_id!(@jim[:_id]).should == @jim
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
it "underscore to dollar" do
|
55
55
|
@units.save @jim
|
56
56
|
@units.save name: 'Zeratul', age: 600
|
data/spec/driver/spec_helper.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Object callbacks' do
|
4
|
-
|
5
|
-
|
4
|
+
with_mongo
|
5
|
+
|
6
6
|
before do
|
7
7
|
class Player
|
8
8
|
attr_accessor :missions
|
9
|
-
|
9
|
+
|
10
10
|
class Mission
|
11
|
-
end
|
11
|
+
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
@mission = Player::Mission.new
|
15
15
|
@player = Player.new
|
16
16
|
@player.missions = [@mission]
|
@@ -29,13 +29,13 @@ describe 'Object callbacks' do
|
|
29
29
|
@player.should_receive(name).ordered
|
30
30
|
@misson.should_receive(name).ordered
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
db.players.save @player
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
it 'update' do
|
37
37
|
db.players.save @player
|
38
|
-
|
38
|
+
|
39
39
|
[
|
40
40
|
:before_validation,
|
41
41
|
:validate,
|
@@ -50,10 +50,10 @@ describe 'Object callbacks' do
|
|
50
50
|
end
|
51
51
|
db.players.save @player
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
it 'destroy' do
|
55
55
|
db.players.save @player
|
56
|
-
|
56
|
+
|
57
57
|
[
|
58
58
|
:before_validation,
|
59
59
|
:validate,
|
@@ -66,13 +66,13 @@ describe 'Object callbacks' do
|
|
66
66
|
end
|
67
67
|
db.players.destroy @player
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
it 'should be able interrupt CRUD' do
|
71
71
|
@misson.stub!(:before_save).and_return(false)
|
72
72
|
db.players.save(@player).should be_false
|
73
73
|
db.players.count.should == 0
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it 'should be able skip callbacks' do
|
77
77
|
[
|
78
78
|
:before_validation,
|
@@ -89,7 +89,7 @@ describe 'Object callbacks' do
|
|
89
89
|
@player.should_not_receive(name)
|
90
90
|
@misson.should_receive(name)
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
db.players.save @player, callbacks: false
|
94
94
|
db.players.count.should == 1
|
95
95
|
db.players.save @player, callbacks: false
|
File without changes
|
@@ -2,25 +2,25 @@ require 'spec_helper'
|
|
2
2
|
require 'object/crud_shared'
|
3
3
|
|
4
4
|
describe "Model CRUD" do
|
5
|
-
|
6
|
-
|
5
|
+
with_mongo
|
6
|
+
|
7
7
|
describe 'simple' do
|
8
8
|
before do
|
9
9
|
class Person
|
10
10
|
inherit Mongo::Model
|
11
11
|
collection{db.units}
|
12
|
-
|
13
|
-
def initialize name, info; @name, @info = name, info end
|
12
|
+
|
13
|
+
def initialize name = nil, info = nil; @name, @info = name, info end
|
14
14
|
attr_accessor :name, :info
|
15
15
|
def == o; [self.class, name, info] == [o.class, o.respond_to(:name), o.respond_to(:info)] end
|
16
16
|
end
|
17
|
-
|
18
|
-
@zeratul =
|
17
|
+
|
18
|
+
@zeratul = Person.new 'Zeratul', 'Dark Templar'
|
19
19
|
end
|
20
20
|
after{remove_constants :Person}
|
21
|
-
|
21
|
+
|
22
22
|
it_should_behave_like "object CRUD"
|
23
|
-
|
23
|
+
|
24
24
|
it 'model crud' do
|
25
25
|
# read
|
26
26
|
Person.count.should == 0
|
@@ -29,14 +29,14 @@ describe "Model CRUD" do
|
|
29
29
|
|
30
30
|
# create
|
31
31
|
@zeratul.save.should be_true
|
32
|
-
@zeratul._id.
|
32
|
+
@zeratul._id.should_not be_nil
|
33
33
|
|
34
34
|
# read
|
35
35
|
Person.count.should == 1
|
36
36
|
Person.all.should == [@zeratul]
|
37
37
|
Person.first.should == @zeratul
|
38
38
|
Person.first.object_id.should_not == @zeratul.object_id
|
39
|
-
|
39
|
+
|
40
40
|
# update
|
41
41
|
@zeratul.info = 'Killer of Cerebrates'
|
42
42
|
@zeratul.save.should be_true
|
@@ -47,18 +47,18 @@ describe "Model CRUD" do
|
|
47
47
|
@zeratul.destroy.should be_true
|
48
48
|
Person.count.should == 0
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
it 'should be able to save to another collection' do
|
52
52
|
# create
|
53
53
|
@zeratul.save(collection: db.protosses).should be_true
|
54
|
-
@zeratul._id.
|
54
|
+
@zeratul._id.should_not be_nil
|
55
55
|
|
56
56
|
# read
|
57
57
|
Person.count.should == 0
|
58
58
|
db.protosses.count.should == 1
|
59
59
|
db.protosses.should == @zeratul
|
60
60
|
db.protosses.object_id.should_not == @zeratul.object_id
|
61
|
-
|
61
|
+
|
62
62
|
# update
|
63
63
|
@zeratul.info = 'Killer of Cerebrates'
|
64
64
|
@zeratul.save(collection: db.protosses).should be_true
|
@@ -71,22 +71,22 @@ describe "Model CRUD" do
|
|
71
71
|
db.protosses.count.should == 0
|
72
72
|
end
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
describe 'embedded' do
|
76
|
-
before do
|
76
|
+
before do
|
77
77
|
class Player
|
78
78
|
inherit Mongo::Model
|
79
79
|
attr_accessor :missions
|
80
|
-
def == o; [self.class, self.missions]
|
81
|
-
|
80
|
+
def == o; [self.class, self.missions] == [o.class, o.respond_to(:missions)] end
|
81
|
+
|
82
82
|
class Mission
|
83
83
|
inherit Mongo::Model
|
84
|
-
def initialize name, stats; @name, @stats = name, stats end
|
84
|
+
def initialize name = nil, stats = nil; @name, @stats = name, stats end
|
85
85
|
attr_accessor :name, :stats
|
86
|
-
def == o; [self.class, self.name, self.stats]
|
87
|
-
end
|
86
|
+
def == o; [self.class, self.name, self.stats] == [o.class, o.respond_to(:name), o.respond_to(:stats)] end
|
87
|
+
end
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
@player = Player.new
|
91
91
|
@player.missions = [
|
92
92
|
Player::Mission.new('Wasteland', {buildings: 5, units: 10}),
|
@@ -94,13 +94,13 @@ describe "Model CRUD" do
|
|
94
94
|
]
|
95
95
|
end
|
96
96
|
after{remove_constants :Player}
|
97
|
-
|
97
|
+
|
98
98
|
it_should_behave_like 'shared object CRUD'
|
99
|
-
|
99
|
+
|
100
100
|
it 'crud' do
|
101
101
|
# create
|
102
102
|
@player.save.should be_true
|
103
|
-
@player._id.
|
103
|
+
@player._id.should_not be_nil
|
104
104
|
|
105
105
|
# read
|
106
106
|
Player.count.should == 1
|
@@ -119,5 +119,5 @@ describe "Model CRUD" do
|
|
119
119
|
@player.destroy.should be_true
|
120
120
|
Player.count.should == 0
|
121
121
|
end
|
122
|
-
end
|
122
|
+
end
|
123
123
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Object validation' do
|
4
|
-
|
5
|
-
|
4
|
+
with_mongo
|
5
|
+
|
6
6
|
before do
|
7
7
|
class Player
|
8
8
|
attr_accessor :missions
|
9
|
-
|
9
|
+
|
10
10
|
class Mission
|
11
|
-
end
|
11
|
+
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
@mission = Player::Mission.new
|
15
15
|
@player = Player.new
|
16
16
|
@player.missions = [@mission]
|
@@ -21,52 +21,52 @@ describe 'Object validation' do
|
|
21
21
|
# create
|
22
22
|
@player.stub!(:valid?).and_return(false)
|
23
23
|
db.players.save(@player).should be_false
|
24
|
-
|
24
|
+
|
25
25
|
@player.stub!(:valid?).and_return(true)
|
26
26
|
db.players.save(@player).should be_true
|
27
|
-
|
27
|
+
|
28
28
|
# update
|
29
29
|
@player.stub!(:valid?).and_return(false)
|
30
30
|
db.players.save(@player).should be_false
|
31
|
-
|
31
|
+
|
32
32
|
@player.stub!(:valid?).and_return(true)
|
33
33
|
db.players.save(@player).should be_true
|
34
|
-
|
34
|
+
|
35
35
|
# destroy
|
36
36
|
@player.stub!(:valid?).and_return(false)
|
37
37
|
db.players.destroy(@player).should be_false
|
38
|
-
|
38
|
+
|
39
39
|
@player.stub!(:valid?).and_return(true)
|
40
40
|
db.players.destroy(@player).should be_true
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it 'should not save/update/destroy invalid embedded objects' do
|
44
44
|
# create
|
45
45
|
@mission.stub!(:valid?).and_return(false)
|
46
46
|
db.players.save(@player).should be_false
|
47
|
-
|
47
|
+
|
48
48
|
@mission.stub!(:valid?).and_return(true)
|
49
49
|
db.players.save(@player).should be_true
|
50
|
-
|
50
|
+
|
51
51
|
# update
|
52
52
|
@mission.stub!(:valid?).and_return(false)
|
53
53
|
db.players.save(@player).should be_false
|
54
|
-
|
54
|
+
|
55
55
|
@mission.stub!(:valid?).and_return(true)
|
56
56
|
db.players.save(@player).should be_true
|
57
|
-
|
57
|
+
|
58
58
|
# destroy
|
59
59
|
@mission.stub!(:valid?).and_return(false)
|
60
60
|
db.players.destroy(@player).should be_false
|
61
|
-
|
61
|
+
|
62
62
|
@mission.stub!(:valid?).and_return(true)
|
63
63
|
db.players.destroy(@player).should be_true
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
it "should be able skip validation" do
|
67
67
|
@player.stub!(:valid?).and_return(false)
|
68
68
|
db.players.save(@player, validate: false).should be_true
|
69
|
-
|
69
|
+
|
70
70
|
@player.stub!(:valid?).and_return(true)
|
71
71
|
@mission.stub!(:valid?).and_return(false)
|
72
72
|
db.players.save(@player, validate: false).should be_true
|
@@ -1,4 +1,4 @@
|
|
1
|
-
shared_examples_for 'object CRUD' do
|
1
|
+
shared_examples_for 'object CRUD' do
|
2
2
|
it 'crud' do
|
3
3
|
# read
|
4
4
|
db.units.count.should == 0
|
@@ -7,31 +7,31 @@ shared_examples_for 'object CRUD' do
|
|
7
7
|
|
8
8
|
# create
|
9
9
|
db.units.save(@zeratul).should be_true
|
10
|
-
@zeratul.instance_variable_get(:@_id).
|
11
|
-
|
10
|
+
@zeratul.instance_variable_get(:@_id).should_not be_nil
|
11
|
+
|
12
12
|
# read
|
13
13
|
db.units.count.should == 1
|
14
14
|
db.units.all.should == [@zeratul]
|
15
15
|
db.units.first.should == @zeratul
|
16
16
|
db.units.first.object_id.should_not == @zeratul.object_id
|
17
|
-
|
17
|
+
|
18
18
|
# update
|
19
19
|
@zeratul.info = 'Killer of Cerebrates'
|
20
20
|
db.units.save(@zeratul).should be_true
|
21
21
|
db.units.count.should == 1
|
22
22
|
db.units.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
|
23
|
-
|
23
|
+
|
24
24
|
# destroy
|
25
25
|
db.units.destroy(@zeratul).should be_true
|
26
26
|
db.units.count.should == 0
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
shared_examples_for 'embedded object CRUD' do
|
30
|
+
shared_examples_for 'embedded object CRUD' do
|
31
31
|
it 'crud' do
|
32
32
|
# create
|
33
33
|
db.players.save(@player)
|
34
|
-
@player.instance_variable_get(:@_id).
|
34
|
+
@player.instance_variable_get(:@_id).should_not be_nil
|
35
35
|
|
36
36
|
# read
|
37
37
|
db.players.count.should == 1
|
@@ -40,7 +40,7 @@ shared_examples_for 'embedded object CRUD' do
|
|
40
40
|
|
41
41
|
# update
|
42
42
|
@player.missions.first.stats[:units] = 9
|
43
|
-
@player.missions << Player::Mission.new('Desperate Alliance', {buildings: 11, units: 40})
|
43
|
+
@player.missions << Player::Mission.new('Desperate Alliance', {buildings: 11, units: 40})
|
44
44
|
db.players.save @player
|
45
45
|
db.players.count.should == 1
|
46
46
|
db.players.first.should == @player
|