mongoid 1.2.7 → 1.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/mongoid.rb +2 -1
- data/lib/mongoid/associations.rb +18 -14
- data/lib/mongoid/associations/has_many_related.rb +1 -1
- data/lib/mongoid/associations/meta_data.rb +28 -0
- data/lib/mongoid/associations/options.rb +1 -6
- data/lib/mongoid/attributes.rb +1 -1
- data/lib/mongoid/caching.rb +41 -0
- data/lib/mongoid/collection.rb +1 -0
- data/lib/mongoid/components.rb +1 -0
- data/lib/mongoid/config.rb +2 -0
- data/lib/mongoid/contexts/mongo.rb +8 -13
- data/lib/mongoid/criteria.rb +7 -2
- data/lib/mongoid/criterion/inclusion.rb +1 -0
- data/lib/mongoid/criterion/optional.rb +10 -2
- data/lib/mongoid/finders.rb +5 -23
- data/lib/mongoid/identity.rb +1 -1
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/mongoid.gemspec +12 -2
- data/spec/integration/mongoid/attributes_spec.rb +2 -2
- data/spec/integration/mongoid/commands_spec.rb +5 -3
- data/spec/integration/mongoid/criteria_spec.rb +27 -0
- data/spec/models/game.rb +2 -1
- data/spec/models/post.rb +1 -1
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +5 -1
- data/spec/unit/mongoid/associations/meta_data_spec.rb +88 -0
- data/spec/unit/mongoid/associations/options_spec.rb +20 -19
- data/spec/unit/mongoid/associations_spec.rb +41 -7
- data/spec/unit/mongoid/caching_spec.rb +63 -0
- data/spec/unit/mongoid/collection_spec.rb +20 -4
- data/spec/unit/mongoid/config_spec.rb +7 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +51 -12
- data/spec/unit/mongoid/criteria_spec.rb +23 -1
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +8 -0
- data/spec/unit/mongoid/criterion/optional_spec.rb +0 -10
- data/spec/unit/mongoid/identity_spec.rb +24 -3
- data/spec/unit/mongoid/javascript_spec.rb +48 -0
- metadata +12 -2
@@ -0,0 +1,63 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Caching do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@klass = Class.new do
|
7
|
+
include Mongoid::Caching
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ".cache" do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@klass.cache
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sets the cached boolean on the class" do
|
18
|
+
@klass.cached.should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe ".cached" do
|
24
|
+
|
25
|
+
it "defaults to false" do
|
26
|
+
@klass.cached.should be_false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe ".cached?" do
|
31
|
+
|
32
|
+
context "when the class is cached" do
|
33
|
+
|
34
|
+
before do
|
35
|
+
@klass.cache
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns true" do
|
39
|
+
@klass.should be_cached
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when the class is not cached" do
|
44
|
+
|
45
|
+
it "returns false" do
|
46
|
+
@klass.should_not be_cached
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#cached?" do
|
53
|
+
|
54
|
+
before do
|
55
|
+
@klass.cache
|
56
|
+
@doc = @klass.new
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns the class cached? value" do
|
60
|
+
@doc.should be_cached
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -42,12 +42,12 @@ describe Mongoid::Collection do
|
|
42
42
|
|
43
43
|
describe "#directed" do
|
44
44
|
|
45
|
-
before do
|
46
|
-
slaves.expects(:empty?).returns(false)
|
47
|
-
end
|
48
|
-
|
49
45
|
context "when an enslave option is not passed" do
|
50
46
|
|
47
|
+
before do
|
48
|
+
slaves.expects(:empty?).returns(false)
|
49
|
+
end
|
50
|
+
|
51
51
|
before do
|
52
52
|
Person.enslave
|
53
53
|
end
|
@@ -63,11 +63,27 @@ describe Mongoid::Collection do
|
|
63
63
|
|
64
64
|
context "when an enslave option is passed" do
|
65
65
|
|
66
|
+
before do
|
67
|
+
slaves.expects(:empty?).returns(false)
|
68
|
+
end
|
69
|
+
|
66
70
|
it "overwrites the default" do
|
67
71
|
collection.directed(:enslave => true).should == slaves
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
75
|
+
context "when cached option is passed" do
|
76
|
+
|
77
|
+
let(:options) do
|
78
|
+
{ :cache => true }
|
79
|
+
end
|
80
|
+
|
81
|
+
it "removed the cache option" do
|
82
|
+
collection.directed(options).should == master
|
83
|
+
options[:cache].should be_nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
71
87
|
end
|
72
88
|
|
73
89
|
describe "#find" do
|
@@ -73,7 +73,13 @@ describe Mongoid::Contexts::Mongo do
|
|
73
73
|
before do
|
74
74
|
@cursor = stub(:count => 500)
|
75
75
|
@collection = mock
|
76
|
-
@klass = stub(
|
76
|
+
@klass = stub(
|
77
|
+
:collection => @collection,
|
78
|
+
:hereditary => false,
|
79
|
+
:instantiate => @person,
|
80
|
+
:enslaved? => false,
|
81
|
+
:cached? => false
|
82
|
+
)
|
77
83
|
@criteria = Mongoid::Criteria.new(@klass)
|
78
84
|
@criteria.where(selector).skip(20)
|
79
85
|
@context = Mongoid::Contexts::Mongo.new(@criteria)
|
@@ -151,27 +157,60 @@ describe Mongoid::Contexts::Mongo do
|
|
151
157
|
let(:selector) { { :field => "value" } }
|
152
158
|
let(:options) { { :skip => 20 } }
|
153
159
|
let(:klass) { Person }
|
160
|
+
let(:criteria) { Mongoid::Criteria.new(klass) }
|
161
|
+
let(:context) { Mongoid::Contexts::Mongo.new(criteria) }
|
154
162
|
|
155
163
|
before do
|
156
|
-
|
157
|
-
@criteria.where(selector).skip(20)
|
158
|
-
@context = Mongoid::Contexts::Mongo.new(@criteria)
|
164
|
+
criteria.where(selector).skip(20)
|
159
165
|
end
|
160
166
|
|
161
167
|
it "sets the selector" do
|
162
|
-
|
168
|
+
context.selector.should == criteria.selector
|
163
169
|
end
|
164
170
|
|
165
171
|
it "sets the options" do
|
166
|
-
|
172
|
+
context.options.should == options
|
167
173
|
end
|
168
174
|
|
169
175
|
it "sets the klass" do
|
170
|
-
|
176
|
+
context.klass.should == klass
|
177
|
+
end
|
178
|
+
|
179
|
+
context "when persisting type" do
|
180
|
+
|
181
|
+
it "set the selector to query across the _type when it is hereditary" do
|
182
|
+
context.selector[:_type].should == {'$in' => Person._types}
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
context "when not persisting type" do
|
188
|
+
|
189
|
+
before do
|
190
|
+
Mongoid.persist_types = false
|
191
|
+
end
|
192
|
+
|
193
|
+
after do
|
194
|
+
Mongoid.persist_types = true
|
195
|
+
end
|
196
|
+
|
197
|
+
it "does not add the type to the selector" do
|
198
|
+
context.selector[:_type].should be_nil
|
199
|
+
end
|
200
|
+
|
171
201
|
end
|
172
202
|
|
173
|
-
|
174
|
-
|
203
|
+
context "enslaved and cached classes" do
|
204
|
+
|
205
|
+
let(:klass) { Game }
|
206
|
+
|
207
|
+
it "enslaves the criteria" do
|
208
|
+
context.criteria.should be_enslaved
|
209
|
+
end
|
210
|
+
|
211
|
+
it "caches the criteria" do
|
212
|
+
context.criteria.should be_cached
|
213
|
+
end
|
175
214
|
end
|
176
215
|
end
|
177
216
|
|
@@ -236,7 +275,7 @@ describe Mongoid::Contexts::Mongo do
|
|
236
275
|
describe "#max" do
|
237
276
|
|
238
277
|
before do
|
239
|
-
@reduce = Mongoid::
|
278
|
+
@reduce = Mongoid::Javascript.max.gsub("[field]", "age")
|
240
279
|
@collection = mock
|
241
280
|
Person.expects(:collection).returns(@collection)
|
242
281
|
@criteria = Mongoid::Criteria.new(Person)
|
@@ -259,7 +298,7 @@ describe Mongoid::Contexts::Mongo do
|
|
259
298
|
describe "#min" do
|
260
299
|
|
261
300
|
before do
|
262
|
-
@reduce = Mongoid::
|
301
|
+
@reduce = Mongoid::Javascript.min.gsub("[field]", "age")
|
263
302
|
@collection = mock
|
264
303
|
Person.expects(:collection).returns(@collection)
|
265
304
|
@criteria = Mongoid::Criteria.new(Person)
|
@@ -371,7 +410,7 @@ describe Mongoid::Contexts::Mongo do
|
|
371
410
|
context "when klass not provided" do
|
372
411
|
|
373
412
|
before do
|
374
|
-
@reduce = Mongoid::
|
413
|
+
@reduce = Mongoid::Javascript.sum.gsub("[field]", "age")
|
375
414
|
@collection = mock
|
376
415
|
@criteria = Mongoid::Criteria.new(Person)
|
377
416
|
@context = Mongoid::Contexts::Mongo.new(@criteria)
|
@@ -318,7 +318,12 @@ describe Mongoid::Criteria do
|
|
318
318
|
|
319
319
|
before do
|
320
320
|
Person.expects(:collection).returns(@collection)
|
321
|
-
@collection.expects(:find).with(
|
321
|
+
@collection.expects(:find).with(
|
322
|
+
{ :_type => { "$in" => ["Doctor", "Person"] },
|
323
|
+
:title => "Sir"
|
324
|
+
},
|
325
|
+
{ :cache => true }
|
326
|
+
).returns(@cursor)
|
322
327
|
@cursor.expects(:each).yields(@person)
|
323
328
|
@criteria.cache
|
324
329
|
@criteria.each do |doc|
|
@@ -387,6 +392,7 @@ describe Mongoid::Criteria do
|
|
387
392
|
it "sets the klass to the given class" do
|
388
393
|
criteria.klass.should == Person
|
389
394
|
end
|
395
|
+
|
390
396
|
end
|
391
397
|
|
392
398
|
describe "#last" do
|
@@ -704,6 +710,22 @@ describe Mongoid::Criteria do
|
|
704
710
|
|
705
711
|
end
|
706
712
|
|
713
|
+
context "when Person, :conditions => {:id => id}" do
|
714
|
+
|
715
|
+
before do
|
716
|
+
@criteria = Mongoid::Criteria.translate(Person, :conditions => { :id => "1234e567" })
|
717
|
+
end
|
718
|
+
|
719
|
+
it "returns a criteria with a selector from the conditions" do
|
720
|
+
@criteria.selector.should == { :_id => "1234e567" }
|
721
|
+
end
|
722
|
+
|
723
|
+
it "returns a criteria with klass Person" do
|
724
|
+
@criteria.klass.should == Person
|
725
|
+
end
|
726
|
+
|
727
|
+
end
|
728
|
+
|
707
729
|
context "when :all, :conditions => {}" do
|
708
730
|
|
709
731
|
before do
|
@@ -66,6 +66,14 @@ describe Mongoid::Criterion::Inclusion do
|
|
66
66
|
}
|
67
67
|
end
|
68
68
|
|
69
|
+
it "#any_in is aliased to #in" do
|
70
|
+
@criteria.any_in(:title => ["title1", "title2"], :text => ["test"])
|
71
|
+
@criteria.selector.should ==
|
72
|
+
{
|
73
|
+
:title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] }
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
69
77
|
it "returns self" do
|
70
78
|
@criteria.in(:title => ["title1"]).should == @criteria
|
71
79
|
end
|
@@ -30,16 +30,6 @@ describe Mongoid::Criterion::Optional do
|
|
30
30
|
it "returns true" do
|
31
31
|
@criteria.cached?.should be_true
|
32
32
|
end
|
33
|
-
|
34
|
-
it "removes cache from the options" do
|
35
|
-
@criteria.cached?
|
36
|
-
@criteria.options[:cache].should be_nil
|
37
|
-
end
|
38
|
-
|
39
|
-
it "sets the cache instance variable" do
|
40
|
-
@criteria.cached?
|
41
|
-
@criteria.instance_variable_get(:@cached).should be_true
|
42
|
-
end
|
43
33
|
end
|
44
34
|
|
45
35
|
context "when the criteria has no cache option" do
|
@@ -6,9 +6,30 @@ describe Mongoid::Identity do
|
|
6
6
|
|
7
7
|
let(:name) { Name.new }
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
context "when persisting types" do
|
10
|
+
|
11
|
+
it "sets the document _type to the class name" do
|
12
|
+
Mongoid::Identity.create(name)
|
13
|
+
name._type.should == "Name"
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when not persisting types" do
|
19
|
+
|
20
|
+
before do
|
21
|
+
Mongoid.persist_types = false
|
22
|
+
@name = Name.new
|
23
|
+
end
|
24
|
+
|
25
|
+
after do
|
26
|
+
Mongoid.persist_types = true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not set the type" do
|
30
|
+
@name._type.should be_nil
|
31
|
+
end
|
32
|
+
|
12
33
|
end
|
13
34
|
|
14
35
|
it "returns the document" do
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Javascript do
|
4
|
+
|
5
|
+
let(:js) do
|
6
|
+
Mongoid::Javascript
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ".aggregate" do
|
10
|
+
|
11
|
+
it "returns the aggregate function" do
|
12
|
+
js.aggregate.should == "function(obj, prev) { prev.count++; }"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".group" do
|
17
|
+
|
18
|
+
it "returns the group function" do
|
19
|
+
js.group.should == "function(obj, prev) { prev.group.push(obj); }"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe ".max" do
|
24
|
+
|
25
|
+
it "returns the max function" do
|
26
|
+
js.max.should == "function(obj, prev) { if (prev.max == 'start') { " +
|
27
|
+
"prev.max = obj.[field]; } if (prev.max < obj.[field]) { prev.max = obj.[field];" +
|
28
|
+
" } }"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ".min" do
|
33
|
+
|
34
|
+
it "returns the min function" do
|
35
|
+
js.min.should == "function(obj, prev) { if (prev.min == 'start') { " +
|
36
|
+
"prev.min = obj.[field]; } if (prev.min > obj.[field]) { prev.min = obj.[field];" +
|
37
|
+
" } }"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe ".sum" do
|
42
|
+
|
43
|
+
it "returns the sum function" do
|
44
|
+
js.sum.should == "function(obj, prev) { if (prev.sum == 'start') { prev.sum = 0; " +
|
45
|
+
"} prev.sum += obj.[field]; }"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
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: 1.2.
|
4
|
+
version: 1.2.8
|
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-02-
|
12
|
+
date: 2010-02-25 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -97,9 +97,11 @@ files:
|
|
97
97
|
- lib/mongoid/associations/has_many_related.rb
|
98
98
|
- lib/mongoid/associations/has_one.rb
|
99
99
|
- lib/mongoid/associations/has_one_related.rb
|
100
|
+
- lib/mongoid/associations/meta_data.rb
|
100
101
|
- lib/mongoid/associations/options.rb
|
101
102
|
- lib/mongoid/associations/proxy.rb
|
102
103
|
- lib/mongoid/attributes.rb
|
104
|
+
- lib/mongoid/caching.rb
|
103
105
|
- lib/mongoid/callbacks.rb
|
104
106
|
- lib/mongoid/collection.rb
|
105
107
|
- lib/mongoid/collections/cyclic_iterator.rb
|
@@ -160,6 +162,8 @@ files:
|
|
160
162
|
- lib/mongoid/finders.rb
|
161
163
|
- lib/mongoid/identity.rb
|
162
164
|
- lib/mongoid/indexes.rb
|
165
|
+
- lib/mongoid/javascript.rb
|
166
|
+
- lib/mongoid/javascript/functions.yml
|
163
167
|
- lib/mongoid/matchers.rb
|
164
168
|
- lib/mongoid/matchers/all.rb
|
165
169
|
- lib/mongoid/matchers/default.rb
|
@@ -216,9 +220,11 @@ files:
|
|
216
220
|
- spec/unit/mongoid/associations/has_many_spec.rb
|
217
221
|
- spec/unit/mongoid/associations/has_one_related_spec.rb
|
218
222
|
- spec/unit/mongoid/associations/has_one_spec.rb
|
223
|
+
- spec/unit/mongoid/associations/meta_data_spec.rb
|
219
224
|
- spec/unit/mongoid/associations/options_spec.rb
|
220
225
|
- spec/unit/mongoid/associations_spec.rb
|
221
226
|
- spec/unit/mongoid/attributes_spec.rb
|
227
|
+
- spec/unit/mongoid/caching_spec.rb
|
222
228
|
- spec/unit/mongoid/callbacks_spec.rb
|
223
229
|
- spec/unit/mongoid/collection_spec.rb
|
224
230
|
- spec/unit/mongoid/collections/cyclic_iterator_spec.rb
|
@@ -272,6 +278,7 @@ files:
|
|
272
278
|
- spec/unit/mongoid/finders_spec.rb
|
273
279
|
- spec/unit/mongoid/identity_spec.rb
|
274
280
|
- spec/unit/mongoid/indexes_spec.rb
|
281
|
+
- spec/unit/mongoid/javascript_spec.rb
|
275
282
|
- spec/unit/mongoid/matchers/all_spec.rb
|
276
283
|
- spec/unit/mongoid/matchers/default_spec.rb
|
277
284
|
- spec/unit/mongoid/matchers/exists_spec.rb
|
@@ -355,9 +362,11 @@ test_files:
|
|
355
362
|
- spec/unit/mongoid/associations/has_many_spec.rb
|
356
363
|
- spec/unit/mongoid/associations/has_one_related_spec.rb
|
357
364
|
- spec/unit/mongoid/associations/has_one_spec.rb
|
365
|
+
- spec/unit/mongoid/associations/meta_data_spec.rb
|
358
366
|
- spec/unit/mongoid/associations/options_spec.rb
|
359
367
|
- spec/unit/mongoid/associations_spec.rb
|
360
368
|
- spec/unit/mongoid/attributes_spec.rb
|
369
|
+
- spec/unit/mongoid/caching_spec.rb
|
361
370
|
- spec/unit/mongoid/callbacks_spec.rb
|
362
371
|
- spec/unit/mongoid/collection_spec.rb
|
363
372
|
- spec/unit/mongoid/collections/cyclic_iterator_spec.rb
|
@@ -411,6 +420,7 @@ test_files:
|
|
411
420
|
- spec/unit/mongoid/finders_spec.rb
|
412
421
|
- spec/unit/mongoid/identity_spec.rb
|
413
422
|
- spec/unit/mongoid/indexes_spec.rb
|
423
|
+
- spec/unit/mongoid/javascript_spec.rb
|
414
424
|
- spec/unit/mongoid/matchers/all_spec.rb
|
415
425
|
- spec/unit/mongoid/matchers/default_spec.rb
|
416
426
|
- spec/unit/mongoid/matchers/exists_spec.rb
|