mongoid 2.0.0.beta.20 → 2.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. data/README.rdoc +8 -0
  2. data/Rakefile +51 -0
  3. data/lib/config/locales/nl.yml +39 -0
  4. data/lib/config/locales/ro.yml +1 -1
  5. data/lib/mongoid.rb +17 -17
  6. data/lib/mongoid/atomicity.rb +54 -22
  7. data/lib/mongoid/attributes.rb +145 -125
  8. data/lib/mongoid/callbacks.rb +7 -2
  9. data/lib/mongoid/collection.rb +49 -32
  10. data/lib/mongoid/collections.rb +0 -1
  11. data/lib/mongoid/components.rb +34 -29
  12. data/lib/mongoid/config.rb +207 -193
  13. data/lib/mongoid/config/database.rb +167 -0
  14. data/lib/mongoid/contexts.rb +2 -5
  15. data/lib/mongoid/contexts/enumerable.rb +30 -4
  16. data/lib/mongoid/contexts/ids.rb +2 -2
  17. data/lib/mongoid/contexts/mongo.rb +30 -5
  18. data/lib/mongoid/copyable.rb +44 -0
  19. data/lib/mongoid/criteria.rb +110 -56
  20. data/lib/mongoid/criterion/creational.rb +34 -0
  21. data/lib/mongoid/criterion/destructive.rb +37 -0
  22. data/lib/mongoid/criterion/exclusion.rb +3 -1
  23. data/lib/mongoid/criterion/inclusion.rb +59 -64
  24. data/lib/mongoid/criterion/inspection.rb +22 -0
  25. data/lib/mongoid/criterion/optional.rb +42 -54
  26. data/lib/mongoid/criterion/selector.rb +9 -0
  27. data/lib/mongoid/default_scope.rb +28 -0
  28. data/lib/mongoid/deprecation.rb +5 -5
  29. data/lib/mongoid/dirty.rb +4 -5
  30. data/lib/mongoid/document.rb +161 -114
  31. data/lib/mongoid/extensions.rb +7 -11
  32. data/lib/mongoid/extensions/array/parentization.rb +2 -2
  33. data/lib/mongoid/extensions/date/conversions.rb +1 -1
  34. data/lib/mongoid/extensions/hash/conversions.rb +0 -23
  35. data/lib/mongoid/extensions/nil/collectionization.rb +12 -0
  36. data/lib/mongoid/extensions/object/reflections.rb +17 -0
  37. data/lib/mongoid/extensions/object/yoda.rb +27 -0
  38. data/lib/mongoid/extensions/string/conversions.rb +23 -4
  39. data/lib/mongoid/extensions/time_conversions.rb +4 -4
  40. data/lib/mongoid/field.rb +30 -19
  41. data/lib/mongoid/fields.rb +15 -5
  42. data/lib/mongoid/finders.rb +19 -11
  43. data/lib/mongoid/hierarchy.rb +34 -28
  44. data/lib/mongoid/identity.rb +62 -20
  45. data/lib/mongoid/inspection.rb +58 -0
  46. data/lib/mongoid/matchers.rb +20 -0
  47. data/lib/mongoid/multi_database.rb +11 -0
  48. data/lib/mongoid/nested_attributes.rb +41 -0
  49. data/lib/mongoid/paranoia.rb +3 -4
  50. data/lib/mongoid/paths.rb +1 -1
  51. data/lib/mongoid/persistence.rb +89 -90
  52. data/lib/mongoid/persistence/command.rb +20 -4
  53. data/lib/mongoid/persistence/insert.rb +13 -11
  54. data/lib/mongoid/persistence/insert_embedded.rb +8 -6
  55. data/lib/mongoid/persistence/remove.rb +6 -4
  56. data/lib/mongoid/persistence/remove_all.rb +6 -4
  57. data/lib/mongoid/persistence/remove_embedded.rb +8 -6
  58. data/lib/mongoid/persistence/update.rb +12 -10
  59. data/lib/mongoid/railtie.rb +2 -2
  60. data/lib/mongoid/railties/database.rake +10 -9
  61. data/lib/mongoid/relations.rb +104 -0
  62. data/lib/mongoid/relations/accessors.rb +154 -0
  63. data/lib/mongoid/relations/auto_save.rb +34 -0
  64. data/lib/mongoid/relations/binding.rb +24 -0
  65. data/lib/mongoid/relations/bindings.rb +9 -0
  66. data/lib/mongoid/relations/bindings/embedded/in.rb +77 -0
  67. data/lib/mongoid/relations/bindings/embedded/many.rb +93 -0
  68. data/lib/mongoid/relations/bindings/embedded/one.rb +65 -0
  69. data/lib/mongoid/relations/bindings/referenced/in.rb +78 -0
  70. data/lib/mongoid/relations/bindings/referenced/many.rb +93 -0
  71. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +94 -0
  72. data/lib/mongoid/relations/bindings/referenced/one.rb +63 -0
  73. data/lib/mongoid/relations/builder.rb +41 -0
  74. data/lib/mongoid/relations/builders.rb +79 -0
  75. data/lib/mongoid/relations/builders/embedded/in.rb +25 -0
  76. data/lib/mongoid/relations/builders/embedded/many.rb +32 -0
  77. data/lib/mongoid/relations/builders/embedded/one.rb +26 -0
  78. data/lib/mongoid/relations/builders/nested_attributes/many.rb +116 -0
  79. data/lib/mongoid/relations/builders/nested_attributes/one.rb +135 -0
  80. data/lib/mongoid/relations/builders/referenced/in.rb +32 -0
  81. data/lib/mongoid/relations/builders/referenced/many.rb +26 -0
  82. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +29 -0
  83. data/lib/mongoid/relations/builders/referenced/one.rb +30 -0
  84. data/lib/mongoid/relations/cascading.rb +55 -0
  85. data/lib/mongoid/relations/cascading/delete.rb +19 -0
  86. data/lib/mongoid/relations/cascading/destroy.rb +19 -0
  87. data/lib/mongoid/relations/cascading/nullify.rb +18 -0
  88. data/lib/mongoid/relations/cascading/strategy.rb +26 -0
  89. data/lib/mongoid/relations/cyclic.rb +97 -0
  90. data/lib/mongoid/relations/embedded/in.rb +172 -0
  91. data/lib/mongoid/relations/embedded/many.rb +450 -0
  92. data/lib/mongoid/relations/embedded/one.rb +169 -0
  93. data/lib/mongoid/relations/macros.rb +302 -0
  94. data/lib/mongoid/relations/many.rb +185 -0
  95. data/lib/mongoid/relations/metadata.rb +529 -0
  96. data/lib/mongoid/relations/nested_builder.rb +52 -0
  97. data/lib/mongoid/relations/one.rb +29 -0
  98. data/lib/mongoid/relations/polymorphic.rb +54 -0
  99. data/lib/mongoid/relations/proxy.rb +122 -0
  100. data/lib/mongoid/relations/referenced/in.rb +214 -0
  101. data/lib/mongoid/relations/referenced/many.rb +358 -0
  102. data/lib/mongoid/relations/referenced/many_to_many.rb +379 -0
  103. data/lib/mongoid/relations/referenced/one.rb +204 -0
  104. data/lib/mongoid/relations/reflections.rb +45 -0
  105. data/lib/mongoid/safe.rb +11 -1
  106. data/lib/mongoid/safety.rb +122 -97
  107. data/lib/mongoid/scope.rb +14 -9
  108. data/lib/mongoid/state.rb +37 -3
  109. data/lib/mongoid/timestamps.rb +11 -0
  110. data/lib/mongoid/validations.rb +42 -3
  111. data/lib/mongoid/validations/associated.rb +8 -5
  112. data/lib/mongoid/validations/uniqueness.rb +23 -2
  113. data/lib/mongoid/version.rb +1 -1
  114. data/lib/mongoid/versioning.rb +25 -16
  115. data/lib/rails/generators/mongoid/model/templates/model.rb +3 -1
  116. metadata +95 -80
  117. data/lib/mongoid/associations.rb +0 -364
  118. data/lib/mongoid/associations/embedded_in.rb +0 -74
  119. data/lib/mongoid/associations/embeds_many.rb +0 -299
  120. data/lib/mongoid/associations/embeds_one.rb +0 -111
  121. data/lib/mongoid/associations/foreign_key.rb +0 -35
  122. data/lib/mongoid/associations/meta_data.rb +0 -38
  123. data/lib/mongoid/associations/options.rb +0 -78
  124. data/lib/mongoid/associations/proxy.rb +0 -60
  125. data/lib/mongoid/associations/referenced_in.rb +0 -70
  126. data/lib/mongoid/associations/references_many.rb +0 -254
  127. data/lib/mongoid/associations/references_many_as_array.rb +0 -128
  128. data/lib/mongoid/associations/references_one.rb +0 -104
  129. data/lib/mongoid/extensions/array/accessors.rb +0 -17
  130. data/lib/mongoid/extensions/array/assimilation.rb +0 -26
  131. data/lib/mongoid/extensions/hash/accessors.rb +0 -42
  132. data/lib/mongoid/extensions/hash/assimilation.rb +0 -40
  133. data/lib/mongoid/extensions/nil/assimilation.rb +0 -17
  134. data/lib/mongoid/memoization.rb +0 -33
