mongo_mapper 0.13.0 → 0.15.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.
Files changed (137) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/README.md +61 -0
  4. data/examples/keys.rb +1 -1
  5. data/examples/modifiers/set.rb +1 -1
  6. data/examples/querying.rb +1 -1
  7. data/examples/safe.rb +2 -2
  8. data/examples/scopes.rb +1 -1
  9. data/lib/mongo_mapper.rb +7 -0
  10. data/lib/mongo_mapper/connection.rb +16 -37
  11. data/lib/mongo_mapper/document.rb +4 -0
  12. data/lib/mongo_mapper/extensions/array.rb +14 -6
  13. data/lib/mongo_mapper/extensions/hash.rb +15 -3
  14. data/lib/mongo_mapper/extensions/object.rb +4 -0
  15. data/lib/mongo_mapper/extensions/object_id.rb +5 -1
  16. data/lib/mongo_mapper/extensions/string.rb +13 -5
  17. data/lib/mongo_mapper/extensions/symbol.rb +18 -0
  18. data/lib/mongo_mapper/plugins/accessible.rb +15 -5
  19. data/lib/mongo_mapper/plugins/associations.rb +7 -6
  20. data/lib/mongo_mapper/plugins/associations/base.rb +27 -14
  21. data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +10 -1
  22. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +9 -8
  23. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +12 -11
  24. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +4 -4
  25. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +60 -29
  26. data/lib/mongo_mapper/plugins/associations/in_foreign_array_proxy.rb +136 -0
  27. data/lib/mongo_mapper/plugins/associations/many_association.rb +4 -2
  28. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +18 -16
  29. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +55 -48
  30. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +14 -13
  31. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +7 -6
  32. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +7 -5
  33. data/lib/mongo_mapper/plugins/associations/one_as_proxy.rb +14 -11
  34. data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +14 -13
  35. data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +9 -9
  36. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +27 -26
  37. data/lib/mongo_mapper/plugins/associations/proxy.rb +36 -29
  38. data/lib/mongo_mapper/plugins/associations/single_association.rb +5 -4
  39. data/lib/mongo_mapper/plugins/callbacks.rb +13 -0
  40. data/lib/mongo_mapper/plugins/counter_cache.rb +97 -0
  41. data/lib/mongo_mapper/plugins/dirty.rb +29 -37
  42. data/lib/mongo_mapper/plugins/document.rb +1 -1
  43. data/lib/mongo_mapper/plugins/dynamic_querying.rb +10 -9
  44. data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +18 -17
  45. data/lib/mongo_mapper/plugins/embedded_callbacks.rb +2 -1
  46. data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
  47. data/lib/mongo_mapper/plugins/identity_map.rb +4 -2
  48. data/lib/mongo_mapper/plugins/indexes.rb +14 -7
  49. data/lib/mongo_mapper/plugins/keys.rb +170 -151
  50. data/lib/mongo_mapper/plugins/keys/key.rb +27 -16
  51. data/lib/mongo_mapper/plugins/keys/static.rb +45 -0
  52. data/lib/mongo_mapper/plugins/modifiers.rb +64 -38
  53. data/lib/mongo_mapper/plugins/partial_updates.rb +86 -0
  54. data/lib/mongo_mapper/plugins/persistence.rb +13 -8
  55. data/lib/mongo_mapper/plugins/protected.rb +6 -5
  56. data/lib/mongo_mapper/plugins/querying.rb +85 -42
  57. data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +20 -15
  58. data/lib/mongo_mapper/plugins/rails.rb +1 -0
  59. data/lib/mongo_mapper/plugins/safe.rb +10 -4
  60. data/lib/mongo_mapper/plugins/sci.rb +0 -0
  61. data/lib/mongo_mapper/plugins/scopes.rb +78 -7
  62. data/lib/mongo_mapper/plugins/stats.rb +17 -0
  63. data/lib/mongo_mapper/plugins/strong_parameters.rb +26 -0
  64. data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
  65. data/lib/mongo_mapper/plugins/validations.rb +1 -1
  66. data/lib/mongo_mapper/railtie.rb +4 -3
  67. data/lib/mongo_mapper/utils.rb +2 -2
  68. data/lib/mongo_mapper/version.rb +1 -1
  69. data/lib/rails/generators/mongo_mapper/config/config_generator.rb +12 -13
  70. data/lib/rails/generators/mongo_mapper/model/model_generator.rb +9 -9
  71. data/spec/examples.txt +1717 -0
  72. data/spec/functional/accessible_spec.rb +19 -13
  73. data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +13 -13
  74. data/spec/functional/associations/belongs_to_proxy_spec.rb +36 -20
  75. data/spec/functional/associations/in_array_proxy_spec.rb +145 -10
  76. data/spec/functional/associations/in_foreign_array_proxy_spec.rb +321 -0
  77. data/spec/functional/associations/many_documents_as_proxy_spec.rb +6 -6
  78. data/spec/functional/associations/many_documents_proxy_spec.rb +85 -14
  79. data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +13 -13
  80. data/spec/functional/associations/many_embedded_proxy_spec.rb +1 -1
  81. data/spec/functional/associations/many_polymorphic_proxy_spec.rb +4 -4
  82. data/spec/functional/associations/one_as_proxy_spec.rb +10 -10
  83. data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +9 -9
  84. data/spec/functional/associations/one_embedded_proxy_spec.rb +3 -3
  85. data/spec/functional/associations/one_proxy_spec.rb +10 -10
  86. data/spec/functional/associations_spec.rb +3 -3
  87. data/spec/functional/binary_spec.rb +2 -2
  88. data/spec/functional/caching_spec.rb +8 -15
  89. data/spec/functional/callbacks_spec.rb +89 -2
  90. data/spec/functional/counter_cache_spec.rb +235 -0
  91. data/spec/functional/dirty_spec.rb +63 -46
  92. data/spec/functional/document_spec.rb +30 -5
  93. data/spec/functional/dumpable_spec.rb +1 -1
  94. data/spec/functional/embedded_document_spec.rb +17 -17
  95. data/spec/functional/identity_map_spec.rb +29 -16
  96. data/spec/functional/indexes_spec.rb +19 -18
  97. data/spec/functional/keys_spec.rb +86 -28
  98. data/spec/functional/logger_spec.rb +3 -3
  99. data/spec/functional/modifiers_spec.rb +81 -19
  100. data/spec/functional/partial_updates_spec.rb +577 -0
  101. data/spec/functional/protected_spec.rb +14 -14
  102. data/spec/functional/querying_spec.rb +77 -28
  103. data/spec/functional/safe_spec.rb +23 -27
  104. data/spec/functional/sci_spec.rb +9 -9
  105. data/spec/functional/scopes_spec.rb +235 -2
  106. data/spec/functional/static_keys_spec.rb +153 -0
  107. data/spec/functional/stats_spec.rb +86 -0
  108. data/spec/functional/strong_parameters_spec.rb +49 -0
  109. data/spec/functional/touch_spec.rb +1 -1
  110. data/spec/functional/validations_spec.rb +51 -57
  111. data/spec/quality_spec.rb +51 -0
  112. data/spec/spec_helper.rb +37 -9
  113. data/spec/support/matchers.rb +5 -14
  114. data/spec/unit/associations/base_spec.rb +12 -12
  115. data/spec/unit/associations/belongs_to_association_spec.rb +2 -2
  116. data/spec/unit/associations/many_association_spec.rb +2 -2
  117. data/spec/unit/associations/one_association_spec.rb +2 -2
  118. data/spec/unit/associations/proxy_spec.rb +19 -20
  119. data/spec/unit/clone_spec.rb +1 -1
  120. data/spec/unit/document_spec.rb +8 -8
  121. data/spec/unit/dynamic_finder_spec.rb +8 -8
  122. data/spec/unit/embedded_document_spec.rb +18 -19
  123. data/spec/unit/extensions_spec.rb +41 -17
  124. data/spec/unit/identity_map_middleware_spec.rb +65 -96
  125. data/spec/unit/key_spec.rb +28 -26
  126. data/spec/unit/keys_spec.rb +20 -11
  127. data/spec/unit/model_generator_spec.rb +0 -0
  128. data/spec/unit/mongo_mapper_spec.rb +38 -85
  129. data/spec/unit/rails_spec.rb +5 -0
  130. data/spec/unit/serialization_spec.rb +1 -1
  131. data/spec/unit/time_zones_spec.rb +2 -2
  132. data/spec/unit/validations_spec.rb +46 -33
  133. metadata +66 -37
  134. data/README.rdoc +0 -59
  135. data/lib/mongo_mapper/connections/10gen.rb +0 -0
  136. data/lib/mongo_mapper/connections/moped.rb +0 -0
  137. data/lib/mongo_mapper/extensions/ordered_hash.rb +0 -23
