mongoid 2.0.2 → 2.1.0

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 (240) hide show
  1. data/README.rdoc +3 -1
  2. data/Rakefile +3 -2
  3. data/lib/config/locales/bg.yml +6 -0
  4. data/lib/config/locales/de.yml +6 -0
  5. data/lib/config/locales/en-GB.yml +48 -0
  6. data/lib/config/locales/en.yml +6 -3
  7. data/lib/config/locales/es.yml +6 -0
  8. data/lib/config/locales/fr.yml +6 -0
  9. data/lib/config/locales/hi.yml +39 -0
  10. data/lib/config/locales/hu.yml +13 -7
  11. data/lib/config/locales/id.yml +3 -0
  12. data/lib/config/locales/it.yml +7 -1
  13. data/lib/config/locales/ja.yml +4 -1
  14. data/lib/config/locales/kr.yml +9 -34
  15. data/lib/config/locales/nl.yml +6 -0
  16. data/lib/config/locales/pl.yml +6 -0
  17. data/lib/config/locales/pt-BR.yml +6 -0
  18. data/lib/config/locales/pt.yml +6 -0
  19. data/lib/config/locales/ro.yml +6 -0
  20. data/lib/config/locales/ru.yml +6 -0
  21. data/lib/config/locales/sv.yml +6 -0
  22. data/lib/config/locales/vi.yml +3 -0
  23. data/lib/config/locales/zh-CN.yml +6 -0
  24. data/lib/mongoid.rb +51 -45
  25. data/lib/mongoid/atomic.rb +145 -0
  26. data/lib/mongoid/atomic/modifiers.rb +109 -0
  27. data/lib/mongoid/atomic/paths.rb +3 -0
  28. data/lib/mongoid/atomic/paths/embedded.rb +43 -0
  29. data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
  30. data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
  31. data/lib/mongoid/atomic/paths/root.rb +40 -0
  32. data/lib/mongoid/attributes.rb +12 -23
  33. data/lib/mongoid/attributes/processing.rb +5 -5
  34. data/lib/mongoid/callbacks.rb +2 -0
  35. data/lib/mongoid/collection.rb +12 -59
  36. data/lib/mongoid/collections.rb +23 -20
  37. data/lib/mongoid/collections/master.rb +6 -4
  38. data/lib/mongoid/collections/operations.rb +1 -0
  39. data/lib/mongoid/collections/retry.rb +7 -0
  40. data/lib/mongoid/components.rb +2 -2
  41. data/lib/mongoid/config.rb +42 -55
  42. data/lib/mongoid/config/database.rb +6 -2
  43. data/lib/mongoid/config/replset_database.rb +7 -3
  44. data/lib/mongoid/contexts.rb +9 -3
  45. data/lib/mongoid/contexts/enumerable.rb +7 -3
  46. data/lib/mongoid/contexts/mongo.rb +139 -101
  47. data/lib/mongoid/criteria.rb +86 -69
  48. data/lib/mongoid/criterion/complex.rb +32 -5
  49. data/lib/mongoid/criterion/inclusion.rb +4 -2
  50. data/lib/mongoid/criterion/optional.rb +111 -86
  51. data/lib/mongoid/criterion/selector.rb +8 -4
  52. data/lib/mongoid/cursor.rb +27 -27
  53. data/lib/mongoid/dirty.rb +54 -214
  54. data/lib/mongoid/document.rb +37 -39
  55. data/lib/mongoid/errors/document_not_found.rb +3 -4
  56. data/lib/mongoid/errors/invalid_collection.rb +2 -3
  57. data/lib/mongoid/errors/invalid_database.rb +2 -3
  58. data/lib/mongoid/errors/invalid_field.rb +2 -3
  59. data/lib/mongoid/errors/invalid_options.rb +19 -7
  60. data/lib/mongoid/errors/invalid_type.rb +2 -3
  61. data/lib/mongoid/errors/mongoid_error.rb +5 -6
  62. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -3
  63. data/lib/mongoid/errors/unsupported_version.rb +2 -3
  64. data/lib/mongoid/errors/validations.rb +2 -3
  65. data/lib/mongoid/extensions.rb +8 -62
  66. data/lib/mongoid/extensions/array/deletion.rb +29 -0
  67. data/lib/mongoid/extensions/false_class/equality.rb +14 -1
  68. data/lib/mongoid/extensions/hash/criteria_helpers.rb +21 -10
  69. data/lib/mongoid/extensions/hash/scoping.rb +14 -1
  70. data/lib/mongoid/extensions/nil/collectionization.rb +12 -1
  71. data/lib/mongoid/extensions/object/reflections.rb +33 -2
  72. data/lib/mongoid/extensions/object_id/conversions.rb +2 -36
  73. data/lib/mongoid/extensions/proc/scoping.rb +14 -1
  74. data/lib/mongoid/extensions/string/conversions.rb +4 -16
  75. data/lib/mongoid/extensions/string/inflections.rb +35 -14
  76. data/lib/mongoid/extensions/symbol/inflections.rb +38 -12
  77. data/lib/mongoid/extensions/true_class/equality.rb +14 -1
  78. data/lib/mongoid/extras.rb +11 -30
  79. data/lib/mongoid/factory.rb +1 -1
  80. data/lib/mongoid/fields.rb +121 -29
  81. data/lib/mongoid/fields/mappings.rb +36 -0
  82. data/lib/mongoid/fields/serializable.rb +131 -0
  83. data/lib/mongoid/fields/serializable/array.rb +64 -0
  84. data/lib/mongoid/fields/serializable/big_decimal.rb +42 -0
  85. data/lib/mongoid/fields/serializable/bignum.rb +10 -0
  86. data/lib/mongoid/fields/serializable/binary.rb +11 -0
  87. data/lib/mongoid/fields/serializable/boolean.rb +44 -0
  88. data/lib/mongoid/fields/serializable/date.rb +51 -0
  89. data/lib/mongoid/fields/serializable/date_time.rb +28 -0
  90. data/lib/mongoid/fields/serializable/fixnum.rb +10 -0
  91. data/lib/mongoid/fields/serializable/float.rb +33 -0
  92. data/lib/mongoid/fields/serializable/foreign_keys/array.rb +56 -0
  93. data/lib/mongoid/fields/serializable/foreign_keys/object.rb +43 -0
  94. data/lib/mongoid/fields/serializable/hash.rb +25 -0
  95. data/lib/mongoid/fields/serializable/integer.rb +33 -0
  96. data/lib/mongoid/fields/serializable/object.rb +11 -0
  97. data/lib/mongoid/fields/serializable/object_id.rb +32 -0
  98. data/lib/mongoid/fields/serializable/range.rb +42 -0
  99. data/lib/mongoid/fields/serializable/set.rb +42 -0
  100. data/lib/mongoid/fields/serializable/string.rb +28 -0
  101. data/lib/mongoid/fields/serializable/symbol.rb +28 -0
  102. data/lib/mongoid/fields/serializable/time.rb +12 -0
  103. data/lib/mongoid/fields/serializable/time_with_zone.rb +12 -0
  104. data/lib/mongoid/fields/serializable/timekeeping.rb +102 -0
  105. data/lib/mongoid/finders.rb +61 -37
  106. data/lib/mongoid/hierarchy.rb +43 -8
  107. data/lib/mongoid/identity_map.rb +106 -0
  108. data/lib/mongoid/indexes.rb +17 -1
  109. data/lib/mongoid/javascript.rb +2 -3
  110. data/lib/mongoid/keys.rb +10 -21
  111. data/lib/mongoid/logger.rb +22 -1
  112. data/lib/mongoid/matchers/all.rb +10 -0
  113. data/lib/mongoid/matchers/default.rb +1 -1
  114. data/lib/mongoid/matchers/exists.rb +10 -0
  115. data/lib/mongoid/matchers/gt.rb +10 -0
  116. data/lib/mongoid/matchers/gte.rb +10 -0
  117. data/lib/mongoid/matchers/in.rb +10 -0
  118. data/lib/mongoid/matchers/lt.rb +10 -0
  119. data/lib/mongoid/matchers/lte.rb +10 -0
  120. data/lib/mongoid/matchers/ne.rb +10 -0
  121. data/lib/mongoid/matchers/nin.rb +10 -0
  122. data/lib/mongoid/matchers/or.rb +7 -4
  123. data/lib/mongoid/matchers/size.rb +10 -0
  124. data/lib/mongoid/multi_database.rb +26 -6
  125. data/lib/mongoid/multi_parameter_attributes.rb +40 -17
  126. data/lib/mongoid/named_scope.rb +1 -2
  127. data/lib/mongoid/nested_attributes.rb +4 -1
  128. data/lib/mongoid/observer.rb +108 -5
  129. data/lib/mongoid/paranoia.rb +26 -26
  130. data/lib/mongoid/persistence.rb +15 -21
  131. data/lib/mongoid/persistence/atomic.rb +135 -0
  132. data/lib/mongoid/persistence/atomic/add_to_set.rb +11 -8
  133. data/lib/mongoid/persistence/atomic/bit.rb +37 -0
  134. data/lib/mongoid/persistence/atomic/inc.rb +9 -6
  135. data/lib/mongoid/persistence/atomic/operation.rb +48 -7
  136. data/lib/mongoid/persistence/atomic/pop.rb +34 -0
  137. data/lib/mongoid/persistence/atomic/pull.rb +34 -0
  138. data/lib/mongoid/persistence/atomic/pull_all.rb +10 -9
  139. data/lib/mongoid/persistence/atomic/push.rb +8 -5
  140. data/lib/mongoid/persistence/atomic/push_all.rb +31 -0
  141. data/lib/mongoid/persistence/atomic/rename.rb +31 -0
  142. data/lib/mongoid/persistence/atomic/set.rb +30 -0
  143. data/lib/mongoid/persistence/atomic/unset.rb +28 -0
  144. data/lib/mongoid/persistence/deletion.rb +32 -0
  145. data/lib/mongoid/persistence/insertion.rb +41 -0
  146. data/lib/mongoid/persistence/modification.rb +37 -0
  147. data/lib/mongoid/persistence/operations.rb +214 -0
  148. data/lib/mongoid/persistence/operations/embedded/insert.rb +42 -0
  149. data/lib/mongoid/persistence/operations/embedded/remove.rb +40 -0
  150. data/lib/mongoid/persistence/operations/insert.rb +34 -0
  151. data/lib/mongoid/persistence/operations/remove.rb +33 -0
  152. data/lib/mongoid/persistence/operations/update.rb +53 -0
  153. data/lib/mongoid/railtie.rb +21 -33
  154. data/lib/mongoid/railties/database.rake +12 -12
  155. data/lib/mongoid/relations.rb +9 -5
  156. data/lib/mongoid/relations/accessors.rb +15 -36
  157. data/lib/mongoid/relations/auto_save.rb +2 -2
  158. data/lib/mongoid/relations/binding.rb +28 -1
  159. data/lib/mongoid/relations/bindings/embedded/in.rb +17 -30
  160. data/lib/mongoid/relations/bindings/embedded/many.rb +16 -21
  161. data/lib/mongoid/relations/bindings/embedded/one.rb +11 -16
  162. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -32
  163. data/lib/mongoid/relations/bindings/referenced/many.rb +19 -61
  164. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -63
  165. data/lib/mongoid/relations/bindings/referenced/one.rb +18 -26
  166. data/lib/mongoid/relations/builder.rb +4 -2
  167. data/lib/mongoid/relations/builders.rb +21 -2
  168. data/lib/mongoid/relations/builders/embedded/in.rb +5 -1
  169. data/lib/mongoid/relations/builders/embedded/many.rb +12 -4
  170. data/lib/mongoid/relations/builders/embedded/one.rb +5 -1
  171. data/lib/mongoid/relations/builders/nested_attributes/many.rb +2 -2
  172. data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -1
  173. data/lib/mongoid/relations/builders/referenced/in.rb +2 -5
  174. data/lib/mongoid/relations/builders/referenced/many.rb +2 -3
  175. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +14 -5
  176. data/lib/mongoid/relations/builders/referenced/one.rb +2 -3
  177. data/lib/mongoid/relations/embedded/atomic.rb +2 -2
  178. data/lib/mongoid/relations/embedded/in.rb +72 -41
  179. data/lib/mongoid/relations/embedded/many.rb +116 -120
  180. data/lib/mongoid/relations/embedded/one.rb +59 -41
  181. data/lib/mongoid/relations/embedded/sort.rb +31 -0
  182. data/lib/mongoid/relations/macros.rb +28 -24
  183. data/lib/mongoid/relations/many.rb +10 -103
  184. data/lib/mongoid/relations/metadata.rb +335 -38
  185. data/lib/mongoid/relations/one.rb +7 -32
  186. data/lib/mongoid/relations/options.rb +47 -0
  187. data/lib/mongoid/relations/proxy.rb +29 -28
  188. data/lib/mongoid/relations/referenced/batch.rb +2 -3
  189. data/lib/mongoid/relations/referenced/in.rb +66 -53
  190. data/lib/mongoid/relations/referenced/many.rb +216 -143
  191. data/lib/mongoid/relations/referenced/many_to_many.rb +132 -163
  192. data/lib/mongoid/relations/referenced/one.rb +76 -58
  193. data/lib/mongoid/relations/synchronization.rb +113 -0
  194. data/lib/mongoid/relations/targets.rb +2 -0
  195. data/lib/mongoid/relations/targets/enumerable.rb +329 -0
  196. data/lib/mongoid/safety.rb +24 -156
  197. data/lib/mongoid/serialization.rb +21 -0
  198. data/lib/mongoid/state.rb +34 -0
  199. data/lib/mongoid/threaded.rb +175 -0
  200. data/lib/mongoid/timestamps/updated.rb +1 -1
  201. data/lib/mongoid/validations.rb +3 -7
  202. data/lib/mongoid/version.rb +1 -1
  203. data/lib/mongoid/versioning.rb +61 -7
  204. data/lib/rack/mongoid.rb +2 -0
  205. data/lib/rack/mongoid/middleware/identity_map.rb +38 -0
  206. data/lib/rails/generators/mongoid/model/model_generator.rb +1 -1
  207. data/lib/rails/generators/mongoid/model/templates/{model.rb → model.rb.tt} +0 -0
  208. data/lib/rails/generators/mongoid/observer/observer_generator.rb +1 -1
  209. data/lib/rails/generators/mongoid/observer/templates/{observer.rb → observer.rb.tt} +0 -0
  210. data/lib/rails/mongoid.rb +17 -17
  211. metadata +136 -102
  212. data/lib/mongoid/atomicity.rb +0 -111
  213. data/lib/mongoid/collections/cyclic_iterator.rb +0 -34
  214. data/lib/mongoid/collections/slaves.rb +0 -61
  215. data/lib/mongoid/extensions/array/conversions.rb +0 -23
  216. data/lib/mongoid/extensions/array/parentization.rb +0 -13
  217. data/lib/mongoid/extensions/big_decimal/conversions.rb +0 -19
  218. data/lib/mongoid/extensions/binary/conversions.rb +0 -17
  219. data/lib/mongoid/extensions/boolean/conversions.rb +0 -27
  220. data/lib/mongoid/extensions/date/conversions.rb +0 -25
  221. data/lib/mongoid/extensions/datetime/conversions.rb +0 -12
  222. data/lib/mongoid/extensions/float/conversions.rb +0 -20
  223. data/lib/mongoid/extensions/hash/conversions.rb +0 -19
  224. data/lib/mongoid/extensions/integer/conversions.rb +0 -20
  225. data/lib/mongoid/extensions/object/conversions.rb +0 -25
  226. data/lib/mongoid/extensions/range/conversions.rb +0 -25
  227. data/lib/mongoid/extensions/set/conversions.rb +0 -20
  228. data/lib/mongoid/extensions/symbol/conversions.rb +0 -21
  229. data/lib/mongoid/extensions/time_conversions.rb +0 -38
  230. data/lib/mongoid/field.rb +0 -162
  231. data/lib/mongoid/paths.rb +0 -61
  232. data/lib/mongoid/persistence/command.rb +0 -71
  233. data/lib/mongoid/persistence/insert.rb +0 -53
  234. data/lib/mongoid/persistence/insert_embedded.rb +0 -43
  235. data/lib/mongoid/persistence/remove.rb +0 -44
  236. data/lib/mongoid/persistence/remove_all.rb +0 -40
  237. data/lib/mongoid/persistence/remove_embedded.rb +0 -48
  238. data/lib/mongoid/persistence/update.rb +0 -77
  239. data/lib/mongoid/safe.rb +0 -23
  240. data/lib/mongoid/validations/referenced.rb +0 -58
