mongoid-pre 2.0.0.beta1 → 2.0.0.pre

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 (135) hide show
  1. data/.watchr +15 -10
  2. data/HISTORY +342 -0
  3. data/README.rdoc +8 -1
  4. data/Rakefile +2 -3
  5. data/VERSION +1 -1
  6. data/lib/mongoid/associations/{embedded_in.rb → belongs_to.rb} +4 -4
  7. data/lib/mongoid/associations/belongs_to_related.rb +9 -6
  8. data/lib/mongoid/associations/{embeds_many.rb → has_many.rb} +20 -33
  9. data/lib/mongoid/associations/has_many_related.rb +4 -28
  10. data/lib/mongoid/associations/{embeds_one.rb → has_one.rb} +6 -6
  11. data/lib/mongoid/associations/options.rb +6 -1
  12. data/lib/mongoid/associations.rb +32 -41
  13. data/lib/mongoid/attributes.rb +6 -13
  14. data/lib/mongoid/collection.rb +1 -2
  15. data/lib/mongoid/commands/delete.rb +1 -1
  16. data/lib/mongoid/commands/delete_all.rb +1 -4
  17. data/lib/mongoid/commands/destroy.rb +1 -1
  18. data/lib/mongoid/commands/destroy_all.rb +1 -3
  19. data/lib/mongoid/commands/save.rb +0 -1
  20. data/lib/mongoid/commands.rb +13 -2
  21. data/lib/mongoid/components.rb +1 -6
  22. data/lib/mongoid/config.rb +1 -5
  23. data/lib/mongoid/contexts/enumerable.rb +17 -54
  24. data/lib/mongoid/contexts/mongo.rb +38 -101
  25. data/lib/mongoid/contexts/paging.rb +2 -2
  26. data/lib/mongoid/contexts.rb +0 -21
  27. data/lib/mongoid/criteria.rb +73 -15
  28. data/lib/mongoid/criterion/inclusion.rb +0 -2
  29. data/lib/mongoid/criterion/optional.rb +2 -10
  30. data/lib/mongoid/document.rb +30 -41
  31. data/lib/mongoid/extensions.rb +0 -15
  32. data/lib/mongoid/field.rb +7 -20
  33. data/lib/mongoid/fields.rb +10 -15
  34. data/lib/mongoid/finders.rb +98 -10
  35. data/lib/mongoid/identity.rb +2 -8
  36. data/lib/mongoid/named_scope.rb +0 -2
  37. data/lib/mongoid/validations/associated.rb +8 -3
  38. data/lib/mongoid/validations/uniqueness.rb +7 -2
  39. data/lib/mongoid/validations.rb +2 -2
  40. data/lib/mongoid/versioning.rb +1 -1
  41. data/lib/mongoid.rb +5 -21
  42. data/mongoid.gemspec +19 -59
  43. data/spec/integration/mongoid/associations_spec.rb +3 -42
  44. data/spec/integration/mongoid/attributes_spec.rb +2 -2
  45. data/spec/integration/mongoid/commands_spec.rb +13 -27
  46. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -13
  47. data/spec/integration/mongoid/criteria_spec.rb +3 -50
  48. data/spec/integration/mongoid/document_spec.rb +5 -72
  49. data/spec/integration/mongoid/finders_spec.rb +28 -85
  50. data/spec/models/address.rb +3 -3
  51. data/spec/models/animal.rb +2 -2
  52. data/spec/models/country_code.rb +2 -2
  53. data/spec/models/game.rb +1 -2
  54. data/spec/models/inheritance.rb +5 -5
  55. data/spec/models/location.rb +2 -2
  56. data/spec/models/name.rb +3 -3
  57. data/spec/models/namespacing.rb +2 -2
  58. data/spec/models/patient.rb +0 -2
  59. data/spec/models/person.rb +4 -6
  60. data/spec/models/pet.rb +3 -3
  61. data/spec/models/pet_owner.rb +3 -3
  62. data/spec/models/phone.rb +3 -3
  63. data/spec/models/post.rb +1 -1
  64. data/spec/models/translation.rb +2 -2
  65. data/spec/models/vet_visit.rb +2 -2
  66. data/spec/spec_helper.rb +2 -2
  67. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -4
  68. data/spec/unit/mongoid/associations/{embedded_in_spec.rb → belongs_to_spec.rb} +11 -11
  69. data/spec/unit/mongoid/associations/has_many_related_spec.rb +14 -45
  70. data/spec/unit/mongoid/associations/{embeds_many_spec.rb → has_many_spec.rb} +34 -79
  71. data/spec/unit/mongoid/associations/{embeds_one_spec.rb → has_one_spec.rb} +18 -18
  72. data/spec/unit/mongoid/associations/options_spec.rb +19 -20
  73. data/spec/unit/mongoid/associations_spec.rb +12 -74
  74. data/spec/unit/mongoid/attributes_spec.rb +51 -83
  75. data/spec/unit/mongoid/collection_spec.rb +0 -46
  76. data/spec/unit/mongoid/commands/delete_all_spec.rb +8 -9
  77. data/spec/unit/mongoid/commands/delete_spec.rb +3 -6
  78. data/spec/unit/mongoid/commands/destroy_all_spec.rb +2 -0
  79. data/spec/unit/mongoid/commands/destroy_spec.rb +3 -10
  80. data/spec/unit/mongoid/commands_spec.rb +11 -20
  81. data/spec/unit/mongoid/config_spec.rb +0 -18
  82. data/spec/unit/mongoid/contexts/enumerable_spec.rb +11 -198
  83. data/spec/unit/mongoid/contexts/mongo_spec.rb +54 -357
  84. data/spec/unit/mongoid/criteria_spec.rb +78 -107
  85. data/spec/unit/mongoid/criterion/exclusion_spec.rb +13 -3
  86. data/spec/unit/mongoid/criterion/inclusion_spec.rb +19 -25
  87. data/spec/unit/mongoid/criterion/optional_spec.rb +18 -25
  88. data/spec/unit/mongoid/document_spec.rb +34 -71
  89. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +2 -2
  90. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +3 -0
  91. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +2 -16
  92. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +1 -1
  93. data/spec/unit/mongoid/field_spec.rb +0 -62
  94. data/spec/unit/mongoid/fields_spec.rb +0 -33
  95. data/spec/unit/mongoid/finders_spec.rb +1 -37
  96. data/spec/unit/mongoid/identity_spec.rb +6 -47
  97. data/spec/unit/mongoid/named_scope_spec.rb +2 -15
  98. data/spec/unit/mongoid/scope_spec.rb +1 -1
  99. data/spec/unit/mongoid/validations/uniqueness_spec.rb +3 -3
  100. data/spec/unit/mongoid_spec.rb +2 -11
  101. metadata +14 -64
  102. data/lib/mongoid/associations/meta_data.rb +0 -28
  103. data/lib/mongoid/contexts/ids.rb +0 -25
  104. data/lib/mongoid/deprecation.rb +0 -22
  105. data/lib/mongoid/dirty.rb +0 -203
  106. data/lib/mongoid/extensions/big_decimal/conversions.rb +0 -19
  107. data/lib/mongoid/extensions/binary/conversions.rb +0 -17
  108. data/lib/mongoid/extensions/objectid/conversions.rb +0 -15
  109. data/lib/mongoid/extras.rb +0 -61
  110. data/lib/mongoid/javascript/functions.yml +0 -37
  111. data/lib/mongoid/javascript.rb +0 -21
  112. data/lib/mongoid/observable.rb +0 -30
  113. data/lib/mongoid/paths.rb +0 -54
  114. data/lib/mongoid/persistence/command.rb +0 -20
  115. data/lib/mongoid/persistence/insert.rb +0 -71
  116. data/lib/mongoid/persistence/update.rb +0 -78
  117. data/lib/mongoid/persistence.rb +0 -27
  118. data/lib/mongoid/state.rb +0 -32
  119. data/spec/integration/mongoid/dirty_spec.rb +0 -70
  120. data/spec/integration/mongoid/persistence/update_spec.rb +0 -46
  121. data/spec/models/callbacks.rb +0 -18
  122. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  123. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  124. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  125. data/spec/unit/mongoid/dirty_spec.rb +0 -286
  126. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  127. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  128. data/spec/unit/mongoid/extras_spec.rb +0 -102
  129. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  130. data/spec/unit/mongoid/observable_spec.rb +0 -46
  131. data/spec/unit/mongoid/paths_spec.rb +0 -124
  132. data/spec/unit/mongoid/persistence/insert_spec.rb +0 -175
  133. data/spec/unit/mongoid/persistence/update_spec.rb +0 -148
  134. data/spec/unit/mongoid/persistence_spec.rb +0 -40
  135. data/spec/unit/mongoid/state_spec.rb +0 -83
