mongo_mapper 0.13.1 → 0.14.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/README.rdoc +3 -6
- data/lib/mongo_mapper.rb +1 -0
- data/lib/mongo_mapper/document.rb +2 -0
- data/lib/mongo_mapper/extensions/array.rb +14 -6
- data/lib/mongo_mapper/extensions/hash.rb +15 -3
- data/lib/mongo_mapper/extensions/object.rb +4 -0
- data/lib/mongo_mapper/extensions/string.rb +13 -5
- data/lib/mongo_mapper/plugins/accessible.rb +12 -11
- data/lib/mongo_mapper/plugins/associations.rb +7 -6
- data/lib/mongo_mapper/plugins/associations/base.rb +13 -12
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +9 -8
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +12 -11
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +4 -4
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +24 -23
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +18 -16
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +55 -48
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +14 -13
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +7 -6
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +7 -5
- data/lib/mongo_mapper/plugins/associations/one_as_proxy.rb +14 -11
- data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +14 -13
- data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +9 -9
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +27 -26
- data/lib/mongo_mapper/plugins/associations/proxy.rb +29 -26
- data/lib/mongo_mapper/plugins/callbacks.rb +13 -0
- data/lib/mongo_mapper/plugins/counter_cache.rb +23 -4
- data/lib/mongo_mapper/plugins/dirty.rb +2 -2
- data/lib/mongo_mapper/plugins/dynamic_querying.rb +10 -9
- data/lib/mongo_mapper/plugins/dynamic_querying/dynamic_finder.rb +17 -16
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +1 -1
- data/lib/mongo_mapper/plugins/identity_map.rb +1 -1
- data/lib/mongo_mapper/plugins/indexes.rb +1 -1
- data/lib/mongo_mapper/plugins/keys.rb +158 -158
- data/lib/mongo_mapper/plugins/keys/key.rb +16 -10
- data/lib/mongo_mapper/plugins/keys/static.rb +45 -0
- data/lib/mongo_mapper/plugins/modifiers.rb +27 -26
- data/lib/mongo_mapper/plugins/partial_updates.rb +86 -0
- data/lib/mongo_mapper/plugins/persistence.rb +7 -6
- data/lib/mongo_mapper/plugins/protected.rb +6 -5
- data/lib/mongo_mapper/plugins/querying.rb +80 -43
- data/lib/mongo_mapper/plugins/querying/decorated_plucky_query.rb +14 -9
- data/lib/mongo_mapper/plugins/scopes.rb +78 -7
- data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
- data/lib/mongo_mapper/plugins/validations.rb +0 -0
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/config/config_generator.rb +12 -13
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +9 -9
- data/spec/functional/accessible_spec.rb +12 -12
- data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +11 -11
- data/spec/functional/associations/belongs_to_proxy_spec.rb +14 -15
- data/spec/functional/associations/in_array_proxy_spec.rb +6 -6
- data/spec/functional/associations/many_documents_proxy_spec.rb +89 -18
- data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +11 -11
- data/spec/functional/associations/many_embedded_proxy_spec.rb +1 -1
- data/spec/functional/associations/one_as_proxy_spec.rb +14 -14
- data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +9 -9
- data/spec/functional/associations/one_embedded_proxy_spec.rb +3 -3
- data/spec/functional/associations/one_proxy_spec.rb +14 -14
- data/spec/functional/caching_spec.rb +8 -8
- data/spec/functional/callbacks_spec.rb +87 -0
- data/spec/functional/counter_cache_spec.rb +89 -0
- data/spec/functional/dirty_spec.rb +41 -41
- data/spec/functional/document_spec.rb +3 -3
- data/spec/functional/embedded_document_spec.rb +18 -18
- data/spec/functional/identity_map_spec.rb +28 -15
- data/spec/functional/indexes_spec.rb +4 -4
- data/spec/functional/keys_spec.rb +12 -3
- data/spec/functional/logger_spec.rb +1 -1
- data/spec/functional/modifiers_spec.rb +2 -2
- data/spec/functional/partial_updates_spec.rb +577 -0
- data/spec/functional/protected_spec.rb +13 -13
- data/spec/functional/querying_spec.rb +11 -10
- data/spec/functional/safe_spec.rb +2 -2
- data/spec/functional/sci_spec.rb +3 -3
- data/spec/functional/scopes_spec.rb +234 -1
- data/spec/functional/static_keys_spec.rb +153 -0
- data/spec/functional/stats_spec.rb +0 -4
- data/spec/functional/touch_spec.rb +1 -1
- data/spec/functional/validations_spec.rb +59 -57
- data/spec/quality_spec.rb +1 -1
- data/spec/spec_helper.rb +7 -3
- data/spec/support/matchers.rb +4 -13
- data/spec/unit/associations/base_spec.rb +12 -12
- data/spec/unit/associations/belongs_to_association_spec.rb +2 -2
- data/spec/unit/associations/many_association_spec.rb +2 -2
- data/spec/unit/associations/one_association_spec.rb +2 -2
- data/spec/unit/associations/proxy_spec.rb +13 -15
- data/spec/unit/document_spec.rb +5 -5
- data/spec/unit/dynamic_finder_spec.rb +8 -8
- data/spec/unit/embedded_document_spec.rb +14 -14
- data/spec/unit/extensions_spec.rb +17 -17
- data/spec/unit/identity_map_middleware_spec.rb +5 -5
- data/spec/unit/key_spec.rb +24 -21
- data/spec/unit/keys_spec.rb +5 -5
- data/spec/unit/mongo_mapper_spec.rb +26 -26
- data/spec/unit/rails_spec.rb +2 -2
- data/spec/unit/serialization_spec.rb +1 -1
- data/spec/unit/time_zones_spec.rb +2 -2
- data/spec/unit/validations_spec.rb +28 -15
- metadata +16 -14
- data/lib/mongo_mapper/connections/10gen.rb +0 -0
- data/lib/mongo_mapper/connections/moped.rb +0 -0
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MongoMapper::Plugins::Keys::Static do
|
4
|
+
before do
|
5
|
+
@klass = Class.new do
|
6
|
+
include MongoMapper::Document
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it "is off by default" do
|
11
|
+
@klass.static_keys.should == false
|
12
|
+
end
|
13
|
+
|
14
|
+
it "can be turned on" do
|
15
|
+
@klass.static_keys = true
|
16
|
+
@klass.static_keys.should == true
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "a class with static keys" do
|
20
|
+
before do
|
21
|
+
@klass = Class.new do
|
22
|
+
include MongoMapper::Document
|
23
|
+
|
24
|
+
self.static_keys = true
|
25
|
+
|
26
|
+
attr_accessor :an_accessor
|
27
|
+
|
28
|
+
key "valid_key", String
|
29
|
+
end
|
30
|
+
|
31
|
+
@obj = @klass.new
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be able to assign to a valid key" do
|
35
|
+
@obj.valid_key = "foo"
|
36
|
+
@obj.valid_key.should == "foo"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should raise a MissingKeyError if trying to assign to a field that does not exist" do
|
40
|
+
lambda {
|
41
|
+
@obj['foo'] = "foo"
|
42
|
+
}.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should raise a MissingKeyError if trying to read from a field that does not exist" do
|
46
|
+
lambda {
|
47
|
+
@obj['foo']
|
48
|
+
}.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should raise a MissingKeyError if trying to set attributes= to a field that does not exist" do
|
52
|
+
lambda {
|
53
|
+
@obj.attributes = {:foo => "foo"}
|
54
|
+
}.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should be able to call a method" do
|
58
|
+
@obj.an_accessor = :bar
|
59
|
+
@obj.an_accessor.should == :bar
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should raise a NoMethodError if trying to call the non-existant key method" do
|
63
|
+
lambda {
|
64
|
+
@obj.foo
|
65
|
+
}.should raise_error(NoMethodError)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should raise for read_key" do
|
69
|
+
lambda {
|
70
|
+
@obj.read_key('foo')
|
71
|
+
}.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should raise for attribute" do
|
75
|
+
lambda {
|
76
|
+
@obj.attribute('foo')
|
77
|
+
}.should raise_error(MongoMapper::Plugins::Keys::Static::MissingKeyError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should not raise if trying to assign to a field that exists (but with a symbol instead of a string)" do
|
81
|
+
lambda {
|
82
|
+
@obj.write_key(:valid_key, "foo")
|
83
|
+
}.should_not raise_error
|
84
|
+
|
85
|
+
@obj.valid_key.should == "foo"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should not raise a MissingKeyError if trying to read from a field that exists (but with a symbol instead of a string)" do
|
89
|
+
lambda {
|
90
|
+
@obj[:valid_key]
|
91
|
+
}.should_not raise_error
|
92
|
+
end
|
93
|
+
|
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" })
|
96
|
+
@obj = @klass.first
|
97
|
+
@obj.valid_key.should == "something"
|
98
|
+
|
99
|
+
lambda {
|
100
|
+
@obj.foo
|
101
|
+
}.should raise_error(NoMethodError)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "a class without static keys" do
|
106
|
+
before do
|
107
|
+
@klass = Class.new do
|
108
|
+
include MongoMapper::Document
|
109
|
+
key :valid_key, String
|
110
|
+
end
|
111
|
+
|
112
|
+
@obj = @klass.new
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should be able to assign to a valid key" do
|
116
|
+
@obj.valid_key = "foo"
|
117
|
+
@obj.valid_key.should == "foo"
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should be able to read and assign a dynamic key" do
|
121
|
+
@obj['foo'].should be_nil
|
122
|
+
@obj['foo'] = "bar"
|
123
|
+
@obj['foo'].should == "bar"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "with mixed static + non static models" do
|
128
|
+
before do
|
129
|
+
@static_model = Class.new do
|
130
|
+
include MongoMapper::Document
|
131
|
+
self.static_keys = true
|
132
|
+
end
|
133
|
+
|
134
|
+
@non_static_model = Class.new do
|
135
|
+
include MongoMapper::Document
|
136
|
+
self.static_keys = false
|
137
|
+
end
|
138
|
+
|
139
|
+
@static_key_object = @static_model.new
|
140
|
+
@non_static_key_object = @non_static_model.new
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should allow non-static key assignment to one, only static assignment to the other" do
|
144
|
+
@non_static_key_object['foo'] = 'bar'
|
145
|
+
@non_static_key_object.foo.should == 'bar'
|
146
|
+
@non_static_key_object['foo'].should == 'bar'
|
147
|
+
|
148
|
+
lambda {
|
149
|
+
@static_key_object['foo'] = 'bar'
|
150
|
+
}.should raise_error
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -59,10 +59,6 @@ describe "Stats" do
|
|
59
59
|
expect(Docs.stats.padding_factor).to eq(Docs.collection.stats['paddingFactor'])
|
60
60
|
end
|
61
61
|
|
62
|
-
it "should have the correct system flags" do
|
63
|
-
expect(Docs.stats.system_flags).to eq(Docs.collection.stats['systemFlags'])
|
64
|
-
end
|
65
|
-
|
66
62
|
it "should have the correct user flags" do
|
67
63
|
expect(Docs.stats.user_flags).to eq(Docs.collection.stats['userFlags'])
|
68
64
|
end
|
@@ -61,7 +61,7 @@ describe "Touch" do
|
|
61
61
|
|
62
62
|
it 'should not be true by default' do
|
63
63
|
@comment_class.belongs_to :post, :class => @post_class
|
64
|
-
@comment_class.associations[:post].touch?.should_not
|
64
|
+
@comment_class.associations[:post].touch?.should_not be_truthy
|
65
65
|
end
|
66
66
|
|
67
67
|
context 'touch the parent when true' do
|
@@ -57,7 +57,7 @@ describe "Validations" do
|
|
57
57
|
|
58
58
|
it "should create a new document" do
|
59
59
|
instance = @document.create!(:name => "James")
|
60
|
-
instance.new_record?.should
|
60
|
+
instance.new_record?.should be_falsey
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -140,7 +140,7 @@ describe "Validations" do
|
|
140
140
|
validates_uniqueness_of :name, :scope => :adult
|
141
141
|
end
|
142
142
|
doc = document.new("name" => "joe", :adult => true)
|
143
|
-
doc.save.should
|
143
|
+
doc.save.should be_truthy
|
144
144
|
|
145
145
|
doc2 = document.new("name" => "joe", :adult => false)
|
146
146
|
doc2.should be_valid
|
@@ -149,31 +149,32 @@ describe "Validations" do
|
|
149
149
|
it "should work with i18n taken message" do
|
150
150
|
@document.create(:name => 'joe')
|
151
151
|
doc = @document.create(:name => 'joe')
|
152
|
-
doc.should have_error_on(:name
|
152
|
+
doc.should have_error_on(:name)
|
153
|
+
doc.errors[:name].should == ['has already been taken']
|
153
154
|
end
|
154
155
|
|
155
156
|
it "should allow to update an object" do
|
156
157
|
doc = @document.new("name" => "joe")
|
157
|
-
doc.save.should
|
158
|
+
doc.save.should be_truthy
|
158
159
|
|
159
|
-
@document \
|
160
|
-
|
161
|
-
|
162
|
-
|
160
|
+
allow(@document).to \
|
161
|
+
receive(:first).
|
162
|
+
with(:name => 'joe').
|
163
|
+
and_return(doc)
|
163
164
|
|
164
165
|
doc.name = "joe"
|
165
|
-
doc.valid?.should
|
166
|
+
doc.valid?.should be_truthy
|
166
167
|
doc.should_not have_error_on(:name)
|
167
168
|
end
|
168
169
|
|
169
170
|
it "should fail if object name is not unique" do
|
170
171
|
doc = @document.new("name" => "joe")
|
171
|
-
doc.save.should
|
172
|
+
doc.save.should be_truthy
|
172
173
|
|
173
|
-
@document \
|
174
|
-
|
175
|
-
|
176
|
-
|
174
|
+
allow(@document).to \
|
175
|
+
receive(:first).
|
176
|
+
with(:name => 'joe').
|
177
|
+
and_return(doc)
|
177
178
|
|
178
179
|
doc2 = @document.new("name" => "joe")
|
179
180
|
doc2.should have_error_on(:name)
|
@@ -186,12 +187,12 @@ describe "Validations" do
|
|
186
187
|
end
|
187
188
|
|
188
189
|
doc = document.new("name" => "")
|
189
|
-
doc.save.should
|
190
|
+
doc.save.should be_truthy
|
190
191
|
|
191
|
-
document \
|
192
|
-
|
193
|
-
|
194
|
-
|
192
|
+
allow(@document).to \
|
193
|
+
receive(:first).
|
194
|
+
with(:name => '').
|
195
|
+
and_return(doc)
|
195
196
|
|
196
197
|
doc2 = document.new("name" => "")
|
197
198
|
doc2.should_not have_error_on(:name)
|
@@ -204,7 +205,7 @@ describe "Validations" do
|
|
204
205
|
end
|
205
206
|
|
206
207
|
doc = document.new('name' => nil)
|
207
|
-
doc.save.should
|
208
|
+
doc.save.should be_truthy
|
208
209
|
|
209
210
|
doc2 = document.new('name' => nil)
|
210
211
|
doc2.should_not have_error_on(:name)
|
@@ -217,7 +218,7 @@ describe "Validations" do
|
|
217
218
|
end
|
218
219
|
|
219
220
|
doc = document.new("name" => "BLAMMO")
|
220
|
-
doc.save.should
|
221
|
+
doc.save.should be_truthy
|
221
222
|
|
222
223
|
doc2 = document.new("name" => "blammo")
|
223
224
|
doc2.should_not have_error_on(:name)
|
@@ -233,7 +234,7 @@ describe "Validations" do
|
|
233
234
|
|
234
235
|
it "should fail on entries that differ only in case" do
|
235
236
|
doc = @document.new("name" => "BLAMMO")
|
236
|
-
doc.save.should
|
237
|
+
doc.save.should be_truthy
|
237
238
|
|
238
239
|
doc2 = @document.new("name" => "blammo")
|
239
240
|
doc2.should have_error_on(:name)
|
@@ -251,10 +252,10 @@ describe "Validations" do
|
|
251
252
|
|
252
253
|
it "should check for uniqueness using entire string" do
|
253
254
|
doc = @document.new("name" => "John Doe")
|
254
|
-
doc.save.should
|
255
|
+
doc.save.should be_truthy
|
255
256
|
|
256
257
|
doc2 = @document.new("name" => "John")
|
257
|
-
doc2.valid?.should
|
258
|
+
doc2.valid?.should be_truthy
|
258
259
|
end
|
259
260
|
end
|
260
261
|
|
@@ -269,12 +270,12 @@ describe "Validations" do
|
|
269
270
|
|
270
271
|
it "should fail if the same name exists in the scope" do
|
271
272
|
doc = @document.new("name" => "joe", "scope" => "one")
|
272
|
-
doc.save.should
|
273
|
+
doc.save.should be_truthy
|
273
274
|
|
274
|
-
@document \
|
275
|
-
|
276
|
-
|
277
|
-
|
275
|
+
allow(@document).to \
|
276
|
+
receive(:first).
|
277
|
+
with(:name => 'joe', :scope => "one").
|
278
|
+
and_return(doc)
|
278
279
|
|
279
280
|
doc2 = @document.new("name" => "joe", "scope" => "one")
|
280
281
|
doc2.should have_error_on(:name)
|
@@ -282,12 +283,12 @@ describe "Validations" do
|
|
282
283
|
|
283
284
|
it "should pass if the same name exists in a different scope" do
|
284
285
|
doc = @document.new("name" => "joe", "scope" => "one")
|
285
|
-
doc.save.should
|
286
|
+
doc.save.should be_truthy
|
286
287
|
|
287
|
-
@document \
|
288
|
-
|
289
|
-
|
290
|
-
|
288
|
+
allow(@document).to \
|
289
|
+
receive(:first).
|
290
|
+
with(:name => 'joe', :scope => 'two').
|
291
|
+
and_return(nil)
|
291
292
|
|
292
293
|
doc2 = @document.new("name" => "joe", "scope" => "two")
|
293
294
|
doc2.should_not have_error_on(:name)
|
@@ -306,12 +307,12 @@ describe "Validations" do
|
|
306
307
|
|
307
308
|
it "should fail if the same name exists in the scope" do
|
308
309
|
doc = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "two")
|
309
|
-
doc.save.should
|
310
|
+
doc.save.should be_truthy
|
310
311
|
|
311
|
-
@document \
|
312
|
-
|
313
|
-
|
314
|
-
|
312
|
+
allow(@document).to \
|
313
|
+
receive(:first).
|
314
|
+
with(:name => 'joe', :first_scope => 'one', :second_scope => 'two').
|
315
|
+
and_return(doc)
|
315
316
|
|
316
317
|
doc2 = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "two")
|
317
318
|
doc2.should have_error_on(:name)
|
@@ -319,12 +320,12 @@ describe "Validations" do
|
|
319
320
|
|
320
321
|
it "should pass if the same name exists in a different scope" do
|
321
322
|
doc = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "two")
|
322
|
-
doc.save.should
|
323
|
+
doc.save.should be_truthy
|
323
324
|
|
324
|
-
@document \
|
325
|
-
|
326
|
-
|
327
|
-
|
325
|
+
allow(@document).to \
|
326
|
+
receive(:first).
|
327
|
+
with(:name => 'joe', :first_scope => 'one', :second_scope => 'one').
|
328
|
+
and_return(nil)
|
328
329
|
|
329
330
|
doc2 = @document.new("name" => "joe", "first_scope" => "one", "second_scope" => "one")
|
330
331
|
doc2.should_not have_error_on(:name)
|
@@ -345,21 +346,21 @@ describe "Validations" do
|
|
345
346
|
|
346
347
|
it "should pass if there are no associated docs" do
|
347
348
|
doc = @root_class.new
|
348
|
-
doc.save.should
|
349
|
+
doc.save.should be_truthy
|
349
350
|
end
|
350
351
|
|
351
352
|
it "should pass if the associated doc is valid" do
|
352
353
|
doc = @root_class.new
|
353
354
|
doc.children.build(:name => 'Joe')
|
354
|
-
doc.save.should
|
355
|
+
doc.save.should be_truthy
|
355
356
|
end
|
356
357
|
|
357
358
|
it "should fail if the associated doc is invalid" do
|
358
359
|
doc = @root_class.new
|
359
360
|
doc.children.build
|
360
|
-
doc.should have_error_on(:children
|
361
|
+
doc.should have_error_on(:children)
|
362
|
+
doc.errors[:children].should == ['are invalid']
|
361
363
|
end
|
362
|
-
|
363
364
|
end
|
364
365
|
|
365
366
|
context "validating associated docs with custom context" do
|
@@ -377,22 +378,22 @@ describe "Validations" do
|
|
377
378
|
|
378
379
|
it "should pass if there are no associated docs" do
|
379
380
|
doc = @root_class.new
|
380
|
-
doc.valid?(:custom_context).should
|
381
|
+
doc.valid?(:custom_context).should be_truthy
|
381
382
|
end
|
382
383
|
|
383
384
|
it "should pass if the associated doc is valid" do
|
384
385
|
doc = @root_class.new
|
385
386
|
doc.children.build(:name => 'George')
|
386
|
-
doc.valid?(:custom_context).should
|
387
|
+
doc.valid?(:custom_context).should be_truthy
|
387
388
|
end
|
388
389
|
|
389
390
|
it "should fail if the associated doc is invalid" do
|
390
391
|
doc = @root_class.new
|
391
392
|
doc.children.build(:name => 'Bob')
|
392
|
-
doc.valid?(:custom_context).should_not
|
393
|
+
doc.valid?(:custom_context).should_not be_truthy
|
393
394
|
end
|
394
|
-
|
395
395
|
end
|
396
|
+
|
396
397
|
# context "validates uniqueness of with :unique shortcut" do
|
397
398
|
# it "should work" do
|
398
399
|
# @document = Doc do
|
@@ -402,13 +403,14 @@ describe "Validations" do
|
|
402
403
|
# doc = @document.create(:name => 'John')
|
403
404
|
# doc.should_not have_error_on(:name)
|
404
405
|
#
|
405
|
-
# @document \
|
406
|
-
#
|
407
|
-
#
|
408
|
-
#
|
406
|
+
# allow(@document).to \
|
407
|
+
# receive(:first).
|
408
|
+
# with(:name => 'John').
|
409
|
+
# and_return(doc)
|
409
410
|
#
|
410
411
|
# second_john = @document.create(:name => 'John')
|
411
|
-
# second_john.should have_error_on(:name
|
412
|
+
# second_john.should have_error_on(:name)
|
413
|
+
# second_john.errors[:name].should == ['has already been taken']
|
412
414
|
# end
|
413
415
|
# end
|
414
416
|
end
|
data/spec/quality_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,7 @@ require 'bundler/setup'
|
|
5
5
|
require 'fileutils'
|
6
6
|
require 'timecop'
|
7
7
|
require "generator_spec/test_case"
|
8
|
+
# require 'ruby-debug'
|
8
9
|
|
9
10
|
if RUBY_PLATFORM != "java"
|
10
11
|
if ENV['TRAVIS']
|
@@ -70,9 +71,12 @@ MongoMapper.database = "test"
|
|
70
71
|
MongoMapper.database.collections.each { |c| c.drop_indexes }
|
71
72
|
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
72
73
|
|
73
|
-
RSpec.configure do |
|
74
|
-
|
75
|
-
|
74
|
+
RSpec.configure do |config|
|
75
|
+
config.expect_with :rspec do |c|
|
76
|
+
c.syntax = [:should, :expect]
|
77
|
+
end
|
78
|
+
|
79
|
+
config.around(:each, :without_connection) do |example|
|
76
80
|
old, MongoMapper.connection = MongoMapper.connection, nil
|
77
81
|
example.run
|
78
82
|
MongoMapper.connection = old
|