mongomodel 0.4.6 → 0.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/Appraisals +12 -0
  2. data/bin/console +1 -2
  3. data/gemfiles/mongo_mapper.gemfile +12 -0
  4. data/gemfiles/mongoid.gemfile +12 -0
  5. data/lib/mongomodel.rb +3 -0
  6. data/lib/mongomodel/compatibility/mongo_mapper.rb +23 -0
  7. data/lib/mongomodel/compatibility/mongoid.rb +17 -0
  8. data/lib/mongomodel/concerns/properties.rb +5 -0
  9. data/lib/mongomodel/concerns/validations.rb +5 -3
  10. data/lib/mongomodel/support/core_extensions.rb +4 -4
  11. data/lib/mongomodel/support/mongo_options.rb +4 -2
  12. data/lib/mongomodel/support/mongo_order.rb +4 -0
  13. data/lib/mongomodel/support/scope.rb +1 -1
  14. data/lib/mongomodel/version.rb +1 -1
  15. data/spec/mongomodel/attributes/store_spec.rb +12 -12
  16. data/spec/mongomodel/concerns/associations/belongs_to_spec.rb +13 -13
  17. data/spec/mongomodel/concerns/associations/has_many_by_foreign_key_spec.rb +25 -25
  18. data/spec/mongomodel/concerns/associations/has_many_by_ids_spec.rb +25 -25
  19. data/spec/mongomodel/concerns/attribute_methods/before_type_cast_spec.rb +5 -5
  20. data/spec/mongomodel/concerns/attribute_methods/dirty_spec.rb +21 -21
  21. data/spec/mongomodel/concerns/attribute_methods/multi_parameter_assignment_spec.rb +3 -3
  22. data/spec/mongomodel/concerns/attribute_methods/protected_spec.rb +10 -10
  23. data/spec/mongomodel/concerns/attribute_methods/query_spec.rb +6 -6
  24. data/spec/mongomodel/concerns/attribute_methods/read_spec.rb +6 -6
  25. data/spec/mongomodel/concerns/attribute_methods/write_spec.rb +5 -5
  26. data/spec/mongomodel/concerns/attribute_methods_spec.rb +5 -5
  27. data/spec/mongomodel/concerns/attributes_spec.rb +13 -13
  28. data/spec/mongomodel/concerns/callbacks_spec.rb +11 -11
  29. data/spec/mongomodel/concerns/logging_spec.rb +2 -2
  30. data/spec/mongomodel/concerns/observing_spec.rb +3 -3
  31. data/spec/mongomodel/concerns/pretty_inspect_spec.rb +5 -5
  32. data/spec/mongomodel/concerns/properties_spec.rb +6 -6
  33. data/spec/mongomodel/concerns/serialization/json_serialization_spec.rb +6 -6
  34. data/spec/mongomodel/concerns/timestamps_spec.rb +10 -10
  35. data/spec/mongomodel/concerns/translation_spec.rb +1 -1
  36. data/spec/mongomodel/concerns/validations_spec.rb +12 -4
  37. data/spec/mongomodel/document/callbacks_spec.rb +10 -10
  38. data/spec/mongomodel/document/collection_modifiers_spec.rb +1 -1
  39. data/spec/mongomodel/document/dynamic_finders_spec.rb +5 -5
  40. data/spec/mongomodel/document/finders_spec.rb +9 -9
  41. data/spec/mongomodel/document/indexes_spec.rb +19 -19
  42. data/spec/mongomodel/document/optimistic_locking_spec.rb +8 -8
  43. data/spec/mongomodel/document/persistence_spec.rb +38 -38
  44. data/spec/mongomodel/document/scopes_spec.rb +8 -8
  45. data/spec/mongomodel/document/validations/uniqueness_spec.rb +9 -9
  46. data/spec/mongomodel/document/validations_spec.rb +16 -16
  47. data/spec/mongomodel/document_spec.rb +11 -11
  48. data/spec/mongomodel/embedded_document_spec.rb +13 -13
  49. data/spec/mongomodel/mongomodel_spec.rb +4 -4
  50. data/spec/mongomodel/support/collection_spec.rb +40 -40
  51. data/spec/mongomodel/support/map_spec.rb +41 -41
  52. data/spec/mongomodel/support/mongo_operator_spec.rb +11 -9
  53. data/spec/mongomodel/support/mongo_options_spec.rb +17 -17
  54. data/spec/mongomodel/support/mongo_order_spec.rb +22 -22
  55. data/spec/mongomodel/support/property_spec.rb +21 -12
  56. data/spec/mongomodel/support/scope_spec.rb +134 -134
  57. data/spec/spec_helper.rb +1 -0
  58. data/spec/specdoc.opts +0 -3
  59. metadata +7 -5
@@ -6,27 +6,27 @@ module MongoModel
6
6
  context "no options" do
7
7
  subject { Property.new(:name, String) }
8
8
 
9
- it "should set property name" do
9
+ it "sets property name" do
10
10
  subject.name.should == :name
11
11
  end
12
12
 
13
- it "should set property type" do
13
+ it "sets property type" do
14
14
  subject.type.should == String
15
15
  end
16
16
 
17
- it "should set default as value from name" do
17
+ it "sets default as value from name" do
18
18
  subject.as.should == 'name'
19
19
  end
20
20
 
21
- it "should default to nil" do
21
+ it "defaults to nil" do
22
22
  subject.default(mock('document instance')).should be_nil
23
23
  end
24
24
 
25
- it "should equal a property with the same name and type" do
25
+ it "equals a property with the same name and type" do
26
26
  subject.should == Property.new(:name, String)
27
27
  end
28
28
 
29
- it "should not equal properties with different name, type and options" do
29
+ it "does not equal properties with different name, type and options" do
30
30
  subject.should_not == Property.new(:address, String)
