mongoid 0.11.0 → 0.11.1
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/VERSION +1 -1
- data/lib/mongoid/attributes.rb +3 -0
- data/lib/mongoid/config.rb +2 -1
- data/lib/mongoid/criteria.rb +1 -1
- data/lib/mongoid/document.rb +8 -1
- data/mongoid.gemspec +2 -2
- data/spec/integration/mongoid/inheritance_spec.rb +9 -1
- data/spec/unit/mongoid/attributes_spec.rb +61 -1
- data/spec/unit/mongoid/config_spec.rb +29 -1
- data/spec/unit/mongoid/criteria_spec.rb +37 -37
- data/spec/unit/mongoid/document_spec.rb +19 -0
- data/spec/unit/mongoid/finders_spec.rb +1 -1
- metadata +2 -2
data/HISTORY
CHANGED
@@ -1,3 +1,42 @@
|
|
1
|
+
=== 0.11.1
|
2
|
+
- Querying for classes that have subclasses will also
|
3
|
+
return the subclasses as well, similar to
|
4
|
+
ActiveRecord.
|
5
|
+
|
6
|
+
- Adding configuration option allow_dynamic_fields. This
|
7
|
+
defaults to true and if set to false will raise an
|
8
|
+
error when trying to set an attribute on an object
|
9
|
+
that does not have a corresponding field defined.
|
10
|
+
|
11
|
+
=== 0.11.0
|
12
|
+
- Set the collection name to store a document in via:
|
13
|
+
Document.store_in :collection_name
|
14
|
+
|
15
|
+
- Initial inheritance support:
|
16
|
+
|
17
|
+
- Documents and their associations can now have an
|
18
|
+
infinite number of subclasses.
|
19
|
+
|
20
|
+
- Has many and has one associations can build or
|
21
|
+
create specific subclasses by providing an optional
|
22
|
+
class as the last parameter to the #create and
|
23
|
+
#build methods on the respective associations.
|
24
|
+
|
25
|
+
- Querying for specific subclasses will only return
|
26
|
+
those documents which were saved as that subclass,
|
27
|
+
even though the hierarchy is stored in the same
|
28
|
+
collection.
|
29
|
+
|
30
|
+
- Deletion of subclass documents will only delete
|
31
|
+
documents of that type, even though they all exist
|
32
|
+
in the same collection. #delete_all and #destroy_all
|
33
|
+
also support this behavoir.
|
34
|
+
|
35
|
+
- Updated mongo and mongo_ext dependencies to 0.18.2
|
36
|
+
|
37
|
+
- Fixed save on new documents to return true instead
|
38
|
+
of the document itself.
|
39
|
+
|
1
40
|
=== 0.10.6
|
2
41
|
- Fixed bug when trying to set empty strings on number
|
3
42
|
fields. (TypeError: can't convert Fixnum into String)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.11.
|
1
|
+
0.11.1
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -14,6 +14,9 @@ module Mongoid #:nodoc:
|
|
14
14
|
# put into the document's attributes.
|
15
15
|
def process(attrs = {})
|
16
16
|
attrs.each_pair do |key, value|
|
17
|
+
unless respond_to?(key)
|
18
|
+
self.class.field key, :type => value.class if Mongoid.allow_dynamic_fields
|
19
|
+
end
|
17
20
|
send("#{key}=", value) unless value.blank?
|
18
21
|
end
|
19
22
|
end
|
data/lib/mongoid/config.rb
CHANGED
@@ -3,10 +3,11 @@ module Mongoid #:nodoc
|
|
3
3
|
class Config #:nodoc
|
4
4
|
include Singleton
|
5
5
|
|
6
|
-
attr_accessor :raise_not_found_error
|
6
|
+
attr_accessor :raise_not_found_error, :allow_dynamic_fields
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@raise_not_found_error = true
|
10
|
+
@allow_dynamic_fields = true
|
10
11
|
end
|
11
12
|
|
12
13
|
# Sets the Mongo::DB to be used.
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -214,7 +214,7 @@ module Mongoid #:nodoc:
|
|
214
214
|
# type: One of :all, :first:, or :last
|
215
215
|
# klass: The class to execute on.
|
216
216
|
def initialize(klass)
|
217
|
-
@selector, @options, @klass = { :_type => klass.
|
217
|
+
@selector, @options, @klass = { :_type => { "$in" => klass._types } }, {}, klass
|
218
218
|
end
|
219
219
|
|
220
220
|
# Return the last result for the +Criteria+. Essentially does a find_one on
|
data/lib/mongoid/document.rb
CHANGED
@@ -32,6 +32,8 @@ module Mongoid #:nodoc:
|
|
32
32
|
# Define all the callbacks that are accepted by the document.
|
33
33
|
define_callbacks :before_create, :before_destroy, :before_save, :before_update, :before_validation
|
34
34
|
define_callbacks :after_create, :after_destroy, :after_save, :after_update, :after_validation
|
35
|
+
|
36
|
+
index :_type
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -106,6 +108,11 @@ module Mongoid #:nodoc:
|
|
106
108
|
self.collection_name = name.to_s
|
107
109
|
end
|
108
110
|
|
111
|
+
# Returns all types to query for when using this class as the base.
|
112
|
+
def _types
|
113
|
+
@_type ||= (self.subclasses + [ self.name ])
|
114
|
+
end
|
115
|
+
|
109
116
|
protected
|
110
117
|
|
111
118
|
# Define a field attribute for the +Document+.
|
@@ -328,7 +335,7 @@ module Mongoid #:nodoc:
|
|
328
335
|
end
|
329
336
|
|
330
337
|
def generate_type
|
331
|
-
@attributes[:_type]
|
338
|
+
@attributes[:_type] ||= self.class.name
|
332
339
|
end
|
333
340
|
|
334
341
|
# Convenience method to get the document's class
|
data/mongoid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid}
|
8
|
-
s.version = "0.11.
|
8
|
+
s.version = "0.11.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Durran Jordan"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-03}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.textile"
|
@@ -36,6 +36,14 @@ describe Mongoid::Document do
|
|
36
36
|
attributes["_id"].should == @firefox.id
|
37
37
|
end
|
38
38
|
|
39
|
+
it "returns the document when querying for superclass" do
|
40
|
+
Browser.where(:name => "Testy").first.should == @firefox
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns the document when querying for root class" do
|
44
|
+
Canvas.where(:name => "Testy").first.should == @firefox
|
45
|
+
end
|
46
|
+
|
39
47
|
end
|
40
48
|
|
41
49
|
context "when document has associations" do
|
@@ -97,7 +105,7 @@ describe Mongoid::Document do
|
|
97
105
|
@firefox.delete
|
98
106
|
Firefox.count.should == 0
|
99
107
|
Browser.count.should == 1
|
100
|
-
Canvas.count.should ==
|
108
|
+
Canvas.count.should == 2
|
101
109
|
end
|
102
110
|
|
103
111
|
end
|
@@ -91,6 +91,66 @@ describe Mongoid::Attributes do
|
|
91
91
|
|
92
92
|
describe "#process" do
|
93
93
|
|
94
|
+
context "when attributes dont have fields defined" do
|
95
|
+
|
96
|
+
before do
|
97
|
+
@attributes = {
|
98
|
+
:nofieldstring => "Testing",
|
99
|
+
:nofieldint => 5
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
context "when allowing dynamic fields" do
|
104
|
+
|
105
|
+
before do
|
106
|
+
@person = Person.new(@attributes)
|
107
|
+
end
|
108
|
+
|
109
|
+
context "when attribute is a string" do
|
110
|
+
|
111
|
+
it "adds a string field" do
|
112
|
+
@person.nofieldstring.should == "Testing"
|
113
|
+
@person.nofieldstring = "Test"
|
114
|
+
@person.nofieldstring.should == "Test"
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
context "when attribute is not a string" do
|
121
|
+
|
122
|
+
it "adds a properly typed field" do
|
123
|
+
@person.nofieldint.should == 5
|
124
|
+
@person.nofieldint = 50
|
125
|
+
@person.nofieldint.should == 50
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when not allowing dynamic fields" do
|
133
|
+
|
134
|
+
before do
|
135
|
+
Mongoid.allow_dynamic_fields = false
|
136
|
+
Person.fields.delete(:nofieldstring)
|
137
|
+
@attributes = {
|
138
|
+
:nofieldstring => "Testing"
|
139
|
+
}
|
140
|
+
end
|
141
|
+
|
142
|
+
after do
|
143
|
+
Mongoid.allow_dynamic_fields = true
|
144
|
+
end
|
145
|
+
|
146
|
+
it "raises an error" do
|
147
|
+
lambda { Person.new(@attributes) }.should raise_error
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
94
154
|
context "when supplied hash has values" do
|
95
155
|
|
96
156
|
before do
|
@@ -157,7 +217,7 @@ describe Mongoid::Attributes do
|
|
157
217
|
|
158
218
|
before do
|
159
219
|
@employer = Employer.new
|
160
|
-
@attributes = { :
|
220
|
+
@attributes = { :employer_id => @employer.id, :title => "Sir" }
|
161
221
|
@person = Person.new(@attributes)
|
162
222
|
end
|
163
223
|
|
@@ -20,7 +20,7 @@ describe Mongoid::Config do
|
|
20
20
|
|
21
21
|
end
|
22
22
|
|
23
|
-
describe "
|
23
|
+
describe "#raise_not_found_error=" do
|
24
24
|
|
25
25
|
context "when setting to true" do
|
26
26
|
|
@@ -48,4 +48,32 @@ describe Mongoid::Config do
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
+
describe "#allow_dynamic_fields=" do
|
52
|
+
|
53
|
+
context "when setting to true" do
|
54
|
+
|
55
|
+
before do
|
56
|
+
config.allow_dynamic_fields = true
|
57
|
+
end
|
58
|
+
|
59
|
+
it "sets the value" do
|
60
|
+
config.allow_dynamic_fields.should == true
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when setting to false" do
|
66
|
+
|
67
|
+
before do
|
68
|
+
config.allow_dynamic_fields = false
|
69
|
+
end
|
70
|
+
|
71
|
+
it "sets the value" do
|
72
|
+
config.allow_dynamic_fields.should == false
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
51
79
|
end
|
@@ -19,7 +19,7 @@ describe Mongoid::Criteria do
|
|
19
19
|
|
20
20
|
before do
|
21
21
|
Person.expects(:collection).returns(@collection)
|
22
|
-
@collection.expects(:find).with({ :title => "Sir", :_type => "Person" }, {}).returns(@cursor)
|
22
|
+
@collection.expects(:find).with({ :title => "Sir", :_type => { "$in" => ["Doctor", "Person"] } }, {}).returns(@cursor)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "executes the criteria and returns the element at the index" do
|
@@ -42,7 +42,7 @@ describe Mongoid::Criteria do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "calls group on the collection with the aggregate js" do
|
45
|
-
@collection.expects(:group).with([:field1], {:_type => "Person"}, {:count => 0}, @reduce)
|
45
|
+
@collection.expects(:group).with([:field1], {:_type => { "$in" => ["Doctor", "Person"] }}, {:count => 0}, @reduce)
|
46
46
|
@criteria.only(:field1).aggregate
|
47
47
|
end
|
48
48
|
|
@@ -57,7 +57,7 @@ describe Mongoid::Criteria do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "calls group on the collection with the aggregate js" do
|
60
|
-
@collection.expects(:group).with([:field1], {:_type => "Person"}, {:count => 0}, @reduce)
|
60
|
+
@collection.expects(:group).with([:field1], {:_type => { "$in" => ["Doctor", "Person"] }}, {:count => 0}, @reduce)
|
61
61
|
@criteria.only(:field1).aggregate(Person)
|
62
62
|
end
|
63
63
|
|
@@ -69,7 +69,7 @@ describe Mongoid::Criteria do
|
|
69
69
|
|
70
70
|
it "adds the $all query to the selector" do
|
71
71
|
@criteria.all(:title => ["title1", "title2"])
|
72
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$all" => ["title1", "title2"] } }
|
72
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$all" => ["title1", "title2"] } }
|
73
73
|
end
|
74
74
|
|
75
75
|
it "returns self" do
|
@@ -84,7 +84,7 @@ describe Mongoid::Criteria do
|
|
84
84
|
|
85
85
|
it "adds the clause to the selector" do
|
86
86
|
@criteria.and(:title => "Title", :text => "Text")
|
87
|
-
@criteria.selector.should == { :_type => "Person", :title => "Title", :text => "Text" }
|
87
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Title", :text => "Text" }
|
88
88
|
end
|
89
89
|
|
90
90
|
end
|
@@ -93,7 +93,7 @@ describe Mongoid::Criteria do
|
|
93
93
|
|
94
94
|
it "adds the $where clause to the selector" do
|
95
95
|
@criteria.and("this.date < new Date()")
|
96
|
-
@criteria.selector.should == { :_type => "Person", "$where" => "this.date < new Date()" }
|
96
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, "$where" => "this.date < new Date()" }
|
97
97
|
end
|
98
98
|
|
99
99
|
end
|
@@ -172,7 +172,7 @@ describe Mongoid::Criteria do
|
|
172
172
|
|
173
173
|
before do
|
174
174
|
@criteria = Mongoid::Criteria.new(Person)
|
175
|
-
@selector = { :_type => "Person", :test => "Testing" }
|
175
|
+
@selector = { :_type => { "$in" => ["Doctor", "Person"] }, :test => "Testing" }
|
176
176
|
@criteria.where(@selector)
|
177
177
|
@collection = mock
|
178
178
|
@cursor = mock
|
@@ -202,7 +202,7 @@ describe Mongoid::Criteria do
|
|
202
202
|
|
203
203
|
before do
|
204
204
|
Person.expects(:collection).returns(@collection)
|
205
|
-
@collection.expects(:find).with({ :_type => "Person", :title => "Sir" }, {}).returns(@cursor)
|
205
|
+
@collection.expects(:find).with({ :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir" }, {}).returns(@cursor)
|
206
206
|
end
|
207
207
|
|
208
208
|
it "executes the criteria" do
|
@@ -217,7 +217,7 @@ describe Mongoid::Criteria do
|
|
217
217
|
|
218
218
|
before do
|
219
219
|
Person.expects(:collection).returns(@collection)
|
220
|
-
@collection.expects(:find).with({ :_type => "Person", :title => "Sir" }, {}).returns(@cursor)
|
220
|
+
@collection.expects(:find).with({ :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir" }, {}).returns(@cursor)
|
221
221
|
end
|
222
222
|
|
223
223
|
it "calls each on the existing results" do
|
@@ -277,7 +277,7 @@ describe Mongoid::Criteria do
|
|
277
277
|
|
278
278
|
it "adds the $ne query to the selector" do
|
279
279
|
@criteria.excludes(:title => "Bad Title", :text => "Bad Text")
|
280
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$ne" => "Bad Title"}, :text => { "$ne" => "Bad Text" } }
|
280
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$ne" => "Bad Title"}, :text => { "$ne" => "Bad Text" } }
|
281
281
|
end
|
282
282
|
|
283
283
|
it "returns self" do
|
@@ -348,7 +348,7 @@ describe Mongoid::Criteria do
|
|
348
348
|
end
|
349
349
|
|
350
350
|
it "calls group on the collection with the aggregate js" do
|
351
|
-
@collection.expects(:group).with([:field1], {:_type => "Person"}, {:group => []}, @reduce).returns(@grouping)
|
351
|
+
@collection.expects(:group).with([:field1], {:_type => { "$in" => ["Doctor", "Person"] }}, {:group => []}, @reduce).returns(@grouping)
|
352
352
|
@criteria.only(:field1).group
|
353
353
|
end
|
354
354
|
|
@@ -363,7 +363,7 @@ describe Mongoid::Criteria do
|
|
363
363
|
end
|
364
364
|
|
365
365
|
it "calls group on the collection with the aggregate js" do
|
366
|
-
@collection.expects(:group).with([:field1], {:_type => "Person"}, {:group => []}, @reduce).returns(@grouping)
|
366
|
+
@collection.expects(:group).with([:field1], {:_type => { "$in" => ["Doctor", "Person"] }}, {:group => []}, @reduce).returns(@grouping)
|
367
367
|
@criteria.only(:field1).group
|
368
368
|
end
|
369
369
|
|
@@ -376,7 +376,7 @@ describe Mongoid::Criteria do
|
|
376
376
|
it "adds the _id query to the selector" do
|
377
377
|
id = Mongo::ObjectID.new.to_s
|
378
378
|
@criteria.id(id)
|
379
|
-
@criteria.selector.should == { :_type => "Person", :_id => id }
|
379
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :_id => id }
|
380
380
|
end
|
381
381
|
|
382
382
|
it "returns self" do
|
@@ -390,7 +390,7 @@ describe Mongoid::Criteria do
|
|
390
390
|
|
391
391
|
it "adds the $in clause to the selector" do
|
392
392
|
@criteria.in(:title => ["title1", "title2"], :text => ["test"])
|
393
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] } }
|
393
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] } }
|
394
394
|
end
|
395
395
|
|
396
396
|
it "returns self" do
|
@@ -403,7 +403,7 @@ describe Mongoid::Criteria do
|
|
403
403
|
|
404
404
|
it "sets the _type value on the selector" do
|
405
405
|
criteria = Mongoid::Criteria.new(Person)
|
406
|
-
criteria.selector.should == { :_type => "Person" }
|
406
|
+
criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] } }
|
407
407
|
end
|
408
408
|
|
409
409
|
end
|
@@ -497,7 +497,7 @@ describe Mongoid::Criteria do
|
|
497
497
|
before do
|
498
498
|
@other = Mongoid::Criteria.new(Person)
|
499
499
|
@other.where(:name => "Chloe").order_by([[:name, :asc]])
|
500
|
-
@selector = { :_type => "Person", :title => "Sir", :age => 30, :name => "Chloe" }
|
500
|
+
@selector = { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir", :age => 30, :name => "Chloe" }
|
501
501
|
@options = { :skip => 40, :limit => 20, :sort => [[:name, :asc]] }
|
502
502
|
end
|
503
503
|
|
@@ -513,7 +513,7 @@ describe Mongoid::Criteria do
|
|
513
513
|
|
514
514
|
before do
|
515
515
|
@other = Mongoid::Criteria.new(Person)
|
516
|
-
@selector = { :_type => "Person", :title => "Sir", :age => 30 }
|
516
|
+
@selector = { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir", :age => 30 }
|
517
517
|
@options = { :skip => 40, :limit => 20 }
|
518
518
|
end
|
519
519
|
|
@@ -537,7 +537,7 @@ describe Mongoid::Criteria do
|
|
537
537
|
|
538
538
|
it "merges the criteria with the next one" do
|
539
539
|
@new_criteria = @criteria.accepted
|
540
|
-
@new_criteria.selector.should == { :_type => "Person", :title => "Sir", :terms => true }
|
540
|
+
@new_criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir", :terms => true }
|
541
541
|
end
|
542
542
|
|
543
543
|
context "chaining more than one scope" do
|
@@ -548,7 +548,7 @@ describe Mongoid::Criteria do
|
|
548
548
|
|
549
549
|
it "returns the final merged criteria" do
|
550
550
|
@criteria.selector.should ==
|
551
|
-
{ :_type => "Person", :title => "Sir", :terms => true, :age => { "$gt" => 50 } }
|
551
|
+
{ :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir", :terms => true, :age => { "$gt" => 50 } }
|
552
552
|
end
|
553
553
|
|
554
554
|
end
|
@@ -587,7 +587,7 @@ describe Mongoid::Criteria do
|
|
587
587
|
|
588
588
|
it "adds the exclusion to the selector" do
|
589
589
|
@criteria.not_in(:title => ["title1", "title2"], :text => ["test"])
|
590
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$nin" => ["title1", "title2"] }, :text => { "$nin" => ["test"] } }
|
590
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$nin" => ["title1", "title2"] }, :text => { "$nin" => ["test"] } }
|
591
591
|
end
|
592
592
|
|
593
593
|
it "returns self" do
|
@@ -739,7 +739,7 @@ describe Mongoid::Criteria do
|
|
739
739
|
@collection = mock
|
740
740
|
Person.expects(:collection).returns(@collection)
|
741
741
|
@criteria = Person.where(:_id => "1").skip(60).limit(20)
|
742
|
-
@collection.expects(:find).with({:_type => "Person", :_id => "1"}, :skip => 60, :limit => 20).returns([])
|
742
|
+
@collection.expects(:find).with({:_type => { "$in" => ["Doctor", "Person"] }, :_id => "1"}, :skip => 60, :limit => 20).returns([])
|
743
743
|
@results = @criteria.paginate
|
744
744
|
end
|
745
745
|
|
@@ -867,7 +867,7 @@ describe Mongoid::Criteria do
|
|
867
867
|
end
|
868
868
|
|
869
869
|
it "returns a criteria with a selector from the conditions" do
|
870
|
-
@criteria.selector.should == { :_type => "Person", :title => "Test" }
|
870
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Test" }
|
871
871
|
end
|
872
872
|
|
873
873
|
it "returns a criteria with klass Person" do
|
@@ -883,7 +883,7 @@ describe Mongoid::Criteria do
|
|
883
883
|
end
|
884
884
|
|
885
885
|
it "returns a criteria with a selector from the conditions" do
|
886
|
-
@criteria.selector.should == { :_type => "Person", :title => "Test" }
|
886
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Test" }
|
887
887
|
end
|
888
888
|
|
889
889
|
it "returns a criteria with klass Person" do
|
@@ -899,7 +899,7 @@ describe Mongoid::Criteria do
|
|
899
899
|
end
|
900
900
|
|
901
901
|
it "returns a criteria with a selector from the conditions" do
|
902
|
-
@criteria.selector.should == { :_type => "Person", :title => "Test" }
|
902
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Test" }
|
903
903
|
end
|
904
904
|
|
905
905
|
it "returns a criteria with klass Person" do
|
@@ -914,7 +914,7 @@ describe Mongoid::Criteria do
|
|
914
914
|
end
|
915
915
|
|
916
916
|
it "adds the criteria and the options" do
|
917
|
-
@criteria.selector.should == { :_type => "Person", :title => "Test" }
|
917
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Test" }
|
918
918
|
@criteria.options.should == { :skip => 10 }
|
919
919
|
end
|
920
920
|
|
@@ -932,7 +932,7 @@ describe Mongoid::Criteria do
|
|
932
932
|
|
933
933
|
it "adds the clause to the selector" do
|
934
934
|
@criteria.where(:title => "Title", :text => "Text")
|
935
|
-
@criteria.selector.should == { :_type => "Person", :title => "Title", :text => "Text" }
|
935
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Title", :text => "Text" }
|
936
936
|
end
|
937
937
|
|
938
938
|
end
|
@@ -943,7 +943,7 @@ describe Mongoid::Criteria do
|
|
943
943
|
|
944
944
|
it "returns those matching an all clause" do
|
945
945
|
@criteria.where(:title.all => ["Sir"])
|
946
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$all" => ["Sir"] } }
|
946
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$all" => ["Sir"] } }
|
947
947
|
end
|
948
948
|
|
949
949
|
end
|
@@ -952,7 +952,7 @@ describe Mongoid::Criteria do
|
|
952
952
|
|
953
953
|
it "returns those matching an exists clause" do
|
954
954
|
@criteria.where(:title.exists => true)
|
955
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$exists" => true } }
|
955
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$exists" => true } }
|
956
956
|
end
|
957
957
|
|
958
958
|
end
|
@@ -961,7 +961,7 @@ describe Mongoid::Criteria do
|
|
961
961
|
|
962
962
|
it "returns those matching a gt clause" do
|
963
963
|
@criteria.where(:age.gt => 30)
|
964
|
-
@criteria.selector.should == { :_type => "Person", :age => { "$gt" => 30 } }
|
964
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :age => { "$gt" => 30 } }
|
965
965
|
end
|
966
966
|
|
967
967
|
end
|
@@ -970,7 +970,7 @@ describe Mongoid::Criteria do
|
|
970
970
|
|
971
971
|
it "returns those matching a gte clause" do
|
972
972
|
@criteria.where(:age.gte => 33)
|
973
|
-
@criteria.selector.should == { :_type => "Person", :age => { "$gte" => 33 } }
|
973
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :age => { "$gte" => 33 } }
|
974
974
|
end
|
975
975
|
|
976
976
|
end
|
@@ -979,7 +979,7 @@ describe Mongoid::Criteria do
|
|
979
979
|
|
980
980
|
it "returns those matching an in clause" do
|
981
981
|
@criteria.where(:title.in => ["Sir", "Madam"])
|
982
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$in" => ["Sir", "Madam"] } }
|
982
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$in" => ["Sir", "Madam"] } }
|
983
983
|
end
|
984
984
|
|
985
985
|
end
|
@@ -988,7 +988,7 @@ describe Mongoid::Criteria do
|
|
988
988
|
|
989
989
|
it "returns those matching a lt clause" do
|
990
990
|
@criteria.where(:age.lt => 34)
|
991
|
-
@criteria.selector.should == { :_type => "Person", :age => { "$lt" => 34 } }
|
991
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :age => { "$lt" => 34 } }
|
992
992
|
end
|
993
993
|
|
994
994
|
end
|
@@ -997,7 +997,7 @@ describe Mongoid::Criteria do
|
|
997
997
|
|
998
998
|
it "returns those matching a lte clause" do
|
999
999
|
@criteria.where(:age.lte => 33)
|
1000
|
-
@criteria.selector.should == { :_type => "Person", :age => { "$lte" => 33 } }
|
1000
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :age => { "$lte" => 33 } }
|
1001
1001
|
end
|
1002
1002
|
|
1003
1003
|
end
|
@@ -1006,7 +1006,7 @@ describe Mongoid::Criteria do
|
|
1006
1006
|
|
1007
1007
|
it "returns those matching a ne clause" do
|
1008
1008
|
@criteria.where(:age.ne => 50)
|
1009
|
-
@criteria.selector.should == { :_type => "Person", :age => { "$ne" => 50 } }
|
1009
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :age => { "$ne" => 50 } }
|
1010
1010
|
end
|
1011
1011
|
|
1012
1012
|
end
|
@@ -1015,7 +1015,7 @@ describe Mongoid::Criteria do
|
|
1015
1015
|
|
1016
1016
|
it "returns those matching a nin clause" do
|
1017
1017
|
@criteria.where(:title.nin => ["Esquire", "Congressman"])
|
1018
|
-
@criteria.selector.should == { :_type => "Person", :title => { "$nin" => ["Esquire", "Congressman"] } }
|
1018
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => { "$nin" => ["Esquire", "Congressman"] } }
|
1019
1019
|
end
|
1020
1020
|
|
1021
1021
|
end
|
@@ -1024,7 +1024,7 @@ describe Mongoid::Criteria do
|
|
1024
1024
|
|
1025
1025
|
it "returns those matching a size clause" do
|
1026
1026
|
@criteria.where(:aliases.size => 2)
|
1027
|
-
@criteria.selector.should == { :_type => "Person", :aliases => { "$size" => 2 } }
|
1027
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :aliases => { "$size" => 2 } }
|
1028
1028
|
end
|
1029
1029
|
|
1030
1030
|
end
|
@@ -1037,7 +1037,7 @@ describe Mongoid::Criteria do
|
|
1037
1037
|
|
1038
1038
|
it "adds the $where clause to the selector" do
|
1039
1039
|
@criteria.where("this.date < new Date()")
|
1040
|
-
@criteria.selector.should == { :_type => "Person", "$where" => "this.date < new Date()" }
|
1040
|
+
@criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, "$where" => "this.date < new Date()" }
|
1041
1041
|
end
|
1042
1042
|
|
1043
1043
|
end
|
@@ -733,6 +733,25 @@ describe Mongoid::Document do
|
|
733
733
|
|
734
734
|
end
|
735
735
|
|
736
|
+
describe "._types" do
|
737
|
+
|
738
|
+
it "returns all subclasses for the class plus the class" do
|
739
|
+
types = Canvas._types
|
740
|
+
types.size.should == 3
|
741
|
+
types.should include("Firefox")
|
742
|
+
types.should include("Browser")
|
743
|
+
types.should include("Canvas")
|
744
|
+
end
|
745
|
+
|
746
|
+
it "does not return parent classes" do
|
747
|
+
types = Browser._types
|
748
|
+
types.size.should == 2
|
749
|
+
types.should include("Firefox")
|
750
|
+
types.should include("Browser")
|
751
|
+
end
|
752
|
+
|
753
|
+
end
|
754
|
+
|
736
755
|
describe "#to_a" do
|
737
756
|
|
738
757
|
it "returns an array with the document in it" do
|
@@ -291,7 +291,7 @@ describe Mongoid::Finders do
|
|
291
291
|
|
292
292
|
it "returns a new criteria with select conditions added" do
|
293
293
|
criteria = Person.where(:title => "Sir")
|
294
|
-
criteria.selector.should == { :_type => "Person", :title => "Sir" }
|
294
|
+
criteria.selector.should == { :_type => { "$in" => ["Doctor", "Person"] }, :title => "Sir" }
|
295
295
|
end
|
296
296
|
|
297
297
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-03 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|