@@ -21,6 +21,15 @@ module Mongoid #:nodoc:
21
21
  end
22
22
  alias update merge!
23
23
 
24
+ if RUBY_VERSION < '1.9'
25
+ def inspect
26
+ ret = self.keys.inject([]) do |ret, key|
27
+ ret << "#{key.inspect}=>#{self[key].inspect}"
28
+ end
29
+ "{#{ret.sort.join(', ')}}"
30
+ end
31
+ end
32
+
24
33
  private
25
34
 
26
35
  def try_to_typecast(key, value)
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+
4
+ # This module handles functionality for creating default scopes.
5
+ module DefaultScope
6
+
7
+ # Creates a default_scope for the +Document+, similar to ActiveRecord's
8
+ # default_scope. +DefaultScopes+ are proxied +Criteria+ objects that are
9
+ # applied by default to all queries for the class.
10
+ #
11
+ # @example Create a default scope.
12
+ #
13
+ # class Person
14
+ # include Mongoid::Document
15
+ # field :active, :type => Boolean
16
+ # field :count, :type => Integer
17
+ #
18
+ # default_scope :where => { :active => true }
19
+ # end
20
+ #
21
+ # @param [ Hash ] conditions The conditions to create with.
22
+ #
23
+ # @since 2.0.0.rc.1
24
+ def default_scope(conditions = {}, &block)
25
+ self.scope_stack << criteria.fuse(Scope.new(conditions, &block).conditions.scoped)
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
- class Deprecation #:nodoc
4
- include Singleton
3
+ module Deprecation #:nodoc
4
+ extend self
5
5
 
