mongoid 2.0.0.alpha → 2.0.0.beta.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. data/lib/mongoid.rb +11 -5
  2. data/lib/mongoid/associations.rb +112 -107
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/embedded_in.rb +12 -4
  5. data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
  6. data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
  7. data/lib/mongoid/associations/has_many_related.rb +51 -5
  8. data/lib/mongoid/associations/has_one_related.rb +9 -5
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +15 -6
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +34 -13
  13. data/lib/mongoid/callbacks.rb +1 -2
  14. data/lib/mongoid/collection.rb +4 -3
  15. data/lib/mongoid/collections.rb +41 -0
  16. data/lib/mongoid/collections/master.rb +3 -2
  17. data/lib/mongoid/collections/slaves.rb +3 -2
  18. data/lib/mongoid/components.rb +4 -1
  19. data/lib/mongoid/config.rb +163 -13
  20. data/lib/mongoid/contexts.rb +1 -2
  21. data/lib/mongoid/contexts/enumerable.rb +1 -1
  22. data/lib/mongoid/contexts/mongo.rb +1 -1
  23. data/lib/mongoid/contexts/paging.rb +10 -2
  24. data/lib/mongoid/criteria.rb +13 -22
  25. data/lib/mongoid/criterion/exclusion.rb +3 -3
  26. data/lib/mongoid/criterion/inclusion.rb +17 -0
  27. data/lib/mongoid/criterion/optional.rb +1 -1
  28. data/lib/mongoid/dirty.rb +253 -0
  29. data/lib/mongoid/document.rb +40 -85
  30. data/lib/mongoid/errors.rb +48 -1
  31. data/lib/mongoid/extensions.rb +11 -9
  32. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  33. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  34. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  35. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  36. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  37. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  38. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  39. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  40. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  41. data/lib/mongoid/extensions/object/conversions.rb +3 -3
  42. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  43. data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
  44. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  45. data/lib/mongoid/factory.rb +2 -1
  46. data/lib/mongoid/field.rb +15 -2
  47. data/lib/mongoid/fields.rb +1 -1
  48. data/lib/mongoid/identity.rb +3 -3
  49. data/lib/mongoid/indexes.rb +3 -3
  50. data/lib/mongoid/matchers.rb +1 -2
  51. data/lib/mongoid/memoization.rb +8 -2
  52. data/lib/mongoid/named_scope.rb +0 -5
  53. data/lib/mongoid/observable.rb +1 -1
  54. data/lib/mongoid/paths.rb +30 -22
  55. data/lib/mongoid/persistence.rb +218 -0
  56. data/lib/mongoid/persistence/command.rb +39 -0
  57. data/lib/mongoid/persistence/insert.rb +47 -0
  58. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  59. data/lib/mongoid/persistence/remove.rb +39 -0
  60. data/lib/mongoid/persistence/remove_all.rb +37 -0
  61. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  62. data/lib/mongoid/persistence/update.rb +63 -0
  63. data/lib/mongoid/railtie.rb +53 -0
  64. data/lib/mongoid/railties/database.rake +37 -0
  65. data/lib/mongoid/timestamps.rb +2 -2
  66. data/lib/mongoid/validations.rb +2 -2
  67. data/lib/mongoid/validations/associated.rb +2 -2
  68. data/lib/mongoid/validations/uniqueness.rb +13 -2
  69. data/lib/mongoid/version.rb +4 -0
  70. data/lib/mongoid/versioning.rb +3 -2
  71. data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
  72. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  73. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  74. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  75. data/lib/rails/generators/mongoid_generator.rb +61 -0
  76. metadata +76 -301
  77. data/.gitignore +0 -6
  78. data/.watchr +0 -29
  79. data/Rakefile +0 -52
  80. data/VERSION +0 -1
  81. data/caliper.yml +0 -4
  82. data/lib/mongoid/collections/mimic.rb +0 -46
  83. data/lib/mongoid/commands.rb +0 -161
  84. data/lib/mongoid/commands/create.rb +0 -19
  85. data/lib/mongoid/commands/delete.rb +0 -16
  86. data/lib/mongoid/commands/delete_all.rb +0 -23
  87. data/lib/mongoid/commands/deletion.rb +0 -18
  88. data/lib/mongoid/commands/destroy.rb +0 -17
  89. data/lib/mongoid/commands/destroy_all.rb +0 -23
  90. data/lib/mongoid/commands/save.rb +0 -29
  91. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  92. data/mongoid.gemspec +0 -408
  93. data/perf/benchmark.rb +0 -77
  94. data/spec/integration/mongoid/associations_spec.rb +0 -340
  95. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  96. data/spec/integration/mongoid/commands_spec.rb +0 -227
  97. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  98. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  99. data/spec/integration/mongoid/document_spec.rb +0 -650
  100. data/spec/integration/mongoid/extensions_spec.rb +0 -22
  101. data/spec/integration/mongoid/finders_spec.rb +0 -119
  102. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  103. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  104. data/spec/models/address.rb +0 -39
  105. data/spec/models/animal.rb +0 -6
  106. data/spec/models/callbacks.rb +0 -18
  107. data/spec/models/comment.rb +0 -8
  108. data/spec/models/country_code.rb +0 -6
  109. data/spec/models/employer.rb +0 -5
  110. data/spec/models/game.rb +0 -7
  111. data/spec/models/inheritance.rb +0 -56
  112. data/spec/models/location.rb +0 -5
  113. data/spec/models/mixed_drink.rb +0 -4
  114. data/spec/models/name.rb +0 -13
  115. data/spec/models/namespacing.rb +0 -11
  116. data/spec/models/patient.rb +0 -4
  117. data/spec/models/person.rb +0 -99
  118. data/spec/models/pet.rb +0 -7
  119. data/spec/models/pet_owner.rb +0 -6
  120. data/spec/models/phone.rb +0 -7
  121. data/spec/models/post.rb +0 -15
  122. data/spec/models/translation.rb +0 -5
  123. data/spec/models/vet_visit.rb +0 -5
  124. data/spec/spec.opts +0 -3
  125. data/spec/spec_helper.rb +0 -31
  126. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  127. data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
  128. data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
  129. data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
  130. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
  131. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  132. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  133. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  134. data/spec/unit/mongoid/associations_spec.rb +0 -595
  135. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  136. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  137. data/spec/unit/mongoid/collection_spec.rb +0 -187
  138. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  139. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  140. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  141. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  142. data/spec/unit/mongoid/commands/create_spec.rb +0 -31
  143. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  144. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  145. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
  146. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
  147. data/spec/unit/mongoid/commands/save_spec.rb +0 -107
  148. data/spec/unit/mongoid/commands_spec.rb +0 -270
  149. data/spec/unit/mongoid/config_spec.rb +0 -172
  150. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  151. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  152. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  153. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  154. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  155. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  156. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  157. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  158. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  159. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  160. data/spec/unit/mongoid/document_spec.rb +0 -818
  161. data/spec/unit/mongoid/errors_spec.rb +0 -103
  162. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  163. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  164. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  165. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  166. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  167. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  168. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  169. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  170. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
  171. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  172. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  173. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  174. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  175. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  176. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  177. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  178. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  179. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  180. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  181. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  182. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  183. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  184. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  185. data/spec/unit/mongoid/extras_spec.rb +0 -102
  186. data/spec/unit/mongoid/factory_spec.rb +0 -31
  187. data/spec/unit/mongoid/field_spec.rb +0 -143
  188. data/spec/unit/mongoid/fields_spec.rb +0 -181
  189. data/spec/unit/mongoid/finders_spec.rb +0 -404
  190. data/spec/unit/mongoid/identity_spec.rb +0 -109
  191. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  192. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  193. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  194. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  195. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  196. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  197. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  198. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  199. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  200. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  201. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  202. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  203. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  204. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  205. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  206. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  207. data/spec/unit/mongoid/observable_spec.rb +0 -46
  208. data/spec/unit/mongoid/paths_spec.rb +0 -124
  209. data/spec/unit/mongoid/scope_spec.rb +0 -240
  210. data/spec/unit/mongoid/state_spec.rb +0 -83
  211. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  212. data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
  213. data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
  214. data/spec/unit/mongoid/validations_spec.rb +0 -190
  215. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  216. data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,418 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Associations::HasManyRelated do
