mongoid 2.0.2 → 2.1.0

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