6
6
  # Alert of a deprecation. This will delegate to the logger and call warn on
7
7
  # it.
@@ -10,12 +10,12 @@ module Mongoid #:nodoc:
10
10
  #
11
11
  # <tt>deprecation.alert("Method no longer used")</tt>
12
12
  def alert(message)
13
- @logger.warn("Deprecation: #{message}")
13
+ logger.warn("Deprecation: #{message}")
14
14
  end
15
15
 
16
16
  protected
17
- def initialize
18
- @logger = Mongoid::Logger.new
17
+ def logger
18
+ @logger ||= Mongoid::Logger.new
19
19
  end
20
20
  end
21
21
  end
@@ -46,7 +46,7 @@ module Mongoid #:nodoc:
46
46
  # The old field value.
47
47
  def attribute_was(name)
48
48
  change = modifications[name]
49
- change ? change[0] : nil
49
+ change ? change[0] : @attributes[name]
50
50
  end
51
51
 
52
52
  # Gets the names of all the fields that have changed in the document.
@@ -156,10 +156,8 @@ module Mongoid #:nodoc:
156
156
  # The old field value.
157
157
  def reset_attribute!(name)
158
158
  value = attribute_was(name)
159
- if value
160
- @attributes[name] = value
161
- modifications.delete(name)
162
- end
159
+ value ? @attributes[name] = value : @attributes.delete(name)
160
+ modifications.delete(name)
163
161
  end