31
31
  subject.should_not == Property.new(:name, Float)
32
32
  subject.should_not == Property.new(:name, String, :default => 'Anonymous')
@@ -38,23 +38,23 @@ module MongoModel
38
38
  context "with options" do
39
39
  subject { Property.new(:age, Integer, :as => '_record_age', :default => 21) }
40
40
 
41
- it "should set property options" do
41
+ it "sets property options" do
42
42
  subject.options.should == { :as => '_record_age', :default => 21 }
43
43
  end
44
44
 
45
- it "should set custom as value" do
45
+ it "sets custom as value" do
46
46
  subject.as.should == '_record_age'
47
47
  end
48
48
 
49
- it "should default to custom default" do
49
+ it "defaults to custom default" do
50
50
  subject.default(mock('document instance')).should == 21
51
51
  end
52
52
 
53
- it "should equal a property with the same name, type and options" do
53
+ it "equals a property with the same name, type and options" do
54
54
  subject.should == Property.new(:age, Integer, :as => '_record_age', :default => 21)
55
55
  end
56
56
 
57
- it "should not equal properties with different name, type and options" do
57
+ it "does not equal properties with different name, type and options" do
58
58
  subject.should_not == Property.new(:address, String)
59
59
  subject.should_not == Property.new(:name, Float)
60
60
  subject.should_not == Property.new(:name, String, :default => 'Anonymous')
@@ -63,7 +63,7 @@ module MongoModel
63
63
  context "with callable default" do
64
64
  subject { Property.new(:age, Integer, :default => lambda { |doc| doc.answer }) }
65
65
 
66
- it "should call lambda with given instance" do
66
+ it "calls lambda with given instance" do
67
67
  subject.default(mock('document instance', :answer => 42)).should == 42
68
68
  end
69
69
  end
@@ -78,6 +78,15 @@ module MongoModel
78
78
  it { should be_internal }
79
79
  end
80
80
  end
81
+
82
+ it "does not validate if options[:validate] is false" do
83
+ Property.new(:age, Integer, :validate => false).validate?.should be_false
84
+ end
85
+
86
+ it "validates when options[:validate] is true or not provided" do
87
+ Property.new(:age, Integer, :validate => true).validate?.should be_true
88
+ Property.new(:age, Integer).validate?.should be_true
89
+ end
81
90
  end
82
91
  end
83
92
  end
@@ -40,37 +40,37 @@ module MongoModel
40
40
  end
41
41
 
42
42
  describe "#to_a" do
43
- it "should find and return documents matching conditions" do
43
+ it "finds and return documents matching conditions" do
44
44
  model.should_find(finder_options, posts) do
45
45
  subject.to_a.should == posts
46
46
  end
47
47
  end
48
48
 
49
- it "should load the scope" do
49
+ it "loads the scope" do
50
50
  subject.to_a
51
51
  subject.should be_loaded
52
52
  end
53
53
 
54
- it "should cache the documents" do
54
+ it "caches the documents" do
55
55
  subject.to_a
56
56
  model.should_not_find { subject.to_a }
57
57
  end
58
58
  end
59
59
 
60
60
  describe "#as_json" do
61
- it "should delegate to #to_a" do
61
+ it "delegates to #to_a" do
62
62
  subject.as_json.should == subject.to_a.as_json
63
63
  end
64
64
  end
65
65
 
66
66
  describe "#count" do
67
- it "should count documents matching conditions and return the result" do
67
+ it "counts documents matching conditions and return the result" do
68
68
  model.should_count(finder_options, 4) do
69
69
  subject.count
70
70
  end
71
71
  end
72
72
 
73
- it "should not cache the result" do
73
+ it "does not cache the result" do
74
74
  subject.count
75
75
  model.should_count(finder_options, 4) do
76
76
  subject.count.should == 4
@@ -82,21 +82,21 @@ module MongoModel
82
82
  before(:each) { model.stub_find(posts) }
83
83
 
84
84
  subject_loaded do
85
- it "should return the number of matching documents" do
85
+ it "returns the number of matching documents" do
86
86
  subject.size.should == 5
87
87
  end
88
88
 
89
- it "should not perform a count on the collection" do
89
+ it "does not perform a count on the collection" do
90
90
  model.should_not_count { subject.size }
91
91
  end
92
92
  end
93
93
 
94
94
  subject_not_loaded do
95
- it "should return the number of matching documents" do
95
+ it "returns the number of matching documents" do
96
96
  subject.size.should == 5
97
97
  end
98
98
 
99
- it "should perform a count on the collection" do
99
+ it "performs a count on the collection" do
100
100
  model.should_count(finder_options, 9) do
101
101
  subject.size.should == 9
102
102
  end
@@ -122,7 +122,7 @@ module MongoModel
122
122
  end
123
123
 
124
124
  subject_loaded do
125
- it "should not perform a count on the collection" do
125
+ it "does not perform a count on the collection" do
126
126
  model.should_not_count { subject.empty? }
127
127
  end
128
128
  end
@@ -130,7 +130,7 @@ module MongoModel
130
130
 
131
131
  describe "#any?" do
132
132
  context "when no block given" do
133
- it "should perform a count on the collection" do
133
+ it "performs a count on the collection" do
134
134
  model.should_count(finder_options, 1) { subject.any? }
135
135
  end
136
136
 
@@ -152,7 +152,7 @@ module MongoModel
152
152
  end
153
153
 
154
154
  context "when block given" do
155
- it "should delegate block to to_a" do
155
+ it "delegates block to to_a" do
156
156
  blk = lambda { |*args| true }
157
157
  subject.to_a.should_receive(:any?).with(&blk)
158
158
  subject.any?(&blk)
