mongoid-pre 2.0.0.beta1 → 2.0.0.pre
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/.watchr +15 -10
- data/HISTORY +342 -0
- data/README.rdoc +8 -1
- data/Rakefile +2 -3
- data/VERSION +1 -1
- data/lib/mongoid/associations/{embedded_in.rb → belongs_to.rb} +4 -4
- data/lib/mongoid/associations/belongs_to_related.rb +9 -6
- data/lib/mongoid/associations/{embeds_many.rb → has_many.rb} +20 -33
- data/lib/mongoid/associations/has_many_related.rb +4 -28
- data/lib/mongoid/associations/{embeds_one.rb → has_one.rb} +6 -6
- data/lib/mongoid/associations/options.rb +6 -1
- data/lib/mongoid/associations.rb +32 -41
- data/lib/mongoid/attributes.rb +6 -13
- data/lib/mongoid/collection.rb +1 -2
- data/lib/mongoid/commands/delete.rb +1 -1
- data/lib/mongoid/commands/delete_all.rb +1 -4
- data/lib/mongoid/commands/destroy.rb +1 -1
- data/lib/mongoid/commands/destroy_all.rb +1 -3
- data/lib/mongoid/commands/save.rb +0 -1
- data/lib/mongoid/commands.rb +13 -2
- data/lib/mongoid/components.rb +1 -6
- data/lib/mongoid/config.rb +1 -5
- data/lib/mongoid/contexts/enumerable.rb +17 -54
- data/lib/mongoid/contexts/mongo.rb +38 -101
- data/lib/mongoid/contexts/paging.rb +2 -2
- data/lib/mongoid/contexts.rb +0 -21
- data/lib/mongoid/criteria.rb +73 -15
- data/lib/mongoid/criterion/inclusion.rb +0 -2
- data/lib/mongoid/criterion/optional.rb +2 -10
- data/lib/mongoid/document.rb +30 -41
- data/lib/mongoid/extensions.rb +0 -15
- data/lib/mongoid/field.rb +7 -20
- data/lib/mongoid/fields.rb +10 -15
- data/lib/mongoid/finders.rb +98 -10
- data/lib/mongoid/identity.rb +2 -8
- data/lib/mongoid/named_scope.rb +0 -2
- data/lib/mongoid/validations/associated.rb +8 -3
- data/lib/mongoid/validations/uniqueness.rb +7 -2
- data/lib/mongoid/validations.rb +2 -2
- data/lib/mongoid/versioning.rb +1 -1
- data/lib/mongoid.rb +5 -21
- data/mongoid.gemspec +19 -59
- data/spec/integration/mongoid/associations_spec.rb +3 -42
- data/spec/integration/mongoid/attributes_spec.rb +2 -2
- data/spec/integration/mongoid/commands_spec.rb +13 -27
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -13
- data/spec/integration/mongoid/criteria_spec.rb +3 -50
- data/spec/integration/mongoid/document_spec.rb +5 -72
- data/spec/integration/mongoid/finders_spec.rb +28 -85
- data/spec/models/address.rb +3 -3
- data/spec/models/animal.rb +2 -2
- data/spec/models/country_code.rb +2 -2
- data/spec/models/game.rb +1 -2
- data/spec/models/inheritance.rb +5 -5
- data/spec/models/location.rb +2 -2
- data/spec/models/name.rb +3 -3
- data/spec/models/namespacing.rb +2 -2
- data/spec/models/patient.rb +0 -2
- data/spec/models/person.rb +4 -6
- data/spec/models/pet.rb +3 -3
- data/spec/models/pet_owner.rb +3 -3
- data/spec/models/phone.rb +3 -3
- data/spec/models/post.rb +1 -1
- data/spec/models/translation.rb +2 -2
- data/spec/models/vet_visit.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -4
- data/spec/unit/mongoid/associations/{embedded_in_spec.rb → belongs_to_spec.rb} +11 -11
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +14 -45
- data/spec/unit/mongoid/associations/{embeds_many_spec.rb → has_many_spec.rb} +34 -79
- data/spec/unit/mongoid/associations/{embeds_one_spec.rb → has_one_spec.rb} +18 -18
- data/spec/unit/mongoid/associations/options_spec.rb +19 -20
- data/spec/unit/mongoid/associations_spec.rb +12 -74
- data/spec/unit/mongoid/attributes_spec.rb +51 -83
- data/spec/unit/mongoid/collection_spec.rb +0 -46
- data/spec/unit/mongoid/commands/delete_all_spec.rb +8 -9
- data/spec/unit/mongoid/commands/delete_spec.rb +3 -6
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +2 -0
- data/spec/unit/mongoid/commands/destroy_spec.rb +3 -10
- data/spec/unit/mongoid/commands_spec.rb +11 -20
- data/spec/unit/mongoid/config_spec.rb +0 -18
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +11 -198
- data/spec/unit/mongoid/contexts/mongo_spec.rb +54 -357
- data/spec/unit/mongoid/criteria_spec.rb +78 -107
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +13 -3
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +19 -25
- data/spec/unit/mongoid/criterion/optional_spec.rb +18 -25
- data/spec/unit/mongoid/document_spec.rb +34 -71
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +2 -2
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +3 -0
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +2 -16
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +1 -1
- data/spec/unit/mongoid/field_spec.rb +0 -62
- data/spec/unit/mongoid/fields_spec.rb +0 -33
- data/spec/unit/mongoid/finders_spec.rb +1 -37
- data/spec/unit/mongoid/identity_spec.rb +6 -47
- data/spec/unit/mongoid/named_scope_spec.rb +2 -15
- data/spec/unit/mongoid/scope_spec.rb +1 -1
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +3 -3
- data/spec/unit/mongoid_spec.rb +2 -11
- metadata +14 -64
- data/lib/mongoid/associations/meta_data.rb +0 -28
- data/lib/mongoid/contexts/ids.rb +0 -25
- data/lib/mongoid/deprecation.rb +0 -22
- data/lib/mongoid/dirty.rb +0 -203
- data/lib/mongoid/extensions/big_decimal/conversions.rb +0 -19
- data/lib/mongoid/extensions/binary/conversions.rb +0 -17
- data/lib/mongoid/extensions/objectid/conversions.rb +0 -15
- data/lib/mongoid/extras.rb +0 -61
- data/lib/mongoid/javascript/functions.yml +0 -37
- data/lib/mongoid/javascript.rb +0 -21
- data/lib/mongoid/observable.rb +0 -30
- data/lib/mongoid/paths.rb +0 -54
- data/lib/mongoid/persistence/command.rb +0 -20
- data/lib/mongoid/persistence/insert.rb +0 -71
- data/lib/mongoid/persistence/update.rb +0 -78
- data/lib/mongoid/persistence.rb +0 -27
- data/lib/mongoid/state.rb +0 -32
- data/spec/integration/mongoid/dirty_spec.rb +0 -70
- data/spec/integration/mongoid/persistence/update_spec.rb +0 -46
- data/spec/models/callbacks.rb +0 -18
- data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
- data/spec/unit/mongoid/contexts_spec.rb +0 -25
- data/spec/unit/mongoid/deprecation_spec.rb +0 -24
- data/spec/unit/mongoid/dirty_spec.rb +0 -286
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extras_spec.rb +0 -102
- data/spec/unit/mongoid/javascript_spec.rb +0 -48
- data/spec/unit/mongoid/observable_spec.rb +0 -46
- data/spec/unit/mongoid/paths_spec.rb +0 -124
- data/spec/unit/mongoid/persistence/insert_spec.rb +0 -175
- data/spec/unit/mongoid/persistence/update_spec.rb +0 -148
- data/spec/unit/mongoid/persistence_spec.rb +0 -40
- data/spec/unit/mongoid/state_spec.rb +0 -83
|
@@ -8,10 +8,9 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
8
8
|
@melbourne = Address.new(:number => 20, :street => "Bourke Street")
|
|
9
9
|
@new_york = Address.new(:number => 20, :street => "Broadway")
|
|
10
10
|
@docs = [ @london, @shanghai, @melbourne, @new_york ]
|
|
11
|
-
@
|
|
12
|
-
@
|
|
13
|
-
@
|
|
14
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
11
|
+
@selector = { :street => "Bourke Street" }
|
|
12
|
+
@options = { :fields => [ :number ] }
|
|
13
|
+
@context = Mongoid::Contexts::Enumerable.new(@selector, @options, @docs)
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
describe "#aggregate" do
|
|
@@ -31,13 +30,6 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
31
30
|
end
|
|
32
31
|
end
|
|
33
32
|
|
|
34
|
-
describe "#avg" do
|
|
35
|
-
|
|
36
|
-
it "returns the avg value for the supplied field" do
|
|
37
|
-
@context.avg(:number).should == 12.75
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
33
|
describe "#count" do
|
|
42
34
|
|
|
43
35
|
it "returns the size of the enumerable" do
|
|
@@ -46,37 +38,8 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
46
38
|
|
|
47
39
|
end
|
|
48
40
|
|
|
49
|
-
describe "#distinct" do
|
|
50
|
-
|
|
51
|
-
context "when the criteria is limited" do
|
|
52
|
-
|
|
53
|
-
it "returns an array of distinct values for the field" do
|
|
54
|
-
@context.distinct(:street).should == [ "Bourke Street" ]
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context "when the criteria is not limited" do
|
|
59
|
-
|
|
60
|
-
before do
|
|
61
|
-
@criteria = Mongoid::Criteria.new(Address)
|
|
62
|
-
@criteria.documents = @docs
|
|
63
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "returns an array of distinct values for the field" do
|
|
67
|
-
@context.distinct(:street).should ==
|
|
68
|
-
[ "Bond Street", "Nan Jing Dong Lu", "Bourke Street", "Broadway" ]
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
41
|
describe "#execute" do
|
|
74
42
|
|
|
75
|
-
before do
|
|
76
|
-
@criteria = Mongoid::Criteria.new(Address)
|
|
77
|
-
@criteria.documents = @docs
|
|
78
|
-
end
|
|
79
|
-
|
|
80
43
|
it "returns the matching documents from the array" do
|
|
81
44
|
@context.execute.should == [ @melbourne ]
|
|
82
45
|
end
|
|
@@ -84,8 +47,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
84
47
|
context "when selector is empty" do
|
|
85
48
|
|
|
86
49
|
before do
|
|
87
|
-
@
|
|
88
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
50
|
+
@context = Mongoid::Contexts::Enumerable.new({}, @options, @docs)
|
|
89
51
|
end
|
|
90
52
|
|
|
91
53
|
it "returns all the documents" do
|
|
@@ -96,8 +58,8 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
96
58
|
context "when skip and limit are in the options" do
|
|
97
59
|
|
|
98
60
|
before do
|
|
99
|
-
@
|
|
100
|
-
@context = Mongoid::Contexts::Enumerable.new(@
|
|
61
|
+
@options = { :skip => 2, :limit => 2 }
|
|
62
|
+
@context = Mongoid::Contexts::Enumerable.new({}, @options, @docs)
|
|
101
63
|
end
|
|
102
64
|
|
|
103
65
|
it "properly narrows down the matching results" do
|
|
@@ -105,19 +67,6 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
105
67
|
end
|
|
106
68
|
end
|
|
107
69
|
|
|
108
|
-
context "when limit is set without skip in the options" do
|
|
109
|
-
|
|
110
|
-
before do
|
|
111
|
-
@criteria.limit(2)
|
|
112
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "properly narrows down the matching results" do
|
|
116
|
-
@context.execute.size.should == 2
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
end
|
|
120
|
-
|
|
121
70
|
end
|
|
122
71
|
|
|
123
72
|
describe "#first" do
|
|
@@ -156,10 +105,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
156
105
|
let(:documents) { [stub] }
|
|
157
106
|
|
|
158
107
|
before do
|
|
159
|
-
@
|
|
160
|
-
@criteria.documents = documents
|
|
161
|
-
@criteria.where(selector).skip(20)
|
|
162
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
108
|
+
@context = Mongoid::Contexts::Enumerable.new(selector, options, documents)
|
|
163
109
|
end
|
|
164
110
|
|
|
165
111
|
it "sets the selector" do
|
|
@@ -176,22 +122,6 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
176
122
|
|
|
177
123
|
end
|
|
178
124
|
|
|
179
|
-
describe "#iterate" do
|
|
180
|
-
before do
|
|
181
|
-
@criteria.where(:street => "Bourke Street")
|
|
182
|
-
@criteria.documents = @docs
|
|
183
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "executes the criteria" do
|
|
187
|
-
acc = []
|
|
188
|
-
@context.iterate do |doc|
|
|
189
|
-
acc << doc
|
|
190
|
-
end
|
|
191
|
-
acc.should == [@melbourne]
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
|
|
195
125
|
describe "#last" do
|
|
196
126
|
|
|
197
127
|
it "returns the last matching in the enumerable" do
|
|
@@ -230,8 +160,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
230
160
|
|
|
231
161
|
before do
|
|
232
162
|
@criteria = Mongoid::Criteria.new(Person).extras({ :page => 5 })
|
|
233
|
-
@criteria.
|
|
234
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
163
|
+
@context = Mongoid::Contexts::Enumerable.new({}, @criteria.options, [])
|
|
235
164
|
end
|
|
236
165
|
|
|
237
166
|
it "returns the page option" do
|
|
@@ -244,8 +173,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
244
173
|
|
|
245
174
|
before do
|
|
246
175
|
@criteria = Mongoid::Criteria.new(Person)
|
|
247
|
-
@criteria.
|
|
248
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
176
|
+
@context = Mongoid::Contexts::Enumerable.new({}, @criteria.options, [])
|
|
249
177
|
end
|
|
250
178
|
|
|
251
179
|
it "returns 1" do
|
|
@@ -260,7 +188,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
260
188
|
|
|
261
189
|
before do
|
|
262
190
|
@criteria = Person.criteria.skip(2).limit(2)
|
|
263
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
191
|
+
@context = Mongoid::Contexts::Enumerable.new({}, @criteria.options, @docs)
|
|
264
192
|
@results = @context.paginate
|
|
265
193
|
end
|
|
266
194
|
|
|
@@ -284,9 +212,7 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
284
212
|
context "when a limit option does not exist" do
|
|
285
213
|
|
|
286
214
|
before do
|
|
287
|
-
@
|
|
288
|
-
@criteria.documents = []
|
|
289
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
|
215
|
+
@context = Mongoid::Contexts::Enumerable.new({}, { :limit => 50 }, [])
|
|
290
216
|
end
|
|
291
217
|
|
|
292
218
|
it "returns the limit" do
|
|
@@ -305,117 +231,4 @@ describe Mongoid::Contexts::Enumerable do
|
|
|
305
231
|
|
|
306
232
|
end
|
|
307
233
|
|
|
308
|
-
context "#id_criteria" do
|
|
309
|
-
|
|
310
|
-
let(:criteria) do
|
|
311
|
-
criteria = Mongoid::Criteria.new(Address)
|
|
312
|
-
criteria.documents = []
|
|
313
|
-
criteria
|
|
314
|
-
end
|
|
315
|
-
let(:context) { criteria.context }
|
|
316
|
-
|
|
317
|
-
context "with a single argument" do
|
|
318
|
-
|
|
319
|
-
let(:id) { Mongo::ObjectID.new.to_s }
|
|
320
|
-
|
|
321
|
-
before do
|
|
322
|
-
criteria.expects(:id).with(id).returns(criteria)
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
context "when the document is found" do
|
|
326
|
-
|
|
327
|
-
let(:document) { stub }
|
|
328
|
-
|
|
329
|
-
it "returns a matching document" do
|
|
330
|
-
context.expects(:one).returns(document)
|
|
331
|
-
document.expects(:blank? => false)
|
|
332
|
-
context.id_criteria(id).should == document
|
|
333
|
-
end
|
|
334
|
-
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
context "when the document is not found" do
|
|
338
|
-
|
|
339
|
-
it "raises an error" do
|
|
340
|
-
context.expects(:one).returns(nil)
|
|
341
|
-
lambda { context.id_criteria(id) }.should raise_error
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
end
|
|
345
|
-
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
context "multiple arguments" do
|
|
349
|
-
|
|
350
|
-
context "when an array of ids" do
|
|
351
|
-
|
|
352
|
-
let(:ids) do
|
|
353
|
-
(0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new.to_s }
|
|
354
|
-
end
|
|
355
|
-
|
|
356
|
-
context "when documents are found" do
|
|
357
|
-
|
|
358
|
-
let(:docs) do
|
|
359
|
-
(0..2).inject([]) { |ary, i| ary << stub }
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
before do
|
|
363
|
-
criteria.expects(:id).with(ids).returns(criteria)
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
it "returns matching documents" do
|
|
367
|
-
context.expects(:execute).returns(docs)
|
|
368
|
-
context.id_criteria(ids).should == docs
|
|
369
|
-
end
|
|
370
|
-
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
context "when documents are not found" do
|
|
374
|
-
|
|
375
|
-
it "raises an error" do
|
|
376
|
-
context.expects(:execute).returns([])
|
|
377
|
-
lambda { context.id_criteria(ids) }.should raise_error
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
end
|
|
383
|
-
|
|
384
|
-
context "when an array of object ids" do
|
|
385
|
-
|
|
386
|
-
let(:ids) do
|
|
387
|
-
(0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new }
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
context "when documents are found" do
|
|
391
|
-
|
|
392
|
-
let(:docs) do
|
|
393
|
-
(0..2).inject([]) { |ary, i| ary << stub }
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
before do
|
|
397
|
-
criteria.expects(:id).with(ids).returns(criteria)
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
it "returns matching documents" do
|
|
401
|
-
context.expects(:execute).returns(docs)
|
|
402
|
-
context.id_criteria(ids).should == docs
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
end
|
|
406
|
-
|
|
407
|
-
context "when documents are not found" do
|
|
408
|
-
|
|
409
|
-
it "raises an error" do
|
|
410
|
-
context.expects(:execute).returns([])
|
|
411
|
-
lambda { context.id_criteria(ids) }.should raise_error
|
|
412
|
-
end
|
|
413
|
-
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
end
|
|
417
|
-
end
|
|
418
|
-
|
|
419
|
-
end
|
|
420
|
-
|
|
421
234
|
end
|