mongo_mapper 0.14.0 → 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +1 -1
  3. data/{README.rdoc → README.md} +26 -21
  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/connection.rb +16 -38
  10. data/lib/mongo_mapper/extensions/object_id.rb +5 -1
  11. data/lib/mongo_mapper/plugins/accessible.rb +1 -1
  12. data/lib/mongo_mapper/plugins/associations/base.rb +10 -2
  13. data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +1 -1
  14. data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +36 -6
  15. data/lib/mongo_mapper/plugins/associations/in_foreign_array_proxy.rb +136 -0
  16. data/lib/mongo_mapper/plugins/associations/many_association.rb +4 -2
  17. data/lib/mongo_mapper/plugins/associations/proxy.rb +5 -1
  18. data/lib/mongo_mapper/plugins/associations/single_association.rb +5 -4
  19. data/lib/mongo_mapper/plugins/dirty.rb +29 -37
  20. data/lib/mongo_mapper/plugins/document.rb +1 -1
  21. data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +1 -1
  22. data/lib/mongo_mapper/plugins/embedded_callbacks.rb +1 -0
  23. data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
  24. data/lib/mongo_mapper/plugins/identity_map.rb +3 -1
  25. data/lib/mongo_mapper/plugins/indexes.rb +13 -6
  26. data/lib/mongo_mapper/plugins/keys/key.rb +13 -8
  27. data/lib/mongo_mapper/plugins/keys.rb +9 -2
  28. data/lib/mongo_mapper/plugins/modifiers.rb +39 -14
  29. data/lib/mongo_mapper/plugins/persistence.rb +6 -2
  30. data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +6 -6
  31. data/lib/mongo_mapper/plugins/querying.rb +9 -3
  32. data/lib/mongo_mapper/plugins/safe.rb +10 -4
  33. data/lib/mongo_mapper/plugins/stats.rb +1 -3
  34. data/lib/mongo_mapper/plugins/strong_parameters.rb +26 -0
  35. data/lib/mongo_mapper/railtie.rb +1 -0
  36. data/lib/mongo_mapper/utils.rb +2 -2
  37. data/lib/mongo_mapper/version.rb +1 -1
  38. data/lib/mongo_mapper.rb +3 -0
  39. data/spec/examples.txt +1717 -0
  40. data/spec/functional/accessible_spec.rb +7 -1
  41. data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +2 -2
  42. data/spec/functional/associations/belongs_to_proxy_spec.rb +22 -5
  43. data/spec/functional/associations/in_array_proxy_spec.rb +149 -14
  44. data/spec/functional/associations/in_foreign_array_proxy_spec.rb +321 -0
  45. data/spec/functional/associations/many_documents_as_proxy_spec.rb +6 -6
  46. data/spec/functional/associations/many_documents_proxy_spec.rb +22 -22
  47. data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +2 -2
  48. data/spec/functional/associations/many_polymorphic_proxy_spec.rb +4 -4
  49. data/spec/functional/associations/one_as_proxy_spec.rb +8 -8
  50. data/spec/functional/associations/one_proxy_spec.rb +8 -8
  51. data/spec/functional/associations_spec.rb +3 -3
  52. data/spec/functional/binary_spec.rb +2 -2
  53. data/spec/functional/caching_spec.rb +15 -22
  54. data/spec/functional/callbacks_spec.rb +2 -2
  55. data/spec/functional/counter_cache_spec.rb +10 -10
  56. data/spec/functional/dirty_spec.rb +27 -10
  57. data/spec/functional/document_spec.rb +5 -8
  58. data/spec/functional/dumpable_spec.rb +1 -1
  59. data/spec/functional/embedded_document_spec.rb +5 -5
  60. data/spec/functional/identity_map_spec.rb +8 -8
  61. data/spec/functional/indexes_spec.rb +19 -18
  62. data/spec/functional/keys_spec.rb +51 -33
  63. data/spec/functional/logger_spec.rb +2 -2
  64. data/spec/functional/modifiers_spec.rb +81 -19
  65. data/spec/functional/partial_updates_spec.rb +8 -8
  66. data/spec/functional/protected_spec.rb +1 -1
  67. data/spec/functional/querying_spec.rb +70 -22
  68. data/spec/functional/safe_spec.rb +23 -27
  69. data/spec/functional/sci_spec.rb +7 -7
  70. data/spec/functional/scopes_spec.rb +1 -1
  71. data/spec/functional/static_keys_spec.rb +2 -2
  72. data/spec/functional/stats_spec.rb +28 -12
  73. data/spec/functional/strong_parameters_spec.rb +49 -0
  74. data/spec/functional/validations_spec.rb +8 -16
  75. data/spec/quality_spec.rb +1 -1
  76. data/spec/spec_helper.rb +32 -8
  77. data/spec/support/matchers.rb +1 -1
  78. data/spec/unit/associations/proxy_spec.rb +1 -5
  79. data/spec/unit/clone_spec.rb +1 -1
  80. data/spec/unit/document_spec.rb +3 -3
  81. data/spec/unit/embedded_document_spec.rb +4 -5
  82. data/spec/unit/extensions_spec.rb +3 -4
  83. data/spec/unit/identity_map_middleware_spec.rb +65 -96
  84. data/spec/unit/key_spec.rb +16 -17
  85. data/spec/unit/keys_spec.rb +17 -8
  86. data/spec/unit/mongo_mapper_spec.rb +41 -88
  87. data/spec/unit/rails_spec.rb +2 -2
  88. data/spec/unit/validations_spec.rb +18 -18
  89. metadata +41 -24
  90. data/lib/mongo_mapper/extensions/ordered_hash.rb +0 -23