@@ -162,11 +162,11 @@ module MongoModel
162
162
 
163
163
  describe "#reset" do
164
164
  always do
165
- it "should return itself" do
165
+ it "returns itself" do
166
166
  subject.reset.should equal(subject)
167
167
  end
168
168
 
169
- it "should not be loaded" do
169
+ it "is not loaded" do
170
170
  subject.reset
171
171
  subject.should_not be_loaded
172
172
  end
@@ -175,21 +175,21 @@ module MongoModel
175
175
 
176
176
  describe "#reload" do
177
177
  always do
178
- it "should return itself" do
178
+ it "returns itself" do
179
179
  subject.reload.should equal(subject)
180
180
  end
181
181
 
182
- it "should be loaded after calling" do
182
+ it "is loaded after calling" do
183
183
  subject.reload
184
184
  subject.should be_loaded
185
185
  end
186
186
 
187
- it "should reset its finder options" do
187
+ it "resets its finder options" do
188
188
  old_finder_options = subject.finder_options
189
189
  subject.reload.finder_options.should_not equal(old_finder_options)
190
190
  end
191
191
 
192
- it "should reset its options for create" do
192
+ it "resets its options for create" do
193
193
  old_options_for_create = subject.options_for_create
194
194
  subject.reload.options_for_create.should_not equal(old_options_for_create)
195
195
  end
@@ -199,22 +199,22 @@ module MongoModel
199
199
  describe "#==" do
200
200
  before(:each) { model.stub_find(posts) }
201
201
 
202
- it "should be equal to an array with matching results" do
202
+ it "is equal to an array with matching results" do
203
203
  subject.should == posts
204
204
  end
205
205
 
206
- it "should not be equal to an array with different results" do
206
+ it "is not equal to an array with different results" do
207
207
  subject.should_not == []
208
208
  end
209
209
  end
210
210
 
211
211
  describe "array methods" do
212
- it "should forward [] to to_a" do
212
+ it "forwards [] to to_a" do
213
213
  subject.to_a.should_receive(:[]).with(0)
214
214
  subject[0]
215
215
  end
216
216
 
217
- it "should forward each to to_a" do
217
+ it "forwards each to to_a" do
218
218
  blk = lambda { |*args| true }
219
219
  subject.to_a.should_receive(:each).with(&blk)
220
220
  subject.each(&blk)
@@ -222,113 +222,113 @@ module MongoModel
222
222
  end
223
223
 
224
224
  describe "#where" do
225
- it "should return a new scope" do
225
+ it "returns a new scope" do
226
226
  subject.where(:author => "Sam").should be_an_instance_of(Scope)
227
227
  end
228
228
 
229
- it "should not be loaded" do
229
+ it "is not loaded" do
230
230
  subject.to_a
231
231
  subject.where(:author => "Sam").should_not be_loaded
232
232
  end
233
233
 
234
- it "should add individual where values" do
234
+ it "adds individual where values" do
235
235
  where_scope = subject.where(:author => "Sam")
236
236
  where_scope.where_values.should == subject.where_values + [{ :author => "Sam" }]
237
237
  end
238
238
 
239
- it "should add multiple where values" do
239
+ it "adds multiple where values" do
240
240
  where_scope = subject.where({ :author => "Sam" }, { :published => false })
241
241
  where_scope.where_values.should == subject.where_values + [{ :author => "Sam" }, { :published => false }]
242
242
  end
243
243
  end
244
244
 
245
245
  describe "#where!" do
246
- it "should overwrite where values" do
246
+ it "overwrites where values" do
247
247
  where_scope = subject.where!(:author => "Sam")
248
248
  where_scope.where_values.should == [{ :author => "Sam" }]
249
249
  end
250
250
  end
251
251
 
252
252
  describe "#order" do
253
- it "should return a new scope" do
253
+ it "returns a new scope" do
254
254
  subject.order(:author.asc).should be_an_instance_of(Scope)
255
255
  end
256
256
 
257
- it "should not be loaded" do
257
+ it "is not loaded" do
258
258
  subject.to_a
259
259
  subject.order(:author.asc).should_not be_loaded
260
260
  end
261
261
 
262
- it "should add individual order values" do
262
+ it "adds individual order values" do
263
263
  order_scope = subject.order(:author.asc)
264
264
  order_scope.order_values.should == subject.order_values + [:author.asc]
265
265
  end
266
266
 
267
- it "should add multiple order values" do
267
+ it "adds multiple order values" do
268
268
  order_scope = subject.order(:author.asc, :published.desc)
269
269
  order_scope.order_values.should == subject.order_values + [:author.asc, :published.desc]
270
270
  end
271
271
  end
272
272
 
273
273
  describe "#order!" do
274
- it "should overwrite order values" do
274
+ it "overwrites order values" do
275
275
  order_scope = subject.order!(:author.asc)
276
276
  order_scope.order_values.should == [:author.asc]
277
277
  end
278
278
  end
279
279
 
280
280
  describe "#select" do
281
- it "should return a new scope" do
281
+ it "returns a new scope" do
282
282
  subject.select(:author).should be_an_instance_of(Scope)
283
283
  end
284
284
 
285
- it "should not be loaded" do
285
+ it "is not loaded" do
286
286
  subject.to_a
287
287
  subject.select(:author).should_not be_loaded
288
288
  end
289
289
 
290
- it "should add individual select values" do
290
+ it "adds individual select values" do
291
291
  select_scope = subject.select(:author)
292
292
  select_scope.select_values.should == subject.select_values + [:author]
293
293
  end
294
294
 
295
- it "should add multiple select values" do
295
+ it "adds multiple select values" do
296
296
  select_scope = subject.select(:author, :published)
297
297
  select_scope.select_values.should == subject.select_values + [:author, :published]
