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,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
class Criteria
|
4
|
+
module Queryable
|
5
|
+
module Extensions
|
6
|
+
|
7
|
+
# This module contains additional regex behaviour.
|
8
|
+
module Regexp
|
9
|
+
|
10
|
+
# Is the object a regexp?
|
11
|
+
#
|
12
|
+
# @example Is the object a regex?
|
13
|
+
# /^[123]/.regexp?
|
14
|
+
#
|
15
|
+
# @return [ true ] Always true.
|
16
|
+
#
|
17
|
+
# @since 1.0.0
|
18
|
+
def regexp?; true; end
|
19
|
+
|
20
|
+
module ClassMethods
|
21
|
+
|
22
|
+
# Evolve the object into a regex.
|
23
|
+
#
|
24
|
+
# @example Evolve the object to a regex.
|
25
|
+
# Regexp.evolve("^[123]")
|
26
|
+
#
|
27
|
+
# @param [ Regexp, String ] object The object to evolve.
|
28
|
+
#
|
29
|
+
# @return [ Regexp ] The evolved regex.
|
30
|
+
#
|
31
|
+
# @since 1.0.0
|
32
|
+
def evolve(object)
|
33
|
+
__evolve__(object) do |obj|
|
34
|
+
::Regexp.new(obj)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
::Regexp.__send__(:include,Mongoid::Criteria::Queryable::Extensions::Regexp)
|
45
|
+
::Regexp.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Regexp::ClassMethods)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "set"
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
class Criteria
|
6
|
+
module Queryable
|
7
|
+
module Extensions
|
8
|
+
|
9
|
+
# This module contains additional object behaviour.
|
10
|
+
module Set
|
11
|
+
module ClassMethods
|
12
|
+
|
13
|
+
# Evolve the set, casting all its elements.
|
14
|
+
#
|
15
|
+
# @example Evolve the set.
|
16
|
+
# Set.evolve(set)
|
17
|
+
#
|
18
|
+
# @param [ Set, Object ] object The object to evolve.
|
19
|
+
#
|
20
|
+
# @return [ Array ] The evolved set.
|
21
|
+
#
|
22
|
+
# @since 1.0.0
|
23
|
+
def evolve(object)
|
24
|
+
return object if !object || !object.respond_to?(:map)
|
25
|
+
object.map{ |obj| obj.class.evolve(obj) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
::Set.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Set::ClassMethods)
|
@@ -0,0 +1,137 @@
|
|
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 String
|
9
|
+
|
10
|
+
# Evolve the string into a mongodb friendly date.
|
11
|
+
#
|
12
|
+
# @example Evolve the string.
|
13
|
+
# "2012-1-1".__evolve_date__
|
14
|
+
#
|
15
|
+
# @return [ Time ] The time at UTC midnight.
|
16
|
+
#
|
17
|
+
# @since 1.0.0
|
18
|
+
def __evolve_date__
|
19
|
+
time = ::Time.parse(self)
|
20
|
+
::Time.utc(time.year, time.month, time.day, 0, 0, 0, 0)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Evolve the string into a mongodb friendly time.
|
24
|
+
#
|
25
|
+
# @example Evolve the string.
|
26
|
+
# "2012-1-1".__evolve_time__
|
27
|
+
#
|
28
|
+
# @return [ Time ] The string as a time.
|
29
|
+
#
|
30
|
+
# @since 1.0.0
|
31
|
+
def __evolve_time__
|
32
|
+
::Time.parse(self).utc
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get the string as a mongo expression, adding $ to the front.
|
36
|
+
#
|
37
|
+
# @example Get the string as an expression.
|
38
|
+
# "test".__mongo_expression__
|
39
|
+
#
|
40
|
+
# @return [ String ] The string with $ at the front.
|
41
|
+
#
|
42
|
+
# @since 2.0.0
|
43
|
+
def __mongo_expression__
|
44
|
+
start_with?("$") ? self : "$#{self}"
|
45
|
+
end
|
46
|
+
|
47
|
+
# Get the string as a sort option.
|
48
|
+
#
|
49
|
+
# @example Get the string as a sort option.
|
50
|
+
# "field ASC".__sort_option__
|
51
|
+
#
|
52
|
+
# @return [ Hash ] The string as a sort option hash.
|
53
|
+
#
|
54
|
+
# @since 1.0.0
|
55
|
+
def __sort_option__
|
56
|
+
split(/,/).inject({}) do |hash, spec|
|
57
|
+
hash.tap do |_hash|
|
58
|
+
field, direction = spec.strip.split(/\s/)
|
59
|
+
_hash[field.to_sym] = direction.to_direction
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Get the string as a specification.
|
65
|
+
#
|
66
|
+
# @example Get the string as a criteria.
|
67
|
+
# "field".__expr_part__(value)
|
68
|
+
#
|
69
|
+
# @param [ Object ] value The value of the criteria.
|
70
|
+
# @param [ true, false ] negating If the selection should be negated.
|
71
|
+
#
|
72
|
+
# @return [ Hash ] The selection.
|
73
|
+
#
|
74
|
+
# @since 1.0.0
|
75
|
+
def __expr_part__(value, negating = false)
|
76
|
+
::String.__expr_part__(self, value, negating)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Get the string as a sort direction.
|
80
|
+
#
|
81
|
+
# @example Get the string as a sort direction.
|
82
|
+
# "1".to_direction
|
83
|
+
#
|
84
|
+
# @return [ Integer ] The direction.
|
85
|
+
#
|
86
|
+
# @since 1.0.0
|
87
|
+
def to_direction
|
88
|
+
self =~ /desc/i ? -1 : 1
|
89
|
+
end
|
90
|
+
|
91
|
+
module ClassMethods
|
92
|
+
|
93
|
+
# Get the value as a expression.
|
94
|
+
#
|
95
|
+
# @example Get the value as an expression.
|
96
|
+
# String.__expr_part__("field", value)
|
97
|
+
#
|
98
|
+
# @param [ String, Symbol ] key The field key.
|
99
|
+
# @param [ Object ] value The value of the criteria.
|
100
|
+
# @param [ true, false ] negating If the selection should be negated.
|
101
|
+
#
|
102
|
+
# @return [ Hash ] The selection.
|
103
|
+
#
|
104
|
+
# @since 2.0.0
|
105
|
+
def __expr_part__(key, value, negating = false)
|
106
|
+
if negating
|
107
|
+
{ key => { "$#{value.regexp? ? "not" : "ne"}" => value }}
|
108
|
+
else
|
109
|
+
{ key => value }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Evolves the string into a MongoDB friendly value - in this case
|
114
|
+
# a string.
|
115
|
+
#
|
116
|
+
# @example Evolve the string
|
117
|
+
# String.evolve(1)
|
118
|
+
#
|
119
|
+
# @param [ Object ] object The object to convert.
|
120
|
+
#
|
121
|
+
# @return [ String ] The value as a string.
|
122
|
+
#
|
123
|
+
# @since 1.0.0
|
124
|
+
def evolve(object)
|
125
|
+
__evolve__(object) do |obj|
|
126
|
+
obj.regexp? ? obj : obj.to_s
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
::String.__send__(:include, Mongoid::Criteria::Queryable::Extensions::String)
|
137
|
+
::String.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::String::ClassMethods)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
class Criteria
|
4
|
+
module Queryable
|
5
|
+
module Extensions
|
6
|
+
|
7
|
+
# This module contains additional symbol behaviour.
|
8
|
+
module Symbol
|
9
|
+
|
10
|
+
# Get the symbol as a specification.
|
11
|
+
#
|
12
|
+
# @example Get the symbol as a criteria.
|
13
|
+
# :field.__expr_part__(value)
|
14
|
+
#
|
15
|
+
# @param [ Object ] value The value of the criteria.
|
16
|
+
# @param [ true, false ] negating If the selection should be negated.
|
17
|
+
#
|
18
|
+
# @return [ Hash ] The selection.
|
19
|
+
#
|
20
|
+
# @since 1.0.0
|
21
|
+
def __expr_part__(value, negating = false)
|
22
|
+
::String.__expr_part__(self, value, negating)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get the symbol as a sort direction.
|
26
|
+
#
|
27
|
+
# @example Get the symbol as a sort direction.
|
28
|
+
# "1".to_direction
|
29
|
+
#
|
30
|
+
# @return [ Integer ] The direction.
|
31
|
+
#
|
32
|
+
# @since 1.0.0
|
33
|
+
def to_direction
|
34
|
+
to_s.to_direction
|
35
|
+
end
|
36
|
+
|
37
|
+
module ClassMethods
|
38
|
+
|
39
|
+
# Adds a method on symbol as a convenience for the MongoDB operator.
|
40
|
+
#
|
41
|
+
# @example Add the $in method.
|
42
|
+
# Symbol.add_key(:in, "$in")
|
43
|
+
#
|
44
|
+
# @param [ Symbol ] name The name of the method.
|
45
|
+
# @param [ Symbol ] strategy The name of the merge strategy.
|
46
|
+
# @param [ String ] operator The MongoDB operator.
|
47
|
+
# @param [ String ] additional The additional MongoDB operator.
|
48
|
+
#
|
49
|
+
# @since 1.0.0
|
50
|
+
def add_key(name, strategy, operator, additional = nil, &block)
|
51
|
+
define_method(name) do
|
52
|
+
method = "__#{strategy}__".to_sym
|
53
|
+
Key.new(self, method, operator, additional, &block)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Evolves the symbol into a MongoDB friendly value - in this case
|
58
|
+
# a symbol.
|
59
|
+
#
|
60
|
+
# @example Evolve the symbol
|
61
|
+
# Symbol.evolve("test")
|
62
|
+
#
|
63
|
+
# @param [ Object ] object The object to convert.
|
64
|
+
#
|
65
|
+
# @return [ Symbol ] The value as a symbol.
|
66
|
+
#
|
67
|
+
# @since 1.0.0
|
68
|
+
def evolve(object)
|
69
|
+
__evolve__(object) { |obj| obj.to_sym }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
::Symbol.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Symbol)
|
79
|
+
::Symbol.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Symbol::ClassMethods)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
class Criteria
|
4
|
+
module Queryable
|
5
|
+
module Extensions
|
6
|
+
|
7
|
+
# This module contains additional time behaviour.
|
8
|
+
module Time
|
9
|
+
|
10
|
+
# Evolve the time as a date, UTC midnight.
|
11
|
+
#
|
12
|
+
# @example Evolve the time to a date query format.
|
13
|
+
# time.__evolve_date__
|
14
|
+
#
|
15
|
+
# @return [ Time ] The date at midnight UTC.
|
16
|
+
#
|
17
|
+
# @since 1.0.0
|
18
|
+
def __evolve_date__
|
19
|
+
::Time.utc(year, month, day, 0, 0, 0, 0)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Evolve the time into a utc time.
|
23
|
+
#
|
24
|
+
# @example Evolve the time.
|
25
|
+
# time.__evolve_time__
|
26
|
+
#
|
27
|
+
# @return [ Time ] The time in UTC.
|
28
|
+
#
|
29
|
+
# @since 1.0.0
|
30
|
+
def __evolve_time__
|
31
|
+
utc
|
32
|
+
end
|
33
|
+
|
34
|
+
module ClassMethods
|
35
|
+
|
36
|
+
# Evolve the object to an date.
|
37
|
+
#
|
38
|
+
# @example Evolve dates.
|
39
|
+
#
|
40
|
+
# @example Evolve string dates.
|
41
|
+
#
|
42
|
+
# @example Evolve date ranges.
|
43
|
+
#
|
44
|
+
# @param [ Object ] object The object to evolve.
|
45
|
+
#
|
46
|
+
# @return [ Time ] The evolved date time.
|
47
|
+
#
|
48
|
+
# @since 1.0.0
|
49
|
+
def evolve(object)
|
50
|
+
object.__evolve_time__
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
::Time.__send__(:include, Mongoid::Criteria::Queryable::Extensions::Time)
|
60
|
+
::Time.__send__(:extend, Mongoid::Criteria::Queryable::Extensions::Time::ClassMethods)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
class Criteria
|
4
|
+
module Queryable
|
5
|
+
module Extensions
|
6
|
+
|
7
|
+
# This module contains additional time with zone behaviour.
|
8
|
+
module TimeWithZone
|
9
|
+
|
10
|
+
# Evolve the time into a utc time.
|
11
|
+
#
|
12
|
+
# @example Evolve the time.
|
13
|
+
# time.__evolve_time__
|
14
|
+
#
|
15
|
+
# @return [ Time ] The time in UTC.
|
16
|
+
#
|
17
|
+
# @since 1.0.0
|
18
|
+
def __evolve_time__
|
19
|
+
utc
|
20
|
+
end
|
21
|
+
|
22
|
+
module ClassMethods
|
23
|
+
|
24
|
+
# Evolve the object to an date.
|
25
|
+
#
|
26
|
+
# @example Evolve dates.
|
27
|
+
#
|
28
|
+
# @example Evolve string dates.
|
29
|
+
#
|
30
|
+
# @example Evolve date ranges.
|
31
|
+
#
|
32
|
+
# @param [ Object ] object The object to evolve.
|
33
|
+
#
|
34
|
+
# @return [ Time ] The evolved date time.
|
35
|
+
#
|
36
|
+
# @since 1.0.0
|
37
|
+
def evolve(object)
|
38
|
+
object.__evolve_time__
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
::ActiveSupport::TimeWithZone.__send__(
|
48
|
+
:include,
|
49
|
+
Mongoid::Criteria::Queryable::Extensions::TimeWithZone
|
50
|
+
)
|
51
|
+
::ActiveSupport::TimeWithZone.__send__(
|
52
|
+
:extend,
|
53
|
+
Mongoid::Criteria::Queryable::Extensions::TimeWithZone::ClassMethods
|
54
|
+
)
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
class Criteria
|
4
|
+
module Queryable
|
5
|
+
|
6
|
+
# Allows for easy delegation of queryable queryable instance methods to a
|
7
|
+
# specific method.
|
8
|
+
module Forwardable
|
9
|
+
|
10
|
+
# Tells queryable with method on the class to delegate to when calling an
|
11
|
+
# original selectable or optional method on the class.
|
12
|
+
#
|
13
|
+
# @example Tell queryable where to select from.
|
14
|
+
# class Band
|
15
|
+
# extend Queryable::Forwardable
|
16
|
+
# select_with :criteria
|
17
|
+
#
|
18
|
+
# def self.criteria
|
19
|
+
# Query.new
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# @param [ Symbol ] receiver The name of the receiver method.
|
24
|
+
#
|
25
|
+
# @return [ Array<Symbol> ] The names of the forwarded methods.
|
26
|
+
#
|
27
|
+
# @since 1.0.0
|
28
|
+
def select_with(receiver)
|
29
|
+
(Selectable.forwardables + Optional.forwardables).each do |name|
|
30
|
+
__forward__(name, receiver)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Forwards the method name to the provided receiver method.
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
#
|
40
|
+
# @example Define the forwarding.
|
41
|
+
# Model.__forward__(:exists, :criteria)
|
42
|
+
#
|
43
|
+
# @param [ Symbol ] name The name of the method.
|
44
|
+
# @param [ Symbol ] receiver The name of the receiver method.
|
45
|
+
#
|
46
|
+
# @since 1.0.0
|
47
|
+
def __forward__(name, receiver)
|
48
|
+
if self.class == Module
|
49
|
+
module_eval <<-SEL
|
50
|
+
def #{name}(*args, &block)
|
51
|
+
#{receiver}.__send__(:#{name}, *args, &block)
|
52
|
+
end
|
53
|
+
SEL
|
54
|
+
else
|
55
|
+
(class << self; self; end).class_eval <<-SEL
|
56
|
+
def #{name}(*args, &block)
|
57
|
+
#{receiver}.__send__(:#{name}, *args, &block)
|
58
|
+
end
|
59
|
+
SEL
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|