@@ -6,9 +6,8 @@ module Mongoid #:nodoc
6
6
  # does not exist. If multiple ids were passed then it will display all of
7
7
  # those.
8
8
  #
9
- # Example:
10
- #
11
- # <tt>DocumentNotFound.new(Person, ["1", "2"])</tt>
9
+ # @example Create the error.
10
+ # DocumentNotFound.new(Person, ["1", "2"])
12
11
  class DocumentNotFound < MongoidError
13
12
 
14
13
  attr_reader :klass, :identifiers
@@ -20,7 +19,7 @@ module Mongoid #:nodoc
20
19
  super(
21
20
  translate(
22
21
  "document_not_found",
23
- { :klass => klass.name, :identifiers => @identifiers }
22
+ { :klass => klass.name, :identifiers => identifiers }
24
23
  )
25
24
  )
26
25
  end
@@ -5,9 +5,8 @@ module Mongoid #:nodoc
5
5
  # This error is raised when trying to access a Mongo::Collection from an
6
6
  # embedded document.
7
7
  #
8
- # Example:
9
- #
10
- # <tt>InvalidCollection.new(Address)</tt>
8
+ # @example Create the error.
9
+ # InvalidCollection.new(Address)
11
10
  class InvalidCollection < MongoidError
12
11
  def initialize(klass)