298
298
  end
299
299
  end
300
300
 
301
301
  describe "#select!" do
302
- it "should overwrite select values" do
302
+ it "overwrites select values" do
303
303
  select_scope = subject.select!(:author)
304
304
  select_scope.select_values.should == [:author]
305
305
  end
306
306
  end
307
307
 
308
308
  describe "#limit" do
309
- it "should return a new scope" do
309
+ it "returns a new scope" do
310
310
  subject.limit(10).should be_an_instance_of(Scope)
311
311
  end
312
312
 
313
- it "should not be loaded" do
313
+ it "is not loaded" do
314
314
  subject.limit(10).should_not be_loaded
315
315
  end
316
316
 
317
- it "should override previous limit value" do
317
+ it "overrides previous limit value" do
318
318
  subject.limit(10).limit_value.should == 10
319
319
  end
320
320
  end
321
321
 
322
322
  describe "#offset" do
323
- it "should return a new scope" do
323
+ it "returns a new scope" do
324
324
  subject.offset(10).should be_an_instance_of(Scope)
325
325
  end
326
326
 
327
- it "should not be loaded" do
327
+ it "is not loaded" do
328
328
  subject.offset(10).should_not be_loaded
329
329
  end
330
330
 
331
- it "should override previous offset value" do
331
+ it "overrides previous offset value" do
332
332
  subject.offset(10).offset_value.should == 10
333
333
  end
334
334
  end
@@ -336,19 +336,19 @@ module MongoModel
336
336
  describe "#from" do
337
337
  define_class(:NotAPost, Document)
338
338
 
339
- it "should return a new scope" do
339
+ it "returns a new scope" do
340
340
  subject.from(NotAPost.collection).should be_an_instance_of(Scope)
341
341
  end
342
342
 
343
- it "should not be loaded" do
343
+ it "is not loaded" do
344
344
  subject.from(NotAPost.collection).should_not be_loaded
345
345
  end
346
346
 
347
- it "should override collection" do
347
+ it "overrides collection" do
348
348
  subject.from(NotAPost.collection).collection.should == NotAPost.collection
349
349
  end
350
350
 
351
- it "should allow collection to be set using string" do
351
+ it "allows collection to be set using string" do
352
352
  subject.from(NotAPost.collection.name).collection.name.should == NotAPost.collection.name
353
353
  end
354
354
  end
@@ -359,19 +359,19 @@ module MongoModel
359
359
  before(:each) { model.stub_find([]) }
360
360
 
361
361
  always do
362
- it "should return an empty array" do
362
+ it "returns an empty array" do
363
363
  subject.first(3).should == []
364
364
  end
365
365
  end
366
366
 
367
367
  subject_loaded do
368
- it "should not perform a find" do
368
+ it "does not perform a find" do
369
369
  model.should_not_find { subject.first(3) }
370
370
  end
371
371
  end
372
372
 
373
373
  subject_not_loaded do
374
- it "should find with a limit of 3" do
374
+ it "finds with a limit of 3" do
375
375
  model.should_find(finder_options.merge(:limit => 3), []) { subject.first(3) }
376
376
  end
377
377
  end
@@ -381,7 +381,7 @@ module MongoModel
381
381
  before(:each) { model.stub_find([posts[0], posts[1], posts[2]]) }
382
382
 
383
383
  always do
384
- it "should return the first documents in an array" do
384
+ it "returns the first documents in an array" do
385
385
  subject.first(3).should == [posts[0], posts[1], posts[2]]
386
386
  end
387
387
  end
@@ -393,19 +393,19 @@ module MongoModel
393
393
  before(:each) { model.stub_find([]) }
394
394
 
395
395
  always do
396
- it "should return nil" do
396
+ it "returns nil" do
397
397
  subject.first.should be_nil
398
398
  end
399
399
  end
400
400
 
401
401
  subject_loaded do
402
- it "should not perform a find" do
402
+ it "does not perform a find" do
403
403
  model.should_not_find { subject.first }
404
404
  end
405
405
  end
406
406
 
407
407
  subject_not_loaded do
408
- it "should find with a limit of 1" do
408
+ it "finds with a limit of 1" do
409
409
  model.should_find(finder_options.merge(:limit => 1), []) { subject.first }
410
410
  end
411
411
  end
@@ -415,7 +415,7 @@ module MongoModel
415
415
  before(:each) { model.stub_find([posts[0]]) }
416
416
 
417
417
  always do
418
- it "should return the first document" do
418
+ it "returns the first document" do
419
419
  subject.first.should == posts[0]
420
420
  end
421
421
  end
@@ -434,19 +434,19 @@ module MongoModel
434
434
  before(:each) { model.stub_find([]) }
435
435
 
436
436
  always do
437
- it "should return an empty array" do
437
+ it "returns an empty array" do
438
438
  subject.last(2).should == []
439
439
  end
440
440
  end
441
441
 
442
442
  subject_loaded do
443
- it "should not perform a find" do
443
+ it "does not perform a find" do
444
444
  model.should_not_find { subject.last(2) }
445
445
  end
446
446
  end
447
447
 
448
448
  subject_not_loaded do
449
- it "should find with a limit of 2" do
449
+ it "finds with a limit of 2" do
450
450
  model.should_find(reversed_finder_options.merge(:limit => 2), []) { subject.last(2) }
451
451
  end
452
452
  end
@@ -456,7 +456,7 @@ module MongoModel
456
456
  before(:each) { model.stub_find([posts[0], posts[1]]) }
457
457
 
458
458
  always do
459
- it "should return the last documents in an array" do
459
+ it "returns the last documents in an array" do
460
460
  subject.last(2).should == [posts[0], posts[1]]
461
461
  end
462
462
  end