@@ -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
 
@@ -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
@@ -763,7 +811,7 @@ describe "Querying" do
763
811
  it "should update the attribute without invoking validations" do
764
812
  document.key :name, String, :required => true
765
813
 
766
- expect(@doc).to receive(:valid?).never
814
+ @doc.should_receive(:valid?).never
767
815
  @doc.update_attribute('name', '').should be_truthy
768
816
 
769
817
  @doc.reload.name.should == ''
@@ -868,7 +916,7 @@ describe "Querying" do
868
916
 
869
917
  it "should insert invalid document" do
870
918
  doc = document.new
871
- expect(doc).to receive(:valid?).never
919
+ doc.should_receive(:valid?).never
872
920
  doc.save(:validate => false)
873
921
  document.count.should == 1
874
922
  end
@@ -885,15 +933,15 @@ describe "Querying" do
885
933
 
886
934
  it "should allow passing safe" do
887
935
  @document.create(:name => 'John')
888
- expect {
936
+ lambda {
889
937
  @document.new(:name => 'John').save(:safe => true)
890
- }.to raise_error(Mongo::OperationFailure)
938
+ }.should raise_error(Mongo::Error::OperationFailure)
891
939
  end
892
940
 
893
941
  it "should raise argument error if options has unsupported key" do
894
- expect {
942
+ lambda {
895
943
  @document.new.save(:foo => true)
896
- }.to raise_error(ArgumentError)
944
+ }.should raise_error(ArgumentError)
897
945
  end
898
946
  end
899
947
 
@@ -906,21 +954,21 @@ describe "Querying" do
906
954
 
907
955
  it "should allow passing safe" do
908
956
  @document.create(:name => 'John')
909
- expect {
957
+ lambda {
910
958
  @document.new(:name => 'John').save!(:safe => true)
911
- }.to raise_error(Mongo::OperationFailure)
959
+ }.should raise_error(Mongo::Error::OperationFailure)
912
960
  end
913
961
 
914
962
  it "should raise argument error if options has unsupported key" do
915
- expect {
963
+ lambda {
916
964
  @document.new.save!(:foo => true)
917
- }.to raise_error(ArgumentError)
965
+ }.should raise_error(ArgumentError)
918
966
  end
919
967
 
920
968
  it "should raise argument error if using validate as that would be pointless with save!" do
