mongoid 5.4.1 → 6.0.0.beta

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 (264) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/config/locales/en.yml +23 -16
  5. data/lib/mongoid.rb +4 -9
  6. data/lib/mongoid/atomic.rb +1 -1
  7. data/lib/mongoid/atomic/modifiers.rb +8 -12
  8. data/lib/mongoid/attributes.rb +9 -11
  9. data/lib/mongoid/attributes/dynamic.rb +5 -6
  10. data/lib/mongoid/attributes/nested.rb +1 -1
  11. data/lib/mongoid/attributes/processing.rb +4 -0
  12. data/lib/mongoid/attributes/readonly.rb +22 -0
  13. data/lib/mongoid/cacheable.rb +36 -0
  14. data/lib/mongoid/changeable.rb +37 -1
  15. data/lib/mongoid/clients.rb +0 -63
  16. data/lib/mongoid/clients/factory.rb +0 -2
  17. data/lib/mongoid/clients/options.rb +54 -249
  18. data/lib/mongoid/clients/storage_options.rb +1 -69
  19. data/lib/mongoid/composable.rb +26 -2
  20. data/lib/mongoid/config.rb +1 -1
  21. data/lib/mongoid/config/options.rb +1 -1
  22. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
  23. data/lib/mongoid/contextual/atomic.rb +6 -9
  24. data/lib/mongoid/contextual/geo_near.rb +2 -3
  25. data/lib/mongoid/contextual/map_reduce.rb +97 -24
  26. data/lib/mongoid/contextual/memory.rb +7 -4
  27. data/lib/mongoid/contextual/mongo.rb +63 -54
  28. data/lib/mongoid/contextual/none.rb +2 -2
  29. data/lib/mongoid/copyable.rb +19 -19
  30. data/lib/mongoid/criteria.rb +5 -4
  31. data/lib/mongoid/criteria/findable.rb +2 -3
  32. data/lib/mongoid/criteria/includable.rb +63 -16
  33. data/lib/mongoid/criteria/marshalable.rb +2 -2
  34. data/lib/mongoid/criteria/modifiable.rb +17 -1
  35. data/lib/mongoid/criteria/options.rb +25 -0
  36. data/lib/mongoid/criteria/queryable.rb +86 -0
  37. data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
  38. data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
  39. data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
  40. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
  41. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
  42. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  43. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
  44. data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
  45. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
  46. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
  47. data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
  48. data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
  49. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
  50. data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
  51. data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
  52. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
  53. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  54. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
  55. data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
  56. data/lib/mongoid/criteria/queryable/key.rb +103 -0
  57. data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
  58. data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
  59. data/lib/mongoid/criteria/queryable/optional.rb +411 -0
  60. data/lib/mongoid/criteria/queryable/options.rb +136 -0
  61. data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
  62. data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
  63. data/lib/mongoid/criteria/queryable/selector.rb +196 -0
  64. data/lib/mongoid/criteria/queryable/smash.rb +103 -0
  65. data/lib/mongoid/document.rb +9 -23
  66. data/lib/mongoid/errors.rb +2 -1
  67. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
  68. data/lib/mongoid/errors/delete_restriction.rb +2 -2
  69. data/lib/mongoid/errors/invalid_field.rb +2 -2
  70. data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
  71. data/lib/mongoid/errors/invalid_relation.rb +66 -0
  72. data/lib/mongoid/errors/inverse_not_found.rb +1 -1
  73. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  74. data/lib/mongoid/evolvable.rb +1 -1
  75. data/lib/mongoid/extensions.rb +0 -5
  76. data/lib/mongoid/extensions/big_decimal.rb +17 -8
  77. data/lib/mongoid/extensions/date.rb +4 -1
  78. data/lib/mongoid/extensions/hash.rb +2 -3
  79. data/lib/mongoid/extensions/object.rb +2 -2
  80. data/lib/mongoid/extensions/string.rb +4 -3
  81. data/lib/mongoid/extensions/time.rb +5 -2
  82. data/lib/mongoid/factory.rb +1 -0
  83. data/lib/mongoid/fields/foreign_key.rb +2 -2
  84. data/lib/mongoid/fields/localized.rb +3 -8
  85. data/lib/mongoid/fields/validators/macro.rb +18 -0
  86. data/lib/mongoid/findable.rb +3 -3
  87. data/lib/mongoid/indexable.rb +17 -16
  88. data/lib/mongoid/indexable/specification.rb +1 -1
  89. data/lib/mongoid/indexable/validators/options.rb +1 -2
  90. data/lib/mongoid/interceptable.rb +6 -17
  91. data/lib/mongoid/loggable.rb +1 -1
  92. data/lib/mongoid/matchable.rb +3 -10
  93. data/lib/mongoid/matchable/gt.rb +2 -0
  94. data/lib/mongoid/matchable/gte.rb +2 -0
  95. data/lib/mongoid/matchable/lt.rb +2 -0
  96. data/lib/mongoid/matchable/lte.rb +2 -0
  97. data/lib/mongoid/persistable.rb +6 -5
  98. data/lib/mongoid/persistable/creatable.rb +2 -0
  99. data/lib/mongoid/persistable/deletable.rb +7 -3
  100. data/lib/mongoid/persistable/settable.rb +3 -16
  101. data/lib/mongoid/persistable/updatable.rb +10 -12
  102. data/lib/mongoid/persistence_context.rb +216 -0
  103. data/lib/mongoid/query_cache.rb +5 -30
  104. data/lib/mongoid/relations/accessors.rb +6 -2
  105. data/lib/mongoid/relations/auto_save.rb +12 -4
  106. data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
  107. data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
  108. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
  109. data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
  110. data/lib/mongoid/relations/builders.rb +2 -2
  111. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  112. data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
  113. data/lib/mongoid/relations/conversions.rb +1 -1
  114. data/lib/mongoid/relations/counter_cache.rb +28 -18
  115. data/lib/mongoid/relations/eager.rb +19 -7
  116. data/lib/mongoid/relations/eager/base.rb +5 -5
  117. data/lib/mongoid/relations/embedded/batchable.rb +9 -33
  118. data/lib/mongoid/relations/embedded/in.rb +16 -2
  119. data/lib/mongoid/relations/embedded/many.rb +23 -8
  120. data/lib/mongoid/relations/embedded/one.rb +17 -2
  121. data/lib/mongoid/relations/macros.rb +9 -2
  122. data/lib/mongoid/relations/metadata.rb +3 -3
  123. data/lib/mongoid/relations/nested_builder.rb +1 -1
  124. data/lib/mongoid/relations/options.rb +2 -2
  125. data/lib/mongoid/relations/proxy.rb +2 -33
  126. data/lib/mongoid/relations/referenced/in.rb +23 -11
  127. data/lib/mongoid/relations/referenced/many.rb +24 -16
  128. data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
  129. data/lib/mongoid/relations/referenced/one.rb +17 -1
  130. data/lib/mongoid/relations/reflections.rb +3 -5
  131. data/lib/mongoid/relations/touchable.rb +1 -1
  132. data/lib/mongoid/reloadable.rb +1 -1
  133. data/lib/mongoid/scopable.rb +3 -3
  134. data/lib/mongoid/serializable.rb +2 -3
  135. data/lib/mongoid/tasks/database.rb +1 -2
  136. data/lib/mongoid/threaded.rb +4 -4
  137. data/lib/mongoid/traversable.rb +1 -1
  138. data/lib/mongoid/validatable.rb +1 -1
  139. data/lib/mongoid/validatable/macros.rb +2 -4
  140. data/lib/mongoid/validatable/uniqueness.rb +1 -2
  141. data/lib/mongoid/version.rb +1 -1
  142. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
  143. data/spec/app/models/album.rb +5 -1
  144. data/spec/app/models/artist.rb +21 -0
  145. data/spec/app/models/band.rb +0 -1
  146. data/spec/app/models/church.rb +0 -2
  147. data/spec/app/models/ordered_post.rb +5 -0
  148. data/spec/app/models/oscar.rb +1 -2
  149. data/spec/app/models/person.rb +3 -1
  150. data/spec/app/models/post.rb +0 -1
  151. data/spec/app/models/princess.rb +2 -0
  152. data/spec/app/models/record.rb +1 -0
  153. data/spec/app/models/thing.rb +1 -1
  154. data/spec/config/mongoid.yml +1 -5
  155. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  156. data/spec/mongoid/atomic_spec.rb +17 -17
  157. data/spec/mongoid/attributes/nested_spec.rb +14 -14
  158. data/spec/mongoid/attributes/readonly_spec.rb +87 -44
  159. data/spec/mongoid/attributes_spec.rb +63 -0
  160. data/spec/mongoid/cacheable_spec.rb +112 -0
  161. data/spec/mongoid/changeable_spec.rb +58 -0
  162. data/spec/mongoid/clients/factory_spec.rb +3 -11
  163. data/spec/mongoid/clients/options_spec.rb +378 -96
  164. data/spec/mongoid/clients_spec.rb +207 -170
  165. data/spec/mongoid/composable_spec.rb +7 -0
  166. data/spec/mongoid/config_spec.rb +41 -21
  167. data/spec/mongoid/contextual/atomic_spec.rb +77 -343
  168. data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
  169. data/spec/mongoid/contextual/memory_spec.rb +56 -316
  170. data/spec/mongoid/contextual/mongo_spec.rb +104 -378
  171. data/spec/mongoid/copyable_spec.rb +8 -15
  172. data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
  173. data/spec/mongoid/criteria/options_spec.rb +29 -0
  174. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
  175. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
  176. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
  177. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
  178. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
  179. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
  180. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
  181. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
  182. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
  183. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
  184. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
  185. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
  186. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
  187. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
  188. data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
  189. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
  190. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
  191. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
  192. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
  193. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
  194. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
  195. data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
  196. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
  197. data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
  198. data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
  199. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
  200. data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
  201. data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
  202. data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
  203. data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
  204. data/spec/mongoid/criteria_spec.rb +45 -63
  205. data/spec/mongoid/document_spec.rb +21 -88
  206. data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
  207. data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
  208. data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
  209. data/spec/mongoid/extensions/date_spec.rb +2 -6
  210. data/spec/mongoid/extensions/date_time_spec.rb +2 -6
  211. data/spec/mongoid/extensions/float_spec.rb +8 -1
  212. data/spec/mongoid/extensions/integer_spec.rb +8 -1
  213. data/spec/mongoid/extensions/object_spec.rb +11 -0
  214. data/spec/mongoid/extensions/string_spec.rb +21 -0
  215. data/spec/mongoid/extensions/time_spec.rb +4 -8
  216. data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
  217. data/spec/mongoid/fields/localized_spec.rb +0 -91
  218. data/spec/mongoid/findable_spec.rb +46 -1
  219. data/spec/mongoid/indexable_spec.rb +6 -46
  220. data/spec/mongoid/interceptable_spec.rb +49 -10
  221. data/spec/mongoid/matchable/gt_spec.rb +11 -0
  222. data/spec/mongoid/matchable/gte_spec.rb +10 -0
  223. data/spec/mongoid/matchable/lt_spec.rb +11 -0
  224. data/spec/mongoid/matchable/lte_spec.rb +11 -0
  225. data/spec/mongoid/matchable_spec.rb +1 -51
  226. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  227. data/spec/mongoid/persistable/deletable_spec.rb +1 -1
  228. data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
  229. data/spec/mongoid/persistable/savable_spec.rb +30 -30
  230. data/spec/mongoid/persistable/settable_spec.rb +0 -185
  231. data/spec/mongoid/persistable/updatable_spec.rb +166 -5
  232. data/spec/mongoid/persistence_context_spec.rb +654 -0
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +89 -65
  235. data/spec/mongoid/relations/accessors_spec.rb +1 -1
  236. data/spec/mongoid/relations/auto_save_spec.rb +39 -6
  237. data/spec/mongoid/relations/builders_spec.rb +37 -10
  238. data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
  239. data/spec/mongoid/relations/cyclic_spec.rb +0 -22
  240. data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
  241. data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
  242. data/spec/mongoid/relations/macros_spec.rb +395 -7
  243. data/spec/mongoid/relations/proxy_spec.rb +3 -1
  244. data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
  245. data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
  246. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
  247. data/spec/mongoid/relations/reflections_spec.rb +9 -9
  248. data/spec/mongoid/reloadable_spec.rb +51 -0
  249. data/spec/mongoid/scopable_spec.rb +0 -12
  250. data/spec/mongoid/serializable_spec.rb +0 -50
  251. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  252. data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
  253. data/spec/mongoid/validatable_spec.rb +16 -0
  254. data/spec/spec_helper.rb +10 -10
  255. metadata +536 -479
  256. metadata.gz.sig +0 -0
  257. data/lib/mongoid/clients/thread_options.rb +0 -19
  258. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
  259. data/lib/mongoid/extensions/decimal128.rb +0 -39
  260. data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
  261. data/lib/mongoid/matchable/regexp.rb +0 -27
  262. data/spec/app/models/post_genre.rb +0 -6
  263. data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
  264. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -0,0 +1,86 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ class Criteria