@@ -468,19 +468,19 @@ module MongoModel
468
468
  before(:each) { model.stub_find([]) }
469
469
 
470
470
  always do
471
- it "should return nil" do
471
+ it "returns nil" do
472
472
  subject.last.should be_nil
473
473
  end
474
474
  end
475
475
 
476
476
  subject_loaded do
477
- it "should not perform a find" do
477
+ it "does not perform a find" do
478
478
  model.should_not_find { subject.last }
479
479
  end
480
480
  end
481
481
 
482
482
  subject_not_loaded do
483
- it "should find with a limit of 1" do
483
+ it "finds with a limit of 1" do
484
484
  model.should_find(reversed_finder_options.merge(:limit => 1), []) { subject.last }
485
485
  end
486
486
  end
@@ -491,7 +491,7 @@ module MongoModel
491
491
  before(:each) { model.stub_find([post]) }
492
492
 
493
493
  always do
494
- it "should return the last document" do
494
+ it "returns the last document" do
495
495
  subject.last.should == post
496
496
  end
497
497
  end
@@ -500,7 +500,7 @@ module MongoModel
500
500
  end
501
501
 
502
502
  describe "#all" do
503
- it "should return all documents" do
503
+ it "returns all documents" do
504
504
  model.should_find(finder_options, posts) do
505
505
  subject.all.should == posts
506
506
  end
@@ -511,7 +511,7 @@ module MongoModel
511
511
  context "with single id" do
512
512
  let(:post) { posts.first }
513
513
 
514
- it "should perform find on collection" do
514
+ it "performs find on collection" do
515
515
  model.should_find(finder_options.deep_merge(:conditions => { :id => post.id }, :limit => 1), [post]) do
516
516
  subject.find(post.id)
517
517
  end
@@ -520,7 +520,7 @@ module MongoModel
520
520
  context "when document exists" do
521
521
  before(:each) { model.stub_find([post]) }
522
522
 
523
- it "should find and return document" do
523
+ it "finds and return document" do
524
524
  subject.find(post.id).should == post
525
525
  end
526
526
  end
@@ -528,7 +528,7 @@ module MongoModel
528
528
  context "when document does not exist" do
529
529
  before(:each) { model.stub_find([]) }
530
530
 
531
- it "should raise a DocumentNotFound exception" do
531
+ it "raises a DocumentNotFound exception" do
532
532
  lambda {
533
533
  subject.find('missing')
534
534
  }.should raise_error(MongoModel::DocumentNotFound)
@@ -540,7 +540,7 @@ module MongoModel
540
540
  let(:post1) { posts.first }
541
541
  let(:post2) { posts.last }
542
542
 
543
- it "should perform find on collection" do
543
+ it "performs find on collection" do
544
544
  model.should_find(finder_options.deep_merge(:conditions => { :id.in => [post2.id, post1.id] }), [post1, post2]) do
545
545
  subject.find(post2.id, post1.id)
546
546
  end
@@ -549,7 +549,7 @@ module MongoModel
549
549
  context "when all documents exist" do
550
550
  before(:each) { model.stub_find([post2, post1]) }
551
551
 
552
- it "should return documents in order given" do
552
+ it "returns documents in order given" do
553
553
  subject.find(post2.id, post1.id).should == [post2, post1]
554
554
  end
555
555
  end
@@ -557,7 +557,7 @@ module MongoModel
557
557
  context "when some documents do not exist" do
558
558
  before(:each) { model.stub_find([post1]) }
559
559
 
560
- it "should raise a DocumentNotFound exception" do
560
+ it "raises a DocumentNotFound exception" do
561
561
  lambda {
562
562
  subject.find(post1.id, 'missing')
563
563
  }.should raise_error(MongoModel::DocumentNotFound)
@@ -569,7 +569,7 @@ module MongoModel
569
569
  describe "#exists?" do
570
570
  let(:post) { posts.first }
571
571
 
572
- it "should perform a count on the collection" do
572
+ it "performs a count on the collection" do
573
573
  model.should_count(finder_options.deep_merge(:conditions => { :id => post.id }), 1) do
574
574
  subject.exists?(post.id)
575
575
  end
@@ -578,7 +578,7 @@ module MongoModel
578
578
  context "when the document exists" do
579
579
  before(:each) { model.stub_find([post])}
580
580
 
581
- it "should return true" do
581
+ it "returns true" do
582
582
  subject.exists?(post.id).should be_true
583
583
  end
584
584
  end
@@ -586,21 +586,21 @@ module MongoModel
586
586
  context "when the document does not exist" do
587
587
  before(:each) { model.stub_find([])}
588
588
 
589
- it "should return false" do
589
+ it "returns false" do
590
590
  subject.exists?('missing').should be_false
591
591
  end
592
592
  end
593
593
  end
594
594
 
595
595
  describe "#delete_all" do
596
- it "should remove all matching documents from collection" do
596
+ it "removes all matching documents from collection" do
597
597
  model.should_delete(finder_conditions) do
598
598
  subject.delete_all
599
599
  end
600
600
  end
601
601
 
602
602
  subject_loaded do
603
- it "should reset the scope" do
603
+ it "resets the scope" do
604
604
  subject.delete_all
605
605
  subject.should_not be_loaded
606
606
  end
@@ -609,14 +609,14 @@ module MongoModel
609
609
 
610
610
  describe "#delete" do
611
611
  context "by single id" do
612
- it "should remove the document from the collection" do
612
+ it "removes the document from the collection" do
613
613
  model.should_delete(finder_conditions.merge(:id => "the-id")) do
614
614
  subject.delete("the-id")
615
615
  end
616
616
  end
617
617
 
618
618
  subject_loaded do
619
- it "should reset the scope" do
619
+ it "resets the scope" do
620
620
  subject.delete("the-id")
