mongo_mapper 0.12.0 → 0.13.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|