mongoid 2.0.0.beta.5 → 2.0.0.beta.7

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 (43) hide show
  1. data/lib/mongoid.rb +10 -2
  2. data/lib/mongoid/associations.rb +82 -58
  3. data/lib/mongoid/associations/embeds_one.rb +6 -6
  4. data/lib/mongoid/associations/foreign_key.rb +35 -0
  5. data/lib/mongoid/associations/meta_data.rb +9 -0
  6. data/lib/mongoid/associations/options.rb +1 -1
  7. data/lib/mongoid/associations/proxy.rb +9 -0
  8. data/lib/mongoid/associations/{belongs_to_related.rb → referenced_in.rb} +6 -5
  9. data/lib/mongoid/associations/{has_many_related.rb → references_many.rb} +69 -26
  10. data/lib/mongoid/associations/references_many_as_array.rb +78 -0
  11. data/lib/mongoid/associations/{has_one_related.rb → references_one.rb} +16 -2
  12. data/lib/mongoid/atomicity.rb +42 -0
  13. data/lib/mongoid/attributes.rb +148 -146
  14. data/lib/mongoid/callbacks.rb +5 -1
  15. data/lib/mongoid/collections.rb +31 -1
  16. data/lib/mongoid/components.rb +4 -1
  17. data/lib/mongoid/config.rb +2 -1
  18. data/lib/mongoid/criteria.rb +9 -0
  19. data/lib/mongoid/dirty.rb +211 -212
  20. data/lib/mongoid/document.rb +126 -185
  21. data/lib/mongoid/extensions.rb +5 -0
  22. data/lib/mongoid/extensions/array/conversions.rb +3 -5
  23. data/lib/mongoid/extensions/hash/conversions.rb +19 -22
  24. data/lib/mongoid/extensions/object/conversions.rb +3 -5
  25. data/lib/mongoid/extensions/set/conversions.rb +20 -0
  26. data/lib/mongoid/field.rb +11 -0
  27. data/lib/mongoid/finders.rb +8 -0
  28. data/lib/mongoid/hierarchy.rb +76 -0
  29. data/lib/mongoid/identity.rb +37 -29
  30. data/lib/mongoid/paths.rb +46 -47
  31. data/lib/mongoid/persistence.rb +111 -113
  32. data/lib/mongoid/persistence/insert.rb +1 -1
  33. data/lib/mongoid/persistence/insert_embedded.rb +10 -5
  34. data/lib/mongoid/persistence/remove_all.rb +3 -2
  35. data/lib/mongoid/persistence/update.rb +8 -3
  36. data/lib/mongoid/railtie.rb +3 -0
  37. data/lib/mongoid/railties/database.rake +33 -18
  38. data/lib/mongoid/timestamps.rb +9 -12
  39. data/lib/mongoid/validations/uniqueness.rb +16 -4
  40. data/lib/mongoid/version.rb +1 -1
  41. data/lib/mongoid/versioning.rb +10 -11
  42. data/lib/rails/generators/mongoid/config/config_generator.rb +0 -16
  43. metadata +64 -24
data/lib/mongoid.rb CHANGED
@@ -21,8 +21,9 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  require "rubygems"
23
23
 
24
- gem "activemodel", "3.0.0.beta3"
25
- gem "will_paginate", "3.0.pre"
24
+ gem "activemodel", "~>3.0.0.beta"
25
+ gem "tzinfo", "~>0.3.22"
26
+ gem "will_paginate", "~>3.0.pre"
26
27
  gem "mongo", "~>1.0.1"
27
28
  gem "bson", "~>1.0.1"
28
29
 
@@ -48,6 +49,7 @@ require "will_paginate/collection"
48
49
  require "mongo"
49
50
  require "mongoid/observable"
50
51
  require "mongoid/associations"
52
+ require "mongoid/atomicity"
51
53
  require "mongoid/attributes"
52
54
  require "mongoid/callbacks"
53
55
  require "mongoid/collection"
@@ -65,6 +67,7 @@ require "mongoid/factory"
65
67
  require "mongoid/field"
66
68
  require "mongoid/fields"
67
69
  require "mongoid/finders"
70
+ require "mongoid/hierarchy"
68
71
  require "mongoid/identity"
69
72
  require "mongoid/indexes"
70
73
  require "mongoid/javascript"