921
- expect {
969
+ lambda {
922
970
  @document.new.save!(:validate => false)
923
- }.to raise_error(ArgumentError)
971
+ }.should raise_error(ArgumentError)
924
972
  end
925
973
  end
926
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
- expect_any_instance_of(Mongo::Collection).to 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
- expect_any_instance_of(Mongo::Collection).to 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
@@ -3,12 +3,12 @@ require 'spec_helper'
3
3
  describe "Single collection inheritance (document)" do
4
4
  context "without a connection", :without_connection => true do
5
5
  it "should attempt to create a connection during inheritance" do
6
- expect(Mongo::MongoClient).to_not receive(:new)
6
+ Mongo::Client.should_not_receive(:new)
7
7
  doc = Class.new
8
8
  doc.send(:include, MongoMapper::Document)
9
- expect {
9
+ lambda {
10
10
  Class.new(doc)
11
- }.to_not raise_error
11
+ }.should_not raise_error
12
12
  end
13
13
 
14
14
  it "should pick up a connection if one wasn't set" do
@@ -17,7 +17,7 @@ describe "Single collection inheritance (document)" do
17
17
  klass = Class.new(doc)
18
18
  klass.connection.should be_nil
19
19
  MongoMapper.connection
20
- klass.connection.should be_a Mongo::MongoClient
20
+ klass.connection.should be_a Mongo::Client
21
21
  end
22
22
  end
23
23
 
@@ -27,7 +27,7 @@ describe "Single collection inheritance (document)" do
27
27
  include MongoMapper::Document
28
28
  key :name, String
29
29
  end
30
- DocParent.collection.remove
30
+ DocParent.collection.drop
31
31
 
32
32
  class ::DocDaughter < ::DocParent; end
33
33
  class ::DocSon < ::DocParent; end
@@ -61,7 +61,7 @@ describe "Single collection inheritance (document)" do
61
61
  it "should use the same connection in the subclass" do
62
62
  parent_class = Class.new do
63
63
  include MongoMapper::Document
64
- connection Mongo::MongoClient.new
64
+ connection Mongo::Client.new(['127.0.0.1:27017'])
65
65
  end
66
66
 
67
67
  child_class = Class.new(parent_class) do
@@ -377,4 +377,4 @@ describe "Single collection inheritance (document)" do
377
377
  p.reload.article_parent.sci_polymorphic_posts.all.should include(p)
378
378
  end
379
379
  end
380
- end
380
+ end
@@ -170,7 +170,7 @@ describe "Scopes" do
170
170
  key :title, String
171
171
  key :published_at, Time
172
172
  end
173
- Item.collection.remove
173
+ Item.collection.drop
174
174
 
175
175
  class ::Page < ::Item; end
176
176
  class ::Blog < ::Item
@@ -92,7 +92,7 @@ describe MongoMapper::Plugins::Keys::Static do
92
92
  end
93
93
 
94
94
  it "should not blow up when loading if there is a key defined in the db that has not been defined (but it should not load it)" do
95
- @klass.collection.insert({ :foo => "bar", :valid_key => "something" })
95
+ @klass.collection.insert_one({ :foo => "bar", :valid_key => "something" })
96
96
  @obj = @klass.first
97
97
  @obj.valid_key.should == "something"
98
98
 
@@ -147,7 +147,7 @@ describe MongoMapper::Plugins::Keys::Static do
147
147
 
148
148
  lambda {
149
149
  @static_key_object['foo'] = 'bar'
150
- }.should raise_error
150
+ }.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
151
151
  end
152
152
  end
153
153
  end
@@ -13,7 +13,11 @@ describe "Stats" do
13
13
 
14
14
  context "with no documents present" do
15
15
  it "should return nil" do
16
- expect(Docs.stats).to eq(nil)
16
+ if Docs.stats == nil
17
+ Docs.stats.should == nil
18
+ else
19
+ Docs.stats['count'].should == 0
20
+ end
17
21
  end
18
22
  end
19
23
 
@@ -23,48 +27,60 @@ describe "Stats" do
23
27
  Docs.create!
24
28
  end