4
-
5
- let(:block) do
6
- Proc.new do
7
- def extension
8
- "Testing"
9
- end
10
- end
11
- end
12
-
13
- let(:options) do
14
- Mongoid::Associations::Options.new(
15
- :name => :posts,
16
- :foreign_key => "person_id",
17
- :extend => block
18
- )
19
- end
20
-
21
- describe "#<<" do
22
-
23
- before do
24
- @child = stub
25
- @second = stub
26
- @children = [@child, @second]
27
- end
28
-
29
- context "when parent document has been saved" do
30
-
31
- before do
32
- @parent = stub(:id => "1", :new_record? => false, :class => Person)
33
- Post.expects(:all).returns([])
34
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
35
- end
36
-
37
- it "saves and appends the child document" do
38
- @child.expects(:person_id=).with(@parent.id)
39
- @child.expects(:save).returns(true)
40
- @association << @child
41
- @association.size.should == 1
42
- end
43
-
44
- end
45
-
46
- context "when parent document has not been saved" do
47
-
48
- context "when appending a non mongoid object" do
49
-
50
- before do
51
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
52
- Post.expects(:all).returns([])
53
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
54
- end
55
-
56
- it "appends the child document" do
57
- @child.expects(:person_id=).with(@parent.id)
58
- @association << @child
59
- @association.size.should == 1
60
- end
61
- end
62
-
63
- context "when appending a mongoid document" do
64
-
65
- before do
66
- @criteria = mock
67
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
68
- Post.expects(:all).returns(@criteria)
69
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
70
- end
71
-
72
- it "appends the child document" do
73
- @criteria.expects(:entries).returns([])
74
- @child.expects(:person_id=).with(@parent.id)
75
- @association << @child
76
- @association.size.should == 1
77
- end
78
- end
79
-
80
- end
81
-
82
- context "with multiple objects" do
83
-
84
- before do
85
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
86
- Post.expects(:all).returns([])
87
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
88
- end
89
-
90
- it "appends the child documents" do
91
- @child.expects(:person_id=).with(@parent.id)
92
- @second.expects(:person_id=).with(@parent.id)
93
- @association << [@child, @second]
94
- @association.size.should == 2
95
- end
96
-
97
- end
98
-
99
- end
100
-
101
- describe "#build" do
102
-
103
- before do
104
- @criteria = mock
105
- @criteria.expects(:entries).returns([])
106
- @parent = stub(:id => "5", :class => Person, :new_record? => true)
107
- Post.expects(:all).returns(@criteria)
108
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
109
- end
110
-
111
- it "adds a new object to the association" do
112
- @association.build(:title => "Sassy")
113
- @association.size.should == 1
114
- end
115
-
116
- it "sets the parent object id on the child" do
117
- @association.build(:title => "Sassy")
118
- @association.first.person_id.should == @parent.id
119
- end
120
-
121
- it "returns the new object" do
122
- @association.build(:title => "Sassy").title.should == "Sassy"
123
- end
124
-
125
- it "sets the parent object reference on the child" do
126
- @association.build(:title => "Sassy")
127
- @association.first.person.should == @parent
128
- end
129
-
130
- end
131
-
132
- describe "#concat" do
133
-
134
- before do
135
- @child = stub
136
- @second = stub
137
- end
138
-
139
- context "when parent document has been saved" do
140
-
141
- before do
142
- @parent = stub(:id => "1", :new_record? => false, :class => Person)
143
- Post.expects(:all).returns([])
144
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
145
- end
146
-
147
- it "saves and appends the child document" do
148
- @child.expects(:person_id=).with(@parent.id)
149
- @child.expects(:save).returns(true)
150
- @association.concat(@child)
151
- @association.size.should == 1
152
- end
153
-
154
- end
155
-
156
- context "when parent document has not been saved" do
157
-
158
- before do
159
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
160
- Post.expects(:all).returns([])
161
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
162
- end
163
-
164
- it "appends the child document" do
165
- @child.expects(:person_id=).with(@parent.id)
166
- @association.concat(@child)
167
- @association.size.should == 1
168
- end
169
-
170
- end
171
-
172
- context "with multiple objects" do
173
-
174
- before do
175
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
176
- Post.expects(:all).returns([])
177
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
178
- end
179
-
180
- it "appends the child documents" do
181
- @child.expects(:person_id=).with(@parent.id)
182
- @second.expects(:person_id=).with(@parent.id)
183
- @association.concat([@child, @second])
184
- @association.size.should == 2
185
- end
186
-
187
- end
188
-
189
- end
190
-
191
- describe "#create" do
192
-
193
- before do
194
- @post = mock
195
- @parent = stub(:id => "5", :class => Person, :new_record? => true)
196
- Post.expects(:all).returns([])
197
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
198
- Post.expects(:instantiate).returns(@post)
199
- end
200
-
201
- it "builds and saves the new object" do
202
- @post.expects(:run_callbacks).with(:create).yields
203
- @post.expects(:save).returns(true)
204
- @association.create(:title => "Sassy")
205
- end
206
-
207
- it "returns the new object" do
208
- @post.expects(:run_callbacks).with(:create).yields
209
- @post.expects(:save).returns(true)
210
- @association.create(:title => "Sassy").should == @post
211
- end
212
-
213
- end
214
-
215
- describe "#find" do
216
-
217
- before do
218
- @parent = stub(:id => "5", :class => Person)
219
- Post.expects(:all).returns([])
220
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
221
- end
222
-
223
- context "when finding by id" do
224
-
225
- before do
226
- @post = stub
227
- end
228
-
229
- it "returns the document in the array with that id" do
230
- Post.expects(:find).with("5").returns(@post)
231
- post = @association.find("5")
232
- post.should == @post
233
- end
234
-
235
- end
236
-
237
- context "when finding all with conditions" do
238
-
239
- before do
240
- @post = stub
241
- end
242
-
243
- it "passes the conditions to the association class" do
244
- Post.expects(:find).with(:all, :conditions => { :title => "Testing", :person_id => @parent.id }).returns([@post])
245
- posts = @association.find(:all, :conditions => { :title => "Testing" })
246
- posts.should == [@post]
247
- end
248
-
249
- end
250
-
251
- context "when finding first with conditions" do
252
-
253
- before do
254
- @post = stub
255
- end
256
-
257
- it "passes the conditions to the association class" do
258
- Post.expects(:find).with(:first, :conditions => { :title => "Testing", :person_id => @parent.id }).returns(@post)
259
- post = @association.find(:first, :conditions => { :title => "Testing" })
260
- post.should == @post
261
- end
262
-
263
- end
264
-
265
- context "when finding last with conditions" do
266
-
267
- before do
268
- @post = stub
269
- end
270
-
271
- it "passes the conditions to the association class" do
272
- Post.expects(:find).with(:last, :conditions => { :title => "Testing", :person_id => @parent.id }).returns(@post)
273
- post = @association.find(:last, :conditions => { :title => "Testing" })
274
- post.should == @post
275
- end
276
-
277
- end
278
-
279
- end
280
-
281
- describe ".initialize" do
282
-
283
- before do
284
- @document = Person.new
285
- @criteria = stub
286
- @first = stub(:person_id => @document.id)
287
- @second = stub(:person_id => @document.id)
288
- @related = [@first, @second]
289
- Post.expects(:all).with(:conditions => { "person_id" => @document.id }).returns(@related)
290
- end
291
-
292
- context "when related id has been set" do
293
-
294
- it "finds the object by id" do
295
- association = Mongoid::Associations::HasManyRelated.new(@document, options)
296
- association.should == @related
297
- end
298
-
299
- end
300
-
301
- context "when the options have an extension" do
302
-
303
- it "adds the extension module" do
304
- association = Mongoid::Associations::HasManyRelated.new(@document, options)
305
- association.extension.should == "Testing"
306
- end
307
-
308
- end
309
-
310
- end
311
-
312
- describe ".instantiate" do
313
-
314
- context "when related id has been set" do
315
-
316
- before do
317
- @document = Person.new
318
- end
319
-
320
- it "delegates to new" do
321
- Mongoid::Associations::HasManyRelated.expects(:new).with(@document, options, nil)
322
- association = Mongoid::Associations::HasManyRelated.instantiate(@document, options)
323
- end
324
-
325
- end
326
-
327
- end
328
-
329
- describe ".macro" do
330
-
331
- it "returns :has_many_related" do
332
- Mongoid::Associations::HasManyRelated.macro.should == :has_many_related
333
- end
334
-
335
- end
336
-
337
- describe "#push" do
338
-
339
- before do
340
- @child = stub
341
- @second = stub
342
- end
343
-
344
- context "when parent document has been saved" do
345
-
346
- before do
347
- @parent = stub(:id => "1", :new_record? => false, :class => Person)
348
- Post.expects(:all).returns([])
349
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
350
- end
351
-
352
- it "saves and appends the child document" do
353
- @child.expects(:person_id=).with(@parent.id)
354
- @child.expects(:save).returns(true)
355
- @association.push(@child)
356
- @association.size.should == 1
357
- end
358
-
359
- end
360
-
361
- context "when parent document has not been saved" do
362
-
363
- before do
364
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
365
- Post.expects(:all).returns([])
366
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
367
- end
368
-
369
- it "appends the child document" do
370
- @child.expects(:person_id=).with(@parent.id)
371
- @association.push(@child)
372
- @association.size.should == 1
373
- end
374
-
375
- end
376
-
377
- context "with multiple objects" do
378
-
379
- before do
380
- @parent = stub(:id => "1", :new_record? => true, :class => Person)
381
- Post.expects(:all).returns([])
382
- @association = Mongoid::Associations::HasManyRelated.new(@parent, options)
383
- end
384
-
385
- it "appends the child documents" do
386
- @child.expects(:person_id=).with(@parent.id)
387
- @second.expects(:person_id=).with(@parent.id)
388
- @association.push(@child, @second)
389
- @association.size.should == 2
390
- end
391
-
392
- end
393
-
394
- end
395
-
396
- describe ".update" do
397
-
398
- before do
399
- @first = Post.new
400
- @second = Post.new
401
- @related = [@first, @second]
402
- @parent = Person.new
403
- end
404
-
405
- it "sets the related object id on the parent" do
406
- Mongoid::Associations::HasManyRelated.update(@related, @parent, options)
407
- @first.person_id.should == @parent.id
408
- @second.person_id.should == @parent.id
409
- end
410
-
411
- it "returns the related objects" do
412
- @proxy = Mongoid::Associations::HasManyRelated.update(@related, @parent, options)
413
- @proxy.target.should == @related
414
- end
415
-
416
- end
417
-
418
- end
@@ -1,179 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Associations::HasOneRelated do
4
-
5
- let(:document) { stub(:id => "1") }
6
- let(:block) do
7
- Proc.new do
8
- def extension
9
- "Testing"
10
- end
11
- end
12
- end
13
- let(:options) do
14
- Mongoid::Associations::Options.new(:name => :game, :extend => block)
15
- end
16
-
17
- describe "#build" do
18
-
19
- before do
20
- @parent = stub(:id => "5", :class => Person)
21
- Game.expects(:first).returns(nil)
22
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
23
- end
24
-
25
- it "adds a new object to the association" do
26
- @association.build(:score => 100)
27
- @association.score.should == 100
28
- end
29
-
30
- it "sets the parent object id on the child" do
31
- @association.build(:score => 100)
32
- @association.person_id.should == @parent.id
33
- end
34
-
35
- it "sets the parent object reference on the child" do
36
- @association.build(:score => 100)
37
- @association.person.should == @parent
38
- end
39
-
40
- end
41
-
42
- describe "#create" do
43
-
44
- before do
45
- @parent = stub(:id => "5", :class => Person)
46
- Game.expects(:first).returns(nil)
47
- Mongoid::Commands::Save.expects(:execute)
48
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
49
- end
50
-
51
- it "adds a new object to the association" do
52
- @association.create(:score => 100)
53
- @association.score.should == 100
54
- end
55
-
56
- it "sets the parent object id on the child" do
57
- @association.create(:score => 100)
58
- @association.person_id.should == @parent.id
59
- end
60
-
61
- it "returns the new document" do
62
- @association.create(:score => 100).should be_a_kind_of(Game)
63
- end
64
-
65
- end
66
-
67
- describe "#id" do
68
-
69
- before do
70
- @parent = stub(:id => "5", :class => Person)
71
- @game = Game.new
72
- Game.expects(:first).returns(@game)
73
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
74
- end
75
-
76
- it "delegates to the proxied document" do
77
- @association.id.should == @game.id
78
- end
79
-
80
- end
81
-
82
- describe ".initialize" do
83
-
84
- before do
85
- @person = Person.new
86
- @game = stub
87
- end
88
-
89
- it "finds the association game by the parent key" do
90
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(@game)
91
- @person.game.should == @game
92
- end
93
-
94
- context "when the options have an extension" do
95
-
96
- before do
97
- @parent = stub(:id => "5", :class => Person)
98
- @game = Game.new
99
- Game.expects(:first).returns(@game)
100
- @association = Mongoid::Associations::HasOneRelated.new(@parent, options)
101
- end
102
-
103
- it "adds the extension to the module" do
104
- @association.extension.should == "Testing"
105
- end
106
-
107
- end
108
-
109
- end
110
-
111
- describe ".instantiate" do
112
-
113
- it "delegates to new" do
114
- Mongoid::Associations::HasOneRelated.expects(:new).with(document, options, nil)
115
- Mongoid::Associations::HasOneRelated.instantiate(document, options)
116
- end
117
-
118
- end
119
-
120
- describe "#method_missing" do
121
-
122
- before do
123
- @person = Person.new
124
- @game = stub
125
- end
126
-
127
- it "delegates to the documet" do
128
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(@game)
129
- @game.expects(:strange_method)
130
- association = Mongoid::Associations::HasOneRelated.instantiate(@person, options)
131
- association.strange_method
132
- end
133
-
134
- end
135
-
136
- describe ".macro" do
137
-
138
- it "returns :has_one_related" do
139
- Mongoid::Associations::HasOneRelated.macro.should == :has_one_related
140
- end
141
-
142
- end
143
-
144
- describe "#nil?" do
145
-
146
- before do
147
- @person = Person.new
148
- @game = stub
149
- Game.expects(:first).with(:conditions => { "person_id"=> @person.id }).returns(nil)
150
- end
151
-
152
- it "delegates to the document" do
153
- association = Mongoid::Associations::HasOneRelated.instantiate(@person, options)
154
- association.should be_nil
155
- end
156
-
157
- end
158
-
159
- describe ".update" do
160
-
161
- before do
162
- @person = Person.new
163
- @game = stub
164
- end
165
-
166
- it "sets the parent on the child association" do
167
- @game.expects(:person=).with(@person)
168
- Mongoid::Associations::HasOneRelated.update(@game, @person, options)
169
- end
170
-
171
- it "returns the proxy" do
172
- @game.expects(:person=).with(@person)
173
- @proxy = Mongoid::Associations::HasOneRelated.update(@game, @person, options)
174
- @proxy.target.should == @game
175
- end
176
-
177
- end
178
-
179
- end