@@ -81,6 +84,11 @@ require "mongoid/versioning"
81
84
  require "mongoid/components"
82
85
  require "mongoid/document"
83
86
 
87
+ # add railtie
88
+ if defined?(Rails)
89
+ require "mongoid/railtie"
90
+ end
91
+
84
92
  module Mongoid #:nodoc
85
93
 
86
94
  MONGODB_VERSION = "1.4.0"
@@ -1,11 +1,13 @@
1
1
  # encoding: utf-8
2
2
  require "mongoid/associations/proxy"
3
- require "mongoid/associations/belongs_to_related"
4
3
  require "mongoid/associations/embedded_in"
5
4
  require "mongoid/associations/embeds_many"
6
5
  require "mongoid/associations/embeds_one"
7
- require "mongoid/associations/has_many_related"
8
- require "mongoid/associations/has_one_related"
6
+ require "mongoid/associations/foreign_key"
7
+ require "mongoid/associations/references_many"
8
+ require "mongoid/associations/references_many_as_array"
9
+ require "mongoid/associations/references_one"
10
+ require "mongoid/associations/referenced_in"
9
11
  require "mongoid/associations/options"
10
12
  require "mongoid/associations/meta_data"
11
13
 
@@ -13,6 +15,8 @@ module Mongoid # :nodoc:
13
15
  module Associations #:nodoc:
14
16
  extend ActiveSupport::Concern
15
17
  included do
18
+ include ForeignKey
19
+
16
20
  cattr_accessor :embedded
17
21
  self.embedded = false
18
22
 
@@ -22,57 +26,44 @@ module Mongoid # :nodoc:
22
26
  delegate :embedded, :embedded?, :to => "self.class"
23
27
  end
24
28
 
25
- module InstanceMethods
26
- # Returns the associations for the +Document+.
27
- def associations
28
- self.class.associations
29
- end
29
+ # Returns the associations for the +Document+.
30
+ def associations
31
+ self.class.associations
32
+ end
30
33
 
31
- # are we in an embeds_many?
32
- def embedded_many?
33
- embedded? and _parent.associations[association_name].association == EmbedsMany
34
- end
34
+ # are we in an embeds_many?
35
+ def embedded_many?
36
+ embedded? && _parent.associations[association_name].association == EmbedsMany
37
+ end
35
38
 
36
- # Update all the dirty child documents after an update.
37
- def update_embedded(name)
38
- association = send(name)
39
- association.to_a.each { |doc| doc.save if doc.changed? || doc.new_record? } unless association.blank?
40
- end
39
+ # are we in an embeds_one?
40
+ def embedded_one?
41
+ embedded? && !embedded_many?
42
+ end
41
43
 
42
- # Update the one-to-one relational association for the name.
43
- def update_association(name)
44
- association = send(name)
45
- association.save if new_record? && !association.nil?
46
- end
44
+ # Update the one-to-one relational association for the name.
45
+ def update_association(name)
46
+ association = send(name)
47
+ association.save if new_record? && !association.nil?
48
+ end
47
49
 
48
- # Updates all the one-to-many relational associations for the name.
49
- def update_associations(name)
50
- send(name).each { |doc| doc.save } if new_record?
51
- end
50
+ # Updates all the one-to-many relational associations for the name.
51
+ def update_associations(name)
52
+ send(name).each { |doc| doc.save } if new_record?
52
53
  end
53
54
 
54
- module ClassMethods
55
- # Adds a relational association from the child Document to a Document in
56
- # another database or collection.
57
- #
58
- # Options:
59
- #
60
- # name: A +Symbol+ that is the related class name.
61
- #
62
- # Example:
63
- #
64
- # class Game
65
- # include Mongoid::Document
66
- # belongs_to_related :person
67
- # end
68
- #
69
- def belongs_to_related(name, options = {}, &block)
70
- opts = optionize(name, options, fk(name, options), &block)
71
- associate(Associations::BelongsToRelated, opts)
72
- field(opts.foreign_key, :type => Mongoid.use_object_ids ? BSON::ObjectID : String)
73
- index(opts.foreign_key) unless embedded?
55
+ def update_foreign_keys
56
+ associations.each do |name, association|
57
+ next unless association.macro == :referenced_in
58
+ foreign_key = association.options.foreign_key
59
+ if send(foreign_key).nil?
60
+ target = send(name)
61
+ send("#{foreign_key}=", target ? target.id : nil)
62
+ end
74
63
  end
