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
@@ -1,111 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
-
4
- # This module contains the logic for supporting atomic operations against the
5
- # database.
6
- #
7
- # @todo Durran: Refactor class out into separate objects for each type of
8
- # update.
9
- module Atomicity
10
- extend ActiveSupport::Concern
11
-
12
- # Get all the atomic updates that need to happen for the current
13
- # +Document+. This includes all changes that need to happen in the
14
- # entire hierarchy that exists below where the save call was made.
15
- #
16
- # @note
17
- # MongoDB does not allow "conflicting modifications" to be
18
- # performed in a single operation. Conflicting modifications are
19
- # detected by the 'haveConflictingMod' function in MongoDB.
20
- # Examination of the code suggests that two modifications (a $set
21
- # and a $pushAll, for example) conflict if:
22
- # (1) the key paths being modified are equal.
23
- # (2) one key path is a prefix of the other.
24
- # So a $set of 'addresses.0.street' will conflict with a $pushAll
25
- # to 'addresses', and we will need to split our update into two
26
- # pieces. We do not, however, attempt to match MongoDB's logic
27
- # exactly. Instead, we assume that two updates conflict if the
28
- # first component of the two key paths matches.
29
- #
30
- # @example Get the updates that need to occur.
31
- # person._updates
32
- #
33
- # @return [ Hash ] The updates and their modifiers.
34
- def _updates
35
- processed = {}
36
-
37
- _children.inject({ "$set" => _sets, "$pushAll" => {}, :other => {} }) do |updates, child|
38
- changes = child._sets
39
- updates["$set"].update(changes)
40
- unless changes.empty?
41
- processed[child._conflicting_modification_key] = true
42
- end
43
-
44
- if processed.has_key?(child._conflicting_modification_key)
45
- target = :other
46
- else
47
- target = "$pushAll"
48
- end
49
-
50
- child._pushes.each do |attr, val|
51
- if updates[target].has_key?(attr)
52
- updates[target][attr] << val
53
- else
54
- updates[target].update({attr => [val]})
55
- end
56
- end
57
- updates
58
- end.delete_if do |key, value|
59
- value.empty?
60
- end
61
- end
62
-
63
- protected
64
-
65
- # Get the key used to check for conflicting modifications. For now, we
66
- # just use the first component of _path, and discard the first period
67
- # and everything that follows.
68
- #
69
- # @example Get the key.
70
- # person._conflicting_modification_key
71
- #
72
- # @return [ String ] The conflicting key.
73
- def _conflicting_modification_key
74
- _path.sub(/\..*/, '')
75
- end
76
-
77
- # Get all the push attributes that need to occur.
78
- #
79
- # @example Get the pushes.
80
- # person._pushes
81
- #
82
- # @return [ Hash ] The $pushAll operations.
83
- def _pushes
84
- pushable? ? { _path => as_document } : {}
85
- end
86
-
87
- # Determine if the document can be pushed.
88
- #
89
- # @example Is this pushable?
90
- # person.pushable?
91
- #
92
- # @return [ true, false ] Is the document new and embedded?
93
- def pushable?
94
- new_record? && embedded_many? && _parent.persisted?
95
- end
96
-
97
- # Get all the attributes that need to be set.
98
- #
99
- # @example Get the sets.
100
- # person._sets
101
- #
102
- # @return [ Hash ] The $set operations.
103
- def _sets
104
- if changed? && !new_record?
105
- setters
106
- else
107
- embedded_one? && new_record? ? { _path => as_document } : {}
108
- end
109
- end
110
- end
111
- end
@@ -1,34 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Collections #:nodoc:
4
- class CyclicIterator
5
-
6
- attr_reader :counter
7
-
8
- # Performs iteration over an array, if the array gets to the end then loop
9
- # back to the first.
10
- #
11
- # Example:
12
- #
13
- # <tt>CyclicIterator.new([ first, second ])</tt>
14
- def initialize(array)
15
- @array, @counter = array, -1
16
- end
17
-
18
- # Get the next element in the array. If the element is the last in the
19
- # array then return the first.
20
- #
21
- # Example:
22
- #
23
- # <tt>iterator.next</tt>
24
- #
25
- # Returns:
26
- #
27
- # The next element in the array.
28
- def next
29
- (@counter == @array.size - 1) ? @counter = 0 : @counter = @counter + 1
30
- @array[@counter]
31
- end
32
- end
33
- end
34
- end
@@ -1,61 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Collections #:nodoc:
4
-
5
- # This class wraps the MongoDB slaves databases.
6
- class Slaves
7
- include Mongoid::Collections::Retry
8
-
9
- attr_reader :iterator
10
-
11
- # All read operations should delegate to the slave connections.
12
- # These operations mimic the methods on a Mongo:Collection.
13
- #
14
- # @example Proxy the driver save.
15
- # collection.save({ :name => "Al" })
16
- Operations::READ.each do |name|
17
- define_method(name) do |*args|
18
- retry_on_connection_failure do
19
- collection.send(name, *args)
20
- end
21
- end
22
- end
23
-
24
- # Is the collection of slaves empty or not?
25
- #
26
- # @example Is the collection empty?
27
- # slaves.empty?
28
- #
29
- # @return [ true, false ] If the iterator is set or not.
30
- def empty?
31
- iterator.nil?
32
- end
33
-
34
- # Create the new database reader. Will create a collection from the
35
- # slave databases and cycle through them on each read.
36
- #
37
- # @example Create the slaves.
38
- # Reader.new(slaves, "mongoid_people")
39
- #
40
- # @param [ Array<Mongo::DB> ] slaves The slave databases.
41
- # @param [ String ] name The database name.
42
- def initialize(slaves, name)
43
- unless slaves.blank?
44
- @iterator = CyclicIterator.new(slaves.collect { |db| db.collection(name) })
45
- end
46
- end
47
-
48
- protected
49
-
50
- # Get the next database in the round-robin.
51
- #
52
- # @example Get the next database.
53
- # slaves.collection
54
- #
55
- # @return [ Mongo::DB ] The next slave database to read from.
56
- def collection
57
- iterator.next
58
- end
59
- end
60
- end
61
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Array #:nodoc:
5
- # This module converts arrays into mongoid related objects.
6
- module Conversions #:nodoc:
7
- extend ActiveSupport::Concern
8
-
9
- module ClassMethods #:nodoc:
10
- def raise_or_return(value)
11
- unless value.nil? || value.is_a?(::Array)
12
- raise Mongoid::Errors::InvalidType.new(::Array, value)
13
- end
14
- value
15
- end
16
-
17
- alias :get :raise_or_return
18
- alias :set :raise_or_return
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Array #:nodoc:
5
- module Parentization #:nodoc:
6
- # Adds the parent document to each element in the array.
7
- def parentize(parent)
8
- each { |obj| obj.parentize(parent) }
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
- require "bigdecimal"
3
-
4
- module Mongoid #:nodoc:
5
- module Extensions #:nodoc:
6
- module BigDecimal #:nodoc:
7
- module Conversions #:nodoc:
8
- # Get the string as a +BigDecimal+
9
- def get(value)
10
- value ? ::BigDecimal.new(value) : value
11
- end
12
- # Set the value in the hash as a string.
13
- def set(value)
14
- value ? value.to_s : value
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Binary #:nodoc:
5
- module Conversions #:nodoc:
6
- # Get the value from the db hash.
7
- def get(value)
8
- value
9
- end
10
- # Set the value in the db hash.
11
- def set(value)
12
- value
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Boolean #:nodoc:
5
- module Conversions #:nodoc:
6
- extend ActiveSupport::Concern
7
-
8
- BOOLEAN_MAP = {
9
- true => true, "true" => true, "TRUE" => true, "1" => true, 1 => true, 1.0 => true,
10
- false => false, "false" => false, "FALSE" => false, "0" => false, 0 => false, 0.0 => false
11
- }
12
-
13
- module ClassMethods #:nodoc
14
-
15
- def set(value)
16
- value = BOOLEAN_MAP[value]
17
- value.nil? ? nil : value
18
- end
19
-
20
- def get(value)
21
- value
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Date #:nodoc:
5
- module Conversions #:nodoc:
6
- def get(value)
7
- return nil if value.blank?
8
- if Mongoid::Config.use_utc?
9
- value.to_date
10
- else
11
- ::Date.new(value.year, value.month, value.day)
12
- end
13
- end
14
-
15
- protected
16
-
17
- def convert_to_time(value)
18
- value = ::Date.parse(value) if value.is_a?(::String)
19
- value = ::Date.civil(*value) if value.is_a?(::Array)
20
- ::Time.utc(value.year, value.month, value.day)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,12 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module DateTime #:nodoc:
5
- module Conversions #:nodoc:
6
- def get(value)
7
- super.try(:to_datetime)
8
- end
9
- end
10
- end
11
- end
12
- end
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Float #:nodoc:
5
- module Conversions #:nodoc:
6
- def set(value)
7
- return nil if value.blank?
8
- begin
9
- Float(value)
10
- rescue ArgumentError => e
11
- value
12
- end
13
- end
14
- def get(value)
15
- value
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Hash #:nodoc:
5
- module Conversions #:nodoc:
6
- extend ActiveSupport::Concern
7
-
8
- module ClassMethods #:nodoc:
9
- def get(value)
10
- value
11
- end
12
- def set(value)
13
- value
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Integer #:nodoc:
5
- module Conversions #:nodoc:
6
- def set(value)
7
- return nil if value.blank?
8
- begin
9
- value.to_s =~ /\./ ? Float(value) : Integer(value)
10
- rescue
11
- value
12
- end
13
- end
14
- def get(value)
15
- value
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,25 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Extensions #:nodoc:
4
- module Object #:nodoc:
5
- # This module converts objects into mongoid related objects.
6
- module Conversions #:nodoc:
7
- extend ActiveSupport::Concern
8
-
9
- module ClassMethods
10
- def set(value)
11
- value.respond_to?(:attributes) ? value.attributes : value
12
- end
13
-
14
- def get(value)
15
- if value && respond_to?(:instantiate)
16
- instantiate(value)
17
- else
18
- value
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end