mongoid 6.1.0 → 6.1.1
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 +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
|