@@ -44,12 +44,12 @@ describe 'A document with protected attributes' do
44
44
 
45
45
  it "should assign protected attribute through accessor" do
46
46
  @doc.admin = true
47
- @doc.admin.should be_true
47
+ @doc.admin.should be_truthy
48
48
  end
49
49
 
50
50
  it "should ignore protected attribute on #initialize" do
51
51
  doc = @doc_class.new(:name => 'John', :admin => true)
52
- doc.admin.should be_false
52
+ doc.admin.should be_falsey
53
53
  doc.name.should == 'John'
54
54
  end
55
55
 
@@ -59,7 +59,7 @@ describe 'A document with protected attributes' do
59
59
  doc.save!
60
60
 
61
61
  doc = @doc_class.first(:name => 'John')
62
- doc.admin.should be_true
62
+ doc.admin.should be_truthy
63
63
  doc.name.should == 'John'
64
64
  end
65
65
 
@@ -69,37 +69,37 @@ describe 'A document with protected attributes' do
69
69
  doc.save!
70
70
 
71
71
  doc.reload
72
- doc.admin.should be_true
72
+ doc.admin.should be_truthy
73
73
  doc.name.should == 'John'
74
74
  end
75
75
 
76
76
  it "should ignore protected attribute on #update_attribute" do