25
29
 
30
+ def get_stats
31
+ MongoMapper.database.command(:collstats => 'docs').documents[0]
32
+ end
33
+
26
34
  it "should have the correct count" do
27
- expect(Docs.stats.count).to eq(Docs.collection.stats['count'])
35
+ Docs.stats.count.should == get_stats['count']
28
36
  end
29
37
 
30
38
  it "should have the correct namespace" do
31
- expect(Docs.stats.ns).to eq(Docs.collection.stats['ns'])
39
+ Docs.stats.ns.should == get_stats['ns']
32
40
  end
33
41
 
34
42
  it "should have the correct size" do
35
- expect(Docs.stats.size).to eq(Docs.collection.stats['size'])
43
+ Docs.stats.size.should == get_stats['size']
36
44
  end
37
45
 
38
46
  it "should have the correct storage size" do
39
- expect(Docs.stats.storage_size).to eq(Docs.collection.stats['storageSize'])
47
+ Docs.stats.storage_size.should == get_stats['storageSize']
40
48
  end
41
49
 
42
50
  it "should have the correct average object size" do
43
- expect(Docs.stats.avg_obj_size).to eq(Docs.collection.stats['avgObjSize'])
51
+ Docs.stats.avg_obj_size.should == get_stats['avgObjSize']
44
52
  end
45
53
 
46
54
  it "should have the correct number of extents" do
47
- expect(Docs.stats.num_extents).to eq(Docs.collection.stats['numExtents'])
55
+ if get_stats['numExtents']
56
+ Docs.stats.num_extents.should == get_stats['numExtents']
57
+ end
48
58
  end
49
59
 
50
60
  it "should have the correct number of indexes" do
51
- expect(Docs.stats.nindexes).to eq(Docs.collection.stats['nindexes'])
61
+ Docs.stats.nindexes.should == get_stats['nindexes']
52
62
  end
53
63
 
54
64
  it "should have the correct last extent size" do
55
- expect(Docs.stats.last_extent_size).to eq(Docs.collection.stats['lastExtentSize'])
65
+ if get_stats['lastExtentSize']
66
+ Docs.stats.last_extent_size.should == get_stats['lastExtentSize']
67
+ end
56
68
  end
57
69
 
58
70
  it "should have the correct padding factor" do
59
- expect(Docs.stats.padding_factor).to eq(Docs.collection.stats['paddingFactor'])
71
+ if get_stats['paddingFactor']
72
+ Docs.stats.padding_factor.should == get_stats['paddingFactor']
73
+ end
60
74
  end
61
75
 
62
76
  it "should have the correct user flags" do
63
- expect(Docs.stats.user_flags).to eq(Docs.collection.stats['userFlags'])
77
+ if get_stats['userFlags']
78
+ Docs.stats.user_flags.should == get_stats['userFlags']
79
+ end
64
80
  end
65
81
 
66
82
  it "should have the correct total index size" do
67
- expect(Docs.stats.total_index_size).to eq(Docs.collection.stats['totalIndexSize'])
83
+ Docs.stats.total_index_size.should == get_stats['totalIndexSize']
68
84
  end
69
85
  end
70
86
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Strong parameters" do
4
+ context 'A document with strong parameters protection' do
5
+ if ::ActiveModel.const_defined?(:ForbiddenAttributesProtection)
6
+ require "action_controller/metal/strong_parameters"
7
+
8
+ before do
9
+ @doc_class = Doc do
10
+ plugin MongoMapper::Plugins::StrongParameters
11
+
12
+ key :name, String
13
+ key :admin, Boolean, :default => false
14
+ end
15
+
16
+ @doc = @doc_class.create(:name => 'Steve Sloan')
17
+ end
18
+
19
+ let(:params) {
20
+ {name: "Permitted", admin: true}
21
+ }
22
+
23
+ let(:strong_params) {
24
+ ActionController::Parameters.new params
25
+ }
26
+
27
+ it "allows assignment of attribute hashes" do
28
+ @doc.attributes = params
29
+ @doc.name.should =="Permitted"
30
+ end
31
+
32
+ it "doesn't allow mass assignment of ActionController::Parameters" do
33
+ lambda {
34
+ @doc.attributes = strong_params
35
+ }.should raise_error(ActiveModel::ForbiddenAttributesError)
36
+ end
37
+
38
+ it "does not allow mass assignment of non-permitted attributes" do
39
+ @doc.attributes = strong_params.permit(:name)
40
+ @doc.admin.should == false
41
+ end
42
+
43
+ it "allows mass assignment of permitted attributes" do
44
+ @doc.attributes = strong_params.permit(:name)
45
+ @doc.name.should == "Permitted"
46
+ end
47
+ end
48
+ end
49
+ end
@@ -157,8 +157,7 @@ describe "Validations" do
157
157
  doc = @document.new("name" => "joe")