64
+ end
75
65
 
66
+ module ClassMethods
76
67
  # Gets whether or not the document is embedded.
77
68
  #
78
69
  # Example:
@@ -135,7 +126,6 @@ module Mongoid # :nodoc:
135
126
  # end
136
127
  def embeds_many(name, options = {}, &block)
137
128
  associate(Associations::EmbedsMany, optionize(name, options, nil, &block))
138
- set_callback(:update, :after) { |document| document.update_embedded(name) } unless name == :versions
139
129
  end
140
130
 
141
131
  alias :embed_many :embeds_many
@@ -147,7 +137,7 @@ module Mongoid # :nodoc:
147
137
  # Options:
148
138
  #
149
139
  # name: A +Symbol+ that is the plural child class name.
150
- #
140
+ #
151
141
  # Example:
152
142
  #
153
143
  # class Person
@@ -165,11 +155,34 @@ module Mongoid # :nodoc:
165
155
  associate(type, opts)
166
156
  add_builder(type, opts)
167
157
  add_creator(type, opts)
168
- set_callback(:update, :after) { |document| document.update_embedded(name) }
169
158
  end
170
159
 
171
160
  alias :embed_one :embeds_one
172
161
 
162
+ # Adds a relational association from the child Document to a Document in
163
+ # another database or collection.
164
+ #
165
+ # Options:
166
+ #
167
+ # name: A +Symbol+ that is the related class name.
168
+ #
169
+ # Example:
170
+ #
171
+ # class Game
172
+ # include Mongoid::Document
173
+ # referenced_in :person
174
+ # end
175
+ #
176
+ def referenced_in(name, options = {}, &block)
177
+ opts = optionize(name, options, constraint(name, options, :in), &block)
178
+ associate(Associations::ReferencedIn, opts)
179
+ field(opts.foreign_key, :type => Mongoid.use_object_ids ? BSON::ObjectID : String)
180
+ index(opts.foreign_key) unless embedded?
181
+ set_callback(:save, :before) { |document| document.update_foreign_keys }
182
+ end
183
+
184
+ alias :belongs_to_related :referenced_in
185
+
173
186
  # Adds a relational association from the Document to many Documents in
174
187
  # another database or collection.
175
188
  #
@@ -181,16 +194,18 @@ module Mongoid # :nodoc:
181
194
  #
182
195
  # class Person
183
196
  # include Mongoid::Document
184
- # has_many_related :posts
197
+ # references_many :posts
185
198
  # end
186
199
  #
187
- def has_many_related(name, options = {}, &block)
188
- associate(Associations::HasManyRelated, optionize(name, options, fk(self.name, options), &block))
200
+ def references_many(name, options = {}, &block)
201
+ reference_many(name, options, &block)
189
202
  set_callback :save, :before do |document|
190
203
  document.update_associations(name)
191
204
  end
192
205
  end
193
206
 
207
+ alias :has_many_related :references_many
208
+
194
209
  # Adds a relational association from the Document to one Document in
195
210
  # another database or collection.
196
211
  #
@@ -202,15 +217,18 @@ module Mongoid # :nodoc:
202
217
  #
203
218
  # class Person
204
219
  # include Mongoid::Document
205
- # has_one_related :game
220
+ # references_one :game
206
221
  # end
207
- def has_one_related(name, options = {}, &block)
208
- associate(Associations::HasOneRelated, optionize(name, options, fk(self.name, options), &block))
222
+ def references_one(name, options = {}, &block)
223
+ opts = optionize(name, options, constraint(name, options, :one), &block)
224
+ associate(Associations::ReferencesOne, opts)
209
225
  set_callback :save, :before do |document|
210
226
  document.update_association(name)
211
227
  end
212
228
  end
213
229
 
230
+ alias :has_one_related :references_one
231
+
214
232
  # Returns the macro associated with the supplied association name. This
215
233
  # will return embeds_on, embeds_many, embedded_in or nil.
216
234
  #
@@ -273,9 +291,15 @@ module Mongoid # :nodoc:
273
291
  )
274
292
  end
275
293
 