77
77
  @doc.update_attribute('admin', true)
78
- @doc.admin.should be_true
78
+ @doc.admin.should be_truthy
79
79
  end
80
80
 
81
81
  it "should ignore protected attribute on #update_attributes" do
82
82
  @doc.update_attributes(:name => 'Ren Hoek', :admin => true)
83
83
  @doc.name.should == 'Ren Hoek'
84
- @doc.admin.should be_false
84
+ @doc.admin.should be_falsey
85
85
  end
86
86
 
87
87
  it "should ignore protected attribute on #update_attributes!" do
88
88
  @doc.update_attributes!(:name => 'Stimpson J. Cat', :admin => true)
89
89
  @doc.name.should == 'Stimpson J. Cat'
90
- @doc.admin.should be_false
90
+ @doc.admin.should be_falsey
91
91
  end
92
92
 
93
93
  it "should ignore protecteds attribute on #attributes=" do
94
94
  @doc.attributes = {:name => 'Stimpson J. Cat', :admin => true}
95
95
  @doc.name.should == 'Stimpson J. Cat'
96
- @doc.admin.should be_false
96
+ @doc.admin.should be_falsey
97
97
  end
98
98
 
99
99
  it "should be indifferent to whether the protected keys are strings or symbols" do
100
100
  @doc.update_attributes!("name" => 'Stimpson J. Cat', "admin" => true)
101
101
  @doc.name.should == 'Stimpson J. Cat'
102
- @doc.admin.should be_false
102
+ @doc.admin.should be_falsey
103
103
  end
104
104
 
105
105
  it "should accept nil as constructor's argument without raising exception" do
@@ -115,7 +115,7 @@ describe "Single collection inherited protected attributes" do
115
115
  key :site_id, ObjectId
