mongo_mapper 0.12.0 → 0.13.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.rdoc +35 -13
- data/bin/mmconsole +1 -1
- data/lib/mongo_mapper.rb +4 -0
- data/lib/mongo_mapper/connection.rb +17 -6
- data/lib/mongo_mapper/document.rb +1 -0
- data/lib/mongo_mapper/exceptions.rb +4 -1
- data/lib/mongo_mapper/extensions/binary.rb +1 -1
- data/lib/mongo_mapper/extensions/boolean.rb +20 -23
- data/lib/mongo_mapper/extensions/date.rb +3 -3
- data/lib/mongo_mapper/extensions/integer.rb +5 -1
- data/lib/mongo_mapper/extensions/kernel.rb +2 -0
- data/lib/mongo_mapper/extensions/ordered_hash.rb +23 -0
- data/lib/mongo_mapper/extensions/string.rb +2 -2
- data/lib/mongo_mapper/extensions/time.rb +7 -5
- data/lib/mongo_mapper/middleware/identity_map.rb +3 -4
- data/lib/mongo_mapper/plugins.rb +1 -1
- data/lib/mongo_mapper/plugins/associations.rb +11 -5
- data/lib/mongo_mapper/plugins/associations/base.rb +5 -3
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +0 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +8 -8
- data/lib/mongo_mapper/plugins/associations/collection.rb +2 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +32 -7
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +2 -2
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +12 -12
- data/lib/mongo_mapper/plugins/associations/proxy.rb +5 -1
- data/lib/mongo_mapper/plugins/associations/single_association.rb +6 -6
- data/lib/mongo_mapper/plugins/clone.rb +4 -2
- data/lib/mongo_mapper/plugins/dirty.rb +22 -21
- data/lib/mongo_mapper/plugins/document.rb +4 -4
- data/lib/mongo_mapper/plugins/dumpable.rb +22 -0
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +58 -9
- data/lib/mongo_mapper/plugins/identity_map.rb +42 -32
- data/lib/mongo_mapper/plugins/keys.rb +133 -54
- data/lib/mongo_mapper/plugins/keys/key.rb +68 -22
- data/lib/mongo_mapper/plugins/modifiers.rb +26 -19
- data/lib/mongo_mapper/plugins/persistence.rb +15 -5
- data/lib/mongo_mapper/plugins/querying.rb +15 -40
- data/lib/mongo_mapper/plugins/querying/{decorator.rb → decorated_plucky_query.rb} +24 -4
- data/lib/mongo_mapper/plugins/rails.rb +22 -2
- data/lib/mongo_mapper/plugins/safe.rb +8 -5
- data/lib/mongo_mapper/plugins/sci.rb +26 -4
- data/lib/mongo_mapper/plugins/scopes.rb +5 -4
- data/lib/mongo_mapper/plugins/timestamps.rb +11 -4
- data/lib/mongo_mapper/plugins/validations.rb +1 -1
- data/lib/mongo_mapper/utils.rb +12 -0
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/config/config_generator.rb +20 -7
- data/lib/rails/generators/mongo_mapper/config/templates/mongo.yml +6 -0
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +18 -1
- data/lib/rails/generators/mongo_mapper/model/templates/model.rb +9 -5
- data/{test/functional/test_accessible.rb → spec/functional/accessible_spec.rb} +29 -29
- data/{test/functional/associations/test_belongs_to_polymorphic_proxy.rb → spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_belongs_to_proxy.rb → spec/functional/associations/belongs_to_proxy_spec.rb} +82 -64
- data/{test/functional/associations/test_in_array_proxy.rb → spec/functional/associations/in_array_proxy_spec.rb} +68 -68
- data/{test/functional/associations/test_many_documents_as_proxy.rb → spec/functional/associations/many_documents_as_proxy_spec.rb} +37 -38
- data/{test/functional/associations/test_many_documents_proxy.rb → spec/functional/associations/many_documents_proxy_spec.rb} +233 -146
- data/{test/functional/associations/test_many_embedded_polymorphic_proxy.rb → spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb} +19 -20
- data/{test/functional/associations/test_many_embedded_proxy.rb → spec/functional/associations/many_embedded_proxy_spec.rb} +23 -24
- data/{test/functional/associations/test_many_polymorphic_proxy.rb → spec/functional/associations/many_polymorphic_proxy_spec.rb} +45 -46
- data/{test/functional/associations/test_one_as_proxy.rb → spec/functional/associations/one_as_proxy_spec.rb} +75 -77
- data/{test/functional/associations/test_one_embedded_polymorphic_proxy.rb → spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb} +31 -32
- data/{test/functional/associations/test_one_embedded_proxy.rb → spec/functional/associations/one_embedded_proxy_spec.rb} +10 -10
- data/{test/functional/associations/test_one_proxy.rb → spec/functional/associations/one_proxy_spec.rb} +125 -102
- data/spec/functional/associations_spec.rb +48 -0
- data/{test/functional/test_binary.rb → spec/functional/binary_spec.rb} +6 -6
- data/spec/functional/caching_spec.rb +75 -0
- data/{test/functional/test_callbacks.rb → spec/functional/callbacks_spec.rb} +84 -26
- data/{test/functional/test_dirty.rb → spec/functional/dirty_spec.rb} +57 -42
- data/{test/functional/test_document.rb → spec/functional/document_spec.rb} +52 -52
- data/spec/functional/dumpable_spec.rb +24 -0
- data/{test/functional/test_dynamic_querying.rb → spec/functional/dynamic_querying_spec.rb} +14 -14
- data/{test/functional/test_embedded_document.rb → spec/functional/embedded_document_spec.rb} +51 -42
- data/{test/functional/test_equality.rb → spec/functional/equality_spec.rb} +4 -4
- data/spec/functional/extensions_spec.rb +16 -0
- data/{test/functional/test_identity_map.rb → spec/functional/identity_map_spec.rb} +73 -61
- data/spec/functional/indexes_spec.rb +48 -0
- data/spec/functional/keys_spec.rb +224 -0
- data/{test/functional/test_logger.rb → spec/functional/logger_spec.rb} +6 -6
- data/spec/functional/modifiers_spec.rb +550 -0
- data/spec/functional/pagination_spec.rb +89 -0
- data/spec/functional/protected_spec.rb +199 -0
- data/spec/functional/querying_spec.rb +1003 -0
- data/spec/functional/rails_spec.rb +55 -0
- data/spec/functional/safe_spec.rb +163 -0
- data/{test/functional/test_sci.rb → spec/functional/sci_spec.rb} +123 -34
- data/{test/functional/test_scopes.rb → spec/functional/scopes_spec.rb} +59 -26
- data/spec/functional/timestamps_spec.rb +97 -0
- data/{test/functional/test_touch.rb → spec/functional/touch_spec.rb} +13 -13
- data/spec/functional/userstamps_spec.rb +46 -0
- data/{test/functional/test_validations.rb → spec/functional/validations_spec.rb} +64 -64
- data/spec/spec_helper.rb +81 -0
- data/spec/support/matchers.rb +24 -0
- data/{test → spec/support}/models.rb +1 -6
- data/spec/unit/associations/base_spec.rb +146 -0
- data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
- data/spec/unit/associations/many_association_spec.rb +64 -0
- data/spec/unit/associations/one_association_spec.rb +48 -0
- data/{test/unit/associations/test_proxy.rb → spec/unit/associations/proxy_spec.rb} +21 -21
- data/{test/unit/test_clone.rb → spec/unit/clone_spec.rb} +21 -11
- data/spec/unit/config_generator_spec.rb +24 -0
- data/{test/unit/test_document.rb → spec/unit/document_spec.rb} +42 -42
- data/{test/unit/test_dynamic_finder.rb → spec/unit/dynamic_finder_spec.rb} +28 -28
- data/{test/unit/test_embedded_document.rb → spec/unit/embedded_document_spec.rb} +102 -108
- data/{test/unit/test_equality.rb → spec/unit/equality_spec.rb} +7 -7
- data/{test/unit/test_exceptions.rb → spec/unit/exceptions_spec.rb} +3 -3
- data/{test/unit/test_extensions.rb → spec/unit/extensions_spec.rb} +85 -71
- data/spec/unit/identity_map_middleware_spec.rb +134 -0
- data/{test/unit/test_inspect.rb → spec/unit/inspect_spec.rb} +8 -8
- data/{test/unit/test_key.rb → spec/unit/key_spec.rb} +82 -52
- data/spec/unit/keys_spec.rb +155 -0
- data/spec/unit/model_generator_spec.rb +47 -0
- data/spec/unit/mongo_mapper_spec.rb +184 -0
- data/spec/unit/pagination_spec.rb +11 -0
- data/{test/unit/test_plugins.rb → spec/unit/plugins_spec.rb} +14 -14
- data/spec/unit/rails_compatibility_spec.rb +40 -0
- data/{test/unit/test_rails_reflect_on_association.rb → spec/unit/rails_reflect_on_association_spec.rb} +9 -9
- data/{test/unit/test_rails.rb → spec/unit/rails_spec.rb} +31 -31
- data/spec/unit/serialization_spec.rb +169 -0
- data/spec/unit/serializers/json_serializer_spec.rb +218 -0
- data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
- data/{test/unit/test_time_zones.rb → spec/unit/time_zones_spec.rb} +8 -8
- data/{test/unit/test_translation.rb → spec/unit/translation_spec.rb} +6 -6
- data/{test/unit/test_validations.rb → spec/unit/validations_spec.rb} +72 -59
- metadata +199 -179
- data/test/_NOTE_ON_TESTING +0 -1
- data/test/functional/test_associations.rb +0 -46
- data/test/functional/test_caching.rb +0 -77
- data/test/functional/test_indexes.rb +0 -50
- data/test/functional/test_modifiers.rb +0 -537
- data/test/functional/test_pagination.rb +0 -91
- data/test/functional/test_protected.rb +0 -201
- data/test/functional/test_querying.rb +0 -935
- data/test/functional/test_safe.rb +0 -76
- data/test/functional/test_timestamps.rb +0 -62
- data/test/functional/test_userstamps.rb +0 -44
- data/test/support/railtie.rb +0 -4
- data/test/support/railtie/autoloaded.rb +0 -2
- data/test/support/railtie/not_autoloaded.rb +0 -3
- data/test/support/railtie/parent.rb +0 -3
- data/test/test_active_model_lint.rb +0 -18
- data/test/test_helper.rb +0 -93
- data/test/unit/associations/test_base.rb +0 -146
- data/test/unit/associations/test_belongs_to_association.rb +0 -29
- data/test/unit/associations/test_many_association.rb +0 -63
- data/test/unit/associations/test_one_association.rb +0 -47
- data/test/unit/serializers/test_json_serializer.rb +0 -216
- data/test/unit/serializers/test_xml_serializer.rb +0 -196
- data/test/unit/test_identity_map_middleware.rb +0 -132
- data/test/unit/test_keys.rb +0 -65
- data/test/unit/test_mongo_mapper.rb +0 -157
- data/test/unit/test_pagination.rb +0 -11
- data/test/unit/test_rails_compatibility.rb +0 -38
- data/test/unit/test_serialization.rb +0 -166
@@ -1,8 +1,7 @@
|
|
1
|
-
require '
|
2
|
-
require 'models'
|
1
|
+
require 'spec_helper.rb'
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
describe "ManyDocumentsProxy" do
|
4
|
+
before do
|
6
5
|
Project.collection.remove
|
7
6
|
Status.collection.remove
|
8
7
|
|
@@ -17,12 +16,39 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
17
16
|
@owner_class.many :pets, :class => @pet_class, :foreign_key => :owner_id, :order => 'name'
|
18
17
|
end
|
19
18
|
|
20
|
-
|
19
|
+
it "should return results if found via method_missing" do
|
20
|
+
@pet_class.class_eval do
|
21
|
+
def self.from_param(name)
|
22
|
+
find_by_name(name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.all_from_param(names)
|
26
|
+
where(:name => names).all
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
instance = @owner_class.new
|
31
|
+
instance.pets.build(:name => "Foo")
|
32
|
+
instance.pets.build(:name => "Bar")
|
33
|
+
instance.save
|
34
|
+
|
35
|
+
instance.reload.pets.from_param("Foo").tap do |pet|
|
36
|
+
pet.should be_a @pet_class
|
37
|
+
pet.name.should == "Foo"
|
38
|
+
end
|
39
|
+
|
40
|
+
instance.reload.pets.all_from_param(["Foo", "Bar"]).tap do |pet|
|
41
|
+
pet.should be_a Array
|
42
|
+
pet.map(&:name).should =~ %w(Foo Bar)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should default reader to empty array" do
|
21
47
|
project = Project.new
|
22
48
|
project.statuses.should == []
|
23
49
|
end
|
24
50
|
|
25
|
-
should
|
51
|
+
it "should allow overriding association methods" do
|
26
52
|
@owner_class.class_eval do
|
27
53
|
def pets
|
28
54
|
super
|
@@ -35,7 +61,35 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
35
61
|
instance.pets.should_not be_empty
|
36
62
|
end
|
37
63
|
|
38
|
-
|
64
|
+
it "should be able to iterate associated documents in a callback" do
|
65
|
+
@owner_class.class_eval do
|
66
|
+
before_save :search_pets
|
67
|
+
|
68
|
+
def search_pets
|
69
|
+
pets.each { |p| p.name = "Animal" }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
owner = @owner_class.new
|
74
|
+
sophie = owner.pets.build(:name => "Sophie")
|
75
|
+
pippa = owner.pets.build(:name => "Pippa")
|
76
|
+
|
77
|
+
owner.save
|
78
|
+
owner.reload
|
79
|
+
owner.pets.reload
|
80
|
+
|
81
|
+
pets = []
|
82
|
+
owner.pets.each { |p| pets << p }
|
83
|
+
|
84
|
+
pets.size.should == 2
|
85
|
+
pets.should include(sophie)
|
86
|
+
pets.should include(pippa)
|
87
|
+
|
88
|
+
sophie.reload.name.should == "Animal"
|
89
|
+
pippa.reload.name.should == "Animal"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should allow assignment of many associated documents using a hash" do
|
39
93
|
person_attributes = {
|
40
94
|
'name' => 'Mr. Pet Lover',
|
41
95
|
'pets' => [
|
@@ -61,7 +115,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
61
115
|
owner.pets[1].species.should == 'Siberian Husky'
|
62
116
|
end
|
63
117
|
|
64
|
-
should
|
118
|
+
it "should allow adding to association like it was an array" do
|
65
119
|
project = Project.new
|
66
120
|
project.statuses << Status.new(:name => 'Foo1!')
|
67
121
|
project.statuses.push Status.new(:name => 'Foo2!')
|
@@ -71,7 +125,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
71
125
|
|
72
126
|
context "replacing the association" do
|
73
127
|
context "with objects of the class" do
|
74
|
-
should
|
128
|
+
it "should work" do
|
75
129
|
project = Project.new
|
76
130
|
project.statuses = [Status.new(:name => "ready")]
|
77
131
|
project.save.should be_true
|
@@ -83,7 +137,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
83
137
|
end
|
84
138
|
|
85
139
|
context "with Hashes" do
|
86
|
-
should
|
140
|
+
it "should convert to objects of the class and work" do
|
87
141
|
project = Project.new
|
88
142
|
project.statuses = [{ 'name' => 'ready' }]
|
89
143
|
project.save.should be_true
|
@@ -93,20 +147,20 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
93
147
|
project.statuses[0].name.should == "ready"
|
94
148
|
end
|
95
149
|
end
|
96
|
-
|
150
|
+
|
97
151
|
context "with :dependent" do
|
98
|
-
|
152
|
+
before do
|
99
153
|
@broker_class = Doc('Broker')
|
100
154
|
@property_class = Doc('Property') do
|
101
155
|
key :broker_id, ObjectId
|
102
156
|
belongs_to :broker
|
103
157
|
end
|
104
158
|
end
|
105
|
-
|
159
|
+
|
106
160
|
context "=> destroy" do
|
107
|
-
|
161
|
+
before do
|
108
162
|
@broker_class.many :properties, :class => @property_class, :dependent => :destroy
|
109
|
-
|
163
|
+
|
110
164
|
@broker = @broker_class.create(:name => "Bob")
|
111
165
|
@property1 = @property_class.create
|
112
166
|
@property2 = @property_class.create
|
@@ -115,32 +169,32 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
115
169
|
@broker.properties << @property2
|
116
170
|
@broker.properties << @property3
|
117
171
|
end
|
118
|
-
|
119
|
-
should
|
120
|
-
@broker.properties[0].
|
121
|
-
@broker.properties[1].
|
122
|
-
@broker.properties[2].
|
172
|
+
|
173
|
+
it "should call destroy the existing documents" do
|
174
|
+
@broker.properties[0].should_receive(:destroy).once
|
175
|
+
@broker.properties[1].should_receive(:destroy).once
|
176
|
+
@broker.properties[2].should_receive(:destroy).once
|
123
177
|
@broker.properties = [@property_class.new]
|
124
178
|
end
|
125
|
-
|
126
|
-
should
|
179
|
+
|
180
|
+
it "should remove the existing document from the database" do
|
127
181
|
@property_class.count.should == 3
|
128
182
|
@broker.properties = []
|
129
183
|
@property_class.count.should == 0
|
130
184
|
end
|
131
|
-
|
132
|
-
should
|
133
|
-
@broker.properties[0].
|
134
|
-
@broker.properties[1].
|
135
|
-
@broker.properties[2].
|
185
|
+
|
186
|
+
it "should skip over documents that are the same" do
|
187
|
+
@broker.properties[0].should_receive(:destroy).never
|
188
|
+
@broker.properties[1].should_receive(:destroy).once
|
189
|
+
@broker.properties[2].should_receive(:destroy).never
|
136
190
|
@broker.properties = [@property3, @property1]
|
137
191
|
end
|
138
192
|
end
|
139
|
-
|
193
|
+
|
140
194
|
context "=> delete_all" do
|
141
|
-
|
195
|
+
before do
|
142
196
|
@broker_class.many :properties, :class => @property_class, :dependent => :delete_all
|
143
|
-
|
197
|
+
|
144
198
|
@broker = @broker_class.create(:name => "Bob")
|
145
199
|
@property1 = @property_class.create
|
146
200
|
@property2 = @property_class.create
|
@@ -149,32 +203,32 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
149
203
|
@broker.properties << @property2
|
150
204
|
@broker.properties << @property3
|
151
205
|
end
|
152
|
-
|
153
|
-
should
|
154
|
-
@broker.properties[0].
|
155
|
-
@broker.properties[1].
|
156
|
-
@broker.properties[2].
|
206
|
+
|
207
|
+
it "should call delete the existing documents" do
|
208
|
+
@broker.properties[0].should_receive(:delete).once
|
209
|
+
@broker.properties[1].should_receive(:delete).once
|
210
|
+
@broker.properties[2].should_receive(:delete).once
|
157
211
|
@broker.properties = [@property_class.new]
|
158
212
|
end
|
159
|
-
|
160
|
-
should
|
213
|
+
|
214
|
+
it "should remove the existing document from the database" do
|
161
215
|
@property_class.count.should == 3
|
162
216
|
@broker.properties = []
|
163
217
|
@property_class.count.should == 0
|
164
218
|
end
|
165
|
-
|
166
|
-
should
|
167
|
-
@broker.properties[0].
|
168
|
-
@broker.properties[1].
|
169
|
-
@broker.properties[2].
|
219
|
+
|
220
|
+
it "should skip over documents that are the same" do
|
221
|
+
@broker.properties[0].should_receive(:delete).never
|
222
|
+
@broker.properties[1].should_receive(:delete).once
|
223
|
+
@broker.properties[2].should_receive(:delete).never
|
170
224
|
@broker.properties = [@property3, @property1]
|
171
225
|
end
|
172
226
|
end
|
173
|
-
|
227
|
+
|
174
228
|
context "=> nullify" do
|
175
|
-
|
229
|
+
before do
|
176
230
|
@broker_class.many :properties, :class => @property_class, :dependent => :nullify
|
177
|
-
|
231
|
+
|
178
232
|
@broker = @broker_class.create(:name => "Bob")
|
179
233
|
@property1 = @property_class.create
|
180
234
|
@property2 = @property_class.create
|
@@ -183,38 +237,38 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
183
237
|
@broker.properties << @property2
|
184
238
|
@broker.properties << @property3
|
185
239
|
end
|
186
|
-
|
187
|
-
should
|
240
|
+
|
241
|
+
it "should nullify the existing documents" do
|
188
242
|
@property1.reload.broker_id.should == @broker.id
|
189
243
|
@property2.reload.broker_id.should == @broker.id
|
190
244
|
@property3.reload.broker_id.should == @broker.id
|
191
245
|
|
192
246
|
@broker.properties = [@property_class.new]
|
193
|
-
|
247
|
+
|
194
248
|
@property1.reload.broker_id.should be_nil
|
195
249
|
@property2.reload.broker_id.should be_nil
|
196
250
|
@property3.reload.broker_id.should be_nil
|
197
251
|
end
|
198
|
-
|
199
|
-
should
|
252
|
+
|
253
|
+
it "should skip over documents that are the same" do
|
200
254
|
@broker.properties = [@property3, @property1]
|
201
255
|
|
202
256
|
@property1.reload.broker_id.should == @broker.id
|
203
257
|
@property2.reload.broker_id.should be_nil
|
204
258
|
@property3.reload.broker_id.should == @broker.id
|
205
259
|
end
|
206
|
-
|
207
|
-
should
|
260
|
+
|
261
|
+
it "should work" do
|
208
262
|
old_properties = @broker.properties
|
209
263
|
@broker.properties = [@property1, @property2, @property3]
|
210
264
|
old_properties.should == @broker.properties
|
211
265
|
end
|
212
266
|
end
|
213
|
-
|
267
|
+
|
214
268
|
context "unspecified" do
|
215
|
-
should
|
269
|
+
it "should nullify the existing documents" do
|
216
270
|
@broker_class.many :properties, :class => @property_class
|
217
|
-
|
271
|
+
|
218
272
|
@broker = @broker_class.create(:name => "Bob")
|
219
273
|
@property1 = @property_class.create
|
220
274
|
@property2 = @property_class.create
|
@@ -224,7 +278,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
224
278
|
@broker.properties << @property3
|
225
279
|
|
226
280
|
@broker.properties = [@property_class.new]
|
227
|
-
|
281
|
+
|
228
282
|
@property1.reload.broker_id.should be_nil
|
229
283
|
@property2.reload.broker_id.should be_nil
|
230
284
|
@property3.reload.broker_id.should be_nil
|
@@ -235,7 +289,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
235
289
|
|
236
290
|
context "using <<, push and concat" do
|
237
291
|
context "with objects of the class" do
|
238
|
-
should
|
292
|
+
it "should correctly assign foreign key" do
|
239
293
|
project = Project.new
|
240
294
|
project.statuses << Status.new(:name => '<<')
|
241
295
|
project.statuses.push Status.new(:name => 'push')
|
@@ -249,7 +303,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
249
303
|
end
|
250
304
|
|
251
305
|
context "with Hashes" do
|
252
|
-
should
|
306
|
+
it "should correctly convert to objects and assign foreign key" do
|
253
307
|
project = Project.new
|
254
308
|
project.statuses << { 'name' => '<<' }
|
255
309
|
project.statuses.push( { 'name' => 'push' })
|
@@ -263,20 +317,20 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
263
317
|
end
|
264
318
|
end
|
265
319
|
|
266
|
-
context "build" do
|
267
|
-
should
|
320
|
+
context "#build" do
|
321
|
+
it "should assign foreign key" do
|
268
322
|
project = Project.create
|
269
323
|
status = project.statuses.build
|
270
324
|
status.project_id.should == project.id
|
271
325
|
end
|
272
326
|
|
273
|
-
should
|
327
|
+
it "should allow assigning attributes" do
|
274
328
|
project = Project.create
|
275
329
|
status = project.statuses.build(:name => 'Foo')
|
276
330
|
status.name.should == 'Foo'
|
277
331
|
end
|
278
332
|
|
279
|
-
should
|
333
|
+
it "should reset cache" do
|
280
334
|
project = Project.create
|
281
335
|
project.statuses.size.should == 0
|
282
336
|
status = project.statuses.build(:name => 'Foo')
|
@@ -284,97 +338,121 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
284
338
|
project.statuses.size.should == 1
|
285
339
|
end
|
286
340
|
|
287
|
-
should
|
341
|
+
it "should update collection without save" do
|
288
342
|
project = Project.create
|
289
343
|
project.statuses.build(:name => 'Foo')
|
290
344
|
project.statuses.size.should == 1
|
291
345
|
end
|
292
346
|
|
293
|
-
should
|
347
|
+
it "should save built document when saving parent" do
|
294
348
|
project = Project.create
|
295
349
|
status = project.statuses.build(:name => 'Foo')
|
296
350
|
project.save!
|
297
351
|
status.should_not be_new
|
298
352
|
end
|
299
353
|
|
300
|
-
should
|
354
|
+
it "should not save the parent when building associations" do
|
301
355
|
project = Project.new
|
302
356
|
status = project.statuses.build(:name => 'Foo')
|
303
357
|
project.should be_new
|
304
358
|
end
|
305
359
|
|
306
|
-
should
|
360
|
+
it "should not save the built object" do
|
307
361
|
project = Project.new
|
308
362
|
status = project.statuses.build(:name => 'Foo')
|
309
363
|
status.should be_new
|
310
364
|
end
|
365
|
+
|
366
|
+
it "should accept a block" do
|
367
|
+
project = Project.new
|
368
|
+
status = project.statuses.build do |doc|
|
369
|
+
doc.name = "Foo"
|
370
|
+
end
|
371
|
+
project.statuses[0].name.should == "Foo"
|
372
|
+
end
|
311
373
|
end
|
312
374
|
|
313
|
-
context "create" do
|
314
|
-
should
|
375
|
+
context "#create" do
|
376
|
+
it "should assign foreign key" do
|
315
377
|
project = Project.create
|
316
378
|
status = project.statuses.create(:name => 'Foo!')
|
317
379
|
status.project_id.should == project.id
|
318
380
|
end
|
319
381
|
|
320
|
-
should
|
382
|
+
it "should save record" do
|
321
383
|
project = Project.create
|
322
384
|
lambda {
|
323
385
|
project.statuses.create(:name => 'Foo!')
|
324
386
|
}.should change { Status.count }
|
325
387
|
end
|
326
388
|
|
327
|
-
should
|
389
|
+
it "should allow passing attributes" do
|
328
390
|
project = Project.create
|
329
391
|
status = project.statuses.create(:name => 'Foo!')
|
330
392
|
status.name.should == 'Foo!'
|
331
393
|
end
|
332
394
|
|
333
|
-
should
|
395
|
+
it "should reset cache" do
|
334
396
|
project = Project.create
|
335
397
|
project.statuses.size.should == 0
|
336
398
|
project.statuses.create(:name => 'Foo!')
|
337
399
|
project.statuses.size.should == 1
|
338
400
|
end
|
401
|
+
|
402
|
+
it "should accept a block" do
|
403
|
+
project = Project.new
|
404
|
+
status = project.statuses.create do |doc|
|
405
|
+
doc.name = "Foo"
|
406
|
+
end
|
407
|
+
project.statuses.first.name.should == "Foo"
|
408
|
+
end
|
339
409
|
end
|
340
410
|
|
341
|
-
context "create!" do
|
342
|
-
should
|
411
|
+
context "#create!" do
|
412
|
+
it "should assign foreign key" do
|
343
413
|
project = Project.create
|
344
414
|
status = project.statuses.create!(:name => 'Foo!')
|
345
415
|
status.project_id.should == project.id
|
346
416
|
end
|
347
417
|
|
348
|
-
should
|
418
|
+
it "should save record" do
|
349
419
|
project = Project.create
|
350
420
|
lambda {
|
351
421
|
project.statuses.create!(:name => 'Foo!')
|
352
422
|
}.should change { Status.count }
|
353
423
|
end
|
354
424
|
|
355
|
-
should
|
425
|
+
it "should allow passing attributes" do
|
356
426
|
project = Project.create
|
357
427
|
status = project.statuses.create!(:name => 'Foo!')
|
358
428
|
status.name.should == 'Foo!'
|
359
429
|
end
|
360
430
|
|
361
|
-
should
|
431
|
+
it "should raise exception if not valid" do
|
362
432
|
project = Project.create
|
363
|
-
|
433
|
+
expect {
|
364
434
|
project.statuses.create!(:name => nil)
|
365
|
-
}.
|
435
|
+
}.to raise_error(MongoMapper::DocumentNotValid)
|
366
436
|
end
|
367
437
|
|
368
|
-
should
|
438
|
+
it "should reset cache" do
|
369
439
|
project = Project.create
|
370
440
|
project.statuses.size.should == 0
|
371
441
|
project.statuses.create!(:name => 'Foo!')
|
372
442
|
project.statuses.size.should == 1
|
373
443
|
end
|
444
|
+
|
445
|
+
it "should accept a block" do
|
446
|
+
project = Project.new
|
447
|
+
status = project.statuses.create! do |doc|
|
448
|
+
doc.name = "Foo"
|
449
|
+
end
|
450
|
+
status.name.should == "Foo"
|
451
|
+
end
|
374
452
|
end
|
375
453
|
|
376
454
|
context "count" do
|
377
|
-
should
|
455
|
+
it "should work scoped to association" do
|
378
456
|
project = Project.create
|
379
457
|
3.times { project.statuses.create(:name => 'Foo!') }
|
380
458
|
|
@@ -385,7 +463,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
385
463
|
other_project.statuses.count.should == 2
|
386
464
|
end
|
387
465
|
|
388
|
-
should
|
466
|
+
it "should work with conditions" do
|
389
467
|
project = Project.create
|
390
468
|
project.statuses.create(:name => 'Foo')
|
391
469
|
project.statuses.create(:name => 'Other 1')
|
@@ -394,7 +472,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
394
472
|
project.statuses.count(:name => 'Foo').should == 1
|
395
473
|
end
|
396
474
|
|
397
|
-
should
|
475
|
+
it "should ignore unpersisted documents" do
|
398
476
|
project = Project.create
|
399
477
|
project.statuses.build(:name => 'Foo')
|
400
478
|
project.statuses.count.should == 0
|
@@ -402,7 +480,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
402
480
|
end
|
403
481
|
|
404
482
|
context "size" do
|
405
|
-
should
|
483
|
+
it "should reflect both persisted and new documents" do
|
406
484
|
project = Project.create
|
407
485
|
3.times { project.statuses.create(:name => 'Foo!') }
|
408
486
|
2.times { project.statuses.build(:name => 'Foo!') }
|
@@ -411,26 +489,26 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
411
489
|
end
|
412
490
|
|
413
491
|
context "empty?" do
|
414
|
-
should
|
492
|
+
it "should be true with no associated docs" do
|
415
493
|
project = Project.create
|
416
494
|
project.statuses.empty?.should be_true
|
417
495
|
end
|
418
496
|
|
419
|
-
should
|
497
|
+
it "should be false if a document is built" do
|
420
498
|
project = Project.create
|
421
499
|
project.statuses.build(:name => 'Foo!')
|
422
500
|
project.statuses.empty?.should be_false
|
423
501
|
end
|
424
502
|
|
425
|
-
should
|
503
|
+
it "should be false if a document is created" do
|
426
504
|
project = Project.create
|
427
505
|
project.statuses.create(:name => 'Foo!')
|
428
506
|
project.statuses.empty?.should be_false
|
429
507
|
end
|
430
508
|
end
|
431
509
|
|
432
|
-
context "to_a" do
|
433
|
-
should
|
510
|
+
context "#to_a" do
|
511
|
+
it "should include persisted and new documents" do
|
434
512
|
project = Project.create
|
435
513
|
3.times { project.statuses.create(:name => 'Foo!') }
|
436
514
|
2.times { project.statuses.build(:name => 'Foo!') }
|
@@ -438,8 +516,17 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
438
516
|
end
|
439
517
|
end
|
440
518
|
|
519
|
+
context "#map" do
|
520
|
+
it "should include persisted and new documents" do
|
521
|
+
project = Project.create
|
522
|
+
3.times { project.statuses.create(:name => 'Foo!') }
|
523
|
+
2.times { project.statuses.build(:name => 'Foo!') }
|
524
|
+
project.statuses.map(&:name).size.should == 5
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
441
528
|
context "to_json" do
|
442
|
-
should
|
529
|
+
it "should work on association" do
|
443
530
|
project = Project.create
|
444
531
|
3.times { |i| project.statuses.create(:name => i.to_s) }
|
445
532
|
|
@@ -448,7 +535,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
448
535
|
end
|
449
536
|
|
450
537
|
context "as_json" do
|
451
|
-
should
|
538
|
+
it "should work on association" do
|
452
539
|
project = Project.create
|
453
540
|
3.times { |i| project.statuses.create(:name => i.to_s) }
|
454
541
|
|
@@ -457,7 +544,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
457
544
|
end
|
458
545
|
|
459
546
|
context "Unassociating documents" do
|
460
|
-
|
547
|
+
before do
|
461
548
|
@project = Project.create
|
462
549
|
@project.statuses << Status.create(:name => '1')
|
463
550
|
@project.statuses << Status.create(:name => '2')
|
@@ -467,7 +554,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
467
554
|
@project2.statuses << Status.create(:name => '2')
|
468
555
|
end
|
469
556
|
|
470
|
-
should
|
557
|
+
it "should work with destroy all" do
|
471
558
|
@project.statuses.count.should == 2
|
472
559
|
@project.statuses.destroy_all
|
473
560
|
@project.statuses.count.should == 0
|
@@ -476,7 +563,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
476
563
|
Status.count.should == 2
|
477
564
|
end
|
478
565
|
|
479
|
-
should
|
566
|
+
it "should work with destroy all and conditions" do
|
480
567
|
@project.statuses.count.should == 2
|
481
568
|
@project.statuses.destroy_all(:name => '1')
|
482
569
|
@project.statuses.count.should == 1
|
@@ -485,7 +572,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
485
572
|
Status.count.should == 3
|
486
573
|
end
|
487
574
|
|
488
|
-
should
|
575
|
+
it "should work with delete all" do
|
489
576
|
@project.statuses.count.should == 2
|
490
577
|
@project.statuses.delete_all
|
491
578
|
@project.statuses.count.should == 0
|
@@ -494,7 +581,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
494
581
|
Status.count.should == 2
|
495
582
|
end
|
496
583
|
|
497
|
-
should
|
584
|
+
it "should work with delete all and conditions" do
|
498
585
|
@project.statuses.count.should == 2
|
499
586
|
@project.statuses.delete_all(:name => '1')
|
500
587
|
@project.statuses.count.should == 1
|
@@ -503,7 +590,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
503
590
|
Status.count.should == 3
|
504
591
|
end
|
505
592
|
|
506
|
-
should
|
593
|
+
it "should work with nullify" do
|
507
594
|
@project.statuses.count.should == 2
|
508
595
|
@project.statuses.nullify
|
509
596
|
@project.statuses.count.should == 0
|
@@ -516,7 +603,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
516
603
|
end
|
517
604
|
|
518
605
|
context "Finding scoped to association" do
|
519
|
-
|
606
|
+
before do
|
520
607
|
@project1 = Project.new(:name => 'Project 1')
|
521
608
|
@brand_new = Status.create(:name => 'New', :position => 1 )
|
522
609
|
@complete = Status.create(:name => 'Complete', :position => 2)
|
@@ -532,37 +619,37 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
532
619
|
end
|
533
620
|
|
534
621
|
context "include?" do
|
535
|
-
should
|
622
|
+
it "should return true if in association" do
|
536
623
|
@project1.statuses.should include(@brand_new)
|
537
624
|
end
|
538
625
|
|
539
|
-
should
|
626
|
+
it "should return false if not in association" do
|
540
627
|
@project1.statuses.should_not include(@in_progress)
|
541
628
|
end
|
542
629
|
end
|
543
630
|
|
544
631
|
context "dynamic finders" do
|
545
|
-
should
|
632
|
+
it "should work with single key" do
|
546
633
|
@project1.statuses.find_by_name('New').should == @brand_new
|
547
634
|
@project1.statuses.find_by_name!('New').should == @brand_new
|
548
635
|
@project2.statuses.find_by_name('In Progress').should == @in_progress
|
549
636
|
@project2.statuses.find_by_name!('In Progress').should == @in_progress
|
550
637
|
end
|
551
638
|
|
552
|
-
should
|
639
|
+
it "should work with multiple keys" do
|
553
640
|
@project1.statuses.find_by_name_and_position('New', 1).should == @brand_new
|
554
641
|
@project1.statuses.find_by_name_and_position!('New', 1).should == @brand_new
|
555
642
|
@project1.statuses.find_by_name_and_position('New', 2).should be_nil
|
556
643
|
end
|
557
644
|
|
558
|
-
should
|
645
|
+
it "should raise error when using !" do
|
559
646
|
lambda {
|
560
647
|
@project1.statuses.find_by_name!('Fake')
|
561
648
|
}.should raise_error(MongoMapper::DocumentNotFound)
|
562
649
|
end
|
563
650
|
|
564
651
|
context "find_or_create_by" do
|
565
|
-
should
|
652
|
+
it "should not create document if found" do
|
566
653
|
lambda {
|
567
654
|
status = @project1.statuses.find_or_create_by_name('New')
|
568
655
|
status.project.should == @project1
|
@@ -570,7 +657,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
570
657
|
}.should_not change { Status.count }
|
571
658
|
end
|
572
659
|
|
573
|
-
should
|
660
|
+
it "should create document if not found" do
|
574
661
|
lambda {
|
575
662
|
status = @project1.statuses.find_or_create_by_name('Delivered')
|
576
663
|
status.project.should == @project1
|
@@ -580,38 +667,38 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
580
667
|
end
|
581
668
|
|
582
669
|
context "sexy querying" do
|
583
|
-
should
|
670
|
+
it "should work with where" do
|
584
671
|
@project1.statuses.where(:name => 'New').all.should == [@brand_new]
|
585
672
|
end
|
586
673
|
|
587
|
-
should
|
674
|
+
it "should work with sort" do
|
588
675
|
@project1.statuses.sort(:name).all.should == [@complete, @brand_new]
|
589
676
|
end
|
590
677
|
|
591
|
-
should
|
678
|
+
it "should work with limit" do
|
592
679
|
@project1.statuses.sort(:name).limit(1).all.should == [@complete]
|
593
680
|
end
|
594
681
|
|
595
|
-
should
|
682
|
+
it "should work with skip" do
|
596
683
|
@project1.statuses.sort(:name).skip(1).all.should == [@brand_new]
|
597
684
|
end
|
598
685
|
|
599
|
-
should
|
686
|
+
it "should work with fields" do
|
600
687
|
@project1.statuses.fields(:position).all.each do |status|
|
601
688
|
status.position.should_not be_nil
|
602
689
|
status.name.should be_nil
|
603
690
|
end
|
604
691
|
end
|
605
692
|
|
606
|
-
should
|
693
|
+
it "should work with scopes" do
|
607
694
|
@project1.statuses.complete.all.should == [@complete]
|
608
695
|
end
|
609
696
|
|
610
|
-
should
|
697
|
+
it "should work with methods on class that return query" do
|
611
698
|
@project1.statuses.by_position(1).first.should == @brand_new
|
612
699
|
end
|
613
700
|
|
614
|
-
should
|
701
|
+
it "should not work with methods on class that do not return query" do
|
615
702
|
Status.class_eval { def self.foo; 'foo' end }
|
616
703
|
lambda { @project1.statuses.foo }.
|
617
704
|
should raise_error(NoMethodError)
|
@@ -619,41 +706,41 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
619
706
|
end
|
620
707
|
|
621
708
|
context "all" do
|
622
|
-
should
|
709
|
+
it "should work" do
|
623
710
|
@project1.statuses.all(:order => "position asc").should == [@brand_new, @complete]
|
624
711
|
end
|
625
712
|
|
626
|
-
should
|
713
|
+
it "should work with conditions" do
|
627
714
|
@project1.statuses.all(:name => 'Complete').should == [@complete]
|
628
715
|
end
|
629
716
|
end
|
630
717
|
|
631
718
|
context "first" do
|
632
|
-
should
|
719
|
+
it "should work" do
|
633
720
|
@project1.statuses.first(:order => 'name').should == @complete
|
634
721
|
end
|
635
722
|
|
636
|
-
should
|
723
|
+
it "should work with conditions" do
|
637
724
|
@project1.statuses.first(:name => 'Complete').should == @complete
|
638
725
|
end
|
639
726
|
end
|
640
727
|
|
641
728
|
context "last" do
|
642
|
-
should
|
729
|
+
it "should work" do
|
643
730
|
@project1.statuses.last(:order => "position asc").should == @complete
|
644
731
|
end
|
645
732
|
|
646
|
-
should
|
733
|
+
it "should work with conditions" do
|
647
734
|
@project1.statuses.last(:order => 'position', :name => 'New').should == @brand_new
|
648
735
|
end
|
649
736
|
end
|
650
737
|
|
651
738
|
context "with one id" do
|
652
|
-
should
|
739
|
+
it "should work for id in association" do
|
653
740
|
@project1.statuses.find(@complete.id).should == @complete
|
654
741
|
end
|
655
742
|
|
656
|
-
should
|
743
|
+
it "should not work for id not in association" do
|
657
744
|
lambda {
|
658
745
|
@project1.statuses.find!(@archived.id)
|
659
746
|
}.should raise_error(MongoMapper::DocumentNotFound)
|
@@ -661,39 +748,39 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
661
748
|
end
|
662
749
|
|
663
750
|
context "with multiple ids" do
|
664
|
-
should
|
751
|
+
it "should work for ids in association" do
|
665
752
|
statuses = @project1.statuses.find(@brand_new.id, @complete.id)
|
666
753
|
statuses.should == [@brand_new, @complete]
|
667
754
|
end
|
668
755
|
|
669
|
-
should
|
670
|
-
|
756
|
+
it "should not work for ids not in association" do
|
757
|
+
expect {
|
671
758
|
@project1.statuses.find!(@brand_new.id, @complete.id, @archived.id)
|
672
|
-
|
759
|
+
}.to raise_error(MongoMapper::DocumentNotFound)
|
673
760
|
end
|
674
761
|
end
|
675
762
|
|
676
763
|
context "with #paginate" do
|
677
|
-
|
764
|
+
before do
|
678
765
|
@statuses = @project2.statuses.paginate(:per_page => 2, :page => 1, :order => 'name asc')
|
679
766
|
end
|
680
767
|
|
681
|
-
should
|
768
|
+
it "should return total pages" do
|
682
769
|
@statuses.total_pages.should == 2
|
683
770
|
end
|
684
771
|
|
685
|
-
should
|
772
|
+
it "should return total entries" do
|
686
773
|
@statuses.total_entries.should == 3
|
687
774
|
end
|
688
775
|
|
689
|
-
should
|
776
|
+
it "should return the subject" do
|
690
777
|
@statuses.collect(&:name).should == %w(Archived Complete)
|
691
778
|
end
|
692
779
|
end
|
693
780
|
end
|
694
781
|
|
695
782
|
context "extending the association" do
|
696
|
-
should
|
783
|
+
it "should work using a block passed to many" do
|
697
784
|
project = Project.new(:name => "Some Project")
|
698
785
|
status1 = Status.new(:name => "New")
|
699
786
|
status2 = Status.new(:name => "Assigned")
|
@@ -707,7 +794,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
707
794
|
open_statuses.should_not include(status3)
|
708
795
|
end
|
709
796
|
|
710
|
-
should
|
797
|
+
it "should work using many's :extend option" do
|
711
798
|
project = Project.new(:name => "Some Project")
|
712
799
|
collaborator1 = Collaborator.new(:name => "zing")
|
713
800
|
collaborator2 = Collaborator.new(:name => "zang")
|
@@ -718,7 +805,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
718
805
|
end
|
719
806
|
|
720
807
|
context ":dependent" do
|
721
|
-
|
808
|
+
before do
|
722
809
|
# FIXME: make use of already defined models
|
723
810
|
class ::Property
|
724
811
|
include MongoMapper::Document
|
@@ -732,13 +819,13 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
732
819
|
Thing.collection.remove
|
733
820
|
end
|
734
821
|
|
735
|
-
|
822
|
+
after do
|
736
823
|
Object.send :remove_const, 'Property' if defined?(::Property)
|
737
824
|
Object.send :remove_const, 'Thing' if defined?(::Thing)
|
738
825
|
end
|
739
826
|
|
740
827
|
context "=> destroy" do
|
741
|
-
|
828
|
+
before do
|
742
829
|
Property.key :thing_id, ObjectId
|
743
830
|
Property.belongs_to :thing, :dependent => :destroy
|
744
831
|
Thing.many :properties, :dependent => :destroy
|
@@ -752,7 +839,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
752
839
|
@thing.properties << @property3
|
753
840
|
end
|
754
841
|
|
755
|
-
|
842
|
+
it "should should destroy the associated documents" do
|
756
843
|
@thing.properties.count.should == 3
|
757
844
|
@thing.destroy
|
758
845
|
@thing.properties.count.should == 0
|
@@ -761,7 +848,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
761
848
|
end
|
762
849
|
|
763
850
|
context "=> delete_all" do
|
764
|
-
|
851
|
+
before do
|
765
852
|
Property.key :thing_id, ObjectId
|
766
853
|
Property.belongs_to :thing
|
767
854
|
Thing.has_many :properties, :dependent => :delete_all
|
@@ -775,7 +862,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
775
862
|
@thing.properties << @property3
|
776
863
|
end
|
777
864
|
|
778
|
-
|
865
|
+
it "should should delete associated documents" do
|
779
866
|
@thing.properties.count.should == 3
|
780
867
|
@thing.destroy
|
781
868
|
@thing.properties.count.should == 0
|
@@ -784,7 +871,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
784
871
|
end
|
785
872
|
|
786
873
|
context "=> nullify" do
|
787
|
-
|
874
|
+
before do
|
788
875
|
Property.key :thing_id, ObjectId
|
789
876
|
Property.belongs_to :thing
|
790
877
|
Thing.has_many :properties, :dependent => :nullify
|
@@ -798,16 +885,16 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
798
885
|
@thing.properties << @property3
|
799
886
|
end
|
800
887
|
|
801
|
-
|
888
|
+
it "should should nullify relationship but not destroy associated documents" do
|
802
889
|
@thing.properties.count.should == 3
|
803
890
|
@thing.destroy
|
804
891
|
@thing.properties.count.should == 0
|
805
892
|
Property.count.should == 3
|
806
893
|
end
|
807
894
|
end
|
808
|
-
|
895
|
+
|
809
896
|
context "unspecified" do
|
810
|
-
|
897
|
+
before do
|
811
898
|
Property.key :thing_id, ObjectId
|
812
899
|
Property.belongs_to :thing
|
813
900
|
Thing.has_many :properties, :dependent => :nullify
|
@@ -821,7 +908,7 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
821
908
|
@thing.properties << @property3
|
822
909
|
end
|
823
910
|
|
824
|
-
|
911
|
+
it "should should nullify relationship but not destroy associated documents" do
|
825
912
|
@thing.properties.count.should == 3
|
826
913
|
@thing.destroy
|
827
914
|
@thing.properties.count.should == 0
|
@@ -831,14 +918,14 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
831
918
|
end
|
832
919
|
|
833
920
|
context "namespaced foreign keys" do
|
834
|
-
|
921
|
+
before do
|
835
922
|
News::Paper.many :articles, :class_name => 'News::Article'
|
836
923
|
News::Article.belongs_to :paper, :class_name => 'News::Paper'
|
837
924
|
|
838
925
|
@paper = News::Paper.create
|
839
926
|
end
|
840
927
|
|
841
|
-
should
|
928
|
+
it "should properly infer the foreign key" do
|
842
929
|
article = @paper.articles.create
|
843
930
|
article.should respond_to(:paper_id)
|
844
931
|
article.paper_id.should == @paper.id
|
@@ -846,19 +933,19 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
846
933
|
end
|
847
934
|
|
848
935
|
context "criteria" do
|
849
|
-
|
936
|
+
before do
|
850
937
|
News::Paper.many :articles, :class_name => 'News::Article'
|
851
938
|
News::Article.belongs_to :paper, :class_name => 'News::Paper'
|
852
939
|
|
853
940
|
@paper = News::Paper.create
|
854
941
|
end
|
855
942
|
|
856
|
-
|
943
|
+
it "should should find associated instances by an object ID" do
|
857
944
|
article = News::Article.create(:paper_id => @paper.id)
|
858
945
|
@paper.articles.should include(article)
|
859
946
|
end
|
860
947
|
|
861
|
-
|
948
|
+
it "should should find associated instances by a string" do
|
862
949
|
article = News::Article.create(:paper_id => @paper.id.to_s)
|
863
950
|
@paper.articles.should include(article)
|
864
951
|
end
|