276
- # Find the foreign key.
277
- def fk(name, options)
278
- options[:foreign_key] || name.to_s.foreign_key
294
+ def reference_many(name, options, &block)
295
+ if (options[:stored_as] == :array)
296
+ opts = optionize(name, options, constraint(name, options, :many_as_array), &block)
297
+ field "#{name.to_s.singularize}_ids", :type => Array, :default => []
298
+ associate(Associations::ReferencesManyAsArray, opts)
299
+ else
300
+ opts = optionize(name, options, constraint(name, options, :many), &block)
301
+ associate(Associations::ReferencesMany, opts)
302
+ end
279
303
  end
280
304
  end
281
305
  end
@@ -26,9 +26,9 @@ module Mongoid #:nodoc:
26
26
  # Returns:
27
27
  #
28
28
  # A new +HashOne+ association proxy.
29
- def initialize(document, attrs, options)
29
+ def initialize(document, attrs, options, target = nil)
30
30
  @parent, @options = document, options
31
- @target = attrs.assimilate(@parent, @options, attrs.klass)
31
+ @target = target ? target : attrs.assimilate(@parent, @options, attrs.klass)
32
32
  extends(options)
33
33
  end
34
34
 
@@ -58,10 +58,10 @@ module Mongoid #:nodoc:
58
58
  # Returns:
59
59
  #
60
60
  # A new +EmbedsOne+ association proxy.
61
- def instantiate(document, options)
61
+ def instantiate(document, options, target = nil)
62
62
  attributes = document.raw_attributes[options.name]
63
- return nil if attributes.blank?
64
- new(document, attributes, options)
63
+ return nil if attributes.blank? && target.nil?
64
+ new(document, attributes, options, target)
65
65
  end
66
66
 
67
67
  # Returns the macro used to create the association.
@@ -87,7 +87,7 @@ module Mongoid #:nodoc:
87
87
  # A new +EmbedsOne+ association proxy.
88
88
  def update(child, parent, options)
89
89
  child.assimilate(parent, options)
90
- instantiate(parent, options)
90
+ instantiate(parent, options, child.is_a?(Hash) ? nil : child)
91
91
  end
92
92
  end
93
93
  end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Associations #:nodoc:
4
+ module ForeignKey #:nodoc:
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods #:nodoc:
8
+ # Determine the value for the foreign key constriant field in the
9
+ # database, based on the type of association or if the actual value was
10
+ # supplied as an option.
11
+ #
12
+ # Example:
13
+ #
14
+ # <tt>contraint(:posts, {}, :references_one)</tt>
15
+ #
16
+ # Returns
17
+ #
18
+ # A +String+ for the foreign key field.
19
+ def constraint(name, options, association)
20
+ key = options[:foreign_key]
21
+
22
+ # Always return the supplied foreign_key option if it was supplied -
23
+ # the user should always be ble to override.
24
+ return key.to_s if key
25
+
26
+ case association
27
+ when :one, :many then self.name.foreign_key
28
+ when :many_as_array then "#{name.to_s.singularize}_ids"
29
+ else name.to_s.foreign_key
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -13,6 +13,15 @@ module Mongoid #:nodoc:
13
13
  define_method(name) { |*args| @options.send(name) }
14
14
  end
15
15
 
16
+ # Return true if this meta data is for an embedded association.
17
+ #
18
+ # Example:
19
+ #
20
+ # <tt>metadata.embedded?</tt>
21
+ def embedded?
22
+ [ EmbedsOne, EmbedsMany ].include?(association)
23
+ end
24
+
16
25
  # Create the new associations MetaData object, which holds the type of
17
26
  # the association and its options, with convenience methods for getting
18
27
  # that information.
@@ -52,7 +52,7 @@ module Mongoid #:nodoc:
52
52
  @attributes[:polymorphic] == true
53
53
  end
54
54
 
55
- # Used with has_many_related to save as array of ids.
55
+ # Used with references_many to save as array of ids.
56
56
  def stored_as
57
57
  @attributes[:stored_as]
58
58
  end
@@ -19,6 +19,15 @@ module Mongoid #:nodoc
19
19
  def extends(options)
20
20
  extend Module.new(&options.extension) if options.extension?
21
21
  end
22
+
23
+ # Sets up the parent, klass, foreign_key, options
24
+ def setup(document, options)
25
+ @parent = document
26
+ @klass = options.klass
27
+ @options = options
28
+ @foreign_key = options.foreign_key
29
+ extends(options)
30
+ end
22
31
  end