116
116
  attr_protected :site_id
117
117
  end
118
- GrandParent.collection.remove
118
+ GrandParent.collection.drop
119
119
 
120
120
  class ::Child < ::GrandParent
121
121
  key :position, Integer
@@ -177,23 +177,23 @@ describe 'An embedded document with protected attributes' do
177
177
 
178
178
  it "should assign protected attribute through accessor" do
179
179
  @edoc.admin = true
180
- @edoc.admin.should be_true
180
+ @edoc.admin.should be_truthy
181
181
  end
182
182
 
183
183
  it "should not ignore protected attribute on #update_attribute" do
184
184
  @edoc.update_attribute('admin', true)
185
- @edoc.admin.should be_true
185
+ @edoc.admin.should be_truthy
186
186
  end
187
187
 
188
188
  it "should ignore protected attribute on #update_attributes" do
189
189
  @edoc.update_attributes(:name => 'Ren Hoek', :admin => true)
190
190
  @edoc.name.should == 'Ren Hoek'
191
- @edoc.admin.should be_false
191
+ @edoc.admin.should be_falsey
192
192
  end
193
193
 
194
194
  it "should ignore protected attribute on #update_attributes!" do
195
195
  @edoc.update_attributes!(:name => 'Stimpson J. Cat', :admin => true)
196
196
  @edoc.name.should == 'Stimpson J. Cat'
197
- @edoc.admin.should be_false
197
+ @edoc.admin.should be_falsey
198
198
  end
199
199
  end
@@ -55,7 +55,7 @@ describe "Querying" do
55
55
  end
56
56
 
57
57
  it "should no longer be new?" do
58
- doc.new?.should be_false
58
+ doc.new?.should be_falsey
59
59
  end
60
60
 
61
61
  it "should return instance of document" do
@@ -164,7 +164,7 @@ describe "Querying" do
164
164
  end
165
165
 
166
166
  it "should raise document not found if nothing provided for find!" do
167
- expect { document.find! }.to raise_error(MongoMapper::DocumentNotFound)
167
+ lambda { document.find! }.should raise_error(MongoMapper::DocumentNotFound)
168
168
  end
169
169
 
170
170
  context "(with a single id)" do
@@ -177,7 +177,7 @@ describe "Querying" do
177
177
  end
178
178
 
179
179
  it "should raise error if document not found with find!" do
180
- expect { document.find!(123) }.to raise_error(MongoMapper::DocumentNotFound)
180
+ lambda { document.find!(123) }.should raise_error(MongoMapper::DocumentNotFound)
181
181
  end
182
182
  end
183
183
 
@@ -203,15 +203,15 @@ describe "Querying" do
203
203
  end
204
204
 
205
205
  it "should raise error if not all found when using find!" do
206
- expect {
206
+ lambda {
207
207
  document.find!(@doc1._id, BSON::ObjectId.new.to_s)
208
- }.to raise_error(MongoMapper::DocumentNotFound)
208
+ }.should raise_error(MongoMapper::DocumentNotFound)
209
209
  end
210
210
 
211
211
  it "should raise error if not all found when using find!" do
212
- expect {
212
+ lambda {
213
213
  document.find!([@doc1._id, BSON::ObjectId.new.to_s])
214
- }.to raise_error(MongoMapper::DocumentNotFound)
214
+ }.should raise_error(MongoMapper::DocumentNotFound)
215
215
  end
216
216
 
217
217
  it "should return array if array with one element" do
@@ -219,6 +219,16 @@ describe "Querying" do
219
219
  end
220
220
  end
221
221
 
222
+ context "(with array of single id)" do
223
+ it "should return an array" do
224
+ document.find([@doc1._id]).should == [@doc1]
225
+ end
226
+
227
+ it "should return an array for find!" do
228
+ document.find!([@doc1._id]).should == [@doc1]
229
+ end
230
+ end
231
+
222
232
  it "should be able to find using condition auto-detection" do
223
233
  document.first(:first_name => 'John').should == @doc1