621
621
  subject.should_not be_loaded
622
622
  end
@@ -624,14 +624,14 @@ module MongoModel
624
624
  end
625
625
 
626
626
  context "by multiple ids" do
627
- it "should remove the document from the collection" do
627
+ it "removes the document from the collection" do
628
628
  model.should_delete(finder_conditions.merge(:id.in => ["first-id", "second-id"])) do
629
629
  subject.delete("first-id", "second-id")
630
630
  end
631
631
  end
632
632
 
633
633
  subject_loaded do
634
- it "should reset the scope" do
634
+ it "resets the scope" do
635
635
  subject.delete("first-id", "second-id")
636
636
  subject.should_not be_loaded
637
637
  end
@@ -645,14 +645,14 @@ module MongoModel
645
645
 
646
646
  before(:each) { model.stub_find([post1, post2]) }
647
647
 
648
- it "should destroy all matching documents individually" do
648
+ it "destroys all matching documents individually" do
649
649
  Post.should_delete(:id => post1.id)
650
650
  Post.should_delete(:id => post2.id)
651
651
  subject.destroy_all
652
652
  end
653
653
 
654
654
  subject_loaded do
655
- it "should reset the scope" do
655
+ it "resets the scope" do
656
656
  subject.destroy_all
657
657
  subject.should_not be_loaded
658
658
  end
@@ -665,13 +665,13 @@ module MongoModel
665
665
 
666
666
  before(:each) { model.stub_find([post]) }
667
667
 
668
- it "should destroy the retrieved document" do
668
+ it "destroys the retrieved document" do
669
669
  Post.should_delete(:id => post.id)
670
670
  subject.destroy(post.id)
671
671
  end
672
672
 
673
673
  subject_loaded do
674
- it "should reset the scope" do
674
+ it "resets the scope" do
675
675
  subject.destroy(post.id)
676
676
  subject.should_not be_loaded
677
677
  end
@@ -684,14 +684,14 @@ module MongoModel
684
684
 
685
685
  before(:each) { model.stub_find([post1, post2]) }
686
686
 
687
- it "should destroy the documents individually" do
687
+ it "destroys the documents individually" do
688
688
  Post.should_delete(:id => post1.id)
689
689
  Post.should_delete(:id => post2.id)
690
690
  subject.destroy(post1.id, post2.id)
691
691
  end
692
692
 
693
693
  subject_loaded do
694
- it "should reset the scope" do
694
+ it "resets the scope" do
695
695
  subject.destroy(post1.id, post2.id)
696
696
  subject.should_not be_loaded
697
697
  end
@@ -700,13 +700,13 @@ module MongoModel
700
700
  end
701
701
 
702
702
  describe "#update_all" do
703
- it "should update all matching documents" do
703
+ it "updates all matching documents" do
704
704
  model.should_update(finder_conditions, { :name => "New name" })
705
705
  subject.update_all(:name => "New name")
706
706
  end
707
707
 
708
708
  subject_loaded do
709
- it "should reset the scope" do
709
+ it "resets the scope" do
710
710
  subject.update_all(:name => "New name")
711
711
  subject.should_not be_loaded
712
712
  end
@@ -717,13 +717,13 @@ module MongoModel
717
717
  context "by single id" do
718
718
  let(:post) { posts.first }
719
719
 
720
- it "should update the document with the given id" do
720
+ it "updates the document with the given id" do
721
721
  model.should_update(finder_conditions.merge(:id => post.id), { :name => "New name" })
722
722
  subject.update(post.id, :name => "New name")
723
723
  end
724
724
 
725
725
  subject_loaded do
726
- it "should reset the scope" do
726
+ it "resets the scope" do
727
727
  subject.update(post.id, {})
728
728
  subject.should_not be_loaded
729
729
  end
@@ -734,13 +734,13 @@ module MongoModel
734
734
  let(:post1) { posts.first }
735
735
  let(:post2) { posts.last }
736
736
 
737
- it "should update the documents with the given ids" do
737
+ it "updates the documents with the given ids" do
738
738
  model.should_update(finder_conditions.merge(:id.in => [post1.id, post2.id]), { :name => "New name" })
739
739
  subject.update([post1.id, post2.id], :name => "New name")
740
740
  end
741
741
 
742
742
  subject_loaded do
743
- it "should reset the scope" do
743
+ it "resets the scope" do
744
744
  subject.update([post1.id, post2.id], {})
745
745
  subject.should_not be_loaded
746
746
  end
@@ -749,25 +749,25 @@ module MongoModel
749
749
  end
750
750
 
751
751
  describe "#paginate" do
752
- it "should load the first page of results by default" do
752
+ it "loads the first page of results by default" do
753
753
  model.should_find(finder_options.merge(:offset => 0, :limit => 20), posts) {
754
754
  subject.paginate
755
755
  }
756
756
  end
757
757
 
758
- it "should load a specified page of results" do
758
+ it "loads a specified page of results" do
759
759
  model.should_find(finder_options.merge(:offset => 40, :limit => 20), posts) {
760
760
  subject.paginate(:page => 3)
761
761
  }
762
762
  end
763
763
 
764
- it "should allow the per_page option to be set" do
764
+ it "allows the per_page option to be set" do
765
765
  model.should_find(finder_options.merge(:offset => 7, :limit => 7), posts) {
766
766
  subject.paginate(:per_page => 7, :page => 2)
767
767
  }
768
768
  end
769
769
 
770
- it "should auto-detect total entries where possible" do
770
+ it "auto s-detect total entries where possible" do
771
771
  paginator = nil
772
772
 
