mongoid 6.1.0 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongoid/atomic.rb +3 -3
- data/lib/mongoid/attributes.rb +1 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -2
- data/lib/mongoid/attributes/nested.rb +1 -1
- data/lib/mongoid/attributes/processing.rb +0 -4
- data/lib/mongoid/changeable.rb +1 -1
- data/lib/mongoid/clients/options.rb +1 -1
- data/lib/mongoid/composable.rb +3 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +3 -2
- data/lib/mongoid/contextual/memory.rb +3 -3
- data/lib/mongoid/contextual/mongo.rb +5 -5
- data/lib/mongoid/contextual/none.rb +14 -2
- data/lib/mongoid/copyable.rb +1 -5
- data/lib/mongoid/criteria.rb +2 -2
- data/lib/mongoid/criteria/findable.rb +3 -2
- data/lib/mongoid/criteria/includable.rb +2 -2
- data/lib/mongoid/criteria/queryable/aggregable.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/array.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +4 -4
- data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -4
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +34 -0
- data/lib/mongoid/criteria/queryable/options.rb +16 -0
- data/lib/mongoid/criteria/queryable/selector.rb +1 -1
- data/lib/mongoid/document.rb +1 -1
- data/lib/mongoid/errors/delete_restriction.rb +2 -2
- data/lib/mongoid/errors/inverse_not_found.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +3 -2
- data/lib/mongoid/extensions/object.rb +2 -2
- data/lib/mongoid/extensions/time.rb +1 -1
- data/lib/mongoid/factory.rb +0 -1
- data/lib/mongoid/fields/foreign_key.rb +2 -2
- data/lib/mongoid/findable.rb +1 -1
- data/lib/mongoid/indexable.rb +3 -2
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/interceptable.rb +3 -9
- data/lib/mongoid/loggable.rb +1 -1
- data/lib/mongoid/matchable.rb +16 -9
- data/lib/mongoid/matchable/all.rb +2 -2
- data/lib/mongoid/matchable/and.rb +3 -3
- data/lib/mongoid/matchable/default.rb +2 -2
- data/lib/mongoid/matchable/elem_match.rb +3 -3
- data/lib/mongoid/matchable/exists.rb +2 -2
- data/lib/mongoid/matchable/gt.rb +2 -2
- data/lib/mongoid/matchable/gte.rb +2 -2
- data/lib/mongoid/matchable/in.rb +2 -2
- data/lib/mongoid/matchable/lt.rb +2 -2
- data/lib/mongoid/matchable/lte.rb +2 -2
- data/lib/mongoid/matchable/ne.rb +2 -2
- data/lib/mongoid/matchable/nin.rb +2 -2
- data/lib/mongoid/matchable/or.rb +3 -3
- data/lib/mongoid/matchable/regexp.rb +27 -0
- data/lib/mongoid/matchable/size.rb +2 -2
- data/lib/mongoid/persistable.rb +0 -3
- data/lib/mongoid/persistable/creatable.rb +2 -4
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +2 -3
- data/lib/mongoid/relations/accessors.rb +1 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -4
- data/lib/mongoid/relations/bindings/embedded/many.rb +1 -8
- data/lib/mongoid/relations/bindings/embedded/one.rb +0 -10
- data/lib/mongoid/relations/bindings/referenced/many.rb +0 -4
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
- 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 +10 -10
- data/lib/mongoid/relations/eager.rb +6 -11
- data/lib/mongoid/relations/eager/base.rb +4 -4
- data/lib/mongoid/relations/embedded/batchable.rb +3 -3
- data/lib/mongoid/relations/embedded/in.rb +1 -3
- data/lib/mongoid/relations/embedded/many.rb +12 -9
- data/lib/mongoid/relations/embedded/one.rb +1 -3
- data/lib/mongoid/relations/macros.rb +3 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/nested_builder.rb +1 -1
- data/lib/mongoid/relations/proxy.rb +3 -2
- data/lib/mongoid/relations/referenced/in.rb +1 -4
- data/lib/mongoid/relations/referenced/many.rb +5 -7
- data/lib/mongoid/relations/referenced/many_to_many.rb +2 -2
- data/lib/mongoid/relations/referenced/one.rb +0 -2
- data/lib/mongoid/relations/reflections.rb +2 -2
- data/lib/mongoid/relations/synchronization.rb +11 -11
- data/lib/mongoid/scopable.rb +2 -2
- data/lib/mongoid/serializable.rb +4 -3
- data/lib/mongoid/tasks/database.rb +2 -1
- data/lib/mongoid/threaded.rb +4 -4
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +4 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -2
- data/spec/app/models/book.rb +2 -1
- data/spec/app/models/page.rb +1 -1
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +89 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +15 -0
- data/spec/mongoid/criteria_spec.rb +6 -2
- data/spec/mongoid/interceptable_spec.rb +19 -0
- data/spec/mongoid/matchable/all_spec.rb +4 -4
- data/spec/mongoid/matchable/and_spec.rb +10 -10
- data/spec/mongoid/matchable/default_spec.rb +12 -12
- data/spec/mongoid/matchable/elem_match_spec.rb +11 -11
- data/spec/mongoid/matchable/exists_spec.rb +5 -5
- data/spec/mongoid/matchable/gt_spec.rb +8 -8
- data/spec/mongoid/matchable/gte_spec.rb +8 -8
- data/spec/mongoid/matchable/in_spec.rb +5 -5
- data/spec/mongoid/matchable/lt_spec.rb +8 -8
- data/spec/mongoid/matchable/lte_spec.rb +8 -8
- data/spec/mongoid/matchable/ne_spec.rb +5 -5
- data/spec/mongoid/matchable/nin_spec.rb +5 -5
- data/spec/mongoid/matchable/or_spec.rb +7 -7
- data/spec/mongoid/matchable/regexp_spec.rb +59 -0
- data/spec/mongoid/matchable/size_spec.rb +3 -3
- data/spec/mongoid/matchable_spec.rb +108 -58
- data/spec/mongoid/persistable/deletable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistence_context_spec.rb +22 -1
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
- data/spec/mongoid/relations/embedded/many_spec.rb +24 -6
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/synchronization_spec.rb +48 -2
- data/spec/mongoid/relations/touchable_spec.rb +40 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- metadata +9 -26
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -1
@@ -88,6 +88,22 @@ module Mongoid
|
|
88
88
|
pipeline
|
89
89
|
end
|
90
90
|
|
91
|
+
# Perform a deep copy of the options.
|
92
|
+
#
|
93
|
+
# @example Perform a deep copy.
|
94
|
+
# options.__deep_copy__
|
95
|
+
#
|
96
|
+
# @return [ Options ] The copied options.
|
97
|
+
#
|
98
|
+
# @since 6.1.1
|
99
|
+
def __deep_copy__
|
100
|
+
self.class.new(aliases, serializers) do |copy|
|
101
|
+
each_pair do |key, value|
|
102
|
+
copy.merge!(key => value.__deep_copy__)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
91
107
|
private
|
92
108
|
|
93
109
|
# Evolve a single key selection with various types of values.
|
@@ -83,7 +83,7 @@ module Mongoid
|
|
83
83
|
# @example Evolve the multi-selection.
|
84
84
|
# selector.evolve_multi([{ field: "value" }])
|
85
85
|
#
|
86
|
-
# @param [ Array<Hash> ] The multi-selection.
|
86
|
+
# @param [ Array<Hash> ] value The multi-selection.
|
87
87
|
#
|
88
88
|
# @return [ Array<Hash> ] The serialized values.
|
89
89
|
#
|
data/lib/mongoid/document.rb
CHANGED
@@ -282,7 +282,7 @@ module Mongoid
|
|
282
282
|
relation, stored = send(name), meta.store_as
|
283
283
|
if attributes.key?(stored) || !relation.blank?
|
284
284
|
if relation
|
285
|
-
attributes[stored] = relation.
|
285
|
+
attributes[stored] = relation.send(:as_attributes)
|
286
286
|
else
|
287
287
|
attributes.delete(stored)
|
288
288
|
end
|
@@ -11,8 +11,8 @@ module Mongoid
|
|
11
11
|
# @example Create the new callbacks error.
|
12
12
|
# Callbacks.new(Post, :create!)
|
13
13
|
#
|
14
|
-
# @param [ Class ]
|
15
|
-
# @param [ Symbol ]
|
14
|
+
# @param [ Class ] document
|
15
|
+
# @param [ Symbol ] relation
|
16
16
|
#
|
17
17
|
# @since 3.0.0
|
18
18
|
def initialize(document, relation)
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
12
12
|
#
|
13
13
|
# @param [ Class ] base The base class.
|
14
14
|
# @param [ Symbol ] name The name of the relation.
|
15
|
-
# @param [ Class ] The child class.
|
15
|
+
# @param [ Class ] klass The child class.
|
16
16
|
# @param [ Symbol ] inverse The attempted inverse key.
|
17
17
|
#
|
18
18
|
# @since 3.0.0
|
@@ -162,10 +162,11 @@ module Mongoid
|
|
162
162
|
# @api private
|
163
163
|
#
|
164
164
|
# @example Mongoize for the klass, field and value.
|
165
|
-
# {}.mongoize_for(Band, "name", "test")
|
165
|
+
# {}.mongoize_for("$push", Band, "name", "test")
|
166
166
|
#
|
167
|
+
# @param [ String ] operator The operator.
|
167
168
|
# @param [ Class ] klass The model class.
|
168
|
-
# @param [ String, Symbol ] The field key.
|
169
|
+
# @param [ String, Symbol ] key The field key.
|
169
170
|
# @param [ Object ] value The value to mongoize.
|
170
171
|
#
|
171
172
|
# @return [ Object ] The mongoized value.
|
@@ -94,7 +94,7 @@ module Mongoid
|
|
94
94
|
# object.do_or_do_not(:use, "The Force")
|
95
95
|
#
|
96
96
|
# @param [ String, Symbol ] name The method name.
|
97
|
-
# @param [ Array ]
|
97
|
+
# @param [ Array ] args The arguments.
|
98
98
|
#
|
99
99
|
# @return [ Object, nil ] The result of the method call or nil if the
|
100
100
|
# method does not exist.
|
@@ -209,7 +209,7 @@ module Mongoid
|
|
209
209
|
# object.you_must(:use, "The Force")
|
210
210
|
#
|
211
211
|
# @param [ String, Symbol ] name The method name.
|
212
|
-
# @param [ Array ]
|
212
|
+
# @param [ Array ] args The arguments.
|
213
213
|
#
|
214
214
|
# @return [ Object, nil ] The result of the method call or nil if the
|
215
215
|
# method does not exist. Nil if the object is frozen.
|
data/lib/mongoid/factory.rb
CHANGED
@@ -14,7 +14,6 @@ module Mongoid
|
|
14
14
|
#
|
15
15
|
# @param [ Class ] klass The class to instantiate from if _type is not present.
|
16
16
|
# @param [ Hash ] attributes The document attributes.
|
17
|
-
# @param [ Hash ] options The mass assignment scoping options.
|
18
17
|
#
|
19
18
|
# @return [ Document ] The instantiated document.
|
20
19
|
def build(klass, attributes = nil)
|
@@ -14,8 +14,8 @@ module Mongoid
|
|
14
14
|
# @param [ String ] name The name of the field.
|
15
15
|
# @param [ String ] key The atomic location of the field.
|
16
16
|
# @param [ Hash ] mods The current modifications.
|
17
|
-
# @param [ Array ]
|
18
|
-
# @param [ Array ]
|
17
|
+
# @param [ Array ] new_elements The new elements to add.
|
18
|
+
# @param [ Array ] old_elements The old elements getting removed.
|
19
19
|
#
|
20
20
|
# @since 2.4.0
|
21
21
|
def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
|
data/lib/mongoid/findable.rb
CHANGED
@@ -71,7 +71,7 @@ module Mongoid
|
|
71
71
|
# @example Do any documents exist for the conditions?
|
72
72
|
# Person.exists?
|
73
73
|
#
|
74
|
-
# @
|
74
|
+
# @return [ true, false ] If any documents exist for the conditions.
|
75
75
|
def exists?
|
76
76
|
with_default_scope.exists?
|
77
77
|
end
|
data/lib/mongoid/indexable.rb
CHANGED
@@ -92,7 +92,7 @@ module Mongoid
|
|
92
92
|
# index({ name: 1 }, { background: true })
|
93
93
|
# end
|
94
94
|
#
|
95
|
-
# @param [ Symbol ]
|
95
|
+
# @param [ Symbol ] spec The index spec.
|
96
96
|
# @param [ Hash ] options The index options.
|
97
97
|
#
|
98
98
|
# @return [ Hash ] The index options.
|
@@ -110,7 +110,8 @@ module Mongoid
|
|
110
110
|
# @example Get the index specification.
|
111
111
|
# Model.index_specification(name: 1)
|
112
112
|
#
|
113
|
-
# @param [ Hash ]
|
113
|
+
# @param [ Hash ] index_hash The index key/direction pair.
|
114
|
+
# @param [ String ] index_name The index name.
|
114
115
|
#
|
115
116
|
# @return [ Specification ] The found specification.
|
116
117
|
#
|
@@ -99,7 +99,7 @@ module Mongoid
|
|
99
99
|
# @example Normalize the index options.
|
100
100
|
# specification.normalize_options(drop_dups: true)
|
101
101
|
#
|
102
|
-
# @param [ Hash ]
|
102
|
+
# @param [ Hash ] opts The index options.
|
103
103
|
#
|
104
104
|
# @return [ Hash ] The normalized options.
|
105
105
|
#
|
@@ -46,7 +46,7 @@ module Mongoid
|
|
46
46
|
# @example Is the callback executable?
|
47
47
|
# document.callback_executable?(:save)
|
48
48
|
#
|
49
|
-
# @param [ Symbol ]
|
49
|
+
# @param [ Symbol ] kind The type of callback.
|
50
50
|
#
|
51
51
|
# @return [ true, false ] If the callback can be executed.
|
52
52
|
#
|
@@ -118,19 +118,13 @@ module Mongoid
|
|
118
118
|
# end
|
119
119
|
#
|
120
120
|
# @param [ Symbol ] kind The type of callback to execute.
|
121
|
-
# @param [ Array ]
|
121
|
+
# @param [ Array ] args Any options.
|
122
122
|
#
|
123
123
|
# @return [ Document ] The document
|
124
124
|
#
|
125
125
|
# @since 2.3.0
|
126
126
|
def run_callbacks(kind, *args, &block)
|
127
127
|
cascadable_children(kind).each do |child|
|
128
|
-
# This is returning false for some destroy tests on 4.1.0.beta1,
|
129
|
-
# causing them to fail since 4.1.0 expects a block to be passed if the
|
130
|
-
# callbacks for the type are empty. If no block is passed then the nil
|
131
|
-
# return value gets interpreted as false and halts the chain.
|
132
|
-
#
|
133
|
-
# @see https://github.com/rails/rails/blob/master/activesupport/lib/active_support/callbacks.rb#L79
|
134
128
|
if child.run_callbacks(child_callback_type(kind, child), *args) == false
|
135
129
|
return false
|
136
130
|
end
|
@@ -196,7 +190,7 @@ module Mongoid
|
|
196
190
|
#
|
197
191
|
# @since 2.3.0
|
198
192
|
def cascadable_child?(kind, child, metadata)
|
199
|
-
return false if kind == :initialize || kind == :find
|
193
|
+
return false if kind == :initialize || kind == :find || kind == :touch
|
200
194
|
return false if kind == :validate && metadata.validate?
|
201
195
|
child.callback_executable?(kind) ? child.in_callback_state?(kind) : false
|
202
196
|
end
|
data/lib/mongoid/loggable.rb
CHANGED
data/lib/mongoid/matchable.rb
CHANGED
@@ -13,6 +13,7 @@ require "mongoid/matchable/nin"
|
|
13
13
|
require "mongoid/matchable/or"
|
14
14
|
require "mongoid/matchable/size"
|
15
15
|
require "mongoid/matchable/elem_match"
|
16
|
+
require "mongoid/matchable/regexp"
|
16
17
|
|
17
18
|
module Mongoid
|
18
19
|
|
@@ -46,26 +47,26 @@ module Mongoid
|
|
46
47
|
# MongoDB selector. Used for matching on embedded associations.
|
47
48
|
#
|
48
49
|
# @example Does the document match?
|
49
|
-
# document.
|
50
|
+
# document._matches?(:title => { "$in" => [ "test" ] })
|
50
51
|
#
|
51
52
|
# @param [ Hash ] selector The MongoDB selector.
|
52
53
|
#
|
53
54
|
# @return [ true, false ] True if matches, false if not.
|
54
55
|
#
|
55
56
|
# @since 1.0.0
|
56
|
-
def
|
57
|
+
def _matches?(selector)
|
57
58
|
selector.each_pair do |key, value|
|
58
59
|
if value.is_a?(Hash)
|
59
60
|
value.each do |item|
|
60
61
|
if item[0].to_s == "$not".freeze
|
61
62
|
item = item[1]
|
62
|
-
return false if matcher(self, key, item).
|
63
|
+
return false if matcher(self, key, item)._matches?(item)
|
63
64
|
else
|
64
|
-
return false unless matcher(self, key, Hash[*item]).
|
65
|
+
return false unless matcher(self, key, Hash[*item])._matches?(Hash[*item])
|
65
66
|
end
|
66
67
|
end
|
67
68
|
else
|
68
|
-
return false unless matcher(self, key, value).
|
69
|
+
return false unless matcher(self, key, value)._matches?(value)
|
69
70
|
end
|
70
71
|
end
|
71
72
|
true
|
@@ -83,7 +84,7 @@ module Mongoid
|
|
83
84
|
#
|
84
85
|
# @param [ Document ] document The document to check.
|
85
86
|
# @param [ Symbol, String ] key The field name.
|
86
|
-
# @param [ Object, Hash ] The value or selector.
|
87
|
+
# @param [ Object, Hash ] value The value or selector.
|
87
88
|
#
|
88
89
|
# @return [ Matcher ] The matcher.
|
89
90
|
#
|
@@ -104,7 +105,7 @@ module Mongoid
|
|
104
105
|
#
|
105
106
|
# @param [ Document ] document The document to check.
|
106
107
|
# @param [ Symbol, String ] key The field name.
|
107
|
-
# @param [ Object, Hash ] The value or selector.
|
108
|
+
# @param [ Object, Hash ] value The value or selector.
|
108
109
|
#
|
109
110
|
# @return [ Matcher ] The matcher.
|
110
111
|
#
|
@@ -117,6 +118,8 @@ module Mongoid
|
|
117
118
|
else
|
118
119
|
Default.new(extract_attribute(document, key))
|
119
120
|
end
|
121
|
+
elsif value.regexp?
|
122
|
+
Regexp.new(extract_attribute(document, key))
|
120
123
|
else
|
121
124
|
case key.to_s
|
122
125
|
when "$or" then Or.new(value, document)
|
@@ -143,9 +146,13 @@ module Mongoid
|
|
143
146
|
# @since 2.2.1
|
144
147
|
def extract_attribute(document, key)
|
145
148
|
if (key_string = key.to_s) =~ /.+\..+/
|
146
|
-
key_string.split('.').inject(document.
|
149
|
+
key_string.split('.').inject(document.send(:as_attributes)) do |_attribs, _key|
|
147
150
|
if _attribs.is_a?(::Array)
|
148
|
-
_attribs.
|
151
|
+
if _key =~ /\A\d+\z/ && _attribs.none? {|doc| doc.is_a?(Hash)}
|
152
|
+
_attribs.try(:[], _key.to_i)
|
153
|
+
else
|
154
|
+
_attribs.map { |doc| doc.try(:[], _key) }
|
155
|
+
end
|
149
156
|
else
|
150
157
|
_attribs.try(:[], _key)
|
151
158
|
end
|
@@ -8,12 +8,12 @@ module Mongoid
|
|
8
8
|
# Return true if the attribute and first value in the hash are equal.
|
9
9
|
#
|
10
10
|
# @example Do the values match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?({ :key => 10 })
|
12
12
|
#
|
13
13
|
# @param [ Hash ] value The values to check.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If the values match.
|
16
|
-
def
|
16
|
+
def _matches?(value)
|
17
17
|
first = first(value)
|
18
18
|
return false if first.is_a?(Array) && first.empty?
|
19
19
|
|
@@ -8,19 +8,19 @@ module Mongoid
|
|
8
8
|
# Does the supplied query match the attribute?
|
9
9
|
#
|
10
10
|
# @example Does this match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?([ { field => value } ])
|
12
12
|
#
|
13
13
|
# @param [ Array ] conditions The or expression.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] True if matches, false if not.
|
16
16
|
#
|
17
17
|
# @since 2.3.0
|
18
|
-
def
|
18
|
+
def _matches?(conditions)
|
19
19
|
conditions.each do |condition|
|
20
20
|
condition.keys.each do |k|
|
21
21
|
key = k
|
22
22
|
value = condition[k]
|
23
|
-
return false unless document.
|
23
|
+
return false unless document._matches?(key => value)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
true
|
@@ -24,14 +24,14 @@ module Mongoid
|
|
24
24
|
# if the value is included.
|
25
25
|
#
|
26
26
|
# @example Does this value match?
|
27
|
-
# default.
|
27
|
+
# default._matches?("value")
|
28
28
|
#
|
29
29
|
# @param [ Object ] value The value to check if it matches.
|
30
30
|
#
|
31
31
|
# @return [ true, false ] True if matches, false if not.
|
32
32
|
#
|
33
33
|
# @since 1.0.0
|
34
|
-
def
|
34
|
+
def _matches?(value)
|
35
35
|
attribute.is_a?(Array) && !value.is_a?(Array) ? attribute.any? { |_attribute| value === _attribute } : value === attribute
|
36
36
|
end
|
37
37
|
|
@@ -7,19 +7,19 @@ module Mongoid
|
|
7
7
|
# Return true if a given predicate matches a sub document entirely
|
8
8
|
#
|
9
9
|
# @example Do the values match?
|
10
|
-
# matcher.
|
10
|
+
# matcher._matches?({"$elemMatch" => {"a" => 1, "b" => 2}})
|
11
11
|
#
|
12
12
|
# @param [ Hash ] value The values to check.
|
13
13
|
#
|
14
14
|
# @return [ true, false ] If the values match.
|
15
|
-
def
|
15
|
+
def _matches?(value)
|
16
16
|
if !@attribute.is_a?(Array) || !value.kind_of?(Hash) || !value["$elemMatch"].kind_of?(Hash)
|
17
17
|
return false
|
18
18
|
end
|
19
19
|
|
20
20
|
return @attribute.any? do |sub_document|
|
21
21
|
value["$elemMatch"].all? do |k, v|
|
22
|
-
Matchable.matcher(sub_document, k, v).
|
22
|
+
Matchable.matcher(sub_document, k, v)._matches?(v)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -10,12 +10,12 @@ module Mongoid
|
|
10
10
|
# non-existence.
|
11
11
|
#
|
12
12
|
# @example Does anything exist?
|
13
|
-
# matcher.
|
13
|
+
# matcher._matches?({ :key => 10 })
|
14
14
|
#
|
15
15
|
# @param [ Hash ] value The values to check.
|
16
16
|
#
|
17
17
|
# @return [ true, false ] If a value exists.
|
18
|
-
def
|
18
|
+
def _matches?(value)
|
19
19
|
@attribute.nil? != value.values.first
|
20
20
|
end
|
21
21
|
end
|
data/lib/mongoid/matchable/gt.rb
CHANGED
@@ -8,12 +8,12 @@ module Mongoid
|
|
8
8
|
# Return true if the attribute is greater than the value.
|
9
9
|
#
|
10
10
|
# @example Do the values match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?({ :key => 10 })
|
12
12
|
#
|
13
13
|
# @param [ Hash ] value The values to check.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If a value exists.
|
16
|
-
def
|
16
|
+
def _matches?(value)
|
17
17
|
determine(value, :>)
|
18
18
|
rescue ArgumentError
|
19
19
|
false
|
@@ -8,12 +8,12 @@ module Mongoid
|
|
8
8
|
# Return true if the attribute is greater than or equal to the value.
|
9
9
|
#
|
10
10
|
# @example Do the values match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?({ :key => 10 })
|
12
12
|
#
|
13
13
|
# @param [ Hash ] value The values to check.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If a value exists.
|
16
|
-
def
|
16
|
+
def _matches?(value)
|
17
17
|
determine(value, :>=)
|
18
18
|
rescue ArgumentError
|
19
19
|
false
|
data/lib/mongoid/matchable/in.rb
CHANGED
@@ -8,12 +8,12 @@ module Mongoid
|
|
8
8
|
# Return true if the attribute is in the values.
|
9
9
|
#
|
10
10
|
# @example Do the values match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?({ :key => 10 })
|
12
12
|
#
|
13
13
|
# @param [ Hash ] value The values to check.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If a value exists.
|
16
|
-
def
|
16
|
+
def _matches?(value)
|
17
17
|
attribute_array = @attribute.nil? ? [nil] : Array.wrap(@attribute)
|
18
18
|
value.values.first.any? do |e|
|
19
19
|
attribute_array.any? { |_attribute| e === _attribute }
|
data/lib/mongoid/matchable/lt.rb
CHANGED
@@ -8,12 +8,12 @@ module Mongoid
|
|
8
8
|
# Return true if the attribute is less than the value.
|
9
9
|
#
|
10
10
|
# @example Do the values match?
|
11
|
-
# matcher.
|
11
|
+
# matcher._matches?({ :key => 10 })
|
12
12
|
#
|
13
13
|
# @param [ Hash ] value The values to check.
|
14
14
|
#
|
15
15
|
# @return [ true, false ] If a value exists.
|
16
|
-
def
|
16
|
+
def _matches?(value)
|
17
17
|
determine(value, :<)
|
18
18
|
rescue ArgumentError
|
19
19
|
false
|