mongoid 1.0.6 → 1.1.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/HISTORY +39 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/mongoid.rb +3 -1
- data/lib/mongoid/associations.rb +5 -5
- data/lib/mongoid/associations/has_many.rb +8 -2
- data/lib/mongoid/associations/has_many_related.rb +10 -4
- data/lib/mongoid/attributes.rb +19 -13
- data/lib/mongoid/commands.rb +12 -6
- data/lib/mongoid/commands/create.rb +2 -2
- data/lib/mongoid/commands/delete_all.rb +1 -1
- data/lib/mongoid/commands/save.rb +2 -2
- data/lib/mongoid/components.rb +1 -0
- data/lib/mongoid/contexts.rb +4 -0
- data/lib/mongoid/contexts/enumerable.rb +105 -0
- data/lib/mongoid/contexts/mongo.rb +228 -0
- data/lib/mongoid/contexts/paging.rb +42 -0
- data/lib/mongoid/criteria.rb +42 -191
- data/lib/mongoid/document.rb +19 -13
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/extensions/array/accessors.rb +3 -1
- data/lib/mongoid/extensions/float/conversions.rb +1 -1
- data/lib/mongoid/extensions/hash/accessors.rb +1 -1
- data/lib/mongoid/extensions/integer/conversions.rb +1 -0
- data/lib/mongoid/fields.rb +6 -5
- data/lib/mongoid/matchers.rb +36 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +20 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/lib/mongoid/scope.rb +17 -1
- data/mongoid.gemspec +51 -5
- data/spec/integration/mongoid/associations_spec.rb +67 -5
- data/spec/integration/mongoid/attributes_spec.rb +22 -0
- data/spec/integration/mongoid/commands_spec.rb +51 -12
- data/spec/integration/mongoid/criteria_spec.rb +3 -3
- data/spec/integration/mongoid/document_spec.rb +8 -8
- data/spec/integration/mongoid/finders_spec.rb +1 -1
- data/spec/integration/mongoid/inheritance_spec.rb +6 -0
- data/spec/integration/mongoid/named_scope_spec.rb +1 -1
- data/spec/spec_helper.rb +47 -6
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +42 -0
- data/spec/unit/mongoid/associations/has_many_spec.rb +40 -1
- data/spec/unit/mongoid/attributes_spec.rb +1 -1
- data/spec/unit/mongoid/commands/create_spec.rb +3 -3
- data/spec/unit/mongoid/commands/delete_all_spec.rb +2 -2
- data/spec/unit/mongoid/commands/save_spec.rb +2 -2
- data/spec/unit/mongoid/commands_spec.rb +12 -12
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +208 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +370 -0
- data/spec/unit/mongoid/criteria_spec.rb +182 -21
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +9 -9
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +2 -1
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +4 -4
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +1 -1
- data/spec/unit/mongoid/fields_spec.rb +3 -3
- data/spec/unit/mongoid/identity_spec.rb +2 -2
- data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
- data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
- data/spec/unit/mongoid/matchers_spec.rb +329 -0
- data/spec/unit/mongoid/scope_spec.rb +70 -0
- data/spec/unit/mongoid/timestamps_spec.rb +2 -2
- metadata +50 -4
@@ -0,0 +1,56 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Exists do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when checking for existence" do
|
8
|
+
|
9
|
+
context "when the value exists" do
|
10
|
+
|
11
|
+
let(:matcher) { Mongoid::Matchers::Exists.new("Test") }
|
12
|
+
|
13
|
+
it "returns true" do
|
14
|
+
matcher.matches?("$exists" => true).should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when the value does not exist" do
|
20
|
+
|
21
|
+
let(:matcher) { Mongoid::Matchers::Exists.new(nil) }
|
22
|
+
|
23
|
+
it "returns false" do
|
24
|
+
matcher.matches?("$exists" => true).should be_false
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
context "when checking for nonexistence" do
|
32
|
+
|
33
|
+
context "when the value exists" do
|
34
|
+
|
35
|
+
let(:matcher) { Mongoid::Matchers::Exists.new("Test") }
|
36
|
+
|
37
|
+
it "returns false" do
|
38
|
+
matcher.matches?("$exists" => false).should be_false
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when the value does not exist" do
|
44
|
+
|
45
|
+
let(:matcher) { Mongoid::Matchers::Exists.new(nil) }
|
46
|
+
|
47
|
+
it "returns true" do
|
48
|
+
matcher.matches?("$exists" => false).should be_true
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Gt do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when the value is larger" do
|
8
|
+
|
9
|
+
let(:matcher) { Mongoid::Matchers::Gt.new(5) }
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$gte" => 3).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the value is smaller" do
|
18
|
+
|
19
|
+
let(:matcher) { Mongoid::Matchers::Gt.new(5) }
|
20
|
+
|
21
|
+
it "returns false" do
|
22
|
+
matcher.matches?("$gte" => 10).should be_false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the value is nil" do
|
28
|
+
|
29
|
+
let(:matcher) { Mongoid::Matchers::Gt.new(nil) }
|
30
|
+
|
31
|
+
it "returns false" do
|
32
|
+
matcher.matches?("$gte" => 5).should be_false
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Gte do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when the value is larger" do
|
8
|
+
|
9
|
+
let(:matcher) { Mongoid::Matchers::Gte.new(5) }
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$gte" => 3).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the value is smaller" do
|
18
|
+
|
19
|
+
let(:matcher) { Mongoid::Matchers::Gte.new(5) }
|
20
|
+
|
21
|
+
it "returns false" do
|
22
|
+
matcher.matches?("$gte" => 10).should be_false
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the value is equal" do
|
28
|
+
|
29
|
+
let(:matcher) { Mongoid::Matchers::Gte.new(5) }
|
30
|
+
|
31
|
+
it "returns true" do
|
32
|
+
matcher.matches?("$gte" => 5).should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when the value is nil" do
|
38
|
+
|
39
|
+
let(:matcher) { Mongoid::Matchers::Gte.new(nil) }
|
40
|
+
|
41
|
+
it "returns false" do
|
42
|
+
matcher.matches?("$gte" => 5).should be_false
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::In do
|
4
|
+
|
5
|
+
let(:matcher) { Mongoid::Matchers::In.new("first") }
|
6
|
+
|
7
|
+
describe "#matches?" do
|
8
|
+
|
9
|
+
context "when the values includes the attribute" do
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$in" => ["first", "second"]).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the values dont include the atribute" do
|
18
|
+
|
19
|
+
it "returns false" do
|
20
|
+
matcher.matches?("$in" => ["third"]).should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Lt do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when the value is larger" do
|
8
|
+
|
9
|
+
let(:matcher) { Mongoid::Matchers::Lt.new(5) }
|
10
|
+
|
11
|
+
it "returns false" do
|
12
|
+
matcher.matches?("$lt" => 3).should be_false
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the value is smaller" do
|
18
|
+
|
19
|
+
let(:matcher) { Mongoid::Matchers::Lt.new(5) }
|
20
|
+
|
21
|
+
it "returns true" do
|
22
|
+
matcher.matches?("$lt" => 10).should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the value is nil" do
|
28
|
+
|
29
|
+
let(:matcher) { Mongoid::Matchers::Lt.new(nil) }
|
30
|
+
|
31
|
+
it "returns false" do
|
32
|
+
matcher.matches?("$lt" => 5).should be_false
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Lte do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when the value is larger" do
|
8
|
+
|
9
|
+
let(:matcher) { Mongoid::Matchers::Lte.new(5) }
|
10
|
+
|
11
|
+
it "returns false" do
|
12
|
+
matcher.matches?("$lte" => 3).should be_false
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the value is smaller" do
|
18
|
+
|
19
|
+
let(:matcher) { Mongoid::Matchers::Lte.new(5) }
|
20
|
+
|
21
|
+
it "returns true" do
|
22
|
+
matcher.matches?("$lte" => 10).should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when the value is equal" do
|
28
|
+
|
29
|
+
let(:matcher) { Mongoid::Matchers::Lte.new(5) }
|
30
|
+
|
31
|
+
it "returns true" do
|
32
|
+
matcher.matches?("$lte" => 5).should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when the value is nil" do
|
38
|
+
|
39
|
+
let(:matcher) { Mongoid::Matchers::Lte.new(nil) }
|
40
|
+
|
41
|
+
it "returns false" do
|
42
|
+
matcher.matches?("$lte" => 5).should be_false
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Ne do
|
4
|
+
|
5
|
+
let(:matcher) { Mongoid::Matchers::Ne.new("first") }
|
6
|
+
|
7
|
+
describe "#matches?" do
|
8
|
+
|
9
|
+
context "when the values are not equal" do
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$ne" => "second").should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the values are equal" do
|
18
|
+
|
19
|
+
it "returns false" do
|
20
|
+
matcher.matches?("$ne" => "first").should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Nin do
|
4
|
+
|
5
|
+
let(:matcher) { Mongoid::Matchers::Nin.new("first") }
|
6
|
+
|
7
|
+
describe "#matches?" do
|
8
|
+
|
9
|
+
context "when the values do not contain the attribute" do
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$nin" => ["second", "third"]).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the values contain the attribute" do
|
18
|
+
|
19
|
+
it "returns false" do
|
20
|
+
matcher.matches?("$nin" => ["first"]).should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers::Size do
|
4
|
+
|
5
|
+
let(:matcher) { Mongoid::Matchers::Size.new(["first", "second"]) }
|
6
|
+
|
7
|
+
describe "#matches?" do
|
8
|
+
|
9
|
+
context "when the attribute is the same size" do
|
10
|
+
|
11
|
+
it "returns true" do
|
12
|
+
matcher.matches?("$size" => 2).should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when the attribute is not the same size" do
|
18
|
+
|
19
|
+
it "returns false" do
|
20
|
+
matcher.matches?("$size" => 5).should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,329 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Matchers do
|
4
|
+
|
5
|
+
describe "#matches?" do
|
6
|
+
|
7
|
+
context "when performing simple matching" do
|
8
|
+
|
9
|
+
before do
|
10
|
+
@document = Address.new(:street => "Clarkenwell Road")
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when the attributes match" do
|
14
|
+
|
15
|
+
before do
|
16
|
+
@selector = { :street => "Clarkenwell Road" }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns true" do
|
20
|
+
@document.matches?(@selector).should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when the attributes dont match" do
|
26
|
+
|
27
|
+
before do
|
28
|
+
@selector = { :street => "Broadway Ave" }
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns false" do
|
32
|
+
@document.matches?(@selector).should be_false
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when performing complex matching" do
|
40
|
+
|
41
|
+
before do
|
42
|
+
@document = Address.new(:services => ["first", "second"], :number => 100)
|
43
|
+
end
|
44
|
+
|
45
|
+
context "with an $all selector" do
|
46
|
+
|
47
|
+
context "when the attributes match" do
|
48
|
+
|
49
|
+
before do
|
50
|
+
@selector = { :services => { "$all" => [ "first", "second" ] } }
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns true" do
|
54
|
+
@document.matches?(@selector).should be_true
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when the attributes do not match" do
|
60
|
+
|
61
|
+
before do
|
62
|
+
@selector = { :services => { "$all" => [ "first" ] } }
|
63
|
+
end
|
64
|
+
|
65
|
+
it "returns false" do
|
66
|
+
@document.matches?(@selector).should be_false
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
context "with an $exists selector" do
|
74
|
+
|
75
|
+
context "when the attributes match" do
|
76
|
+
|
77
|
+
before do
|
78
|
+
@selector = { :services => { "$exists" => true } }
|
79
|
+
end
|
80
|
+
|
81
|
+
it "returns true" do
|
82
|
+
@document.matches?(@selector).should be_true
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
context "when the attributes do not match" do
|
88
|
+
|
89
|
+
before do
|
90
|
+
@selector = { :services => { "$exists" => false } }
|
91
|
+
end
|
92
|
+
|
93
|
+
it "returns false" do
|
94
|
+
@document.matches?(@selector).should be_false
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
context "with a $gt selector" do
|
102
|
+
|
103
|
+
context "when the attributes match" do
|
104
|
+
|
105
|
+
before do
|
106
|
+
@selector = { :number => { "$gt" => 50 } }
|
107
|
+
end
|
108
|
+
|
109
|
+
it "returns true" do
|
110
|
+
@document.matches?(@selector).should be_true
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
context "when the attributes do not match" do
|
116
|
+
|
117
|
+
before do
|
118
|
+
@selector = { :number => { "$gt" => 200 } }
|
119
|
+
end
|
120
|
+
|
121
|
+
it "returns false" do
|
122
|
+
@document.matches?(@selector).should be_false
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
context "with a $gte selector" do
|
130
|
+
|
131
|
+
context "when the attributes match" do
|
132
|
+
|
133
|
+
before do
|
134
|
+
@selector = { :number => { "$gte" => 100 } }
|
135
|
+
end
|
136
|
+
|
137
|
+
it "returns true" do
|
138
|
+
@document.matches?(@selector).should be_true
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
context "when the attributes do not match" do
|
144
|
+
|
145
|
+
before do
|
146
|
+
@selector = { :number => { "$gte" => 200 } }
|
147
|
+
end
|
148
|
+
|
149
|
+
it "returns false" do
|
150
|
+
@document.matches?(@selector).should be_false
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
157
|
+
context "with an $in selector" do
|
158
|
+
|
159
|
+
context "when the attributes match" do
|
160
|
+
|
161
|
+
before do
|
162
|
+
@selector = { :number => { "$in" => [ 100, 200 ] } }
|
163
|
+
end
|
164
|
+
|
165
|
+
it "returns true" do
|
166
|
+
@document.matches?(@selector).should be_true
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when the attributes do not match" do
|
172
|
+
|
173
|
+
before do
|
174
|
+
@selector = { :number => { "$in" => [ 200, 300 ] } }
|
175
|
+
end
|
176
|
+
|
177
|
+
it "returns false" do
|
178
|
+
@document.matches?(@selector).should be_false
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
context "with a $lt selector" do
|
186
|
+
|
187
|
+
context "when the attributes match" do
|
188
|
+
|
189
|
+
before do
|
190
|
+
@selector = { :number => { "$lt" => 200 } }
|
191
|
+
end
|
192
|
+
|
193
|
+
it "returns true" do
|
194
|
+
@document.matches?(@selector).should be_true
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|
198
|
+
|
199
|
+
context "when the attributes do not match" do
|
200
|
+
|
201
|
+
before do
|
202
|
+
@selector = { :number => { "$lt" => 50 } }
|
203
|
+
end
|
204
|
+
|
205
|
+
it "returns false" do
|
206
|
+
@document.matches?(@selector).should be_false
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
context "with a $lte selector" do
|
214
|
+
|
215
|
+
context "when the attributes match" do
|
216
|
+
|
217
|
+
before do
|
218
|
+
@selector = { :number => { "$lte" => 200 } }
|
219
|
+
end
|
220
|
+
|
221
|
+
it "returns true" do
|
222
|
+
@document.matches?(@selector).should be_true
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
227
|
+
context "when the attributes do not match" do
|
228
|
+
|
229
|
+
before do
|
230
|
+
@selector = { :number => { "$lte" => 50 } }
|
231
|
+
end
|
232
|
+
|
233
|
+
it "returns false" do
|
234
|
+
@document.matches?(@selector).should be_false
|
235
|
+
end
|
236
|
+
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
240
|
+
|
241
|
+
context "with an $ne selector" do
|
242
|
+
|
243
|
+
context "when the attributes match" do
|
244
|
+
|
245
|
+
before do
|
246
|
+
@selector = { :number => { "$ne" => 200 } }
|
247
|
+
end
|
248
|
+
|
249
|
+
it "returns true" do
|
250
|
+
@document.matches?(@selector).should be_true
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
|
255
|
+
context "when the attributes do not match" do
|
256
|
+
|
257
|
+
before do
|
258
|
+
@selector = { :number => { "$ne" => 100 } }
|
259
|
+
end
|
260
|
+
|
261
|
+
it "returns false" do
|
262
|
+
@document.matches?(@selector).should be_false
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
268
|
+
|
269
|
+
context "with a $nin selector" do
|
270
|
+
|
271
|
+
context "when the attributes match" do
|
272
|
+
|
273
|
+
before do
|
274
|
+
@selector = { :number => { "$nin" => [ 1, 2, 3 ] } }
|
275
|
+
end
|
276
|
+
|
277
|
+
it "returns true" do
|
278
|
+
@document.matches?(@selector).should be_true
|
279
|
+
end
|
280
|
+
|
281
|
+
end
|
282
|
+
|
283
|
+
context "when the attributes do not match" do
|
284
|
+
|
285
|
+
before do
|
286
|
+
@selector = { :number => { "$nin" => [ 100 ] } }
|
287
|
+
end
|
288
|
+
|
289
|
+
it "returns false" do
|
290
|
+
@document.matches?(@selector).should be_false
|
291
|
+
end
|
292
|
+
|
293
|
+
end
|
294
|
+
|
295
|
+
end
|
296
|
+
|
297
|
+
context "with a $size selector" do
|
298
|
+
|
299
|
+
context "when the attributes match" do
|
300
|
+
|
301
|
+
before do
|
302
|
+
@selector = { :services => { "$size" => 2 } }
|
303
|
+
end
|
304
|
+
|
305
|
+
it "returns true" do
|
306
|
+
@document.matches?(@selector).should be_true
|
307
|
+
end
|
308
|
+
|
309
|
+
end
|
310
|
+
|
311
|
+
context "when the attributes do not match" do
|
312
|
+
|
313
|
+
before do
|
314
|
+
@selector = { :services => { "$size" => 5 } }
|
315
|
+
end
|
316
|
+
|
317
|
+
it "returns false" do
|
318
|
+
@document.matches?(@selector).should be_false
|
319
|
+
end
|
320
|
+
|
321
|
+
end
|
322
|
+
|
323
|
+
end
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
end
|
328
|
+
|
329
|
+
end
|