13
12
  super(
@@ -6,9 +6,8 @@ module Mongoid #:nodoc
6
6
  # by attempting to set an object on the db that is not a +Mongo::DB+, or
7
7
  # not setting anything at all.
8
8
  #
9
- # Example:
10
- #
11
- # <tt>InvalidDatabase.new("Not a DB")</tt>
9
+ # @example Create the error.
10
+ # InvalidDatabase.new("Not a DB")
12
11
  class InvalidDatabase < MongoidError
13
12
  def initialize(database)
14
13
  super(
@@ -5,9 +5,8 @@ module Mongoid #:nodoc
5
5
  # This error is raised when trying to create a field that conflicts with
6
6
  # a Mongoid internal attribute or method.
7
7
  #
8
- # Example:
9
- #
10
- # <tt>InvalidField.new('collection')</tt>
8
+ # @example Create the error.
9
+ # InvalidField.new('collection')
11
10
  class InvalidField < MongoidError
12
11
  def initialize(name)
13
12
  super(
@@ -2,14 +2,26 @@
2
2
  module Mongoid #:nodoc
3
3
  module Errors #:nodoc
4
4
 
5
- # Raised when invalid options are passed into a constructor or method.
6
- #
7
- # Example:
8
- #
9
- # <tt>InvalidOptions.new</tt>
5
+ # Raised when invalid options are passed to a relation macro.
10
6
  class InvalidOptions < MongoidError
11
- def initialize(key, options)
12
- super(translate(key, options))
7
+
8
+ # Instantiate the options error.
9
+ #
10
+ # @example Create the error.
11
+ # InvalidOptions.new(:name, :polymorphic, [ :as ])
12
+ #
13
+ # @param [ Symbol ] name The name of the relation.
14
+ # @param [ Symbol ] invalid The invalid option.
15
+ # @param [ Array<Symbol> ] valid The allowed options.
16
+ #
17
+ # @since 2.1.0
18
+ def initialize(name, invalid, valid)
19
+ super(
20
+ translate(
21
+ "invalid_options",
22
+ { :name => name, :invalid => invalid, :valid => valid.join(', ') }
23
+ )
24
+ )
13
25
  end
14
26
  end
15
27
  end
@@ -5,9 +5,8 @@ module Mongoid #:nodoc
5
5
  # Raised when trying to get or set a value for a defined field, where the
6
6
  # type of the object does not match the defined field type.
7
7
  #
8
- # Example:
9
- #
10
- # <tt>InvalidType.new(Array, "Not an Array")</tt>
8
+ # @example Create the error.
9
+ # InvalidType.new(Array, "Not an Array")
11
10
  class InvalidType < MongoidError
12
11
  def initialize(klass, value)
13
12
  super(
@@ -11,14 +11,13 @@ module Mongoid #:nodoc
11
11
  # Given the key of the specific error and the options hash, translate the
12
12
  # message.
13
13
  #
14
- # Options:
14
+ # @example Translate the message.
15
+ # error.translate("errors", :key => value)
15
16
  #
16
- # key: The key of the error in the locales.
17
- # options: The objects to pass to create the message.
17
+ # @param [ String ] key The key of the error in the locales.
18
+ # @param [ Hash ] options The objects to pass to create the message.
18
19
  #
19
- # Returns:
20
- #
21
- # A localized error message string.
20
+ # @return [ String ] A localized error message string.
22
21
  def translate(key, options)
23
22
  ::I18n.translate("#{BASE_KEY}.#{key}", options)
24
23
  end
@@ -4,9 +4,8 @@ module Mongoid #:nodoc
4
4
  # This error is raised when trying to create set nested records above the
5
5
  # specified :limit
6
6
  #
7
- # Example:
8
- #
9
- #<tt>TooManyNestedAttributeRecords.new('association', limit)
7
+ # @example Create the error.
8
+ # TooManyNestedAttributeRecords.new('association', limit)
10
9
  class TooManyNestedAttributeRecords < MongoidError
11
10
  def initialize(association, limit)
12
11
  super(
@@ -4,9 +4,8 @@ module Mongoid #:nodoc
4
4
 
5
5
  # Raised when the database version is not supported by Mongoid.
6
6
  #
7
- # Example:
8
- #
9
- # <tt>UnsupportedVersion.new(Mongo::ServerVersion.new("1.3.1"))</tt>
7
+ # @example Create the error.
8
+ # UnsupportedVersion.new(Mongo::ServerVersion.new("1.3.1"))
10
9
  class UnsupportedVersion < MongoidError
11
10
  def initialize(version)
12
11
  super(
@@ -5,9 +5,8 @@ module Mongoid #:nodoc
5
5
  # Raised when a persistence method ending in ! fails validation. The message
6
6
  # will contain the full error messages from the +Document+ in question.
7
7
  #
8
- # Example:
9
- #
10
- # <tt>Validations.new(person.errors)</tt>
8
+ # @example Create the error.
9
+ # Validations.new(person.errors)
11
10
  class Validations < MongoidError
12
11
  attr_reader :document
13
12
  def initialize(document)
@@ -1,80 +1,33 @@
1
1
  # encoding: utf-8
2
- require "mongoid/extensions/time_conversions"
3
- require "mongoid/extensions/array/conversions"
4
- require "mongoid/extensions/array/parentization"
5
- require "mongoid/extensions/set/conversions"
6
- require "mongoid/extensions/big_decimal/conversions"
7
- require "mongoid/extensions/binary/conversions"
8
- require "mongoid/extensions/boolean/conversions"
9
- require "mongoid/extensions/date/conversions"
10
- require "mongoid/extensions/datetime/conversions"
2
+ require "mongoid/extensions/array/deletion"
11
3
  require "mongoid/extensions/false_class/equality"
12
- require "mongoid/extensions/float/conversions"
13
- require "mongoid/extensions/hash/conversions"
14
4
  require "mongoid/extensions/hash/criteria_helpers"
15
5
  require "mongoid/extensions/hash/scoping"
16
- require "mongoid/extensions/integer/conversions"
17
6
  require "mongoid/extensions/nil/collectionization"
18
7
  require "mongoid/extensions/object/checks"
19
- require "mongoid/extensions/object/conversions"
20
8
  require "mongoid/extensions/object/reflections"
21
9
  require "mongoid/extensions/object/yoda"
22
10
  require "mongoid/extensions/proc/scoping"
23
- require "mongoid/extensions/range/conversions"
24
11
  require "mongoid/extensions/string/conversions"
25
12
  require "mongoid/extensions/string/inflections"
26
13
  require "mongoid/extensions/symbol/inflections"
27
- require "mongoid/extensions/symbol/conversions"
28
14
  require "mongoid/extensions/true_class/equality"
29
15
  require "mongoid/extensions/object_id/conversions"
30
16
 
31
17
  class Array #:nodoc
32
- include Mongoid::Extensions::Array::Conversions
33
- include Mongoid::Extensions::Array::Parentization
18
+ include Mongoid::Extensions::Array::Deletion
34
19
  end
35
20
 
36
- class Set #:nodoc
37
- include Mongoid::Extensions::Set::Conversions
38
- end
39
-
40
- class BigDecimal #:nodoc
41
- extend Mongoid::Extensions::BigDecimal::Conversions
42
- end
43
-
44
- class Binary #:nodoc
45
- extend Mongoid::Extensions::Binary::Conversions
46
- end
47
-
48
- class Boolean #:nodoc
49
- include Mongoid::Extensions::Boolean::Conversions
50
- end
51
-
52
- class DateTime #:nodoc
53
- extend Mongoid::Extensions::TimeConversions
54
- extend Mongoid::Extensions::DateTime::Conversions
55
- end
56
-
57
- class Date #:nodoc
58
- extend Mongoid::Extensions::TimeConversions
59
- extend Mongoid::Extensions::Date::Conversions
60
- end
21
+ class Binary; end #:nodoc:
22
+ class Boolean; end #:nodoc:
61
23
 
62
24
  class FalseClass #:nodoc
63
25
  include Mongoid::Extensions::FalseClass::Equality
64
26
  end
65
27
 
66
- class Float #:nodoc
67
- extend Mongoid::Extensions::Float::Conversions
68
- end
69
-
70
28
  class Hash #:nodoc
71
29
  include Mongoid::Extensions::Hash::CriteriaHelpers
72
30
  include Mongoid::Extensions::Hash::Scoping
73
- include Mongoid::Extensions::Hash::Conversions
74
- end
75
-
76
- class Integer #:nodoc
77
- extend Mongoid::Extensions::Integer::Conversions
78
31
  end
79
32
 
80
33
  class NilClass #:nodoc
@@ -83,7 +36,6 @@ end
83
36
 
84
37
  class Object #:nodoc:
85
38
  include Mongoid::Extensions::Object::Checks
86
- include Mongoid::Extensions::Object::Conversions
87
39
  include Mongoid::Extensions::Object::Reflections
88
40
  include Mongoid::Extensions::Object::Yoda
89
41
  end
@@ -92,23 +44,14 @@ class Proc #:nodoc:
92
44
  include Mongoid::Extensions::Proc::Scoping
93
45
  end
94
46
 
95
- class Range
96
- include Mongoid::Extensions::Range::Conversions
97
- end
98
-
99
47
  class String #:nodoc
100
- include Mongoid::Extensions::String::Inflections
101
48
  include Mongoid::Extensions::String::Conversions
49
+ include Mongoid::Extensions::String::Inflections
102
50
  end
103
51
 
104
52
  class Symbol #:nodoc
105
53
  remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
106
54
  include Mongoid::Extensions::Symbol::Inflections
107
- include Mongoid::Extensions::Symbol::Conversions
108
- end
109
-
110
- class Time #:nodoc
111
- extend Mongoid::Extensions::TimeConversions
112
55
  end
113
56
 
114
57
  class TrueClass #:nodoc
@@ -120,4 +63,7 @@ class BSON::ObjectId #:nodoc
120
63
  def as_json(options = nil)
121
64
  to_s
122
65
  end
66
+ def to_xml(options = nil)
67
+ ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
68
+ end
123
69
  end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module Array #:nodoc:
5
+
6
+ # This module contains deletion helpers for arrays.
7
+ module Deletion
8
+
9
+ # Delete the first object in the array that is equal to the supplied
10
+ # object and return it. This is much faster than performing a standard
11
+ # delete for large arrays ince it attempt to delete multiple in the
12
+ # other.
13
+ #
14
+ # @example Delete the first object.
15
+ # [ "1", "2", "1" ].delete_one("1")
16
+ #
17
+ # @param [ Object ] object The object to delete.
18
+ #
19
+ # @return [ Object ] The deleted object.
20
+ #
21
+ # @since 2.1.0
22
+ def delete_one(object)
23
+ position = index(object)
24
+ position ? delete_at(position) : nil
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,7 +2,20 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Extensions #:nodoc:
4
4
  module FalseClass #:nodoc:
5
- module Equality #:nodoc:
5
+
6
+ # Adds equality hooks for false values.
7
+ module Equality
8
+
9
+ # Is the passed value a boolean?
10
+ #
11
+ # @example Is the value a boolean type?
12
+ # false.is_a?(Boolean)
13
+ #
14
+ # @param [ Class ] other The class to check.
15
+ #
16
+ # @return [ true, false ] If the other is a boolean.
17
+ #
18
+ # @since 1.0.0
6
19
  def is_a?(other)
7
20
  return true if other.name == "Boolean"
8
21
  super(other)
@@ -2,19 +2,30 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Extensions #:nodoc:
4
4
  module Hash #:nodoc:
5
- module CriteriaHelpers #:nodoc:
5
+
6
+ # Expands complex criterion into mongodb selectors.
7
+ module CriteriaHelpers
8
+
9
+ # Expand the complex criteria into a MongoDB compliant selector hash.
10
+ #
11
+ # @example Convert the criterion.
12
+ # {}.expand_complex_criteria
13
+ #
14
+ # @return [ Hash ] The mongo selector.
15
+ #
16
+ # @since 1.0.0
6
17
  def expand_complex_criteria
7
- hsh = {}
8
- each_pair do |k,v|
9
- case k
10
- when Mongoid::Criterion::Complex
11
- hsh[k.key] ||= {}
12
- hsh[k.key].merge!({"$#{k.operator}" => v})
13
- else
14
- hsh[k] = v
18
+ {}.tap do |hsh|
19
+ each_pair do |k,v|
20
+ case k
21
+ when Mongoid::Criterion::Complex
22
+ hsh[k.key] ||= {}
23
+ hsh[k.key].merge!({"$#{k.operator}" => v})
24
+ else
25
+ hsh[k] = v
26
+ end
15
27
  end
16
28
  end
17
- hsh
18
29
  end
19
30
  end
20
31
  end
@@ -2,7 +2,20 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Extensions #:nodoc:
4
4
  module Hash #:nodoc:
5
- module Scoping #:nodoc:
5
+
6
+ # Adds functionality for criteria scoping/merging.
7
+ module Scoping
8
+
9
+ # Get the hash scoped for criteria merges.
10
+ #
11
+ # @example Get the hash.
12
+ # { :field => "value" }.scoped
13
+ #
14
+ # @param [ Array ] args The arguments (ignored).
15
+ #
16
+ # @return [ Hash ] The hash unmodified.
17
+ #
18
+ # @since 1.0.0
6
19
  def scoped(*args)
7
20
  self
8
21
  end
@@ -2,7 +2,18 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Extensions #:nodoc:
4
4
  module Nil #:nodoc:
5
- module Collectionization #:nodoc:
5
+
6
+ # This module safeguards collection access on anonymous classes.
7
+ module Collectionization
8
+
9
+ # Get the name of a nil collection.
10
+ #
11
+ # @example Get the nil name.
12
+ # nil.collectionize
13
+ #
14
+ # @return [ String ] A blank string.
15
+ #
16
+ # @since 1.0.0
6
17
  def collectionize
7
18
  to_s.collectionize
8
19
  end
@@ -2,14 +2,45 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Extensions #:nodoc:
4
4
  module Object #:nodoc:
5
- module Reflections #:nodoc:
5
+
6
+ # This module contains reflection convenience methods.
7
+ module Reflections
6
8
  extend ActiveSupport::Concern
7
9
 
10
+ # Get the value for an instance variable or nil if it doesn't exist.
11
+ #
12
+ # @example Get the value for an instance var.
13
+ # document.ivar("person")
14
+ #
15
+ # @param [ String ] name The name of the variable.
16
+ #
17
+ # @return [ Object, nil ] The value or nil.
18
+ #
19
+ # @since 2.0.0.rc.1
8
20
  def ivar(name)
9
21
  if instance_variable_defined?("@#{name}")
10
22
  return instance_variable_get("@#{name}")
23
+ else
24
+ false
25
+ end
26
+ end
27
+
28
+ # Remove the instance variable for the provided name.
29
+ #
30
+ # @example Remove the instance variable
31
+ # document.remove_ivar("person")
32
+ #
33
+ # @param [ String ] name The name of the variable.
34
+ #
35
+ # @return [ true, false ] If the variable was defined.
36
+ #
37
+ # @since 2.1.0
38
+ def remove_ivar(name)
39
+ if instance_variable_defined?("@#{name}")
40
+ return remove_instance_variable("@#{name}")
41
+ else
42
+ false
11
43
  end
12
- nil
13
44
  end
14
45
  end
15
46
  end