23
32
  end
24
33
  end
@@ -2,7 +2,7 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Associations #:nodoc:
4
4
  # Represents a relational association to a "parent" object.
5
- class BelongsToRelated < Proxy
5
+ class ReferencedIn < Proxy
6
6
 
7
7
  # Initializing a related association only requires looking up the object
8
8
  # by its id.
@@ -18,7 +18,7 @@ module Mongoid #:nodoc:
18
18
  end
19
19
 
20
20
  class << self
21
- # Instantiate a new +BelongsToRelated+ or return nil if the foreign key is
21
+ # Instantiate a new +ReferencedIn+ or return nil if the foreign key is
22
22
  # nil. It is preferrable to use this method over the traditional call
23
23
  # to new.
24
24
  #
@@ -28,12 +28,13 @@ module Mongoid #:nodoc:
28
28
  # options: The association +Options+.
29
29
  def instantiate(document, options, target = nil)
30
30
  foreign_key = document.send(options.foreign_key)
31
- foreign_key.blank? ? nil : new(document, foreign_key, options, target)
31
+ return nil if foreign_key.blank? && target.nil?
32
+ new(document, foreign_key, options, target)
32
33
  end
33
34
 
34
35
  # Returns the macro used to create the association.
35
36
  def macro
36
- :belongs_to_related
37
+ :referenced_in
37
38
  end
38
39
 
39
40
  # Perform an update of the relationship of the parent and child. This
@@ -47,7 +48,7 @@ module Mongoid #:nodoc:
47
48
  #
48
49
  # Example:
49
50
  #
50
- # <tt>BelongsToRelated.update(person, game, options)</tt>
51
+ # <tt>ReferencedIn.update(person, game, options)</tt>
51
52
  def update(target, document, options)
52
53
  document.send("#{options.foreign_key}=", target ? target.id : nil)
53
54
  instantiate(document, options, target)
@@ -3,7 +3,7 @@ module Mongoid #:nodoc:
3
3
  module Associations #:nodoc:
4
4
  # Represents an relational one-to-many association with an object in a
5
5
  # separate collection or database.
6
- class HasManyRelated < Proxy
6
+ class ReferencesMany < Proxy
7
7
 
8
8
  # Appends the object to the +Array+, setting its parent in
9
9
  # the process.
@@ -16,24 +16,22 @@ module Mongoid #:nodoc:
16
16
  end
17
17
  end
18
18
 
19
+ alias :concat :<<
20
+ alias :push :<<
21
+
19
22
  # Builds a new Document and adds it to the association collection. The
20
23
  # document created will be of the same class as the others in the
21
24
  # association, and the attributes will be passed into the constructor.
22
25
  #
23
26
  # Returns the newly created object.
24
- def build(attributes = {})
27
+ def build(attributes = nil)
25
28
  load_target
26
29
  name = @parent.class.to_s.underscore
27
- object = @klass.instantiate(attributes.merge(name => @parent))
30
+ object = @klass.instantiate((attributes || {}).merge(name => @parent))
28
31
  @target << object
29
32
  object
30
33
  end
31
34
 
32
- # Delegates to <<
33
- def concat(*objects)
34
- self << objects
35
- end
36
-
37
35
  # Creates a new Document and adds it to the association collection. The
38
36
  # document created will be of the same class as the others in the
39
37
  # association, and the attributes will be passed into the constructor and
@@ -80,9 +78,10 @@ module Mongoid #:nodoc:
80
78
 
81
79
  # Finds a document in this association.
82
80
  # If an id is passed, will return the document for that id.
83
- def find(*args)
84
- args[1][:conditions].merge!(@foreign_key.to_sym => @parent.id) if args.size > 1
85
- @klass.find(*args)
81
+ def find(id_or_type, options = {})
82
+ return self.id_criteria(id_or_type) unless id_or_type.is_a?(Symbol)
83
+ options[:conditions] = (options[:conditions] || {}).merge(@foreign_key.to_sym => @parent.id)
84
+ @klass.find(id_or_type, options)
86
85
  end
87
86
 
88
87
  # Initializing a related association only requires looking up the objects
@@ -93,11 +92,8 @@ module Mongoid #:nodoc:
93
92
  # document: The +Document+ that contains the relationship.