224
234
  document.all(:last_name => 'Nunemaker', :order => 'age desc').should == [@doc1, @doc3]
@@ -255,6 +265,18 @@ describe "Querying" do
255
265
  document.find_each(:last_name => 'Nunemaker', :order => 'age desc') {|doc| yield_documents << doc }
256
266
  yield_documents.should == [@doc1, @doc3]
257
267
  end
268
+
269
+ it "should return an enumerator when no block is given" do
270
+ yield_documents = []
271
+ enum = document.find_each(:order => "first_name")
272
+ enum.with_index {|doc, idx| yield_documents << [doc, idx] }
273
+ yield_documents.should == [[@doc1, 0], [@doc3, 1], [@doc2, 2]]
274
+
275
+ yield_documents = []
276
+ enum = document.find_each(:last_name => 'Nunemaker', :order => 'age desc')
277
+ enum.with_index {|doc, idx| yield_documents << [doc, idx] }
278
+ yield_documents.should == [[@doc1, 0], [@doc3, 1]]
279
+ end
258
280
  end
259
281
  end # finding documents
260
282
 
@@ -292,12 +314,12 @@ describe "Querying" do
292
314
  end
293
315
 
294
316
  it "should disregard non-keys when creating, but use them in the query" do
295
- expect {
317
+ lambda {
296
318
  document.create(:first_name => 'John', :age => 9)
297
319
  lambda {
298
320
  document.first_or_create(:first_name => 'John', :age.gt => 10).first_name.should == 'John'
299
321
  }.should change { document.count }.by(1)
300
- }.to_not raise_error
322
+ }.should_not raise_error
301
323
  end
302
324
  end
303
325
 
@@ -320,10 +342,10 @@ describe "Querying" do
320
342
  end
321
343
 
322
344
  it "should disregard non-keys when initializing, but use them in the query" do
323
- expect {
345
+ lambda {
324
346
  document.create(:first_name => 'John', :age => 9)
325
347
  document.first_or_new(:first_name => 'John', :age.gt => 10).first_name.should == 'John'
326
- }.to_not raise_error
348
+ }.should_not raise_error
327
349
  end
328
350
  end
329
351
 
@@ -495,12 +517,12 @@ describe "Querying" do
495
517
 
496
518
  context ".empty?" do
497
519
  it "should be true if no documents" do
498
- document.empty?.should be_true
520
+ document.empty?.should be_truthy
499
521
  end
500
522
 
501
523
  it "should be false if documents present" do
502
524
  @doc = document.create({:first_name => 'John', :last_name => 'Nunemaker', :age => '27'})
503
- document.empty?.should be_false
525
+ document.empty?.should be_falsey
504
526
  end
505
527
  end
506
528
 
@@ -616,6 +638,32 @@ describe "Querying" do
616
638
  it "should be chainable" do
617
639
  @query.sort(:age).all.map(&:age).should == [26, 27, 28]
618
640
  end
641
+
642
+ it "supports hash" do
643
+ @query = document.fields({:age => 0})
644
+ docs = @query.all
645
+ docs.should include(@doc1)
646
+ docs.should include(@doc3)
647
+ docs.should include(@doc2)
648
+ docs.each do |doc|
649
+ doc.age.should be_nil # key was not loaded
650
+ doc.first_name.should_not be_nil
651
+ doc.last_name.should_not be_nil # key was not loaded
652
+ end
653
+ end
654
+
655
+ it "supports array" do
656
+ @query = document.fields([:age,:first_name])
657
+ docs = @query.all
658
+ docs.should include(@doc1)
659
+ docs.should include(@doc3)
660
+ docs.should include(@doc2)
661
+ docs.each do |doc|
662
+ doc.age.should_not be_nil
663
+ doc.first_name.should_not be_nil
664
+ doc.last_name.should be_nil # key was not loaded
665
+ end
666
+ end
619
667
  end
620
668
 
621
669
  context ".limit" do
@@ -737,11 +785,11 @@ describe "Querying" do
737
785
  end
738
786
 
