mongoid-pre 2.0.0.beta1 → 2.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
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
  #