4
+ module Queryable
5
+ module Extensions
6
+
7
+ # This module contains additional nil behaviour.
8
+ module NilClass
9
+
10
+ # Add this object to nil.
11
+ #
12
+ # @example Add the object to a nil value.
13
+ # nil.__add__([ 1, 2, 3 ])
14
+ #
15
+ # @param [ Object ] object The object to add.
16
+ #
17
+ # @return [ Object ] The provided object.
18
+ #
19
+ # @since 1.0.0
20
+ def __add__(object); object; end
21
+
22
+ # Add this object to nil.
23
+ #
24
+ # @example Add the object to a nil value.
25
+ # nil.__expanded__([ 1, 2, 3 ])
26
+ #
27
+ # @param [ Object ] object The object to expanded.
28
+ #
29
+ # @return [ Object ] The provided object.
30
+ #
31
+ # @since 1.0.0
32
+ def __expanded__(object); object; end
33
+
34
+ # Evolve the nil into a date or time.
35
+ #
36
+ # @example Evolve the nil.
37
+ # nil.__evolve_time__
38
+ #
39
+ # @return [ nil ] nil.
40
+ #
41
+ # @since 1.0.0
42
+ def __evolve_time__; self; end
43
+ alias :__evolve_date__ :__evolve_time__
44
+
45
+ # Add this object to nil.
46
+ #
47
+ # @example Add the object to a nil value.
48
+ # nil.__intersect__([ 1, 2, 3 ])
49
+ #
50
+ # @param [ Object ] object The object to intersect.
51
+ #
52
+ # @return [ Object ] The provided object.
53
+ #
54
+ # @since 1.0.0
55
+ def __intersect__(object); object; end
56
+
57
+ # Add this object to nil.
58
+ #
59
+ # @example Add the object to a nil value.
60
+ # nil.__override__([ 1, 2, 3 ])
61
+ #
62
+ # @param [ Object ] object The object to override.
63
+ #
64
+ # @return [ Object ] The provided object.
65
+ #
66
+ # @since 1.0.0
67
+ def __override__(object); object; end
68
+
69
+ # Add this object to nil.
70
+ #
71
+ # @example Add the object to a nil value.
72
+ # nil.__union__([ 1, 2, 3 ])
73
+ #
74
+ # @param [ Object ] object The object to union.
75
+ #
76
+ # @return [ Object ] The provided object.
77
+ #
78
+ # @since 1.0.0
79
+ def __union__(object); object; end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ ::NilClass.__send__(:include, Mongoid::Criteria::Queryable::Extensions::NilClass)
@@ -0,0 +1,90 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ class Criteria
4
+ module Queryable
5
+ module Extensions
6
+
7
+ # This module contains additional numeric behaviour.
8
+ module Numeric
9
+
10
+ # Evolve the numeric value into a mongo friendly date, aka UTC time at
11
+ # midnight.
12
+ #
13
+ # @example Evolve to a date.
14
+ # 125214512412.1123.__evolve_date__
15
+ #
16
+ # @return [ Time ] The time representation at UTC midnight.
17
+ #
18
+ # @since 1.0.0
19
+ def __evolve_date__
20
+ time = ::Time.at(self).utc
21
+ ::Time.utc(time.year, time.month, time.day, 0, 0, 0, 0)
22
+ end
23
+
24
+ # Evolve the numeric value into a mongo friendly time.
25
+ #
26
+ # @example Evolve to a time.
27
+ # 125214512412.1123.__evolve_time__
28
+ #
29
+ # @return [ Time ] The time representation.
30
+ #
31
+ # @since 1.0.0
32
+ def __evolve_time__
33
+ ::Time.at(self).utc
34
+ end
35
+
36
+ # Get the integer as a sort direction.
37
+ #
38
+ # @example Get the integer as a sort direction.
39
+ # 1.to_direction
40
+ #
41
+ # @return [ Integer ] self.
42
+ #
43
+ # @since 1.0.0
44
+ def to_direction; self; end
45
+
46
+ module ClassMethods
47
+
48
+ # Get the object as a numeric.
49
+ #
50
+ # @api private
51
+ #
52
+ # @example Get the object as numeric.
53
+ # Object.__numeric__("1.442")
54
+ #
55
+ # @param [ Object ] object The object to convert.
56
+ #
57
+ # @return [ Object ] The converted number.
58
+ #
59
+ # @since 1.0.0
60
+ def __numeric__(object)
61
+ object.to_s =~ /(^[-+]?[0-9]+$)|(\.0+$)|(\.$)/ ? object.to_i : Float(object)
62
+ end
63
+
64
+ # Evolve the object to an integer.
65
+ #
66
+ # @example Evolve to integers.
67
+ # Integer.evolve("1")
68
+ #
69
+ # @param [ Object ] object The object to evolve.
70
+ #
71
+ # @return [ Integer ] The evolved object.
72
+ #
73
+ # @since 1.0.0
74
+ def evolve(object)
75
+ __evolve__(object) do |obj|
76
+ __numeric__(obj) rescue obj
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ ::Integer.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Numeric)
87
+ ::Integer.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Numeric::ClassMethods)
88
+
89
+ ::Float.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Numeric)
90
+ ::Float.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Numeric::ClassMethods)
@@ -0,0 +1,206 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ class Criteria
4
+ module Queryable
5
+ module Extensions
6
+
7
+ # This module contains additional object behaviour.
8
+ module Object
9
+
10
+ # Combine the two objects using the add strategy.
11
+ #
12
+ # @example Add the object to the array.
13
+ # [ 1, 2, 3 ].__add__(4)
14
+ #
15
+ # @param [ Object ] object The object to add.
16
+ #
17
+ # @return [ Object ] The result of the add.
18
+ #
19
+ # @since 1.0.0
20
+ def __add__(object)
21
+ (object == self) ? self : [ self, object ].flatten.uniq
22
+ end
23
+
24
+ # Merge this object into the provided array.
25
+ #
26
+ # @example Merge the object into the array.
27
+ # 4.__add_from_array__([ 1, 2 ])
28
+ #
29
+ # @param [ Array ] value The array to add to.
30
+ #
31
+ # @return [ Array ] The merged object.
32
+ #
33
+ # @since 1.0.0
34
+ def __add_from_array__(array)
35
+ array.concat(Array(self)).uniq
36
+ end
37
+
38
+ # Combine the two objects using the intersect strategy.
39
+ #
40
+ # @example Add the object to the array.
41
+ # [ 1, 2, 3 ].__intersect__(4)
42
+ #
43
+ # @param [ Object ] object The object to intersect.
44
+ #
45
+ # @return [ Array ] The result of the intersect.
46
+ #
47
+ # @since 1.0.0
48
+ def __intersect__(object)
49
+ object.__intersect_from_object__(self)
50
+ end
51
+
52
+ # Merge this object into the provided array.
53
+ #
54
+ # @example Merge the object into the array.
55
+ # 4.__intersect_from_array__([ 1, 2 ])
56
+ #
57
+ # @param [ Array ] value The array to intersect to.
58
+ #
59
+ # @return [ Array ] The merged object.
60
+ #
61
+ # @since 1.0.0
62
+ def __intersect_from_array__(array)
63
+ array & Array(self)
64
+ end
65
+
66
+ # Merge this object into the provided array.
67
+ #
68
+ # @example Merge the object into the array.
69
+ # 4.__intersect_from_object__([ 1, 2 ])
70
+ #
71
+ # @param [ Object ] value The value to intersect to.
72
+ #
73
+ # @return [ Array ] The merged object.
74
+ #
75
+ # @since 1.0.0
76
+ def __intersect_from_object__(object)
77
+ Array(object) & Array(self)
78
+ end
79
+
80
+ # Combine the two objects using the union strategy.
81
+ #
82
+ # @example Add the object to the array.
83
+ # [ 1, 2, 3 ].__union__(4)
84
+ #
85
+ # @param [ Object ] object The object to union.
86
+ #
87
+ # @return [ Array ] The result of the union.
88
+ #
89
+ # @since 1.0.0
90
+ def __union__(object)
91
+ object.__union_from_object__(self)
92
+ end
93
+
94
+ # Merge this object into the provided array.
95
+ #
96
+ # @example Merge the object into the array.
97
+ # 4.__union_from_object__([ 1, 2 ])
98
+ #
99
+ # @param [ Object ] value The value to union to.
100
+ #
101
+ # @return [ Array ] The merged object.
102
+ #
103
+ # @since 1.0.0
104
+ def __union_from_object__(object)
105
+ (Array(object) + Array(self)).uniq
106
+ end
107
+
108
+ # Deep copy the object. This is for API compatibility, but needs to be
109
+ # overridden.
110
+ #
111
+ # @example Deep copy the object.
112
+ # 1.__deep_copy__
113
+ #
114
+ # @return [ Object ] self.
115
+ #
116
+ # @since 1.0.0
117
+ def __deep_copy__; self; end
118
+
119
+ # Get the object as an array.
120
+ #
121
+ # @example Get the object as an array.
122
+ # 4.__array__
123
+ #
124
+ # @return [ Array ] The wrapped object.
125
+ #
126
+ # @since 1.0.0
127
+ def __array__
128
+ [ self ]
129
+ end
130
+
131
+ # Get the object as expanded.
132
+ #
133
+ # @example Get the object expanded.
134
+ # obj.__expand_complex__
135
+ #
136
+ # @return [ Object ] self.
137
+ #
138
+ # @since 1.0.5
139
+ def __expand_complex__
140
+ self
141
+ end
142
+
143
+ # Is the object a regex.
144
+ #
145
+ # @example Is the object a regex?
146
+ # obj.regexp?
147
+ #
148
+ # @return [ false ] Always false.
149
+ #
150
+ # @since 1.0.4
151
+ def regexp?
152
+ false
153
+ end
154
+
155
+ module ClassMethods
156
+
157
+ # Evolve the object.
158
+ #
159
+ # @note This is here for API compatibility.
160
+ #
161
+ # @example Evolve an object.
162
+ # Object.evolve("test")
163
+ #
164
+ # @return [ Object ] The provided object.
165
+ #
166
+ # @since 1.0.0
167
+ def evolve(object)
168
+ object
169
+ end
170
+
171
+ private
172
+
173
+ # Evolve the object.
174
+ #
175
+ # @api private
176
+ #
177
+ # @todo Durran refactor out case statement.
178
+ #
179
+ # @example Evolve an object and yield.
180
+ # Object.evolve("test") do |obj|
181
+ # obj.to_s
182
+ # end
183
+ #
184
+ # @return [ Object ] The evolved object.
185
+ #
186
+ # @since 1.0.0
187
+ def __evolve__(object)
188
+ return nil if object.nil?
189
+ case object
190
+ when ::Array
191
+ object.map{ |obj| evolve(obj) }
192
+ when ::Range
193
+ { "$gte" => evolve(object.min), "$lte" => evolve(object.max) }
194
+ else
195
+ yield(object)
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ ::Object.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Object)
206
+ ::Object.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Object::ClassMethods)
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ class Criteria
4
+ module Queryable
5
+ module Extensions
6
+
7
+ # This module contains additional range behaviour.
8
+ module Range
9
+
10
+ # Get the range as an array.
11
+ #
12
+ # @example Get the range as an array.
13
+ # 1...3.__array__
14
+ #
15
+ # @return [ Array ] The range as an array.
16
+ #
17
+ # @since 1.0.0
18
+ def __array__
19
+ to_a
20
+ end
21
+
22
+ # Convert the range to a min/max mongo friendly query for dates.
23
+ #
24
+ # @example Evolve the range.
25
+ # (11231312..213123131).__evolve_date__
26
+ #
27
+ # @return [ Hash ] The min/max range query with times at midnight.
28
+ #
29
+ # @since 1.0.0
30
+ def __evolve_date__
31
+ { "$gte" => min.__evolve_date__, "$lte" => max.__evolve_date__ }
32
+ end
33
+
34
+ # Convert the range to a min/max mongo friendly query for times.
35
+ #
36
+ # @example Evolve the range.
37
+ # (11231312..213123131).__evolve_date__
38
+ #
39
+ # @return [ Hash ] The min/max range query with times.
40
+ #
41
+ # @since 1.0.0
42
+ def __evolve_time__
43
+ { "$gte" => min.__evolve_time__, "$lte" => max.__evolve_time__ }
44
+ end
45
+
46
+ module ClassMethods
47
+
48
+ # Evolve the range. This will transform it into a $gte/$lte selection.
49
+ #
50
+ # @example Evolve the range.
51
+ # Range.evolve(1..3)
52
+ #
53
+ # @param [ Range ] object The range to evolve.
54
+ #
55
+ # @return [ Hash ] The range as a gte/lte criteria.
56
+ #
57
+ # @since 1.0.0
58
+ def evolve(object)
59
+ return object unless object.is_a?(::Range)
60
+ { "$gte" => object.min, "$lte" => object.max }
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ ::Range.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Range)
70
+ ::Range.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Range::ClassMethods)