164
162
 
165
163
  # Sets up the modifications hash. This occurs just after the document is
@@ -208,6 +206,7 @@ module Mongoid #:nodoc:
208
206
  #
209
207
  # All changes to the document.
210
208
  def modifications
209
+ reset_modifications unless @modifications && @accessed
211
210
  @accessed.each_pair do |field, value|
212
211
  current = @attributes[field]
213
212
  @modifications[field] = [ value, current ] if current != value
@@ -1,90 +1,99 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc:
3
+
4
+ # This is the base module for all domain objects that need to be persisted to
5
+ # the database as documents.
3
6
  module Document
4
7
  extend ActiveSupport::Concern
5
- included do
6
- include Mongoid::Components
8
+ include Mongoid::Components
9
+ include Mongoid::MultiDatabase
7
10
 
8
- attr_accessor :association_name
11
+ included do
9
12
  attr_reader :new_record
10
13
  end
11
14
 
12
- module ClassMethods #:nodoc:
13
-
14
- # Instantiate a new object, only when loaded from the database or when
15
- # the attributes have already been typecast.
16
- #
17
- # Example:
18
- #
19
- # <tt>Person.instantiate(:title => "Sir", :age => 30)</tt>
20
- def instantiate(attrs = nil, allocating = false)
21
- attributes = attrs || {}
22
- if attributes["_id"] || allocating
23
- document = allocate
24
- document.instance_variable_set(:@attributes, attributes)
25
- document.setup_modifications
26
- document
27
- else
28
- new(attrs)
29
- end
30
- end
31
-
32
- # Returns all types to query for when using this class as the base.
33
- # *subclasses* is from activesupport. Note that a bug in *subclasses*
34
- # causes the first call to only return direct children, hence
35
- # the double call and unique.
36
- def _types
37
- @_type ||= [descendants + [self]].flatten.uniq.map(&:to_s)
38
- end
15
+ # Default comparison is via the string version of the id.
16
+ #
17
+ # @example Compare two documents.
18
+ # person <=> other_person
19
+ #
20
+ # @param [ Document ] other The document to compare with.
21
+ #
22
+ # @return [ Integer ] -1, 0, 1.
23
+ def <=>(other)
24
+ id.to_s <=> other.id.to_s
39
25
  end
40
26
 
41
27
  # Performs equality checking on the document ids. For more robust
42
28
  # equality checking please override this method.
29
+ #
30
+ # @example Compare for equality.
31
+ # document == other
32
+ #
33
+ # @param [ Document, Object ] other The other object to compare with.
34
+ #
35
+ # @return [ true, false ] True if the ids are equal, false if not.
43
36
  def ==(other)
44
37
  return false unless other.is_a?(Document)
45
- id == other.id
38
+ id == other.id || equal?(other)
46
39
  end
47
40
 
48
- # Delegates to ==
49
- def eql?(comparison_object)
50
- self == (comparison_object)
41
+ # Performs class equality checking.
42
+ #
43
+ # @example Compare the classes.
44
+ # document === other
45
+ #
46
+ # @param [ Document, Object ] other The other object to compare with.
47
+ #
48
+ # @return [ true, false ] True if the classes are equal, false if not.
49
+ def ===(other)
50
+ self.class == other.class
51
+ end
52
+
53
+ # Delegates to ==. Used when needing checks in hashes.
54
+ #
55
+ # @example Perform equality checking.
56
+ # document.eql?(other)
57
+ #
58
+ # @param [ Document, Object ] other The object to check against.
59
+ #
60
+ # @return [ true, false ] True if equal, false if not.
61
+ def eql?(other)
62
+ self == (other)
51
63
  end
52
64
 
53
65
  # Delegates to id in order to allow two records of the same type and id to
54
66
  # work with something like:
55
- # [ Person.find(1),
56
- # Person.find(2),
57
- # Person.find(3) ] &
58
- # [ Person.find(1),
59
- # Person.find(4) ] # => [ Person.find(1) ]
67
+ #
68
+ # [ Person.find(1), Person.find(2), Person.find(3) ] &
69
+ # [ Person.find(1), Person.find(4) ] # => [ Person.find(1) ]
70
+ #
71
+ # @example Get the hash.
72
+ # document.hash
73
+ #
74
+ # @return [ Integer ] The hash of the document's id.
60
75
  def hash
61
76
  id.hash
62
77
  end
63
78
 
64
- # Introduces a child object into the +Document+ object graph. This will
65
- # set up the relationships between the parent and child and update the
66
- # attributes of the parent +Document+.
79
+ # Return the attributes hash with indifferent access. Used mostly for
80
+ # convenience - use +Document#raw_attributes+ where you dont care if the
81
+ # keys are all strings.
67
82
  #
68
- # Options:
83
+ # @example Get the attributes.
84
+ # person.attributes
69
85
  #
70
- # parent: The +Document+ to assimilate with.
71
- # options: The association +Options+ for the child.
72
- def assimilate(parent, options)
73
- parentize(parent, options.name); notify; self
74
- end
75
-
76
- # Return the attributes hash with indifferent access.
86
+ # @return [ HashWithIndifferentAccess ] The attributes.
77
87
  def attributes
78
88
  @attributes.with_indifferent_access
79
89
  end
80
90
 
81
- # Clone the current +Document+. This will return all attributes with the
82
- # exception of the document's id and versions.
83
- def clone
84
- self.class.instantiate(@attributes.except("_id").except("versions").dup, true)
85
- end
86
-
87
91
  # Generate an id for this +Document+.
92
+ #
93
+ # @example Create the id.
94
+ # person.identify
95
+ #
96
+ # @return [ BSON::ObjectId, String ] A newly created id.
88
97
  def identify
89
98
  Identity.new(self).create
90
99
  end
@@ -96,96 +105,134 @@ module Mongoid #:nodoc:
96
105
  # If a primary key is defined, the document's id will be set to that key,
97
106
  # otherwise it will be set to a fresh +BSON::ObjectId+ string.
98
107
  #
99
- # Options:
108
+ # @example Create a new document.
109
+ # Person.new(:title => "Sir")
110
+ #
111
+ # @param [ Hash ] attrs The attributes to set up the document with.
100
112
  #
101
- # attrs: The attributes +Hash+ to set up the document with.
113
+ # @return [ Document ] A new document.
102
114
  def initialize(attrs = nil)
103
115
  @new_record = true
104
116
  @attributes = default_attributes
105
- process(attrs)
106
- document = yield self if block_given?
107
- identify
108
- run_callbacks(:initialize) do
109
- document
117
+ process(attrs) do |document|
118
+ yield self if block_given?
119
+ identify
120
+ run_callbacks(:initialize) { document }
110
121
  end
111
122
  end
112
123
 
113
- # Returns the class name plus its attributes.
114
- def inspect
115
- attrs = fields.map { |name, field| "#{name}: #{@attributes[name].inspect}" }
116
- if Mongoid.allow_dynamic_fields
117
- dynamic_keys = @attributes.keys - fields.keys - associations.keys - ["_id", "_type"]
118
- attrs += dynamic_keys.map { |name| "#{name}: #{@attributes[name].inspect}" }
119
- end
120
- "#<#{self.class.name} _id: #{id}, #{attrs * ', '}>"
121
- end
122
-
123
- # Notify parent of an update.
124
+ # Return the attributes hash.
124
125
  #
125
- # Example:
126
+ # @example Get the untouched attributes.
127
+ # person.raw_attributes
126
128
  #
127
- # <tt>person.notify</tt>
128
- def notify
129
- _parent.update_child(self) if _parent
130
- end
131
-
132
- # Return the attributes hash.
129
+ # @return [ Hash ] This document's attributes.
133
130
  def raw_attributes
134
131
  @attributes
135
132
  end
136
133
 