data/.watchr CHANGED
@@ -1,24 +1,29 @@
1
- # vim:set filetype=ruby:
1
+ # Watchr is the preferred method to run specs automatically over rspactor for
2
+ # Mongoid. If you are using vim, you can add the file:
3
+ #
4
+ # ~/.vim/ftdetect/watchr.vim
5
+ #
6
+ # This should have only the following line in it:
7
+ #
8
+ # autocmd BufNewFile,BufRead *.watchr setf ruby
9
+ #
10
+ # This will enable vim to recognize this file as ruby code should you wish to
11
+ # edit it.
2
12
  def run(cmd)
3
13
  puts cmd
4
14
  system cmd
5
15
  end
6
16
 
7
17
  def spec(file)
8
- if File.exists?(file)
9
- run("spec -O spec/spec.opts #{file}")
10
- else
11
- puts("Spec: #{file} does not exist.")
12
- end
18
+ run "spec -O spec/spec.opts #{file}"
13
19
  end
14
20
 
15
21
  watch("spec/.*/*_spec\.rb") do |match|
16
- puts(match[0])
22
+ p match[0]
17
23
  spec(match[0])
18
24
  end
19
25
 
20
- watch("lib/(.*/.*)\.rb") do |match|
21
- puts(match[1])
26
+ watch('lib/(.*/.*)\.rb') do |match|
27
+ p match[1]
22
28
  spec("spec/unit/#{match[1]}_spec.rb")
