mongodb_model 0.2.8 → 2.0.0
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/Rakefile +3 -4
- data/lib/mongo/model/assignment.rb +4 -2
- data/lib/mongo/model/callbacks.rb +27 -2
- data/lib/mongo/model/conversion.rb +26 -11
- data/lib/mongo/model/crud.rb +52 -9
- data/lib/mongo/model/{file_model.rb → integration/file_model.rb} +1 -1
- data/lib/mongo/model/{validation → integration/validatable}/uniqueness_validator.rb +2 -2
- data/lib/mongo/model/integration/validatable.rb +41 -0
- data/lib/mongo/model/load.rb +59 -0
- data/lib/mongo/model/model.rb +51 -19
- data/lib/mongo/model/query.rb +1 -1
- data/lib/mongo/model/scope.rb +2 -6
- data/lib/mongo/model/spec.rb +0 -3
- data/lib/mongo/model/support/{types.rb → conversions.rb} +9 -23
- data/lib/mongo/model/support.rb +11 -0
- data/lib/mongo/model/validation.rb +14 -34
- data/lib/mongo/model.rb +1 -46
- data/spec/assignment_spec.rb +2 -2
- data/spec/associations_spec.rb +2 -4
- data/spec/attribute_convertors_spec.rb +9 -9
- data/spec/callbacks_spec.rb +161 -34
- data/spec/conversion_spec.rb +18 -18
- data/spec/crud_spec.rb +79 -81
- data/spec/equality_spec.rb +23 -13
- data/spec/{file_model_spec.rb → integration/file_model_spec.rb} +1 -1
- data/spec/integration/validatable_spec.rb +89 -0
- data/spec/misc_spec.rb +6 -6
- data/spec/query_spec.rb +14 -25
- data/spec/scope_spec.rb +10 -10
- data/spec/spec_helper.rb +19 -3
- data/spec/validation_spec.rb +92 -85
- metadata +16 -12
data/spec/crud_spec.rb
CHANGED
@@ -1,83 +1,81 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'mongo/object/spec/
|
2
|
+
require 'mongo/object/spec/shared_object_crud'
|
3
3
|
|
4
4
|
describe "Model CRUD" do
|
5
5
|
with_mongo_model
|
6
6
|
|
7
|
-
describe '
|
8
|
-
|
7
|
+
describe 'single model' do
|
8
|
+
it_should_behave_like "single object CRUD"
|
9
|
+
|
10
|
+
before do
|
9
11
|
class Unit
|
10
12
|
inherit Mongo::Model
|
11
13
|
collection :units
|
12
14
|
|
13
15
|
attr_accessor :name, :info
|
14
|
-
def == o; [self.class, name, info] == [o.class, o.
|
16
|
+
def == o; [self.class, name, info] == [o.class, o.name, o.info] end
|
15
17
|
end
|
16
|
-
end
|
17
|
-
after(:all){remove_constants :Unit}
|
18
18
|
|
19
|
-
|
20
|
-
@zeratul = Unit.build name: 'Zeratul', info: 'Dark Templar'
|
19
|
+
@unit = Unit.build name: 'Zeratul', info: 'Dark Templar'
|
21
20
|
end
|
21
|
+
after{remove_constants :Unit}
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
it 'model crud' do
|
26
|
-
# read
|
23
|
+
it 'should perform CRUD' do
|
24
|
+
# Read.
|
27
25
|
Unit.count.should == 0
|
28
26
|
Unit.all.should == []
|
29
27
|
Unit.first.should == nil
|
30
28
|
|
31
|
-
#
|
32
|
-
@
|
33
|
-
@
|
29
|
+
# Create.
|
30
|
+
@unit.save.should be_true
|
31
|
+
@unit._id.should_not be_nil
|
34
32
|
|
35
|
-
#
|
33
|
+
# Read.
|
36
34
|
Unit.count.should == 1
|
37
|
-
Unit.all.should == [@
|
38
|
-
Unit.first.should == @
|
39
|
-
Unit.first.object_id.should_not == @
|
35
|
+
Unit.all.should == [@unit]
|
36
|
+
Unit.first.should == @unit
|
37
|
+
Unit.first.object_id.should_not == @unit.object_id
|
40
38
|
|
41
|
-
#
|
42
|
-
@
|
43
|
-
@
|
39
|
+
# Update.
|
40
|
+
@unit.info = 'Killer of Cerebrates'
|
41
|
+
@unit.save.should be_true
|
44
42
|
Unit.count.should == 1
|
45
43
|
Unit.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
|
46
44
|
|
47
|
-
#
|
48
|
-
@
|
45
|
+
# Delete.
|
46
|
+
@unit.delete.should be_true
|
49
47
|
Unit.count.should == 0
|
50
48
|
end
|
51
49
|
|
52
|
-
it 'should be able to save to another collection' do
|
53
|
-
#
|
54
|
-
@
|
55
|
-
@
|
50
|
+
it 'should be able to save model to another collection' do
|
51
|
+
# Create.
|
52
|
+
@unit.save(collection: db.heroes).should be_true
|
53
|
+
@unit._id.should_not be_nil
|
56
54
|
|
57
|
-
#
|
55
|
+
# Read.
|
58
56
|
Unit.count.should == 0
|
59
57
|
db.heroes.count.should == 1
|
60
|
-
db.heroes.first.should == @
|
61
|
-
db.heroes.first.object_id.should_not == @
|
58
|
+
db.heroes.first.should == @unit
|
59
|
+
db.heroes.first.object_id.should_not == @unit.object_id
|
62
60
|
|
63
|
-
#
|
64
|
-
@
|
65
|
-
@
|
61
|
+
# Update.
|
62
|
+
@unit.info = 'Killer of Cerebrates'
|
63
|
+
@unit.save(collection: db.heroes).should be_true
|
66
64
|
Unit.count.should == 0
|
67
65
|
db.heroes.count.should == 1
|
68
66
|
db.heroes.first(name: 'Zeratul').info.should == 'Killer of Cerebrates'
|
69
67
|
|
70
|
-
#
|
71
|
-
@
|
68
|
+
# Delete.
|
69
|
+
@unit.delete(collection: db.heroes).should be_true
|
72
70
|
db.heroes.count.should == 0
|
73
71
|
end
|
74
72
|
|
75
|
-
it 'build' do
|
73
|
+
it 'should build model' do
|
76
74
|
u = Unit.build name: 'Zeratul'
|
77
75
|
u.name.should == 'Zeratul'
|
78
76
|
end
|
79
77
|
|
80
|
-
it 'create' do
|
78
|
+
it 'should create model' do
|
81
79
|
u = Unit.create(name: 'Zeratul')
|
82
80
|
u.new_record?.should be_false
|
83
81
|
|
@@ -85,16 +83,16 @@ describe "Model CRUD" do
|
|
85
83
|
u.new_record?.should be_false
|
86
84
|
end
|
87
85
|
|
88
|
-
it '
|
86
|
+
it 'should delete all models' do
|
89
87
|
Unit.create(name: 'Zeratul')
|
90
88
|
Unit.count.should == 1
|
91
|
-
Unit.
|
89
|
+
Unit.delete_all
|
92
90
|
Unit.count.should == 0
|
93
91
|
|
94
|
-
Unit.
|
92
|
+
Unit.delete_all!
|
95
93
|
end
|
96
94
|
|
97
|
-
it 'modifiers' do
|
95
|
+
it 'should accept modifiers' do
|
98
96
|
unit = Unit.create! name: 'Zeratul'
|
99
97
|
|
100
98
|
Unit.update({_id: unit._id}, _set: {name: 'Tassadar'})
|
@@ -107,57 +105,57 @@ describe "Model CRUD" do
|
|
107
105
|
end
|
108
106
|
end
|
109
107
|
|
110
|
-
describe 'embedded' do
|
111
|
-
|
112
|
-
|
108
|
+
describe 'embedded model' do
|
109
|
+
it_should_behave_like 'embedded object CRUD'
|
110
|
+
|
111
|
+
before do
|
112
|
+
class Unit
|
113
113
|
inherit Mongo::Model
|
114
|
-
collection :
|
114
|
+
collection :units
|
115
115
|
|
116
|
-
attr_accessor :
|
117
|
-
def == o; [self.class, self.
|
116
|
+
attr_accessor :items
|
117
|
+
def == o; [self.class, self.items] == [o.class, o.items] end
|
118
118
|
|
119
|
-
class
|
119
|
+
class Item
|
120
120
|
inherit Mongo::Model
|
121
121
|
|
122
|
-
attr_accessor :name
|
123
|
-
def == o; [self.class, self.name
|
122
|
+
attr_accessor :name
|
123
|
+
def == o; [self.class, self.name] == [o.class, o.name] end
|
124
124
|
end
|
125
125
|
end
|
126
|
-
end
|
127
|
-
after(:all){remove_constants :Player}
|
128
126
|
|
129
|
-
|
130
|
-
@
|
131
|
-
@
|
132
|
-
|
133
|
-
|
134
|
-
Player::Mission.build(name: 'Backwater Station', stats: {'buildings' => 8, 'units' => 25}),
|
127
|
+
@item_class = Unit::Item
|
128
|
+
@unit = Unit.new
|
129
|
+
@unit.items = [
|
130
|
+
Unit::Item.build(name: 'Psionic blade'),
|
131
|
+
Unit::Item.build(name: 'Plasma shield'),
|
135
132
|
]
|
136
133
|
end
|
134
|
+
after{remove_constants :Unit}
|
137
135
|
|
138
|
-
|
136
|
+
it 'should perform CRUD' do
|
137
|
+
# Create.
|
138
|
+
@unit.save.should be_true
|
139
|
+
@unit._id.should_not be_nil
|
139
140
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
# destroy
|
159
|
-
@player.destroy.should be_true
|
160
|
-
Player.count.should == 0
|
141
|
+
# Read.
|
142
|
+
Unit.count.should == 1
|
143
|
+
unit = Unit.first
|
144
|
+
unit.should == @unit
|
145
|
+
unit.object_id.should_not == @unit.object_id
|
146
|
+
|
147
|
+
# Update.
|
148
|
+
@unit.items.first.name = "Psionic blade level 3"
|
149
|
+
@unit.items << Unit::Item.build(name: 'Power suit')
|
150
|
+
@unit.save.should be_true
|
151
|
+
Unit.count.should == 1
|
152
|
+
unit = Unit.first
|
153
|
+
unit.should == @unit
|
154
|
+
unit.object_id.should_not == @unit.object_id
|
155
|
+
|
156
|
+
# Delete.
|
157
|
+
@unit.delete.should be_true
|
158
|
+
Unit.count.should == 0
|
161
159
|
end
|
162
160
|
end
|
163
161
|
end
|
data/spec/equality_spec.rb
CHANGED
@@ -3,34 +3,44 @@ require 'spec_helper'
|
|
3
3
|
describe 'Model equality' do
|
4
4
|
with_mongo_model
|
5
5
|
|
6
|
-
after{remove_constants :
|
6
|
+
after{remove_constants :Unit, :Tags}
|
7
7
|
|
8
|
-
it "
|
9
|
-
class
|
8
|
+
it "should check for equality based on model attributes" do
|
9
|
+
class Unit
|
10
10
|
inherit Mongo::Model
|
11
11
|
|
12
|
-
attr_accessor :name, :
|
12
|
+
attr_accessor :name, :items
|
13
13
|
|
14
|
-
class
|
14
|
+
class Item
|
15
15
|
inherit Mongo::Model
|
16
16
|
|
17
17
|
attr_accessor :name
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
unit1 = Unit.new name: 'Zeratul'
|
22
|
+
unit1.items = [Unit::Item.new(name: 'Psionic blade')]
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
unit2 = Unit.new name: 'Zeratul'
|
25
|
+
unit2.items = [Unit::Item.new(name: 'Psionic blade')]
|
26
26
|
|
27
|
-
|
27
|
+
unit1.should == unit2
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
unit1.items.first.name = 'Power suit'
|
30
|
+
unit1.should_not == unit2
|
31
31
|
end
|
32
32
|
|
33
|
-
it "should
|
33
|
+
it "should compare with non models (from errors)" do
|
34
|
+
class Unit
|
35
|
+
inherit Mongo::Model
|
36
|
+
end
|
37
|
+
|
38
|
+
unit = Unit.new
|
39
|
+
unit.should_not == 1
|
40
|
+
unit.should_not == nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should correctly compare Array/Hash models (from error)" do
|
34
44
|
class Tags < Array
|
35
45
|
inherit Mongo::Model
|
36
46
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Integration with Validatable" do
|
4
|
+
with_mongo_model
|
5
|
+
|
6
|
+
describe "basics" do
|
7
|
+
before do
|
8
|
+
class Unit
|
9
|
+
inherit Mongo::Model
|
10
|
+
collection :units
|
11
|
+
|
12
|
+
attr_accessor :name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
after{remove_constants :Unit}
|
16
|
+
|
17
|
+
it "should perform basic validation" do
|
18
|
+
class Unit
|
19
|
+
validates_presence_of :name
|
20
|
+
end
|
21
|
+
|
22
|
+
unit = Unit.new
|
23
|
+
unit.should_not be_valid
|
24
|
+
unit.errors.size.should == 1
|
25
|
+
unit.errors.first.first.should == :name
|
26
|
+
unit.save.should be_false
|
27
|
+
|
28
|
+
unit.errors.clear
|
29
|
+
unit.name = 'Zeratul'
|
30
|
+
unit.should be_valid
|
31
|
+
unit.errors.should be_empty
|
32
|
+
unit.save.should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should validate before save" do
|
36
|
+
unit = Unit.new
|
37
|
+
unit.should_receive(:run_validations)
|
38
|
+
unit.save
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not save errors as instance variables" do
|
42
|
+
unit = Unit.new
|
43
|
+
unit.valid?
|
44
|
+
unit.instance_variables.select{|iv_name| iv_name !~ /^@_/}.should be_empty
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "Special validators" do
|
49
|
+
before do
|
50
|
+
class Unit
|
51
|
+
inherit Mongo::Model
|
52
|
+
collection :units
|
53
|
+
|
54
|
+
attr_accessor :name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
after{remove_constants :Unit}
|
58
|
+
|
59
|
+
it 'should validate uniqueness' do
|
60
|
+
class Unit
|
61
|
+
validates_uniqueness_of :name
|
62
|
+
end
|
63
|
+
|
64
|
+
unit = Unit.build name: 'Zeratul'
|
65
|
+
unit.save.should be_true
|
66
|
+
|
67
|
+
unit = Unit.build name: 'Zeratul'
|
68
|
+
unit.save.should be_false
|
69
|
+
unit.errors[:name].first.should =~ /unique/
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should validate uniqueness within scope' do
|
73
|
+
class Unit
|
74
|
+
attr_accessor :account_id
|
75
|
+
|
76
|
+
validates_uniqueness_of :name, scope: :account_id
|
77
|
+
end
|
78
|
+
|
79
|
+
unit = Unit.build name: 'Zeratul', account_id: '10'
|
80
|
+
unit.save.should be_true
|
81
|
+
|
82
|
+
unit = Unit.build name: 'Zeratul', account_id: '10'
|
83
|
+
unit.save.should be_false
|
84
|
+
|
85
|
+
unit = Unit.build name: 'Zeratul', account_id: '20'
|
86
|
+
unit.save.should be_true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
data/spec/misc_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe '
|
3
|
+
describe 'Miscellaneous' do
|
4
4
|
with_mongo_model
|
5
5
|
|
6
6
|
before do
|
@@ -13,7 +13,7 @@ describe 'Model Miscellaneous' do
|
|
13
13
|
end
|
14
14
|
after{remove_constants :Unit3, :User}
|
15
15
|
|
16
|
-
it "timestamps" do
|
16
|
+
it "should create timestamps" do
|
17
17
|
class Unit3
|
18
18
|
inherit Mongo::Model
|
19
19
|
collection :units
|
@@ -36,7 +36,7 @@ describe 'Model Miscellaneous' do
|
|
36
36
|
unit.updated_at.should > updated_at
|
37
37
|
end
|
38
38
|
|
39
|
-
it 'cache' do
|
39
|
+
it 'should have cache' do
|
40
40
|
class Unit3
|
41
41
|
inherit Mongo::Model
|
42
42
|
end
|
@@ -44,21 +44,21 @@ describe 'Model Miscellaneous' do
|
|
44
44
|
u._cache.should == {}
|
45
45
|
end
|
46
46
|
|
47
|
-
it "
|
47
|
+
it "should convert model to param" do
|
48
48
|
u = User.new
|
49
49
|
u.to_param.should be_nil
|
50
50
|
u.save!
|
51
51
|
u.to_param.should_not be_empty
|
52
52
|
end
|
53
53
|
|
54
|
-
it "dom_id" do
|
54
|
+
it "should have dom_id" do
|
55
55
|
u = User.new
|
56
56
|
u.dom_id.should be_nil
|
57
57
|
u.save!
|
58
58
|
u.dom_id.should_not be_empty
|
59
59
|
end
|
60
60
|
|
61
|
-
it 'reload' do
|
61
|
+
it 'should reload model' do
|
62
62
|
u = User.create! name: 'Zeratul'
|
63
63
|
u.name = 'Jim'
|
64
64
|
u.reload
|
data/spec/query_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "
|
3
|
+
describe "Query" do
|
4
4
|
with_mongo_model
|
5
5
|
|
6
6
|
before :all do
|
@@ -13,32 +13,32 @@ describe "Model Query" do
|
|
13
13
|
end
|
14
14
|
after(:all){remove_constants :Unit, :SpecialUnit}
|
15
15
|
|
16
|
-
before{@
|
16
|
+
before{@unit = Unit.build name: 'Zeratul'}
|
17
17
|
|
18
|
-
it '
|
18
|
+
it 'should check existence' do
|
19
19
|
Unit.should_not exist(name: 'Zeratul')
|
20
|
-
@
|
20
|
+
@unit.save!
|
21
21
|
Unit.should exist(name: 'Zeratul')
|
22
22
|
end
|
23
23
|
|
24
|
-
it 'first
|
24
|
+
it 'should return first model (also with bang version)' do
|
25
25
|
Unit.first.should be_nil
|
26
26
|
-> {Unit.first!}.should raise_error(Mongo::NotFound)
|
27
|
-
@
|
27
|
+
@unit.save
|
28
28
|
Unit.first.should_not be_nil
|
29
29
|
Unit.first!.should_not be_nil
|
30
30
|
end
|
31
31
|
|
32
|
-
it 'all
|
32
|
+
it 'should return all and iterate over each models' do
|
33
33
|
list = []; Unit.each{|o| list << o}
|
34
34
|
list.size.should == 0
|
35
35
|
|
36
|
-
@
|
36
|
+
@unit.save
|
37
37
|
list = []; Unit.each{|o| list << o}
|
38
38
|
list.size.should == 1
|
39
39
|
end
|
40
40
|
|
41
|
-
it 'dynamic finders
|
41
|
+
it 'should have dynamic finders' do
|
42
42
|
Unit.first_by_name('Zeratul').should be_nil
|
43
43
|
u = Unit.build(name: 'Zeratul')
|
44
44
|
u.save!
|
@@ -46,7 +46,7 @@ describe "Model Query" do
|
|
46
46
|
Unit.by_id!(u._id).name.should == 'Zeratul'
|
47
47
|
end
|
48
48
|
|
49
|
-
it 'build, create
|
49
|
+
it 'should be integrated with build, create and create!' do
|
50
50
|
class SpecialUnit < Unit
|
51
51
|
attr_accessor :age
|
52
52
|
end
|
@@ -54,27 +54,18 @@ describe "Model Query" do
|
|
54
54
|
u = SpecialUnit.query(name: 'Zeratul').build age: 500
|
55
55
|
[u.name, u.age].should == ['Zeratul', 500]
|
56
56
|
|
57
|
-
SpecialUnit.
|
57
|
+
SpecialUnit.delete_all
|
58
58
|
SpecialUnit.query(name: 'Zeratul').create age: 500
|
59
59
|
u = SpecialUnit.first
|
60
60
|
[u.name, u.age].should == ['Zeratul', 500]
|
61
61
|
|
62
|
-
SpecialUnit.
|
62
|
+
SpecialUnit.delete_all
|
63
63
|
SpecialUnit.query(name: 'Zeratul').create! age: 500
|
64
64
|
u = SpecialUnit.first
|
65
65
|
[u.name, u.age].should == ['Zeratul', 500]
|
66
66
|
end
|
67
67
|
|
68
|
-
it
|
69
|
-
u = Unit.new
|
70
|
-
u.exist?.should be_false
|
71
|
-
u.save!
|
72
|
-
u.exist?.should be_true
|
73
|
-
u.destroy!
|
74
|
-
u.exist?.should be_false
|
75
|
-
end
|
76
|
-
|
77
|
-
it "build should assign protected attributes" do
|
68
|
+
it "should not allow to mass-assign protected attributes" do
|
78
69
|
class SpecialUnit < Unit
|
79
70
|
attr_accessor :age, :status
|
80
71
|
assign do
|
@@ -88,9 +79,7 @@ describe "Model Query" do
|
|
88
79
|
u.status.should == 'active'
|
89
80
|
end
|
90
81
|
|
91
|
-
it "where" do
|
92
|
-
# Unit.where(name: 'Zeratul').should == Mongo::Model::Query.new(Unit, {name: 'Zeratul'}, {})
|
93
|
-
|
82
|
+
it "should support where clause" do
|
94
83
|
query = Unit.where(name: 'Zeratul')
|
95
84
|
query = query.where(race: 'Protoss')
|
96
85
|
query.should == Mongo::Model::Query.new(Unit, {name: 'Zeratul', race: 'Protoss'}, {})
|
data/spec/scope_spec.rb
CHANGED
@@ -45,7 +45,7 @@ describe "Scope" do
|
|
45
45
|
Unit.current_scope.should be_nil
|
46
46
|
end
|
47
47
|
|
48
|
-
it "
|
48
|
+
it "should allow to define default scope" do
|
49
49
|
Unit.default_scope status: 'alive'
|
50
50
|
|
51
51
|
Unit.current_scope.should == Unit.query(status: 'alive')
|
@@ -56,7 +56,7 @@ describe "Scope" do
|
|
56
56
|
Unit.current_scope.should == Unit.query(status: 'alive')
|
57
57
|
end
|
58
58
|
|
59
|
-
it "should
|
59
|
+
it "should inherit default scope" do
|
60
60
|
Unit.default_scope status: 'alive'
|
61
61
|
|
62
62
|
class Protoss < Unit; end
|
@@ -69,7 +69,7 @@ describe "Scope" do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
describe 'scope' do
|
72
|
-
it "
|
72
|
+
it "should allow to define scope" do
|
73
73
|
Unit.scope :alive, status: 'alive'
|
74
74
|
Unit.alive.current_scope.should == Unit.query(status: 'alive')
|
75
75
|
|
@@ -101,7 +101,7 @@ describe "Scope" do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
describe '
|
104
|
+
describe 'querying with scope' do
|
105
105
|
it "shouldn't allow to nest exclusive scope" do
|
106
106
|
-> {
|
107
107
|
Unit.with_exclusive_scope do
|
@@ -116,7 +116,7 @@ describe "Scope" do
|
|
116
116
|
}.should raise_error(/exclusive scope already applied/)
|
117
117
|
end
|
118
118
|
|
119
|
-
it "
|
119
|
+
it "should clear other scopes when exclusive scope used" do
|
120
120
|
Unit.default_scope status: 'alive'
|
121
121
|
|
122
122
|
Unit.with_scope race: 'Protoss' do
|
@@ -132,13 +132,13 @@ describe "Scope" do
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
it "
|
135
|
+
it "should access current scope" do
|
136
136
|
Unit.with_scope status: 'alive' do
|
137
137
|
Unit.current_scope.should == Unit.query(status: 'alive')
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
-
it "should merge
|
141
|
+
it "should merge scopes" do
|
142
142
|
Unit.default_scope status: 'alive'
|
143
143
|
Unit.with_scope race: 'Protoss' do
|
144
144
|
Unit.with_scope name: 'Zeratul' do
|
@@ -149,13 +149,13 @@ describe "Scope" do
|
|
149
149
|
end
|
150
150
|
|
151
151
|
describe 'handy scopes' do
|
152
|
-
it "limit, skip
|
152
|
+
it "should provide limit, skip and sort scopes" do
|
153
153
|
query = Unit.skip(30).limit(10).sort([:name, 1]).snapshot
|
154
154
|
query.selector.should == {}
|
155
155
|
query.options.should == {skip: 30, limit: 10, sort: [[:name, 1]], snapshot: true}
|
156
156
|
end
|
157
157
|
|
158
|
-
it "
|
158
|
+
it "should understand simplified form of sort scope" do
|
159
159
|
query = Unit.sort(:name)
|
160
160
|
query.options.should == {sort: [[:name, 1]]}
|
161
161
|
|
@@ -163,7 +163,7 @@ describe "Scope" do
|
|
163
163
|
query.options.should == {sort: [[:race, 1], [:name, 1]]}
|
164
164
|
end
|
165
165
|
|
166
|
-
it 'paginate' do
|
166
|
+
it 'should provide paginate' do
|
167
167
|
query = Unit.paginate(4, 10)
|
168
168
|
query.selector.should == {}
|
169
169
|
query.options.should == {skip: 30, limit: 10}
|
data/spec/spec_helper.rb
CHANGED
@@ -3,11 +3,27 @@ require 'mongo/model'
|
|
3
3
|
require 'rspec_ext'
|
4
4
|
require 'mongo/model/spec'
|
5
5
|
|
6
|
-
#
|
7
|
-
# Handy spec helpers
|
8
|
-
#
|
6
|
+
# Shortcuts.
|
9
7
|
rspec do
|
10
8
|
def db
|
11
9
|
mongo.db
|
12
10
|
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Helper to simplify callback expectations.
|
14
|
+
module RSpec::CallbackHelper
|
15
|
+
def run_before_callbacks name, method, options = {}
|
16
|
+
$_dont_watch_callbacks ? true : send(:"before_#{name}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def run_after_callbacks name, method, options = {}
|
20
|
+
$_dont_watch_callbacks ? true : send(:"after_#{name}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def dont_watch_callbacks &block
|
24
|
+
$_dont_watch_callbacks = true
|
25
|
+
block.call
|
26
|
+
ensure
|
27
|
+
$_dont_watch_callbacks = false
|
28
|
+
end
|
13
29
|
end
|