137
- # Reloads the +Document+ attributes from the database.
134
+ # Reloads the +Document+ attributes from the database. If the document has
135
+ # not been saved then an error will get raised if the configuration option
136
+ # was set.
137
+ #
138
+ # @example Reload the document.
139
+ # person.reload
140
+ #
141
+ # @raise [ Errors::DocumentNotFound ] If the document was deleted.
142
+ #
143
+ # @return [ Document ] The document, reloaded.
138
144
  def reload
139
145
  reloaded = collection.find_one(:_id => id)
140
146
  if Mongoid.raise_not_found_error
141
147
  raise Errors::DocumentNotFound.new(self.class, id) if reloaded.nil?
142
148
  end
143
149
  @attributes = {}.merge(reloaded || {})
144
- self.associations.keys.each { |association_name| unmemoize(association_name) }; self
150
+ tap do
151
+ relations.keys.each do |name|
152
+ if relation_exists?(name)
153
+ remove_instance_variable("@#{name}")
154
+ end
155
+ end
156
+ end
145
157
  end
146
158
 
147
- # Remove a child document from this parent +Document+. Will reset the
148
- # memoized association and notify the parent of the change.
149
- def remove(child)
150
- name = child.association_name
151
- if @building_nested
152
- @attributes.remove(name, child.raw_attributes)
159
+ # Remove a child document from this parent. If an embeds one then set to
160
+ # nil, otherwise remove from the embeds many.
161
+ #
162
+ # This is called from the +RemoveEmbedded+ persistence command.
163
+ #
164
+ # @example Remove the child.
165
+ # document.remove_child(child)
166
+ #
167
+ # @param [ Document ] child The child (embedded) document to remove.
168
+ def remove_child(child)
169
+ name = child.metadata.name
170
+ if child.embedded_one?
171
+ remove_instance_variable("@#{name}") if instance_variable_defined?("@#{name}")
153
172
  else
154
- reset(name) do
155
- @attributes.remove(name, child.raw_attributes)
156
- @attributes[name]
157
- end
158
- notify
173
+ send(name).delete(child)
159
174
  end
160
175
  end
161
176
 
162
- # def remove_without_reset
163
- # name = child.association_name
164
- # @attributes.remove(name, child.raw_attributes)
165
- # notify
166
- # end
167
-
168
177
  # Return an array with this +Document+ only in it.
178
+ #
179
+ # @example Return the document in an array.
180
+ # document.to_a
181
+ #
182
+ # @return [ Array<Document> ] An array with the document as its only item.
169
183
  def to_a
170
184
  [ self ]
171
185
  end
172
186
 
173
- # Recieve a notify call from a child +Document+. This will either update
174
- # existing attributes on the +Document+ or clear them out for the child if
175
- # the clear boolean is provided.
187
+ # Return a hash of the entire document hierarchy from this document and
188
+ # below. Used when the attributes are needed for everything and not just
189
+ # the current document.
176
190
  #
177
- # Options:
191
+ # @example Get the full hierarchy.
192
+ # person.to_hash
178
193
  #
179
- # child: The child +Document+ that sent the notification.
180
- # clear: Will clear out the child's attributes if set to true.
181
- def update_child(child, clear = false)
182
- name = child.association_name
183
- attrs = child.instance_variable_get(:@attributes)
184
- if clear
185
- @attributes.delete(name)
186
- else
187
- # check good for array only
188
- @attributes.insert(name, attrs) unless @attributes[name] && @attributes[name].include?(attrs)
194
+ # @return [ Hash ] A hash of all attributes in the hierarchy.
195
+ def to_hash
196
+ attributes = @attributes
197
+ attributes.tap do |attrs|
198
+ relations.select { |name, meta| meta.embedded? }.each do |name, meta|
199
+ relation = send(name, false, :continue => false)
200
+ attrs[name] = relation.to_hash unless relation.blank?
201
+ end
202
+ end
203
+ end
204
+
205
+ module ClassMethods #:nodoc:
206
+
207
+ # Instantiate a new object, only when loaded from the database or when
208
+ # the attributes have already been typecast.
209
+ #
210
+ # @example Create the document.
211
+ # Person.instantiate(:title => "Sir", :age => 30)
212
+ #
213
+ # @param [ Hash ] attrs The hash of attributes to instantiate with.
214
+ #
215
+ # @return [ Document ] A new document.
216
+ def instantiate(attrs = nil)
217
+ attributes = attrs || {}
218
+ if attributes["_id"]
219
+ allocate.tap do |doc|
220
+ doc.instance_variable_set(:@attributes, attributes)
221
+ doc.setup_modifications
222
+ end
223
+ else
224
+ new(attrs)
225
+ end
226
+ end
227
+
228
+ # Returns all types to query for when using this class as the base.
229
+ #
230
+ # @example Get the types.
231
+ # document._types
232
+ #
233
+ # @return [ Array<Class> ] All subclasses of the current document.
234
+ def _types
235
+ @_type ||= [descendants + [self]].flatten.uniq.map(&:to_s)
189
236
  end