158
158
  doc.save.should be_truthy
159
159
 
160
- allow(@document).to \
161
- receive(:first).
160
+ @document.stub(:first).
162
161
  with(:name => 'joe').
163
162
  and_return(doc)
164
163
 
@@ -171,8 +170,7 @@ describe "Validations" do
171
170
  doc = @document.new("name" => "joe")
172
171
  doc.save.should be_truthy
173
172
 
174
- allow(@document).to \
175
- receive(:first).
173
+ @document.stub(:first).
176
174
  with(:name => 'joe').
177
175
  and_return(doc)
178
176
 
@@ -189,8 +187,7 @@ describe "Validations" do
189
187
  doc = document.new("name" => "")
190
188
  doc.save.should be_truthy
191
189
 
192
- allow(@document).to \
193
- receive(:first).
190
+ @document.stub(:first).
194
191
  with(:name => '').
195
192
  and_return(doc)
196
193
 
@@ -272,8 +269,7 @@ describe "Validations" do
272
269
  doc = @document.new("name" => "joe", "scope" => "one")
273
270
  doc.save.should be_truthy
274
271
 
275
- allow(@document).to \
276
- receive(:first).
272
+ @document.stub(:first).
277
273
  with(:name => 'joe', :scope => "one").
278
274
  and_return(doc)
279
275
 
@@ -285,8 +281,7 @@ describe "Validations" do
285
281
  doc = @document.new("name" => "joe", "scope" => "one")
286
282
  doc.save.should be_truthy
287
283
 
288
- allow(@document).to \
289
- receive(:first).
284
+ @document.stub(:first).
290
285
  with(:name => 'joe', :scope => 'two').
291
286
  and_return(nil)
292
287
 
@@ -309,8 +304,7 @@ describe "Validations" do
309
304
  doc = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "two")
310
305
  doc.save.should be_truthy
311
306
 
312
- allow(@document).to \
313
- receive(:first).
307
+ @document.stub(:first).
314
308
  with(:name => 'joe', :first_scope => 'one', :second_scope => 'two').
315
309
  and_return(doc)
316
310
 
@@ -322,8 +316,7 @@ describe "Validations" do
322
316
  doc = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "two")
323
317
  doc.save.should be_truthy
324
318
 
325
- allow(@document).to \
326
- receive(:first).
319
+ @document.stub(:first).
327
320
  with(:name => 'joe', :first_scope => 'one', :second_scope => 'one').
328
321
  and_return(nil)
329
322
 
@@ -403,8 +396,7 @@ describe "Validations" do
403
396
  # doc = @document.create(:name => 'John')
404
397
  # doc.should_not have_error_on(:name)
405
398
  #
406
- # allow(@document).to \
407
- # receive(:first).
399
+ # @document.stub(:first).
408
400
  # with(:name => 'John').
409
401
  # and_return(doc)
410
402
  #
data/spec/quality_spec.rb CHANGED
@@ -46,6 +46,6 @@ describe "The library itself" do
46
46
  error_messages << check_for_extra_spaces(filename)
47
47
  end
48
48
  end
49
- expect(error_messages.compact).to be_well_formed
49
+ error_messages.compact.should be_well_formed
50
50
  end
51
51
  end