739
787
  it "should be true if document valid" do
740
- document.new.update_attributes(:foo => 'bar').should be_true
788
+ document.new.update_attributes(:foo => 'bar').should be_truthy
741
789
  end
742
790
 
743
791
  it "should be false if document not valid" do
744
- document.new.update_attributes({}).should be_false
792
+ document.new.update_attributes({}).should be_falsey
745
793
  end
746
794
  end
747
795
 
@@ -751,12 +799,12 @@ describe "Querying" do
751
799
  end
752
800
 
753
801
  it "should accept symbols as keys" do
754
- @doc.update_attribute(:first_name, 'Chris').should be_true
802
+ @doc.update_attribute(:first_name, 'Chris').should be_truthy
755
803
  @doc.reload.first_name.should == 'Chris'
756
804
  end
757
805
 
758
806
  it "should update the attribute" do
759
- @doc.update_attribute('first_name', 'Chris').should be_true
807
+ @doc.update_attribute('first_name', 'Chris').should be_truthy
760
808
  @doc.reload.first_name.should == 'Chris'
761
809
  end
762
810
 
@@ -764,7 +812,8 @@ describe "Querying" do
764
812
  document.key :name, String, :required => true
765
813
 
766
814
  @doc.should_receive(:valid?).never
767
- @doc.update_attribute('name', '').should be_true
815
+ @doc.update_attribute('name', '').should be_truthy
816
+
768
817
  @doc.reload.name.should == ''
769
818
  document.count.should == 1
770
819
  end
@@ -884,15 +933,15 @@ describe "Querying" do
884
933
 
885
934
  it "should allow passing safe" do
886
935
  @document.create(:name => 'John')
887
- expect {
936
+ lambda {
888
937
  @document.new(:name => 'John').save(:safe => true)
889
- }.to raise_error(Mongo::OperationFailure)
938
+ }.should raise_error(Mongo::Error::OperationFailure)
890
939
  end
891
940
 
892
941
  it "should raise argument error if options has unsupported key" do
893
- expect {
942
+ lambda {
894
943
  @document.new.save(:foo => true)
895
- }.to raise_error(ArgumentError)
944
+ }.should raise_error(ArgumentError)
896
945
  end
897
946
  end
898
947
 
@@ -905,21 +954,21 @@ describe "Querying" do
905
954
 
906
955
  it "should allow passing safe" do
907
956
  @document.create(:name => 'John')
908
- expect {
957
+ lambda {
909
958
  @document.new(:name => 'John').save!(:safe => true)
910
- }.to raise_error(Mongo::OperationFailure)
959
+ }.should raise_error(Mongo::Error::OperationFailure)
911
960
  end
912
961
 
913
962
  it "should raise argument error if options has unsupported key" do
914
- expect {
963
+ lambda {
915
964
  @document.new.save!(:foo => true)
916
- }.to raise_error(ArgumentError)
965
+ }.should raise_error(ArgumentError)
917
966
  end
918
967
 
919
968
  it "should raise argument error if using validate as that would be pointless with save!" do
920
- expect {
969
+ lambda {
921
970
  @document.new.save!(:validate => false)
922
- }.to raise_error(ArgumentError)
971
+ }.should raise_error(ArgumentError)
923
972
  end
924
973
  end
925
974
 
@@ -42,7 +42,7 @@ describe "Safe" do
42
42
 
43
43
  it "should not raise an error on duplicate IDs" do
44
44
  k = @klass.create
45
- expect { j = @klass.create(:_id => k.id) }.to_not raise_error
45
+ lambda { j = @klass.create(:_id => k.id) }.should_not raise_error
46
46
  end
47
47
  end
48
48
 
@@ -61,46 +61,44 @@ describe "Safe" do
61
61
 
62
62
  it "should raise an error on duplicate IDs" do
63
63
  k = @klass.create
64
- expect { j = @klass.create(:_id => k.id) }.to raise_error(Mongo::OperationFailure)
64
+ lambda { j = @klass.create(:_id => k.id) }.should raise_error(Mongo::Error::OperationFailure)
65
65
  end
