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.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/config/locales/en.yml +23 -16
- data/lib/mongoid.rb +4 -9
- data/lib/mongoid/atomic.rb +1 -1
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +9 -11
- data/lib/mongoid/attributes/dynamic.rb +5 -6
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +4 -0
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +37 -1
- data/lib/mongoid/clients.rb +0 -63
- data/lib/mongoid/clients/factory.rb +0 -2
- data/lib/mongoid/clients/options.rb +54 -249
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +26 -2
- data/lib/mongoid/config.rb +1 -1
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +6 -9
- data/lib/mongoid/contextual/geo_near.rb +2 -3
- data/lib/mongoid/contextual/map_reduce.rb +97 -24
- data/lib/mongoid/contextual/memory.rb +7 -4
- data/lib/mongoid/contextual/mongo.rb +63 -54
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/copyable.rb +19 -19
- data/lib/mongoid/criteria.rb +5 -4
- data/lib/mongoid/criteria/findable.rb +2 -3
- data/lib/mongoid/criteria/includable.rb +63 -16
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +86 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
- data/lib/mongoid/criteria/queryable/optional.rb +411 -0
- data/lib/mongoid/criteria/queryable/options.rb +136 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +196 -0
- data/lib/mongoid/criteria/queryable/smash.rb +103 -0
- data/lib/mongoid/document.rb +9 -23
- data/lib/mongoid/errors.rb +2 -1
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -5
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/hash.rb +2 -3
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +5 -2
- data/lib/mongoid/factory.rb +1 -0
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/fields/localized.rb +3 -8
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +3 -3
- data/lib/mongoid/indexable.rb +17 -16
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +1 -2
- data/lib/mongoid/interceptable.rb +6 -17
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +3 -10
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/persistable.rb +6 -5
- data/lib/mongoid/persistable/creatable.rb +2 -0
- data/lib/mongoid/persistable/deletable.rb +7 -3
- data/lib/mongoid/persistable/settable.rb +3 -16
- data/lib/mongoid/persistable/updatable.rb +10 -12
- data/lib/mongoid/persistence_context.rb +216 -0
- data/lib/mongoid/query_cache.rb +5 -30
- data/lib/mongoid/relations/accessors.rb +6 -2
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
- data/lib/mongoid/relations/builders.rb +2 -2
- data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/conversions.rb +1 -1
- data/lib/mongoid/relations/counter_cache.rb +28 -18
- data/lib/mongoid/relations/eager.rb +19 -7
- data/lib/mongoid/relations/eager/base.rb +5 -5
- data/lib/mongoid/relations/embedded/batchable.rb +9 -33
- data/lib/mongoid/relations/embedded/in.rb +16 -2
- data/lib/mongoid/relations/embedded/many.rb +23 -8
- data/lib/mongoid/relations/embedded/one.rb +17 -2
- data/lib/mongoid/relations/macros.rb +9 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +2 -33
- data/lib/mongoid/relations/referenced/in.rb +23 -11
- data/lib/mongoid/relations/referenced/many.rb +24 -16
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +17 -1
- data/lib/mongoid/relations/reflections.rb +3 -5
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +2 -3
- data/lib/mongoid/tasks/database.rb +1 -2
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +2 -4
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +0 -1
- data/spec/app/models/church.rb +0 -2
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/person.rb +3 -1
- data/spec/app/models/post.rb +0 -1
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +1 -5
- data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +63 -0
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +3 -11
- data/spec/mongoid/clients/options_spec.rb +378 -96
- data/spec/mongoid/clients_spec.rb +207 -170
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +41 -21
- data/spec/mongoid/contextual/atomic_spec.rb +77 -343
- data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
- data/spec/mongoid/contextual/memory_spec.rb +56 -316
- data/spec/mongoid/contextual/mongo_spec.rb +104 -378
- data/spec/mongoid/copyable_spec.rb +8 -15
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria_spec.rb +45 -63
- data/spec/mongoid/document_spec.rb +21 -88
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +4 -8
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/fields/localized_spec.rb +0 -91
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +6 -46
- data/spec/mongoid/interceptable_spec.rb +49 -10
- data/spec/mongoid/matchable/gt_spec.rb +11 -0
- data/spec/mongoid/matchable/gte_spec.rb +10 -0
- data/spec/mongoid/matchable/lt_spec.rb +11 -0
- data/spec/mongoid/matchable/lte_spec.rb +11 -0
- data/spec/mongoid/matchable_spec.rb +1 -51
- data/spec/mongoid/persistable/creatable_spec.rb +2 -2
- data/spec/mongoid/persistable/deletable_spec.rb +1 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +30 -30
- data/spec/mongoid/persistable/settable_spec.rb +0 -185
- data/spec/mongoid/persistable/updatable_spec.rb +166 -5
- data/spec/mongoid/persistence_context_spec.rb +654 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -65
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
- data/spec/mongoid/relations/cyclic_spec.rb +0 -22
- data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -7
- data/spec/mongoid/relations/proxy_spec.rb +3 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
- data/spec/mongoid/relations/reflections_spec.rb +9 -9
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +0 -12
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/spec_helper.rb +10 -10
- metadata +536 -479
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
- data/lib/mongoid/extensions/decimal128.rb +0 -39
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/matchable/regexp.rb +0 -27
- data/spec/app/models/post_genre.rb +0 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
- 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)
|