23
- spec("spec/integration/#{match[1]}_spec.rb")
24
29
  end
data/HISTORY ADDED
@@ -0,0 +1,342 @@
1
+ === 1.2.0
2
+ - Fixed composite key generation not to replace all
3
+ special chars with dashes.
4
+
5
+ - Memory optimizations, now wrapping the mongo cursor.
6
+
7
+ - Fixed memoization on has_many_related assocations.
8
+
9
+ - Fixed pagination on embedded associations
10
+
11
+ - Fixed after_update callback not getting fired.
12
+
13
+ - When a connection failure occurs, Mongoid tried to
14
+ retry the operation up to a configurable time.
15
+
16
+ - Mongoid now supports a configuration with a master
17
+ and multiple read slaves. It will direct all writes
18
+ to the master and all reads to the slaves. In the case
19
+ of a write, subsequent reads will be directed to the
20
+ master up to configurable number to try and counter
21
+ the 2 second slave sync delay.
22
+
23
+ - Fixed issue with criteria exclusion queries with ids.
24
+
25
+ - Mongoid only executes a count when explicitly paginating.
26
+
27
+ - Fixed Criteria offset to be a getter or setter
28
+
29
+ - Added indexes to foreign keys on belongs_to_related
30
+ associations.
31
+
32
+ - General code refactorings/cleanup
33
+
34
+ === 1.1.4
35
+ - Refactorings in preparation for next feature push.
36
+
37
+ - Associations may now have anonymous extensions.
38
+
39
+ - Ruby 1.9 compatibility updates. (brainopia)
40
+
41
+ - Document.to_json accepts options. (jsmestad)
42
+
43
+ === 1.1.3
44
+ - Nil can be passed into methods that set attributes.
45
+
46
+ - Mongoid.config can now take a block.
47
+
48
+ - Allow named_scopes and criteria class methods on
49
+ has_many_related if related is a Mongoid document.
50
+
51
+ - Document.find can now take an array of ids.
52
+
53
+ === 1.1.2
54
+ - Fixing issues with updates to parents.
55
+
56
+ === 1.1.1
57
+ - Document.create raises validations error, not no
58
+ method error on self.errors (Rick Frankel)
59
+
60
+ - Support default values that respond_to?(:call)
61
+ (procs/lambda) (ahoward)
62
+
63
+ - Added Mongoid.persist_in_safe_mode global config
64
+ option.
65
+
66
+ - Minor optimization: don't evaluate default procs
67
+ if it's not needed (brainopia)
68
+
69
+ === 1.1.0
70
+ - Nil attributes no longer persist nil values to the
71
+ database - the field will just not exist.
72
+
73
+ - create! and save! will now properly raise an error
74
+ when a database operation fails. This is handled
75
+ by using :safe => true as an option to
76
+ collection.save.
77
+
78
+ - Setting blank numbers casts to nil.
79
+
80
+ - Criteria and named scopes can now be used on has
81
+ many relationships. They can be chained with each
82
+ other off the association chain.
83
+
84
+ - Mongoid can now determine if a document matches a
85
+ mongodb selector without hitting the database via
86
+ Document#matches?(selector).
87
+
88
+ - Overall performance improvements in all areas.
89
+
90
+ - Ruby 1.9 compatibility fixes.
91
+
92
+ - Has many related now supports finding by id or
93
+ by an optional :all, :first, :last with a
94
+ conditions hash.
95
+
96
+ === 1.0.6
97
+
98
+ - Preventing the setting of empty values in attributes.
99
+
100
+ - Better inspect formatting
101
+
102
+ === 1.0.5
103
+
104
+ - Has one and has many associations now set the parent
105
+ object first before writing the attributes on
106
+ #build and #create.
107
+
108
+ === 1.0.4
109
+ - Modified criteria to use the querying class
110
+ when instantiating documents if there are no
111
+ subclasses.
112
+
113
+ - Floats that are empty strings or nil get
114
+ defaulted to 0.0
115
+
116
+ === 1.0.3
117
+ - Small performance improvements on finders
118
+
119
+ - Float.set allows setting of non-numeric string
120
+ in order for validates_numericality_of to fail
121
+ properly.
122
+
123
+ === 1.0.2
124
+ - Named scopes get added functionality:
125
+
126
+ - named scopes can now be criteria objects.
127
+
128
+ - named scoped can now be procs with criteria.
129
+
130
+ - named scopes and class methods that return
131
+ criteria can be chained with each other.
132
+
133
+ - When calling save on an embedded document whose
134
+ validation passes but the parent's validation
135
+ fails, it will properly return false.
136
+
137
+ === 1.0.1
138
+ - Documents now have named_scopes similar to
139
+ ActiveRecord named scopes. Please see rdoc or
140
+ specs for examples.
141
+
142
+ - Document#to_json properly works in all cases.
143
+
144
+ - ActiveSupport calls for inflections have been
145
+ moved into the String::Inflections module.
146
+
147
+ - Updated dependency on Validatable to 2.0.1
148
+
149
+ === 1.0.0
150
+ - Validations cleanup: Only before_validation and
151
+ after_validation callbacks are supported now.
152
+
153
+ - Dynamic fields have reader and writer methods
154
+ again, but only for instances where the dynamic
155
+ attribute exists.
156
+
157
+ - Lots of refactoring, mostly coverting common
158
+ fucntionality into modules for the upcoming rails
159
+ 2 and 3 gem split.
160
+
161
+ === 0.12.0
162
+ - Has one now works as expected:
163
+
164
+ - Has one associations will return nil, instead
165
+ of the proxy if the association has not been
166
+ set.
167
+
168
+ - Building/creating a has one is no longer handled
169
+ by calling the Document#association#build() or create(),
170
+ this is now handled by Document#build_name and
171
+ Document#create_name where "name" is the name
172
+ of the has one association.
173
+
174
+ - Passing a _type attribute to the #build_name
175
+ and #create_name methods will build/create
176
+ objects of that type, useful for creating
177
+ specific subclasses.
178
+
179
+ - The existing #build and #create methods will be
180
+ removed in the next release.
181
+
182
+ - Removed all dynamic finders. If you need to have
183
+ functionality similar to "find_or_(create|initialize)_by"
184
+ you can use the 2 new finders:
185
+
186
+ - Document.find_or_create_by(attributes): Will
187
+ look for a document in the database with the
188
+ supplied attributes, if found it will return the
189
+ document otherwise will create a new one with
190
+ the supplied attributes.
191
+
192
+ - Document.find_or_initialize_by(attributes): Will
193
+ look for a document in the database with the
194
+ supplied attributes, if found it will return the
195
+ document otherwise will instantiate a new one with
196
+ the supplied attributes.
197
+
198
+ - Fixed issue with empty hashes and arrays not getting
199
+ set on document instantiation.
200
+
201
+ === 0.11.9
202
+ - Fixed issue with non-us time zones and formats
203
+ parsing incorrectly.
204
+
205
+ - Fixed error when specifying field restrictions
206
+ in criteria and not providing the _type. It
207
+ will now automaticall get added if it is not
208
+ present.
209
+
210
+ - Slight cleanup of delegated methods in Document.
211
+
212
+ - Dynamic attributes no longer create setters and
213
+ getters on the class. They can be accessed from
214
+ the attributes hash directly. If they are used
215
+ frequently it is preferrable to just add a field
216
+ to the class manually.
217
+
218
+ - Criteria#min no longer always returns 0.0.
219
+
220
+ === 0.11.8
221
+ - Added #min and #max to criteria which takes a
222
+ single field argument.
223
+
224
+ === 0.11.7
225
+ - Added #sum to criteria which takes a single field
226
+ to aggregate on. Example: Person.sum(:age) would
227
+ return a float that was the sum of all people's
228
+ ages in the db.
229
+
230
+ - Fixed issue with queries from parent classes always
231
+ casting the returned documents to the parent.
232
+
233
+ - Fixed singleton require issue.
234
+
235
+ - Group queries now run as db commands
236
+
237
+ === 0.11.6
238
+ - Allow namespaced documents to default with:
239
+ "namespace_modelname"
240
+
241
+ - Fixed indexing of _type field to only happen on root
242
+ classes.
243
+
244
+ - Fixed creation of empty collections for embedded documents.
245
+
246
+ - Document.store_in now properly resets the collection
247
+ if the collection had already been accessed.
248
+
249
+ - Document.find(nil) now raises
250
+ Mongoid::Errors::InvalidOptions
251
+
252
+ === 0.11.5
253
+ - Removed dependency on mongo_ext, since latest version
254
+ was breaking on various operating systems.
255
+ === 0.11.4
256
+ - Fixed issue with dynamic fields: checking whether
257
+ the document responded to the attribute's method
258
+ should have checked the setter and not the getter
259
+
260
+ - Fixed has_one associations not being able to be
261
+ set to nil.
262
+
263
+ === 0.11.3
264
+ - Fixed issue with Document#save! not calling before
265
+ and after create callbacks if document is new
266
+
267
+ === 0.11.2
268
+ - Fixing bug where has many and has one relational
269
+ associations create method did not return the
270
+ associated document
271
+
272
+ === 0.11.1
273
+ - Querying for classes that have subclasses will also
274
+ return the subclasses as well, similar to
275
+ ActiveRecord.
276
+
277
+ - Adding configuration option allow_dynamic_fields. This
278
+ defaults to true and if set to false will raise an
279
+ error when trying to set an attribute on an object
280
+ that does not have a corresponding field defined.
281
+
282
+ === 0.11.0
283
+ - Set the collection name to store a document in via:
284
+ Document.store_in :collection_name
285
+
286
+ - Initial inheritance support:
287
+
288
+ - Documents and their associations can now have an
289
+ infinite number of subclasses.
290
+
291
+ - Has many and has one associations can build or
292
+ create specific subclasses by providing an optional
293
+ class as the last parameter to the #create and
294
+ #build methods on the respective associations.
295
+
296
+ - Querying for specific subclasses will only return
297
+ those documents which were saved as that subclass,
298
+ even though the hierarchy is stored in the same
299
+ collection.
300
+
301
+ - Deletion of subclass documents will only delete
302
+ documents of that type, even though they all exist
303
+ in the same collection. #delete_all and #destroy_all
304
+ also support this behavoir.
305
+
306
+ - Updated mongo and mongo_ext dependencies to 0.18.2
307
+
308
+ - Fixed save on new documents to return true instead
309
+ of the document itself.
310
+
311
+ === 0.10.6
312
+ - Fixed bug when trying to set empty strings on number
313
+ fields. (TypeError: can't convert Fixnum into String)
314
+
315
+ - Document.delete_all now drops the collection if
316
+ conditions are empty or nil.
317
+
318
+ === 0.10.5
319
+
320
+ - Documents that are embedded not properly respond to
321
+ Document#destroy and Document#delete.
322
+
323
+ - Documents can now be saved sans validation with
324
+ Document#save(false)
325
+
326
+ === 0.10.4
327
+
328
+ - Documents no longer inherit from Mongoid::Document.
329
+ Please include Mongoid::Document in all your models now.
330
+
331
+ - Config module added, you can now set one option:
332
+ Mongoid.raise_not_found_error = (true|false)
333
+
334
+ - When set to false, a Mongoid::Errors::DocumentNotFound
335
+ will NOT get thrown when performing a Document.find(id)
336
+ that does not return a document from the database.
337
+ This defaults to true.
338
+
339
+ - Mongoid::Document.collection_name macro added. You can
340
+ now set the name of the database collection to persist to.
341
+
342
+ - Mongoid::Criteria#select becomes Mongoid::Criteria#only
data/README.rdoc CHANGED
@@ -8,13 +8,20 @@ Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
8
8
 
9
9
  * {Mongoid on Pivotal Tracker}[http://www.pivotaltracker.com/projects/27482]
10
10
  * {Mongoid Google Group}[http://groups.google.com/group/mongoid]
11
- * {Mongoid on CI Joe}[http://ci.mongoid.org/]
11
+ * {Mongoid on CI Joe}[http://mongoid.org:4444/]
12
12
  * {Mongoid Website and Documentation}[http://mongoid.org]
13
13
 
14
14
  == Compatibility
15
15
 
16
16
  Mongoid is developed against Ruby 1.8.6, 1.8.7, 1.9.1, 1.9.2
17
17
 
18
+ Note API changes will be frequent until 1.0, releases will be
19
+ frequent, and backwards compatibility will not be supported. Do not
20
+ expect the gem to be of full production quality until that
21
+ point. However, once 1.0 is released I will be providing backwards
22
+ compatibility through each minor version upgrade, as well as detailed
23
+ release notes and documentation with each release.
24
+
18
25
  = Documentation
19
26
 
20
27
  Please see the new Mongoid website for up-to-date documentation:
data/Rakefile CHANGED
@@ -14,9 +14,8 @@ begin
14
14
 
15
15
  gem.add_dependency("activemodel", ">= 3.0.pre")
16
16
  gem.add_dependency("will_paginate", ">= 3.0.pre")
17
- gem.add_dependency("mongo", ">= 0.19.1")
18
-
19
- gem.add_development_dependency("rspec", ">= 1.3.0")
17
+ gem.add_dependency("mongo", ">= 0.18.2")
18
+ gem.add_development_dependency("rspec", ">= 1.2.9")
20
19
  gem.add_development_dependency("mocha", ">= 0.9.8")
21
20
  end
22
21
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta1
1
+ 2.0.0.pre
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
3
  module Associations #:nodoc:
4
- class EmbeddedIn #:nodoc:
4
+ class BelongsTo #:nodoc:
5
5
  include Proxy
6
6
 
7
7
  # Creates the new association by setting the internal
@@ -43,16 +43,16 @@ module Mongoid #:nodoc:
43
43
 
44
44
  # Returns the macro used to create the association.
45
45
  def macro
46
- :embedded_in
46
+ :belongs_to
47
47
  end
48
48
 
49
49
  # Perform an update of the relationship of the parent and child. This
50
50
  # is initialized by setting a parent object as the association on the
51
- # +Document+. Will properly set an embeds_one or an embeds_many.
51
+ # +Document+. Will properly set a has_one or a has_many.
52
52
  #
53
53
  # Returns:
54
54
  #
55
- # A new +EmbeddedIn+ association proxy.
55
+ # A new +BelongsTo+ association proxy.
56
56
  def update(target, child, options)
57
57
  child.parentize(target, options.inverse_of)
58
58
  child.notify
@@ -41,16 +41,19 @@ module Mongoid #:nodoc:
41
41
  #
42
42
  # Options:
43
43
  #
44
- # target: The target(parent) object
45
- # document: The +Document+ to update.
44
+ # related: The related object
45
+ # parent: The parent +Document+ to update.
46
46
  # options: The association +Options+
47
47
  #
48
48
  # Example:
49
49
  #
50
- # <tt>BelongsToRelated.update(person, game, options)</tt>
51
- def update(target, document, options)
52
- document.send("#{options.foreign_key}=", target ? target.id : nil)
53
- instantiate(document, options, target)
50
+ # <tt>BelongsToRelated.update(game, person, options)</tt>
51
+ def update(target, parent, options)
52
+ if target
53
+ parent.send("#{options.foreign_key}=", target.id)
54
+ return instantiate(parent, options, target)
55
+ end
56
+ target
54
57
  end
55
58
  end
56
59
 
@@ -1,18 +1,18 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
3
  module Associations #:nodoc:
4
- class EmbedsMany
4
+ class HasMany
5
5
  include Proxy
6
6
 
7
7
  attr_accessor :association_name, :klass
8
8
 
9
9
  # Appends the object to the +Array+, setting its parent in
10
10
  # the process.
11
- def <<(*documents)
12
- documents.flatten.each do |doc|
13
- doc.parentize(@parent, @association_name)
14
- @target << doc
15
- doc.notify
11
+ def <<(*objects)
12
+ objects.flatten.each do |object|
13
+ object.parentize(@parent, @association_name)
14
+ @target << object
15
+ object.notify
16
16
  end
17
17
  end
18
18
 
@@ -22,8 +22,9 @@ module Mongoid #:nodoc:
22
22
  # Clears the association, and notifies the parents of the removal.
23
23
  def clear
24
24
  unless @target.empty?
25
- document = @target.first
26
- document.notify_observers(document, true)
25
+ object = @target.first
26
+ object.changed(true)
27
+ object.notify_observers(object, true)
27
28
  @target.clear
28
29
  end
29
30
  end
@@ -36,11 +37,11 @@ module Mongoid #:nodoc:
36
37
  #
37
38
  # The newly created Document.
38
39
  def build(attrs = {}, type = nil)
39
- document = type ? type.instantiate : @klass.instantiate
40
- document.parentize(@parent, @association_name)
41
- document.write_attributes(attrs)
42
- @target << document
43
- document
40
+ object = type ? type.instantiate : @klass.instantiate
41
+ object.parentize(@parent, @association_name)
42
+ object.write_attributes(attrs)
43
+ @target << object
44
+ object
44
45
  end
45
46
 
46
47
  # Creates a new Document and adds it to the association collection. The
@@ -50,26 +51,11 @@ module Mongoid #:nodoc:
50
51
  #
51
52
  # Returns:
52
53
  #
53
- # The newly created Document.
54
+ # Rhe newly created Document.
54
55
  def create(attrs = {}, type = nil)
55
56
  object = build(attrs, type)
56
- object.run_callbacks(:create) { object.save }; object
57
- end
58
-
59
- # Creates a new Document and adds it to the association collection. The
60
- # document created will be of the same class as the others in the
61
- # association, and the attributes will be passed into the constructor and
62
- # the new object will then be saved. If validation fails an error will
63
- # get raised.
64
- #
65
- # Returns:
66
- #
67
- # The newly created Document.
68
- def create!(attrs = {}, type = nil)
69
- document = create(attrs, type)
70
- errors = document.errors
71
- raise Errors::Validations.new(errors) unless errors.empty?
72
- document
57
+ object.save
58
+ object
73
59
  end
74
60
 
75
61
  # Finds a document in this association.
@@ -163,7 +149,7 @@ module Mongoid #:nodoc:
163
149
 
164
150
  class << self
165
151
 
166
- # Preferred method of creating a new +EmbedsMany+ association. It will
152
+ # Preferred method of creating a new +HasMany+ association. It will
167
153
  # delegate to new.
168
154
  #
169
155
  # Options:
@@ -176,7 +162,7 @@ module Mongoid #:nodoc:
176
162
 
177
163
  # Returns the macro used to create the association.
178
164
  def macro
179
- :embeds_many
165
+ :has_many
180
166
  end
181
167
 
182
168
  # Perform an update of the relationship of the parent and child. This
@@ -188,6 +174,7 @@ module Mongoid #:nodoc:
188
174
  instantiate(parent, options)
189
175
  end
190
176
  end
177
+
191
178
  end
192
179
  end
193
180
  end
@@ -7,7 +7,6 @@ module Mongoid #:nodoc:
7
7
  # Appends the object to the +Array+, setting its parent in
8
8
  # the process.
9
9
  def <<(*objects)
10
- load_target
11
10
  objects.flatten.each do |object|
12
11
  object.send("#{@foreign_key}=", @parent.id)
13
12
  @target << object
@@ -21,7 +20,6 @@ module Mongoid #:nodoc:
21
20
  #
22
21
  # Returns the newly created object.
23
22
  def build(attributes = {})
24
- load_target
25
23
  name = @parent.class.to_s.underscore
26
24
  object = @klass.instantiate(attributes.merge(name => @parent))
27
25
  @target << object
@@ -41,7 +39,8 @@ module Mongoid #:nodoc:
41
39
  # Returns the newly created object.
42
40
  def create(attributes)
43
41
  object = build(attributes)
44
- object.run_callbacks(:create) { object.save }; object
42
+ object.save
43
+ object
45
44
  end
46
45
 
47
46
  # Finds a document in this association.
@@ -60,39 +59,16 @@ module Mongoid #:nodoc:
60
59
  # options: The association +Options+.
61
60
  def initialize(document, options, target = nil)
62
61
  @parent, @klass = document, options.klass
63
- @foreign_key = options.foreign_key
64
- @base = lambda { @klass.all(:conditions => { @foreign_key => document.id }) }
65
- @target = target || @base.call
62
+ @foreign_key = document.class.to_s.foreign_key
63
+ @target = target || @klass.all(:conditions => { @foreign_key => document.id })
66
64
  extends(options)
67
65
  end
68
66
 
69
- # Override the default behavior to allow the criteria to get reset on
70
- # each call into the association.
71
- #
72
- # Example:
73
- #
74
- # person.posts.where(:title => "New")
75
- # person.posts # resets the criteria
76
- #
77
- # Returns:
78
- #
79
- # A Criteria object or Array.
80
- def method_missing(name, *args, &block)
81
- @target = @base.call unless @target.is_a?(Array)
82
- @target.send(name, *args, &block)
83
- end
84
-
85
67
  # Delegates to <<
86
68
  def push(*objects)
87
69
  self << objects
88
70
  end
89
71
 
90
- protected
91
- # Load the target entries if the document is new.
92
- def load_target
93
- @target = @target.entries if @parent.new_record?
94
- end
95
-
96
72
  class << self
97
73
  # Preferred method for creating the new +HasManyRelated+ association.
98
74
  #