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,340 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Associations do
4
-
5
- before do
6
- Person.delete_all
7
- Game.delete_all
8
- Post.delete_all
9
- end
10
-
11
- context "anonymous extensions" do
12
-
13
- before do
14
- @person = Person.new(:title => "Dr")
15
- @address_one = Address.new(:street => "Oxford")
16
- @address_two = Address.new(:street => "Bond")
17
- @name = Name.new(:first_name => "Richard", :last_name => "Dawkins")
18
- @person.addresses << [ @address_one, @address_two ]
19
- @person.name = @name
20
- @person.save
21
- end
22
-
23
- context "when defined on an embed_many" do
24
-
25
- it "applies the extension" do
26
- addresses = @person.addresses.find_by_street("Oxford")
27
- addresses.size.should == 1
28
- addresses.first.should == @address_one
29
- end
30
-
31
- end
32
-
33
- context "when defined on a has_one" do
34
-
35
- it "applies the extension" do
36
- name = @person.name
37
- name.dawkins?.should be_true
38
- end
39
-
40
- end
41
-
42
- context "when defined on a belongs_to" do
43
-
44
- it "applies the extension" do
45
- @address_two.addressable.doctor?.should be_true
46
- end
47
-
48
- end
49
-
50
- end
51
-
52
- context "creation of an embedded association on a callback" do
53
-
54
- it "allows the use of create!" do
55
- artist = Artist.create!(:name => "Depeche Mode")
56
- artist.songs.size.should == 2
57
- artist.songs.first.title.should == "0"
58
- artist.songs.last.title.should == "1"
59
- end
60
- end
61
-
62
- context "criteria on has many embedded associations" do
63
-
64
- before do
65
- @person = Person.new(:title => "Sir")
66
- @sf_apartment = Address.new(:street => "Genoa Pl", :state => "CA", :address_type => "Apartment")
67
- @la_home = Address.new(:street => "Rodeo Dr", :state => "CA", :address_type => "Home")
68
- @sf_home = Address.new(:street => "Pacific", :state => "CA", :address_type => "Home")
69
- @person.addresses << [ @sf_apartment, @la_home, @sf_home ]
70
- end
71
-
72
- it "handles a single criteria" do
73
- cas = @person.addresses.california
74
- cas.size.should == 3
75
- cas.should == [ @sf_apartment, @la_home, @sf_home ]
76
- end
77
-
78
- it "handles chained criteria" do
79
- ca_homes = @person.addresses.california.homes
80
- ca_homes.size.should == 2
81
- ca_homes.should == [ @la_home, @sf_home ]
82
- end
83
-
84
- it "handles chained criteria with named scopes" do
85
- ca_homes = @person.addresses.california.homes.rodeo
86
- ca_homes.size.should == 1
87
- ca_homes.should == [ @la_home ]
88
- end
89
-
90
- end
91
-
92
- context "one-to-one relational associations" do
93
-
94
- before do
95
- @person = Person.new(:title => "Sir")
96
- @game = Game.new(:score => 1)
97
- @person.game = @game
98
- @person.save
99
- end
100
-
101
- it "sets the association on save" do
102
- @from_db = Person.find(@person.id)
103
- @from_db.game.should == @game
104
- end
105
-
106
- it "sets the reverse association before save" do
107
- @game.person.should == @person
108
- end
109
-
110
- it "sets the reverse association after save" do
111
- @from_db = Game.find(@game.id)
112
- @game.person.should == @person
113
- end
114
-
115
- end
116
-
117
- context "one-to-many relational associations" do
118
-
119
- before do
120
- @person = Person.new(:title => "Sir")
121
- @post = Post.new(:title => "Testing")
122
- @person.posts = [@post]
123
- @person.save
124
- end
125
-
126
- it "sets the association on save" do
127
- from_db = Person.find(@person.id)
128
- from_db.posts.should == [@post]
129
- end
130
-
131
- context "when adding a new association" do
132
-
133
- before do
134
- @new_post = Post.new(:title => "New")
135
- @person.posts << @new_post
136
- end
137
-
138
- it "rememoizes the new association" do
139
- @person.posts.should == [ @post, @new_post ]
140
- end
141
- end
142
-
143
- context "when building" do
144
-
145
- before do
146
- @person = Person.new(:title => "Mr")
147
- @post = @person.posts.build(:title => "First")
148
- end
149
-
150
- it "sets the reverse association" do
151
- @post.person.should == @person
152
- end
153
-
154
- end
155
-
156
- context "finding associated objects" do
157
-
158
- before do
159
- @extra_post = Post.create(:title => "Orphan")
160
- @from_db = Person.find(@person.id)
161
- end
162
-
163
- context "finding all" do
164
-
165
- it "returns only those objects scoped to the parent" do
166
- Post.all.size.should == 2
167
- @from_db.posts.all.size.should == 1
168
- end
169
-
170
- end
171
-
172
- context "finding with conditions" do
173
-
174
- context "finding all" do
175
-
176
- it "returns only those objects scoped to the parent" do
177
- posts = @from_db.posts.find(:all, :conditions => { :title => "Testing" })
178
- posts.size.should == 1
179
- end
180
-
181
- end
182
-
183
- context "finding first" do
184
-
185
- it "returns only those objects scoped to the parent" do
186
- post = @from_db.posts.find(:first, :conditions => { :title => "Testing" })
187
- post.should == @post
188
- end
189
-
190
- end
191
-
192
- context "finding last" do
193
-
194
- it "returns only those objects scoped to the parent" do
195
- post = @from_db.posts.find(:last, :conditions => { :title => "Testing" })
196
- post.should == @post
197
- end
198
-
199
- end
200
-
201
- context "using a named scope" do
202
-
203
- before do
204
- @post.created_at = 15.days.ago
205
- @post.save
206
- end
207
-
208
- it "returns only those scoped to the parent plus the named scope" do
209
- posts = @from_db.posts.recent
210
- posts.size.should == 1
211
- end
212
-
213
- end
214
-
215
- context "using a criteria class method" do
216
-
217
- before do
218
- @post.created_at = 45.days.ago
219
- @post.save
220
- end
221
-
222
- it "returns only those scoped to the parent plus the named scope" do
223
- posts = @from_db.posts.old
224
- posts.size.should == 1
225
- end
226
-
227
- end
228
-
229
- context "calling criteria methods" do
230
-
231
- before do
232
- @post.title = "New Title"
233
- @post.save
234
- end
235
-
236
- it "returns the proper object for the criteria" do
237
- posts = @from_db.posts.where(:title => "New Title")
238
- posts.size.should == 1
239
- end
240
-
241
- context "when calling with a new criteria" do
242
-
243
- before do
244
- @from_db.posts.create(:title => "Other Title")
245
- end
246
-
247
- it "does not retain the old criteria" do
248
- @from_db.posts.where(:title => "New Title").size.should == 1
249
- @from_db.posts.size.should == 2
250
- @from_db.posts.where(:title => "Other Title").size.should == 1
251
- end
252
- end
253
- end
254
- end
255
- end
256
- end
257
-
258
- context "nested embedded associations" do
259
-
260
- before do
261
- @person = Person.create(:title => "Mr")
262
- end
263
-
264
- context "one level nested" do
265
-
266
- before do
267
- @address = @person.addresses.create(:street => "Oxford St")
268
- @name = @person.create_name(:first_name => "Gordon")
269
- end
270
-
271
- it "persists all the associations properly" do
272
- @name.last_name = "Brown"
273
- @person.name.last_name.should == "Brown"
274
- end
275
-
276
- it "sets the new_record values properly" do
277
- from_db = Person.find(@person.id)
278
- new_name = from_db.create_name(:first_name => "Flash")
279
- new_name.new_record?.should be_false
280
- end
281
-
282
- end
283
-
284
- context "multiple levels nested" do
285
-
286
- context "when a has-many to has_one" do
287
-
288
- before do
289
- @person.phone_numbers.create(:number => "4155551212")
290
- end
291
-
292
- it "persists all the associations properly" do
293
- from_db = Person.find(@person.id)
294
- phone = from_db.phone_numbers.first
295
- phone.create_country_code(:code => 1)
296
- from_db.phone_numbers.first.country_code.code.should == 1
297
- end
298
-
299
- end
300
-
301
- context "when a has-one to has-many" do
302
-
303
- before do
304
- @person = Person.new(:title => "Sir", :ssn => "1")
305
- @name = Name.new(:first_name => "Syd")
306
- @person.name = @name
307
- @person.save
308
- end
309
-
310
- it "persists all the associations properly" do
311
- from_db = Person.find(@person.id)
312
- translation = Translation.new(:language => "fr")
313
- from_db.name.translations << translation
314
- from_db.attributes[:name][:translations].should_not be_nil
315
- end
316
-
317
- end
318
-
319
- context "when a has-many to has-many" do
320
-
321
- before do
322
- @address = Address.new(:street => "Upper Street")
323
- @person.addresses << @address
324
- end
325
-
326
- it "bubbles the child association up to root" do
327
- location = Location.new(:name => "Home")
328
- @address.locations << location
329
- location.stubs(:valid?).returns(false)
330
- @person.save
331
- @person.addresses.first.locations.first.should == location
332
- end
333
-
334
- end
335
-
336
- end
337
-
338
- end
339
-
340
- end
@@ -1,22 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Attributes do
4
-
5
- context "when persisting nil attributes" do
6
-
7
- before do
8
- @person = Person.create(:score => nil, :ssn => "555-66-7777")
9
- end
10
-
11
- after do
12
- Person.delete_all
13
- end
14
-
15
- it "the field should exist with a nil value" do
16
- from_db = Person.find(@person.id)
17
- from_db.attributes.has_key?(:score).should be_true
18
- end
19
-
20
- end
21
-
22
- end
@@ -1,227 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Commands do
4
-
5
- before do
6
- @person = Person.new(:title => "Sir", :ssn => "6969696", :pets => true)
7
- end
8
-
9
- after do
10
- @person.delete
11
- end
12
-
13
- describe ".create" do
14
-
15
- it "saves and returns the document" do
16
- person = Person.create(:title => "Sensei", :ssn => "666-66-6666")
17
- person.should be_a_kind_of(Person)
18
- person.should_not be_a_new_record
19
- end
20
-
21
- end
22
-
23
- describe ".create!" do
24
-
25
- context "inserting with a field that is not unique" do
26
-
27
- context "when a unique index exists" do
28
-
29
- after do
30
- Person.delete_all
31
- end
32
-
33
- it "raises an error" do
34
- Person.create!(:ssn => "555-55-9999")
35
- lambda { Person.create!(:ssn => "555-55-9999") }.should raise_error
36
- end
37
-
38
- end
39
-
40
- end
41
-
42
- end
43
-
44
- describe "#delete" do
45
-
46
- context "deleting a root document" do
47
-
48
- before do
49
- @person.save
50
- end
51
-
52
- it "deletes the document" do
53
- @person.delete
54
- lambda { Person.find(@person.id) }.should raise_error
55
- end
56
-
57
- it "returns true" do
58
- @person.delete.should be_true
59
- end
60
-
61
- end
62
-
63
- context "deleting an embedded document" do
64
-
65
- before do
66
- @address = Address.new(:street => "Bond Street")
67
- @person.addresses << @address
68
- end
69
-
70
- context "when the document is not yet saved" do
71
-
72
- it "removes the document from the parent" do
73
- @address.delete
74
- @person.addresses.should be_empty
75
- @person.attributes[:addresses].should be_empty
76
- end
77
-
78
- end
79
-
80
- context "when the document has been saved" do
81
-
82
- before do
83
- @address.save
84
- end
85
-
86
- it "removes the object from the parent and database" do
87
- @address.delete
88
- from_db = Person.find(@person.id)
89
- from_db.addresses.should be_empty
90
- end
91
-
92
- end
93
-
94
- end
95
-
96
- end
97
-
98
- describe "#destroy" do
99
-
100
- context "destroying a root document" do
101
-
102
- before do
103
- @person.save
104
- end
105
-
106
- it "destroys the document" do
107
- @person.destroy
108
- lambda { Person.find(@person.id) }.should raise_error
109
- end
110
-
111
- it "returns true" do
112
- @person.destroy.should be_true
113
- end
114
-
115
- end
116
-
117
- context "deleting an embedded document" do
118
-
119
- before do
120
- @address = Address.new(:street => "Bond Street")
121
- @person.addresses << @address
122
- end
123
-
124
- context "when the document is not yet saved" do
125
-
126
- it "removes the document from the parent" do
127
- @address.destroy
128
- @person.addresses.should be_empty
129
- @person.attributes[:addresses].should be_empty
130
- end
131
-
132
- end
133
-
134
- context "when the document has been saved" do
135
-
136
- before do
137
- @address.save
138
- end
139
-
140
- it "removes the object from the parent and database" do
141
- @address.destroy
142
- from_db = Person.find(@person.id)
143
- from_db.addresses.should be_empty
144
- end
145
- end
146
- end
147
- end
148
-
149
- describe "#destroy_all" do
150
-
151
- before do
152
- @person.save
153
- end
154
-
155
- it "destroys all the documents" do
156
- Person.destroy_all
157
- Person.count.should == 0
158
- end
159
- end
160
-
161
- describe "#save" do
162
-
163
- context "when validation passes" do
164
-
165
- it "returns true" do
166
- @person.save.should be_true
167
- end
168
-
169
- end
170
-
171
- end
172
-
173
- describe "save!" do
174
-
175
- context "inserting with a field that is not unique" do
176
-
177
- context "when a unique index exists" do
178
-
179
- it "raises an error" do
180
- Person.create!(:ssn => "555-55-9999")
181
- person = Person.new(:ssn => "555-55-9999")
182
- lambda { person.save!(:ssn => "555-55-9999") }.should raise_error
183
- end
184
-
185
- end
186
-
187
- end
188
-
189
- end
190
-
191
- describe "#update_attributes" do
192
-
193
- context "when validation passes" do
194
-
195
- it "returns true" do
196
- @person.update_attributes(:ssn => "555-55-1234").should be_true
197
- end
198
-
199
- it "saves the attributes" do
200
- @person.update_attributes(:ssn => "555-55-1235", :pets => false, :title => nil)
201
- @from_db = Person.find(@person.id)
202
- @from_db.ssn.should == "555-55-1235"
203
- @from_db.pets.should == false
204
- @from_db.title.should be_nil
205
- end
206
-
207
- end
208
-
209
- end
210
-
211
- describe ".delete_all" do
212
-
213
- it "returns true" do
214
- Person.delete_all.should == true
215
- end
216
-
217
- end
218
-
219
- describe ".destroy_all" do
220
-
221
- it "returns true" do
222
- Person.destroy_all.should == true
223
- end
224
-
225
- end
226
-
227
- end