190
237
  end
191
238
  end
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require "mongoid/extensions/time_conversions"
3
- require "mongoid/extensions/array/accessors"
4
- require "mongoid/extensions/array/assimilation"
5
3
  require "mongoid/extensions/array/conversions"
6
4
  require "mongoid/extensions/array/parentization"
7
5
  require "mongoid/extensions/set/conversions"
@@ -12,14 +10,14 @@ require "mongoid/extensions/date/conversions"
12
10
  require "mongoid/extensions/datetime/conversions"
13
11
  require "mongoid/extensions/false_class/equality"
14
12
  require "mongoid/extensions/float/conversions"
15
- require "mongoid/extensions/hash/accessors"
16
- require "mongoid/extensions/hash/assimilation"
17
13
  require "mongoid/extensions/hash/conversions"
18
14
  require "mongoid/extensions/hash/criteria_helpers"
19
15
  require "mongoid/extensions/hash/scoping"
20
16
  require "mongoid/extensions/integer/conversions"
21
- require "mongoid/extensions/nil/assimilation"
17
+ require "mongoid/extensions/nil/collectionization"
22
18
  require "mongoid/extensions/object/conversions"
19
+ require "mongoid/extensions/object/reflections"
20
+ require "mongoid/extensions/object/yoda"
23
21
  require "mongoid/extensions/proc/scoping"
24
22
  require "mongoid/extensions/string/conversions"
25
23
  require "mongoid/extensions/string/inflections"
@@ -29,8 +27,6 @@ require "mongoid/extensions/true_class/equality"
29
27
  require "mongoid/extensions/object_id/conversions"
30
28
 
31
29
  class Array #:nodoc
32
- include Mongoid::Extensions::Array::Accessors
33
- include Mongoid::Extensions::Array::Assimilation
34
30
  include Mongoid::Extensions::Array::Conversions
35
31
  include Mongoid::Extensions::Array::Parentization
36
32
  end
@@ -70,8 +66,6 @@ class Float #:nodoc
70
66
  end
71
67
 
72
68
  class Hash #:nodoc
73
- include Mongoid::Extensions::Hash::Accessors
74
- include Mongoid::Extensions::Hash::Assimilation
75
69
  include Mongoid::Extensions::Hash::CriteriaHelpers
76
70
  include Mongoid::Extensions::Hash::Scoping
77
71
  include Mongoid::Extensions::Hash::Conversions
@@ -82,11 +76,13 @@ class Integer #:nodoc
82
76
  end
83
77
 
84
78
  class NilClass #:nodoc
85
- include Mongoid::Extensions::Nil::Assimilation
79
+ include Mongoid::Extensions::Nil::Collectionization
86
80
  end
87
81
 
88
82
  class Object #:nodoc:
89
83
  include Mongoid::Extensions::Object::Conversions
84
+ include Mongoid::Extensions::Object::Reflections
85
+ include Mongoid::Extensions::Object::Yoda
90
86
  end
91
87
 
92
88
  class Proc #:nodoc:
@@ -95,7 +91,7 @@ end
95
91
 
96
92
  class String #:nodoc
97
93
  include Mongoid::Extensions::String::Inflections
98
- extend Mongoid::Extensions::String::Conversions
94
+ include Mongoid::Extensions::String::Conversions
99
95
  end
100
96
 
101
97
  class Symbol #:nodoc