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.
Files changed (135) hide show
  1. data/.watchr +15 -10
  2. data/HISTORY +342 -0
  3. data/README.rdoc +8 -1
  4. data/Rakefile +2 -3
  5. data/VERSION +1 -1
  6. data/lib/mongoid/associations/{embedded_in.rb → belongs_to.rb} +4 -4
  7. data/lib/mongoid/associations/belongs_to_related.rb +9 -6
  8. data/lib/mongoid/associations/{embeds_many.rb → has_many.rb} +20 -33
  9. data/lib/mongoid/associations/has_many_related.rb +4 -28
  10. data/lib/mongoid/associations/{embeds_one.rb → has_one.rb} +6 -6
  11. data/lib/mongoid/associations/options.rb +6 -1
  12. data/lib/mongoid/associations.rb +32 -41
  13. data/lib/mongoid/attributes.rb +6 -13
  14. data/lib/mongoid/collection.rb +1 -2
  15. data/lib/mongoid/commands/delete.rb +1 -1
  16. data/lib/mongoid/commands/delete_all.rb +1 -4
  17. data/lib/mongoid/commands/destroy.rb +1 -1
  18. data/lib/mongoid/commands/destroy_all.rb +1 -3
  19. data/lib/mongoid/commands/save.rb +0 -1
  20. data/lib/mongoid/commands.rb +13 -2
  21. data/lib/mongoid/components.rb +1 -6
  22. data/lib/mongoid/config.rb +1 -5
  23. data/lib/mongoid/contexts/enumerable.rb +17 -54
  24. data/lib/mongoid/contexts/mongo.rb +38 -101
  25. data/lib/mongoid/contexts/paging.rb +2 -2
  26. data/lib/mongoid/contexts.rb +0 -21
  27. data/lib/mongoid/criteria.rb +73 -15
  28. data/lib/mongoid/criterion/inclusion.rb +0 -2
  29. data/lib/mongoid/criterion/optional.rb +2 -10
  30. data/lib/mongoid/document.rb +30 -41
  31. data/lib/mongoid/extensions.rb +0 -15
  32. data/lib/mongoid/field.rb +7 -20
  33. data/lib/mongoid/fields.rb +10 -15
  34. data/lib/mongoid/finders.rb +98 -10
  35. data/lib/mongoid/identity.rb +2 -8
  36. data/lib/mongoid/named_scope.rb +0 -2
  37. data/lib/mongoid/validations/associated.rb +8 -3
  38. data/lib/mongoid/validations/uniqueness.rb +7 -2
  39. data/lib/mongoid/validations.rb +2 -2
  40. data/lib/mongoid/versioning.rb +1 -1
  41. data/lib/mongoid.rb +5 -21
  42. data/mongoid.gemspec +19 -59
  43. data/spec/integration/mongoid/associations_spec.rb +3 -42
  44. data/spec/integration/mongoid/attributes_spec.rb +2 -2
  45. data/spec/integration/mongoid/commands_spec.rb +13 -27
  46. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -13
  47. data/spec/integration/mongoid/criteria_spec.rb +3 -50
  48. data/spec/integration/mongoid/document_spec.rb +5 -72
  49. data/spec/integration/mongoid/finders_spec.rb +28 -85
  50. data/spec/models/address.rb +3 -3
  51. data/spec/models/animal.rb +2 -2
  52. data/spec/models/country_code.rb +2 -2
  53. data/spec/models/game.rb +1 -2
  54. data/spec/models/inheritance.rb +5 -5
  55. data/spec/models/location.rb +2 -2
  56. data/spec/models/name.rb +3 -3
  57. data/spec/models/namespacing.rb +2 -2
  58. data/spec/models/patient.rb +0 -2
  59. data/spec/models/person.rb +4 -6
  60. data/spec/models/pet.rb +3 -3
  61. data/spec/models/pet_owner.rb +3 -3
  62. data/spec/models/phone.rb +3 -3
  63. data/spec/models/post.rb +1 -1
  64. data/spec/models/translation.rb +2 -2
  65. data/spec/models/vet_visit.rb +2 -2
  66. data/spec/spec_helper.rb +2 -2
  67. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -4
  68. data/spec/unit/mongoid/associations/{embedded_in_spec.rb → belongs_to_spec.rb} +11 -11
  69. data/spec/unit/mongoid/associations/has_many_related_spec.rb +14 -45
  70. data/spec/unit/mongoid/associations/{embeds_many_spec.rb → has_many_spec.rb} +34 -79
  71. data/spec/unit/mongoid/associations/{embeds_one_spec.rb → has_one_spec.rb} +18 -18
  72. data/spec/unit/mongoid/associations/options_spec.rb +19 -20
  73. data/spec/unit/mongoid/associations_spec.rb +12 -74
  74. data/spec/unit/mongoid/attributes_spec.rb +51 -83
  75. data/spec/unit/mongoid/collection_spec.rb +0 -46
  76. data/spec/unit/mongoid/commands/delete_all_spec.rb +8 -9
  77. data/spec/unit/mongoid/commands/delete_spec.rb +3 -6
  78. data/spec/unit/mongoid/commands/destroy_all_spec.rb +2 -0
  79. data/spec/unit/mongoid/commands/destroy_spec.rb +3 -10
  80. data/spec/unit/mongoid/commands_spec.rb +11 -20
  81. data/spec/unit/mongoid/config_spec.rb +0 -18
  82. data/spec/unit/mongoid/contexts/enumerable_spec.rb +11 -198
  83. data/spec/unit/mongoid/contexts/mongo_spec.rb +54 -357
  84. data/spec/unit/mongoid/criteria_spec.rb +78 -107
  85. data/spec/unit/mongoid/criterion/exclusion_spec.rb +13 -3
  86. data/spec/unit/mongoid/criterion/inclusion_spec.rb +19 -25
  87. data/spec/unit/mongoid/criterion/optional_spec.rb +18 -25
  88. data/spec/unit/mongoid/document_spec.rb +34 -71
  89. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +2 -2
  90. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +3 -0
  91. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +2 -16
  92. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +1 -1
  93. data/spec/unit/mongoid/field_spec.rb +0 -62
  94. data/spec/unit/mongoid/fields_spec.rb +0 -33
  95. data/spec/unit/mongoid/finders_spec.rb +1 -37
  96. data/spec/unit/mongoid/identity_spec.rb +6 -47
  97. data/spec/unit/mongoid/named_scope_spec.rb +2 -15
  98. data/spec/unit/mongoid/scope_spec.rb +1 -1
  99. data/spec/unit/mongoid/validations/uniqueness_spec.rb +3 -3
  100. data/spec/unit/mongoid_spec.rb +2 -11
  101. metadata +14 -64
  102. data/lib/mongoid/associations/meta_data.rb +0 -28
  103. data/lib/mongoid/contexts/ids.rb +0 -25
  104. data/lib/mongoid/deprecation.rb +0 -22
  105. data/lib/mongoid/dirty.rb +0 -203
  106. data/lib/mongoid/extensions/big_decimal/conversions.rb +0 -19
  107. data/lib/mongoid/extensions/binary/conversions.rb +0 -17
  108. data/lib/mongoid/extensions/objectid/conversions.rb +0 -15
  109. data/lib/mongoid/extras.rb +0 -61
  110. data/lib/mongoid/javascript/functions.yml +0 -37
  111. data/lib/mongoid/javascript.rb +0 -21
  112. data/lib/mongoid/observable.rb +0 -30
  113. data/lib/mongoid/paths.rb +0 -54
  114. data/lib/mongoid/persistence/command.rb +0 -20
  115. data/lib/mongoid/persistence/insert.rb +0 -71
  116. data/lib/mongoid/persistence/update.rb +0 -78
  117. data/lib/mongoid/persistence.rb +0 -27
  118. data/lib/mongoid/state.rb +0 -32
  119. data/spec/integration/mongoid/dirty_spec.rb +0 -70
  120. data/spec/integration/mongoid/persistence/update_spec.rb +0 -46
  121. data/spec/models/callbacks.rb +0 -18
  122. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  123. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  124. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  125. data/spec/unit/mongoid/dirty_spec.rb +0 -286
  126. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  127. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  128. data/spec/unit/mongoid/extras_spec.rb +0 -102
  129. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  130. data/spec/unit/mongoid/observable_spec.rb +0 -46
  131. data/spec/unit/mongoid/paths_spec.rb +0 -124
  132. data/spec/unit/mongoid/persistence/insert_spec.rb +0 -175
  133. data/spec/unit/mongoid/persistence/update_spec.rb +0 -148
  134. data/spec/unit/mongoid/persistence_spec.rb +0 -40
  135. 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
- @criteria = Mongoid::Criteria.new(Address)
12
- @criteria.documents = @docs
13
- @criteria.where(:street => "Bourke Street").only(:number)
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
- @criteria.only(:number)
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
- @criteria.skip(2).limit(2)
100
- @context = Mongoid::Contexts::Enumerable.new(@criteria)
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
- @criteria = Mongoid::Criteria.new(Address)
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.documents = []
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.documents = []
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
- @criteria = Person.criteria.limit(50)
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