mongoid 2.0.0.alpha → 2.0.0.beta.5

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.
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