66
66
 
67
67
  context "using safe setting from class" do
68
- it "should pass :w => 1 option to save" do
69
- instance = @klass.new(:email => 'john@doe.com')
70
- Mongo::Collection.any_instance.should_receive(:insert).once.with({'_id' => instance.id, 'email' => 'john@doe.com'}, {:w => 1})
71
- instance.save!
68
+ it "should pass :w => 1 option to the collection" do
69
+ @klass.collection.write_concern.options.should == { w: 1 }
72
70
  end
73
71
 
74
72
  it "should work fine when all is well" do
75
- expect {
73
+ lambda {
76
74
  @klass.new(:email => 'john@doe.com').save
77
- }.to_not raise_error
75
+ }.should_not raise_error
78
76
  end
79
77
 
80
78
  it "should raise error when operation fails" do
81
- expect {
79
+ lambda {
82
80
  2.times do
83
81
  @klass.new(:email => 'john@doe.com').save
84
82
  end
85
- }.to raise_error(Mongo::OperationFailure)
83
+ }.should raise_error(Mongo::Error::OperationFailure)
86
84
  end
87
85
  end
88
86
 
89
87
  context "overriding safe setting" do
90
88
  it "should raise error if safe is true" do
91
- expect {
89
+ lambda {
92
90
  2.times do
93
91
  @klass.new(:email => 'john@doe.com').save(:safe => true)
94
92
  end
95
- }.to raise_error(Mongo::OperationFailure)
93
+ }.should raise_error(Mongo::Error::OperationFailure)
96
94
  end
97
95
 
98
96
  it "should not raise error if safe is false" do
99
- expect {
97
+ lambda {
100
98
  2.times do
101
99
  @klass.new(:email => 'john@doe.com').save(:safe => false)
102
100
  end
103
- }.to_not raise_error
101
+ }.should_not raise_error
104
102
  end
105
103
  end
106
104
  end
@@ -120,44 +118,42 @@ describe "Safe" do
120
118
  end
121
119
 
122
120
  context "using safe setting from class" do
123
- it "should pass :safe => options_hash to save" do
124
- instance = @klass.new(:email => 'john@doe.com')
125
- Mongo::Collection.any_instance.should_receive(:insert).once.with({'_id' => instance.id, 'email' => 'john@doe.com'}, {:j => true})
126
- instance.save!
121
+ it "should pass :safe => options_hash to the collection" do
122
+ @klass.collection.write_concern.options.should == { j: true }
127
123
  end
128
124
 
129
125
  it "should work fine when all is well" do
130
- expect {
126
+ lambda {
131
127
  @klass.new(:email => 'john@doe.com').save
132
- }.to_not raise_error
128
+ }.should_not raise_error
133
129
  end
134
130
 
135
131
  it "should raise error when operation fails" do
136
- expect {
132
+ lambda {
137
133
  2.times do
138
134
  @klass.new(:email => 'john@doe.com').save
139
135
  end
140
- }.to raise_error(Mongo::OperationFailure)
136
+ }.should raise_error(Mongo::Error::OperationFailure)
141
137
  end
142
138
  end
143
139
 
144
140
  context "overriding safe setting" do
145
141
  it "should raise error if safe is true" do
146
- expect {
142
+ lambda {
147
143
  2.times do
148
144
  @klass.new(:email => 'john@doe.com').save(:safe => true)
149
145
  end
150
- }.to raise_error(Mongo::OperationFailure)
146
+ }.should raise_error(Mongo::Error::OperationFailure)
151
147
  end
152
148
 
153
149
  it "should not raise error if safe is false" do
154
- expect {
150
+ lambda {
155
151
  2.times do
156
152
  @klass.new(:email => 'john@doe.com').save(:safe => false)
157
153
  end
158
- }.to_not raise_error
154
+ }.should_not raise_error
159
155
  end
160
156
  end
161
157
  end
162
158
  end
163
- end
159
+ end