773
773
  model.should_find(finder_options.merge(:offset => 0, :limit => 20), posts) {
@@ -777,7 +777,7 @@ module MongoModel
777
777
  paginator.total_entries.should == 5
778
778
  end
779
779
 
780
- it "should load total entries using count when auto-detection not possible" do
780
+ it "loads total entries using count when auto-detection not possible" do
781
781
  paginator = nil
782
782
 
783
783
  subject.stub!(:count).and_return(57)
@@ -790,7 +790,7 @@ module MongoModel
790
790
  end
791
791
 
792
792
  describe "#in_batches" do
793
- it "should yield documents in groups of given size" do
793
+ it "yields documents in groups of given size" do
794
794
  model.should_find(finder_options.merge(:offset => 0, :limit => 3), posts.first(3))
795
795
  model.should_find(finder_options.merge(:offset => 3, :limit => 3), posts.last(2))
796
796
 
@@ -827,14 +827,14 @@ module MongoModel
827
827
 
828
828
  it_should_behave_like "all scopes"
829
829
 
830
- it "should use collection from class" do
830
+ it "uses collection from class" do
831
831
  subject.collection.should == Post.collection
832
832
  end
833
833
 
834
834
  describe "#inspect" do
835
835
  before(:each) { Post.stub_find(posts) }
836
836
 
837
- it "should delegate to to_a" do
837
+ it "delegates to to_a" do
838
838
  subject.inspect.should == posts.inspect
839
839
  end
840
840
  end
@@ -842,11 +842,11 @@ module MongoModel
842
842
  describe "#==" do
843
843
  define_class(:NotAPost, Document)
844
844
 
845
- it "should be equal to a new scope for the same class" do
845
+ it "is equal to a new scope for the same class" do
846
846
  subject.should == Scope.new(Post)
847
847
  end
848
848
 
849
- it "should not be equal to a scope for a different class" do
849
+ it "is not equal to a scope for a different class" do
850
850
  subject.should_not == Scope.new(NotAPost)
851
851
  end
852
852
  end
@@ -854,66 +854,66 @@ module MongoModel
854
854
  describe "#reverse_order" do
855
855
  subject { basic_scope.reverse_order }
856
856
 
857
- it "should return a new scope" do
857
+ it "returns a new scope" do
858
858
  subject.should be_an_instance_of(Scope)
859
859
  end
860
860
 
861
- it "should not be loaded" do
861
+ it "is not loaded" do
862
862
  basic_scope.to_a # Load parent scope
863
863
  subject.should_not be_loaded
864
864
  end
865
865
 
866
- it "should set the order value to descending by id" do
866
+ it "sets the order value to descending by id" do
867
867
  subject.order_values.should == [:id.desc]
868
868
  end
869
869
  end
870
870
 
871
871
  describe "#build" do
872
- it "should return a new document" do
872
+ it "returns a new document" do
873
873
  subject.build.should be_an_instance_of(Post)
874
874
  end
875
875
 
876
- it "should be aliased as #new" do
876
+ it "is aliased as #new" do
877
877
  subject.new(:id => '123').should == subject.build(:id => '123')
878
878
  end
879
879
  end
880
880
 
881
881
  describe "#create" do
882
- it "should return a new document" do
882
+ it "returns a new document" do
883
883
  subject.create.should be_an_instance_of(Post)
884
884
  end
885
885
 
886
- it "should save the document" do
886
+ it "saves the document" do
887
887
  subject.create.should_not be_a_new_record
888
888
  end
889
889
  end
890
890
 
891
891
  describe "#apply_finder_options" do
892
- it "should return a new scope" do
892
+ it "returns a new scope" do
893
893
  subject.apply_finder_options({}).should be_an_instance_of(Scope)
894
894
  end
895
895
 
896
- it "should set where values from options" do
896
+ it "sets where values from options" do
897
897
  scope = subject.apply_finder_options({ :conditions => { :author => "John" } })
898
898
  scope.where_values.should == [{ :author => "John" }]
899
899
  end
900
900
 
901
- it "should set order values from options" do
901
+ it "sets order values from options" do
902
902
  scope = subject.apply_finder_options({ :order => :author.desc })
903
903
  scope.order_values.should == [:author.desc]
904
904
  end
905
905
 
906
- it "should set select values from options" do
906
+ it "sets select values from options" do
907
907
  scope = subject.apply_finder_options({ :select => [:id, :author] })
908
908
  scope.select_values.should == [:id, :author]
909
909
  end
910
910
 
911
- it "should set offset value from options" do
911
+ it "sets offset value from options" do
912
912
  scope = subject.apply_finder_options({ :offset => 40 })
913
913
  scope.offset_value.should == 40
914
914
  end
915
915
 
916
- it "should set limit value from options" do
916
+ it "sets limit value from options" do
917
917
  scope = subject.apply_finder_options({ :limit => 50 })
918
918
  scope.limit_value.should == 50
919
919
  end
@@ -961,7 +961,7 @@ module MongoModel
961
961
  it_should_behave_like "all scopes"
962
962
 
963
963
  describe "#build" do
964
- it "should use equality where conditions as attributes" do
964
+ it "uses equality where conditions as attributes" do
965
965
  doc = subject.build
966
966
  doc.author.should == "Sam"
967
967
  doc.published.should be_true
@@ -970,7 +970,7 @@ module MongoModel
970
970
  end
971
971
 
972
972
  describe "#create" do
973
- it "should use equality where conditions as attributes" do
973
+ it "uses equality where conditions as attributes" do
974
974
  doc = subject.create
975
975
  doc.author.should == "Sam"
976
976
  doc.published.should be_true
@@ -981,14 +981,14 @@ module MongoModel
981
981
  describe "#reverse_order" do
982
982
  subject { scoped.reverse_order }
983
983
 
984
- it "should set the order values to the reverse order" do
985
- subject.order_values.should == [:author.desc, :published.asc]
984
+ it "sets the order values to the reverse order" do
985
+ subject.order_values.should == MongoOrder.parse([:author.desc, :published.asc]).to_a
986
986
  end
987
987
  end
988
988
 
989
989
  describe "#except" do
990
990
  context "given :where" do
991
- it "should return a new scope without where values" do
991
+ it "returns a new scope without where values" do
992
992
  s = subject.except(:where)
993
993
  s.where_values.should be_empty
994
994
  s.order_values.should == [:author.asc, :published.desc]
@@ -1000,7 +1000,7 @@ module MongoModel
1000
1000
  end
1001
1001
 
1002
1002
  context "given :order" do
1003
- it "should return a new scope without order values" do
1003
+ it "returns a new scope without order values" do
1004
1004
  s = subject.except(:order)
1005
1005
  s.where_values.should == [{ :author => "Sam" }, { :published => true }, { :date.lt => timestamp }]
1006
1006
  s.order_values.should be_empty
@@ -1012,7 +1012,7 @@ module MongoModel
1012
1012
  end
1013
1013
 
1014
1014
  context "given :select" do
1015
- it "should return a new scope without select values" do
1015
+ it "returns a new scope without select values" do
1016
1016
  s = subject.except(:select)
1017
1017
  s.where_values.should == [{ :author => "Sam" }, { :published => true }, { :date.lt => timestamp }]
1018
1018
  s.order_values.should == [:author.asc, :published.desc]
@@ -1024,7 +1024,7 @@ module MongoModel
1024
1024
  end
1025
1025
 
1026
1026
  context "given :offset" do
1027
- it "should return a new scope without offset value" do
1027
+ it "returns a new scope without offset value" do
1028
1028
  s = subject.except(:offset)
1029
1029
  s.where_values.should == [{ :author => "Sam" }, { :published => true }, { :date.lt => timestamp }]
1030
1030
  s.order_values.should == [:author.asc, :published.desc]
@@ -1036,7 +1036,7 @@ module MongoModel
1036
1036
  end
1037
1037
 
1038
1038
  context "given :limit" do
1039
- it "should return a new scope without limit value" do
1039
+ it "returns a new scope without limit value" do
1040
1040
  s = subject.except(:limit)
1041
1041
  s.where_values.should == [{ :author => "Sam" }, { :published => true }, { :date.lt => timestamp }]
1042
1042
  s.order_values.should == [:author.asc, :published.desc]
@@ -1048,7 +1048,7 @@ module MongoModel
1048
1048
  end
1049
1049
 
1050
1050
  context "given :from" do
1051
- it "should return a new scope with default collection" do
1051
+ it "returns a new scope with default collection" do
1052
1052
  s = subject.except(:from)
1053
1053
  s.where_values.should == [{ :author => "Sam" }, { :published => true }, { :date.lt => timestamp }]
1054
1054
  s.order_values.should == [:author.asc, :published.desc]
@@ -1070,7 +1070,7 @@ module MongoModel
1070
1070
  end
1071
1071
  let(:result) { subject.merge(merged) }
1072
1072
 
1073
- it "should combine where values from scopes" do
1073
+ it "combines where values from scopes" do
1074
1074
  result.where_values.should == [
1075
1075
  { :author => "Sam" },
1076
1076
  { :published => true },
@@ -1079,22 +1079,22 @@ module MongoModel
1079
1079
  ]
1080
1080
  end
1081
1081
 
1082
- it "should combine order values from scopes" do
1082
+ it "combines order values from scopes" do
1083
1083
  result.order_values.should == [:author.asc, :published.desc, :date.desc]
1084
1084
  end
1085
1085
 
1086
- it "should combine select values from scopes" do
1086
+ it "combines select values from scopes" do
1087
1087
  result.select_values.should == [:author, :published, :date]
1088
1088
  end
1089
1089
 
1090
- it "should preserve on load proc" do
1090
+ it "preserves on load proc" do
1091
1091
  result.on_load_proc.should == on_load_proc
1092
1092
  end
1093
1093
 
1094
1094
  context "merged scope has offset value" do
1095
1095
  let(:merged) { basic_scope.offset(10) }
1096
1096
 
1097
- it "should use offset value from merged scope" do
1097
+ it "uses offset value from merged scope" do
1098
1098
  result.offset_value.should == 10
1099
1099
  end
1100
1100
  end
@@ -1102,7 +1102,7 @@ module MongoModel
1102
1102
  context "merged scope has no offset value set" do
1103
1103
  let(:merged) { basic_scope }
1104
1104
 
1105
- it "should use offset value from original scope" do
1105
+ it "uses offset value from original scope" do
1106
1106
  result.offset_value.should == 15
1107
1107
  end
1108
1108
  end
@@ -1110,7 +1110,7 @@ module MongoModel
1110
1110
  context "merged scope has limit value" do
1111
1111
  let(:merged) { basic_scope.limit(50) }
1112
1112
 
1113
- it "should use limit value from merged scope" do
1113
+ it "uses limit value from merged scope" do
1114
1114
  result.limit_value.should == 50
1115
1115
  end
1116
1116
  end
@@ -1118,12 +1118,12 @@ module MongoModel
1118
1118
  context "merged scope has no limit value set" do
1119
1119
  let(:merged) { basic_scope }
1120
1120
 
1121
- it "should use limit value from original scope" do
1121
+ it "uses limit value from original scope" do
1122
1122
  result.limit_value.should == 7
1123
1123
  end
1124
1124
  end
1125
1125
 
1126
- it "should use from value (collection) from merged scope" do
1126
+ it "uses from value (collection) from merged scope" do
1127
1127
  merged = basic_scope.from(Post.collection)
1128
1128
  subject.merge(merged).collection.should == Post.collection
1129
1129
  end