mongo_mapper 0.13.1 → 0.15.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) 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 +4 -0
  10. data/lib/mongo_mapper/connection.rb +16 -38
  11. data/lib/mongo_mapper/document.rb +2 -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/plugins/accessible.rb +13 -12
  18. data/lib/mongo_mapper/plugins/associations.rb +7 -6
  19. data/lib/mongo_mapper/plugins/associations/base.rb +23 -14
  20. data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +1 -1
  21. data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +9 -8
  22. data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +18 -11
  23. data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +4 -4
  24. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +60 -29
  25. data/lib/mongo_mapper/plugins/associations/in_foreign_array_proxy.rb +136 -0
  26. data/lib/mongo_mapper/plugins/associations/many_association.rb +4 -2
  27. data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +18 -16
  28. data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +55 -48
  29. data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +14 -13
  30. data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +7 -6
  31. data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +7 -5
  32. data/lib/mongo_mapper/plugins/associations/one_as_proxy.rb +14 -11
  33. data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +14 -13
  34. data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +12 -10
  35. data/lib/mongo_mapper/plugins/associations/one_proxy.rb +27 -26
  36. data/lib/mongo_mapper/plugins/associations/proxy.rb +38 -27
  37. data/lib/mongo_mapper/plugins/associations/single_association.rb +5 -4
  38. data/lib/mongo_mapper/plugins/callbacks.rb +13 -0
  39. data/lib/mongo_mapper/plugins/counter_cache.rb +23 -4
  40. data/lib/mongo_mapper/plugins/dirty.rb +29 -37
  41. data/lib/mongo_mapper/plugins/document.rb +1 -1
  42. data/lib/mongo_mapper/plugins/dynamic_querying.rb +10 -9
  43. data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +18 -17
  44. data/lib/mongo_mapper/plugins/embedded_callbacks.rb +2 -1
  45. data/lib/mongo_mapper/plugins/embedded_document.rb +2 -2
  46. data/lib/mongo_mapper/plugins/identity_map.rb +4 -2
  47. data/lib/mongo_mapper/plugins/indexes.rb +14 -7
  48. data/lib/mongo_mapper/plugins/keys.rb +164 -159
  49. data/lib/mongo_mapper/plugins/keys/key.rb +27 -16
  50. data/lib/mongo_mapper/plugins/keys/static.rb +45 -0
  51. data/lib/mongo_mapper/plugins/modifiers.rb +64 -38
  52. data/lib/mongo_mapper/plugins/partial_updates.rb +86 -0
  53. data/lib/mongo_mapper/plugins/persistence.rb +13 -8
  54. data/lib/mongo_mapper/plugins/protected.rb +6 -5
  55. data/lib/mongo_mapper/plugins/querying.rb +85 -42
  56. data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +20 -15
  57. data/lib/mongo_mapper/plugins/safe.rb +10 -4
  58. data/lib/mongo_mapper/plugins/scopes.rb +94 -7
  59. data/lib/mongo_mapper/plugins/stats.rb +1 -3
  60. data/lib/mongo_mapper/plugins/strong_parameters.rb +26 -0
  61. data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
  62. data/lib/mongo_mapper/plugins/validations.rb +0 -0
  63. data/lib/mongo_mapper/railtie.rb +1 -0
  64. data/lib/mongo_mapper/utils.rb +2 -2
  65. data/lib/mongo_mapper/version.rb +1 -1
  66. data/lib/rails/generators/mongo_mapper/config/config_generator.rb +12 -13
  67. data/lib/rails/generators/mongo_mapper/model/model_generator.rb +9 -9
  68. data/spec/examples.txt +1728 -0
  69. data/spec/functional/accessible_spec.rb +19 -13
  70. data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +13 -13
  71. data/spec/functional/associations/belongs_to_proxy_spec.rb +54 -20
  72. data/spec/functional/associations/in_array_proxy_spec.rb +145 -10
  73. data/spec/functional/associations/in_foreign_array_proxy_spec.rb +321 -0
  74. data/spec/functional/associations/many_documents_as_proxy_spec.rb +6 -6
  75. data/spec/functional/associations/many_documents_proxy_spec.rb +85 -14
  76. data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +13 -13
  77. data/spec/functional/associations/many_embedded_proxy_spec.rb +1 -1
  78. data/spec/functional/associations/many_polymorphic_proxy_spec.rb +4 -4
  79. data/spec/functional/associations/one_as_proxy_spec.rb +10 -10
  80. data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +9 -9
  81. data/spec/functional/associations/one_embedded_proxy_spec.rb +31 -3
  82. data/spec/functional/associations/one_proxy_spec.rb +21 -11
  83. data/spec/functional/associations_spec.rb +3 -3
  84. data/spec/functional/binary_spec.rb +2 -2
  85. data/spec/functional/caching_spec.rb +8 -15
  86. data/spec/functional/callbacks_spec.rb +89 -2
  87. data/spec/functional/counter_cache_spec.rb +89 -0
  88. data/spec/functional/dirty_spec.rb +84 -46
  89. data/spec/functional/dirty_with_callbacks_spec.rb +59 -0
  90. data/spec/functional/document_spec.rb +2 -5
  91. data/spec/functional/dumpable_spec.rb +1 -1
  92. data/spec/functional/embedded_document_spec.rb +17 -17
  93. data/spec/functional/identity_map_spec.rb +29 -16
  94. data/spec/functional/indexes_spec.rb +19 -18
  95. data/spec/functional/keys_spec.rb +55 -28
  96. data/spec/functional/logger_spec.rb +3 -3
  97. data/spec/functional/modifiers_spec.rb +81 -19
  98. data/spec/functional/partial_updates_spec.rb +577 -0
  99. data/spec/functional/protected_spec.rb +14 -14
  100. data/spec/functional/querying_spec.rb +77 -28
  101. data/spec/functional/safe_spec.rb +23 -27
  102. data/spec/functional/sci_spec.rb +9 -9
  103. data/spec/functional/scopes_spec.rb +323 -2
  104. data/spec/functional/static_keys_spec.rb +153 -0
  105. data/spec/functional/stats_spec.rb +28 -16
  106. data/spec/functional/strong_parameters_spec.rb +49 -0
  107. data/spec/functional/touch_spec.rb +1 -1
  108. data/spec/functional/validations_spec.rb +51 -57
  109. data/spec/quality_spec.rb +2 -2
  110. data/spec/spec_helper.rb +37 -9
  111. data/spec/support/matchers.rb +5 -14
  112. data/spec/unit/associations/base_spec.rb +12 -12
  113. data/spec/unit/associations/belongs_to_association_spec.rb +2 -2
  114. data/spec/unit/associations/many_association_spec.rb +2 -2
  115. data/spec/unit/associations/one_association_spec.rb +2 -2
  116. data/spec/unit/associations/proxy_spec.rb +26 -20
  117. data/spec/unit/clone_spec.rb +1 -1
  118. data/spec/unit/document_spec.rb +8 -8
  119. data/spec/unit/dynamic_finder_spec.rb +8 -8
  120. data/spec/unit/embedded_document_spec.rb +18 -19
  121. data/spec/unit/extensions_spec.rb +17 -17
  122. data/spec/unit/identity_map_middleware_spec.rb +65 -96
  123. data/spec/unit/key_spec.rb +28 -26
  124. data/spec/unit/keys_spec.rb +20 -11
  125. data/spec/unit/mongo_mapper_spec.rb +38 -85
  126. data/spec/unit/serialization_spec.rb +1 -1
  127. data/spec/unit/time_zones_spec.rb +2 -2
  128. data/spec/unit/validations_spec.rb +46 -33
  129. metadata +56 -32
  130. data/README.rdoc +0 -59
  131. data/lib/mongo_mapper/connections/10gen.rb +0 -0
  132. data/lib/mongo_mapper/connections/moped.rb +0 -0
  133. 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