94
93
  # options: The association +Options+.
95
94
  def initialize(document, options, target = nil)
96
- @parent, @klass, @options = document, options.klass, options
97
- @foreign_key = options.foreign_key
98
- @base = lambda { @klass.all(:conditions => { @foreign_key => document.id }) }
99
- @target = target || @base.call
100
- extends(options)
95
+ setup(document, options)
96
+ @target = target || query.call
101
97
  end
102
98
 
103
99
  # Override the default behavior to allow the criteria to get reset on
@@ -112,21 +108,60 @@ module Mongoid #:nodoc:
112
108
  #
113
109
  # A Criteria object or Array.
114
110
  def method_missing(name, *args, &block)
115
- @target = @base.call unless @target.is_a?(Array)
111
+ @target = query.call unless @target.is_a?(Array)
116
112
  @target.send(name, *args, &block)
117
113
  end
118
114
 
119
- # Delegates to <<
120
- def push(*objects)
121
- self << objects
115
+ # Used for setting associations via a nested attributes setter from the
116
+ # parent +Document+.
117
+ #
118
+ # Options:
119
+ #
120
+ # attributes: A +Hash+ of integer keys and +Hash+ values.
121
+ #
122
+ # Returns:
123
+ #
124
+ # The newly build target Document.
125
+ def nested_build(attributes, options = {})
126
+ attributes.each do |index, attrs|
127
+ begin
128
+ document = find(index.to_i)
129
+ if options && options[:allow_destroy] && attrs['_destroy']
130
+ @target.delete(document)
131
+ document.destroy
132
+ else
133
+ document.write_attributes(attrs)
134
+ end
135
+ rescue Errors::DocumentNotFound
136
+ build(attrs)
137
+ end
138
+ end
122
139
  end
123
140
 
124
141
  protected
125
- # Load the target entries if the document is new.
142
+ # Load the target entries if the parent document is new.
126
143
  def load_target
127
144
  @target = @target.entries if @parent.new_record?
128
145
  end
129
146
 
147
+ # The default query used for retrieving the documents from the database.
148
+ # In this case we use the common API between Mongoid, ActiveRecord, and
149
+ # DataMapper so we can do one-to-many relationships with data in other
150
+ # databases.
151
+ #
152
+ # Example:
153
+ #
154
+ # <tt>association.query</tt>
155
+ #
156
+ # Returns:
157
+ #
158
+ # A +Criteria+ if a Mongoid association.
159
+ # An +Array+ of objects if an ActiveRecord association
160
+ # A +Collection+ if a DataMapper association.
161
+ def query
162
+ @query ||= lambda { @klass.all(:conditions => { @foreign_key => @parent.id }) }
163
+ end
164
+
130
165
  # Remove the objects based on conditions.
131
166
  def remove(method, conditions)
132
167
  selector = { @foreign_key => @parent.id }.merge(conditions || {})
@@ -134,13 +169,22 @@ module Mongoid #:nodoc:
134
169
  reset; removed
135
170
  end
136
171
 
137
- # Reset the memoized association on the parent.
172
+ # Reset the memoized association on the parent. This will execute the
173
+ # database query again.
174
+ #
175
+ # Example:
176
+ #
177
+ # <tt>association.reset</tt>
178
+ #
179
+ # Returns:
180
+ #
181
+ # See #query rdoc for return values.
138
182
  def reset
139
- @parent.send(:reset, @options.name) { @base.call }
183
+ @parent.send(:reset, @options.name) { query.call }
140
184
  end
141
185
 
142
186
  class << self
143
- # Preferred method for creating the new +HasManyRelated+ association.
187
+ # Preferred method for creating the new +ReferencesMany+ association.
144
188
  #
145
189
  # Options:
146
190
  #
@@ -152,7 +196,7 @@ module Mongoid #:nodoc:
152
196
 
153
197
  # Returns the macro used to create the association.
154
198
  def macro
155
- :has_many_related
199
+ :references_many
156
200
  end
157
201
 
158
202
  # Perform an update of the relationship of the parent and child. This
@@ -173,7 +217,6 @@ module Mongoid #:nodoc:
173
217
  instantiate(document, options, target)
174
218
  end
175
219
  end
176
-
177
220
  end
178
221
  end
179
222
  end