mongoid 8.0.1 → 8.0.2
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
- checksums.yaml.gz.sig +0 -0
- data/lib/config/locales/en.yml +1 -0
- data/lib/mongoid/association/accessors.rb +6 -6
- data/lib/mongoid/association/bindable.rb +2 -2
- data/lib/mongoid/association/constrainable.rb +0 -1
- data/lib/mongoid/association/embedded/batchable.rb +5 -5
- data/lib/mongoid/association/embedded/cyclic.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +10 -10
- data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +2 -2
- data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
- data/lib/mongoid/association/many.rb +6 -7
- data/lib/mongoid/association/nested/many.rb +3 -3
- data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
- data/lib/mongoid/association/nested/one.rb +5 -5
- data/lib/mongoid/association/one.rb +2 -2
- data/lib/mongoid/association/options.rb +9 -9
- data/lib/mongoid/association/proxy.rb +2 -3
- data/lib/mongoid/association/referenced/auto_save.rb +1 -1
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
- data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
- data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
- data/lib/mongoid/association/referenced/eager.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +2 -2
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -10
- data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
- data/lib/mongoid/association/referenced/has_many.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
- data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_one.rb +3 -3
- data/lib/mongoid/association/referenced/syncable.rb +2 -2
- data/lib/mongoid/association/reflections.rb +2 -2
- data/lib/mongoid/association/relatable.rb +6 -6
- data/lib/mongoid/association.rb +5 -5
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/attributes/dynamic.rb +3 -3
- data/lib/mongoid/attributes/nested.rb +5 -5
- data/lib/mongoid/attributes/processing.rb +1 -1
- data/lib/mongoid/attributes/projector.rb +1 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/attributes.rb +13 -13
- data/lib/mongoid/changeable.rb +5 -5
- data/lib/mongoid/clients/options.rb +1 -1
- data/lib/mongoid/clients/validators/storage.rb +3 -3
- data/lib/mongoid/config/validators/client.rb +6 -6
- data/lib/mongoid/config.rb +7 -7
- data/lib/mongoid/contextual/aggregable/memory.rb +1 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +4 -4
- data/lib/mongoid/contextual/aggregable/none.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +7 -7
- data/lib/mongoid/contextual/memory.rb +5 -5
- data/lib/mongoid/contextual/mongo.rb +14 -14
- data/lib/mongoid/contextual/none.rb +2 -2
- data/lib/mongoid/contextual/queryable.rb +1 -1
- data/lib/mongoid/contextual.rb +2 -2
- data/lib/mongoid/criteria/findable.rb +7 -4
- data/lib/mongoid/criteria/includable.rb +1 -1
- data/lib/mongoid/criteria/permission.rb +1 -1
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +2 -2
- data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +1 -1
- data/lib/mongoid/criteria/queryable/key.rb +3 -3
- data/lib/mongoid/criteria/queryable/optional.rb +2 -2
- data/lib/mongoid/criteria/queryable/options.rb +1 -1
- data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
- data/lib/mongoid/criteria/queryable/selectable.rb +3 -3
- data/lib/mongoid/criteria/queryable/selector.rb +3 -3
- data/lib/mongoid/criteria/queryable/smash.rb +1 -1
- data/lib/mongoid/criteria/queryable.rb +1 -1
- data/lib/mongoid/criteria/scopable.rb +2 -2
- data/lib/mongoid/criteria.rb +14 -9
- data/lib/mongoid/deprecable.rb +1 -1
- data/lib/mongoid/document.rb +2 -2
- data/lib/mongoid/equality.rb +12 -12
- data/lib/mongoid/errors/document_not_found.rb +5 -5
- data/lib/mongoid/errors/invalid_config_option.rb +1 -1
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +1 -1
- data/lib/mongoid/errors/invalid_relation.rb +1 -1
- data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
- data/lib/mongoid/errors/invalid_session_use.rb +1 -1
- data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
- data/lib/mongoid/errors/mongoid_error.rb +3 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
- data/lib/mongoid/errors/no_client_database.rb +1 -1
- data/lib/mongoid/errors/no_client_hosts.rb +1 -1
- data/lib/mongoid/errors/readonly_attribute.rb +1 -1
- data/lib/mongoid/errors/unknown_attribute.rb +1 -1
- data/lib/mongoid/extensions/array.rb +1 -1
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/extensions/module.rb +1 -1
- data/lib/mongoid/extensions/object.rb +6 -6
- data/lib/mongoid/extensions/string.rb +9 -9
- data/lib/mongoid/extensions/symbol.rb +1 -1
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +4 -4
- data/lib/mongoid/fields/localized.rb +2 -2
- data/lib/mongoid/fields/standard.rb +7 -7
- data/lib/mongoid/fields.rb +9 -9
- data/lib/mongoid/findable.rb +7 -6
- data/lib/mongoid/indexable/specification.rb +1 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -1
- data/lib/mongoid/interceptable.rb +4 -4
- data/lib/mongoid/matchable.rb +1 -1
- data/lib/mongoid/matcher.rb +12 -7
- data/lib/mongoid/persistable/creatable.rb +4 -4
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/destroyable.rb +1 -1
- data/lib/mongoid/persistable/savable.rb +2 -2
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +7 -7
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistable.rb +3 -3
- data/lib/mongoid/persistence_context.rb +3 -3
- data/lib/mongoid/query_cache.rb +2 -2
- data/lib/mongoid/scopable.rb +17 -15
- data/lib/mongoid/serializable.rb +10 -6
- data/lib/mongoid/stateful.rb +10 -10
- data/lib/mongoid/tasks/database.rb +0 -2
- data/lib/mongoid/threaded/lifecycle.rb +5 -5
- data/lib/mongoid/threaded.rb +9 -9
- data/lib/mongoid/timestamps/updated.rb +1 -1
- data/lib/mongoid/traversable.rb +3 -3
- data/lib/mongoid/validatable/localizable.rb +1 -1
- data/lib/mongoid/validatable/macros.rb +0 -2
- data/lib/mongoid/validatable/presence.rb +2 -2
- data/lib/mongoid/validatable/uniqueness.rb +7 -7
- data/lib/mongoid/validatable.rb +6 -6
- data/lib/mongoid/version.rb +1 -1
- data/spec/mongoid/equality_spec.rb +12 -12
- data/spec/mongoid/indexable_spec.rb +23 -1
- data/spec/mongoid/scopable_spec.rb +34 -16
- data.tar.gz.sig +0 -0
- metadata +2 -2
- metadata.gz.sig +0 -0
data/lib/mongoid/attributes.rb
CHANGED
|
@@ -25,9 +25,9 @@ module Mongoid
|
|
|
25
25
|
# @example Is the attribute present?
|
|
26
26
|
# person.attribute_present?("title")
|
|
27
27
|
#
|
|
28
|
-
# @param [ String
|
|
28
|
+
# @param [ String | Symbol ] name The name of the attribute.
|
|
29
29
|
#
|
|
30
|
-
# @return [ true
|
|
30
|
+
# @return [ true | false ] True if present, false if not.
|
|
31
31
|
def attribute_present?(name)
|
|
32
32
|
attribute = read_raw_attribute(name)
|
|
33
33
|
!attribute.blank? || attribute == false
|
|
@@ -50,9 +50,9 @@ module Mongoid
|
|
|
50
50
|
# @example Does the document have the attribute?
|
|
51
51
|
# model.has_attribute?(:name)
|
|
52
52
|
#
|
|
53
|
-
# @param [ String
|
|
53
|
+
# @param [ String | Symbol ] name The name of the attribute.
|
|
54
54
|
#
|
|
55
|
-
# @return [ true
|
|
55
|
+
# @return [ true | false ] If the key is present in the attributes.
|
|
56
56
|
def has_attribute?(name)
|
|
57
57
|
attributes.key?(name.to_s)
|
|
58
58
|
end
|
|
@@ -63,9 +63,9 @@ module Mongoid
|
|
|
63
63
|
# @example Does the document have the attribute before it was assigned?
|
|
64
64
|
# model.has_attribute_before_type_cast?(:name)
|
|
65
65
|
#
|
|
66
|
-
# @param [ String
|
|
66
|
+
# @param [ String | Symbol ] name The name of the attribute.
|
|
67
67
|
#
|
|
68
|
-
# @return [ true
|
|
68
|
+
# @return [ true | false ] If the key is present in the
|
|
69
69
|
# attributes_before_type_cast.
|
|
70
70
|
def has_attribute_before_type_cast?(name)
|
|
71
71
|
attributes_before_type_cast.key?(name.to_s)
|
|
@@ -80,7 +80,7 @@ module Mongoid
|
|
|
80
80
|
# @example Read an attribute (alternate syntax.)
|
|
81
81
|
# person[:title]
|
|
82
82
|
#
|
|
83
|
-
# @param [ String
|
|
83
|
+
# @param [ String | Symbol ] name The name of the attribute to get.
|
|
84
84
|
#
|
|
85
85
|
# @return [ Object ] The value of the attribute.
|
|
86
86
|
def read_attribute(name)
|
|
@@ -113,7 +113,7 @@ module Mongoid
|
|
|
113
113
|
# @example Read an attribute before type cast.
|
|
114
114
|
# person.read_attribute_before_type_cast(:price)
|
|
115
115
|
#
|
|
116
|
-
# @param [ String
|
|
116
|
+
# @param [ String | Symbol ] name The name of the attribute to get.
|
|
117
117
|
#
|
|
118
118
|
# @return [ Object ] The value of the attribute before type cast, if
|
|
119
119
|
# available. Otherwise, the value of the attribute.
|
|
@@ -132,7 +132,7 @@ module Mongoid
|
|
|
132
132
|
# @example Remove the attribute.
|
|
133
133
|
# person.remove_attribute(:title)
|
|
134
134
|
#
|
|
135
|
-
# @param [ String
|
|
135
|
+
# @param [ String | Symbol ] name The name of the attribute to remove.
|
|
136
136
|
#
|
|
137
137
|
# @raise [ Errors::ReadonlyAttribute ] If the field cannot be removed due
|
|
138
138
|
# to being flagged as reaodnly.
|
|
@@ -157,7 +157,7 @@ module Mongoid
|
|
|
157
157
|
# @example Write the attribute (alternate syntax.)
|
|
158
158
|
# person[:title] = "Mr."
|
|
159
159
|
#
|
|
160
|
-
# @param [ String
|
|
160
|
+
# @param [ String | Symbol ] name The name of the attribute to update.
|
|
161
161
|
# @param [ Object ] value The value to set for the attribute.
|
|
162
162
|
def write_attribute(name, value)
|
|
163
163
|
validate_writable_field_name!(name.to_s)
|
|
@@ -237,7 +237,7 @@ module Mongoid
|
|
|
237
237
|
#
|
|
238
238
|
# @param [ String ] name The name of the attribute.
|
|
239
239
|
#
|
|
240
|
-
# @return [ true
|
|
240
|
+
# @return [ true | false ] If the attribute is missing.
|
|
241
241
|
def attribute_missing?(name)
|
|
242
242
|
!Projector.new(__selected_fields).attribute_or_path_allowed?(name)
|
|
243
243
|
end
|
|
@@ -261,7 +261,7 @@ module Mongoid
|
|
|
261
261
|
# @example Is the string in dot syntax.
|
|
262
262
|
# model.hash_dot_syntax?
|
|
263
263
|
#
|
|
264
|
-
# @return [ true
|
|
264
|
+
# @return [ true | false ] If the string contains a "."
|
|
265
265
|
def hash_dot_syntax?(string)
|
|
266
266
|
string.include?(".")
|
|
267
267
|
end
|
|
@@ -271,7 +271,7 @@ module Mongoid
|
|
|
271
271
|
# @example Get the value typecasted.
|
|
272
272
|
# person.typed_value_for(:title, :sir)
|
|
273
273
|
#
|
|
274
|
-
# @param [ String
|
|
274
|
+
# @param [ String | Symbol ] key The field name.
|
|
275
275
|
# @param [ Object ] value The uncast value.
|
|
276
276
|
#
|
|
277
277
|
# @return [ Object ] The cast value.
|
data/lib/mongoid/changeable.rb
CHANGED
|
@@ -21,7 +21,7 @@ module Mongoid
|
|
|
21
21
|
# @example Has the document changed?
|
|
22
22
|
# model.changed?
|
|
23
23
|
#
|
|
24
|
-
# @return [ true
|
|
24
|
+
# @return [ true | false ] If the document is changed.
|
|
25
25
|
def changed?
|
|
26
26
|
changes.values.any? { |val| val } || children_changed?
|
|
27
27
|
end
|
|
@@ -30,7 +30,7 @@ module Mongoid
|
|
|
30
30
|
#
|
|
31
31
|
# @note This intentionally only considers children and not descendants.
|
|
32
32
|
#
|
|
33
|
-
# @return [ true
|
|
33
|
+
# @return [ true | false ] If any children have changed.
|
|
34
34
|
def children_changed?
|
|
35
35
|
_children.any?(&:changed?)
|
|
36
36
|
end
|
|
@@ -102,7 +102,7 @@ module Mongoid
|
|
|
102
102
|
# @example Remove a flagged change.
|
|
103
103
|
# model.remove_change(:field)
|
|
104
104
|
#
|
|
105
|
-
# @param [ Symbol
|
|
105
|
+
# @param [ Symbol | String ] name The name of the field.
|
|
106
106
|
def remove_change(name)
|
|
107
107
|
changed_attributes.delete(name.to_s)
|
|
108
108
|
end
|
|
@@ -162,7 +162,7 @@ module Mongoid
|
|
|
162
162
|
#
|
|
163
163
|
# @param [ String ] attr The name of the attribute.
|
|
164
164
|
#
|
|
165
|
-
# @return [ true
|
|
165
|
+
# @return [ true | false ] Whether the attribute has changed.
|
|
166
166
|
def attribute_changed?(attr)
|
|
167
167
|
attr = database_field_name(attr)
|
|
168
168
|
return false unless changed_attributes.key?(attr)
|
|
@@ -176,7 +176,7 @@ module Mongoid
|
|
|
176
176
|
#
|
|
177
177
|
# @param [ String ] attr The name of the attribute.
|
|
178
178
|
#
|
|
179
|
-
# @return [ true
|
|
179
|
+
# @return [ true | false ] If the attribute differs.
|
|
180
180
|
def attribute_changed_from_default?(attr)
|
|
181
181
|
field = fields[attr]
|
|
182
182
|
return false unless field
|
|
@@ -12,7 +12,7 @@ module Mongoid
|
|
|
12
12
|
# m.save
|
|
13
13
|
# end
|
|
14
14
|
#
|
|
15
|
-
# @param [ Hash
|
|
15
|
+
# @param [ Hash | Mongoid::PersistenceContext ] options_or_context
|
|
16
16
|
# The storage options or a persistence context.
|
|
17
17
|
#
|
|
18
18
|
# @option options [ String | Symbol ] :collection The collection name.
|
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
|
17
17
|
# Storage.validate(:collection_name)
|
|
18
18
|
#
|
|
19
19
|
# @param [ Class ] klass The model class.
|
|
20
|
-
# @param [ Hash
|
|
20
|
+
# @param [ Hash | String | Symbol ] options The provided options.
|
|
21
21
|
def validate(klass, options)
|
|
22
22
|
valid_keys?(options) or raise Errors::InvalidStorageOptions.new(klass, options)
|
|
23
23
|
valid_parent?(klass) or raise Errors::InvalidStorageParent.new(klass)
|
|
@@ -31,7 +31,7 @@ module Mongoid
|
|
|
31
31
|
#
|
|
32
32
|
# @param [ Class ] klass
|
|
33
33
|
#
|
|
34
|
-
# @return [ true
|
|
34
|
+
# @return [ true | false ] If the class is valid.
|
|
35
35
|
def valid_parent?(klass)
|
|
36
36
|
!klass.superclass.include?(Mongoid::Document)
|
|
37
37
|
end
|
|
@@ -45,7 +45,7 @@ module Mongoid
|
|
|
45
45
|
#
|
|
46
46
|
# @param [ Hash ] options The options hash.
|
|
47
47
|
#
|
|
48
|
-
# @return [ true
|
|
48
|
+
# @return [ true | false ] If all keys are valid.
|
|
49
49
|
def valid_keys?(options)
|
|
50
50
|
return false unless options.is_a?(::Hash)
|
|
51
51
|
options.keys.all? do |key|
|
|
@@ -37,7 +37,7 @@ module Mongoid
|
|
|
37
37
|
# @example Validate the client has database.
|
|
38
38
|
# validator.validate_client_database(:default, {})
|
|
39
39
|
#
|
|
40
|
-
# @param [ String
|
|
40
|
+
# @param [ String | Symbol ] name The config key.
|
|
41
41
|
# @param [ Hash ] config The configuration.
|
|
42
42
|
def validate_client_database(name, config)
|
|
43
43
|
if no_database_or_uri?(config)
|
|
@@ -52,7 +52,7 @@ module Mongoid
|
|
|
52
52
|
# @example Validate the client has hosts.
|
|
53
53
|
# validator.validate_client_hosts(:default, {})
|
|
54
54
|
#
|
|
55
|
-
# @param [ String
|
|
55
|
+
# @param [ String | Symbol ] name The config key.
|
|
56
56
|
# @param [ Hash ] config The configuration.
|
|
57
57
|
def validate_client_hosts(name, config)
|
|
58
58
|
if no_hosts_or_uri?(config)
|
|
@@ -68,7 +68,7 @@ module Mongoid
|
|
|
68
68
|
# @example Validate the uri and options.
|
|
69
69
|
# validator.validate_client_uri(:default, {})
|
|
70
70
|
#
|
|
71
|
-
# @param [ String
|
|
71
|
+
# @param [ String | Symbol ] name The config key.
|
|
72
72
|
# @param [ Hash ] config The configuration.
|
|
73
73
|
def validate_client_uri(name, config)
|
|
74
74
|
if both_uri_and_standard?(config)
|
|
@@ -86,7 +86,7 @@ module Mongoid
|
|
|
86
86
|
#
|
|
87
87
|
# @param [ Hash ] config The configuration options.
|
|
88
88
|
#
|
|
89
|
-
# @return [ true
|
|
89
|
+
# @return [ true | false ] If no database or uri is defined.
|
|
90
90
|
def no_database_or_uri?(config)
|
|
91
91
|
!config.has_key?(:database) && !config.has_key?(:uri)
|
|
92
92
|
end
|
|
@@ -101,7 +101,7 @@ module Mongoid
|
|
|
101
101
|
#
|
|
102
102
|
# @param [ Hash ] config The configuration options.
|
|
103
103
|
#
|
|
104
|
-
# @return [ true
|
|
104
|
+
# @return [ true | false ] If no hosts or uri is defined.
|
|
105
105
|
def no_hosts_or_uri?(config)
|
|
106
106
|
!config.has_key?(:hosts) && !config.has_key?(:uri)
|
|
107
107
|
end
|
|
@@ -116,7 +116,7 @@ module Mongoid
|
|
|
116
116
|
#
|
|
117
117
|
# @param [ Hash ] config The configuration options.
|
|
118
118
|
#
|
|
119
|
-
# @return [ true
|
|
119
|
+
# @return [ true | false ] If both standard and uri are defined.
|
|
120
120
|
def both_uri_and_standard?(config)
|
|
121
121
|
config.has_key?(:uri) && config.keys.any? do |key|
|
|
122
122
|
STANDARD.include?(key.to_sym)
|
data/lib/mongoid/config.rb
CHANGED
|
@@ -131,7 +131,7 @@ module Mongoid
|
|
|
131
131
|
# @example Is Mongoid configured?
|
|
132
132
|
# config.configured?
|
|
133
133
|
#
|
|
134
|
-
# @return [ true
|
|
134
|
+
# @return [ true | false ] If Mongoid is configured.
|
|
135
135
|
def configured?
|
|
136
136
|
clients.key?(:default)
|
|
137
137
|
end
|
|
@@ -172,7 +172,7 @@ module Mongoid
|
|
|
172
172
|
# Mongoid.load!("/path/to/mongoid.yml")
|
|
173
173
|
#
|
|
174
174
|
# @param [ String ] path The path to the file.
|
|
175
|
-
# @param [ String
|
|
175
|
+
# @param [ String | Symbol ] environment The environment to load.
|
|
176
176
|
def load!(path, environment = nil)
|
|
177
177
|
settings = Environment.load_yaml(path, environment)
|
|
178
178
|
if settings.present?
|
|
@@ -225,9 +225,9 @@ module Mongoid
|
|
|
225
225
|
# @example Override the database globally.
|
|
226
226
|
# config.override_database(:optional)
|
|
227
227
|
#
|
|
228
|
-
# @param [ String
|
|
228
|
+
# @param [ String | Symbol ] name The name of the database.
|
|
229
229
|
#
|
|
230
|
-
# @return [ String
|
|
230
|
+
# @return [ String | Symbol ] The global override.
|
|
231
231
|
def override_database(name)
|
|
232
232
|
Threaded.database_override = name
|
|
233
233
|
end
|
|
@@ -237,9 +237,9 @@ module Mongoid
|
|
|
237
237
|
# @example Override the client globally.
|
|
238
238
|
# config.override_client(:optional)
|
|
239
239
|
#
|
|
240
|
-
# @param [ String
|
|
240
|
+
# @param [ String | Symbol ] name The name of the client.
|
|
241
241
|
#
|
|
242
|
-
# @return [ String
|
|
242
|
+
# @return [ String | Symbol ] The global override.
|
|
243
243
|
def override_client(name)
|
|
244
244
|
Threaded.client_override = name ? name.to_s : nil
|
|
245
245
|
end
|
|
@@ -310,7 +310,7 @@ module Mongoid
|
|
|
310
310
|
# @example Is the application using passenger?
|
|
311
311
|
# config.running_with_passenger?
|
|
312
312
|
#
|
|
313
|
-
# @return [ true
|
|
313
|
+
# @return [ true | false ] If the app is deployed on Passenger.
|
|
314
314
|
def running_with_passenger?
|
|
315
315
|
@running_with_passenger ||= defined?(PhusionPassenger)
|
|
316
316
|
end
|
|
@@ -9,7 +9,7 @@ module Mongoid
|
|
|
9
9
|
# Get all the aggregate values for the provided field.
|
|
10
10
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
11
11
|
#
|
|
12
|
-
# @param [ String
|
|
12
|
+
# @param [ String | Symbol ] field The field name.
|
|
13
13
|
#
|
|
14
14
|
# @return [ Hash ] A Hash containing the aggregate values.
|
|
15
15
|
# If no documents are present, then returned Hash will have
|
|
@@ -20,7 +20,7 @@ module Mongoid
|
|
|
20
20
|
# # "avg" => 750.0
|
|
21
21
|
# # }
|
|
22
22
|
#
|
|
23
|
-
# @param [ String
|
|
23
|
+
# @param [ String | Symbol ] field The field name.
|
|
24
24
|
#
|
|
25
25
|
# @return [ Hash ] A Hash containing the aggregate values.
|
|
26
26
|
# If no documents are found, then returned Hash will have
|
|
@@ -64,7 +64,7 @@ module Mongoid
|
|
|
64
64
|
#
|
|
65
65
|
# @param [ Symbol ] field The field to max.
|
|
66
66
|
#
|
|
67
|
-
# @return [ Float
|
|
67
|
+
# @return [ Float | Document ] The max value or document with the max
|
|
68
68
|
# value.
|
|
69
69
|
def max(field = nil)
|
|
70
70
|
block_given? ? super() : aggregates(field)["max"]
|
|
@@ -84,7 +84,7 @@ module Mongoid
|
|
|
84
84
|
#
|
|
85
85
|
# @param [ Symbol ] field The field to min.
|
|
86
86
|
#
|
|
87
|
-
# @return [ Float
|
|
87
|
+
# @return [ Float | Document ] The min value or document with the min
|
|
88
88
|
# value.
|
|
89
89
|
def min(field = nil)
|
|
90
90
|
block_given? ? super() : aggregates(field)["min"]
|
|
@@ -115,7 +115,7 @@ module Mongoid
|
|
|
115
115
|
# @example Get the pipeline.
|
|
116
116
|
# aggregable.pipeline(:likes)
|
|
117
117
|
#
|
|
118
|
-
# @param [ String
|
|
118
|
+
# @param [ String | Symbol ] field The name of the field.
|
|
119
119
|
#
|
|
120
120
|
# @return [ Array ] The array of pipeline operators.
|
|
121
121
|
def pipeline(field)
|
|
@@ -11,7 +11,7 @@ module Mongoid
|
|
|
11
11
|
# Get all the aggregate values for the provided field in null context.
|
|
12
12
|
# Provided for interface consistency with Aggregable::Mongo.
|
|
13
13
|
#
|
|
14
|
-
# @param [ String
|
|
14
|
+
# @param [ String | Symbol ] _field The field name.
|
|
15
15
|
#
|
|
16
16
|
# @return [ Hash ] A Hash with count, sum of 0 and max, min, avg of nil.
|
|
17
17
|
def aggregates(_field)
|
|
@@ -150,7 +150,7 @@ module Mongoid
|
|
|
150
150
|
# @example Unset the field on the matches.
|
|
151
151
|
# context.unset(:name)
|
|
152
152
|
#
|
|
153
|
-
# @param [ String | Symbol | Array<String|Symbol> | Hash ] args
|
|
153
|
+
# @param [ String | Symbol | Array<String | Symbol> | Hash ] args
|
|
154
154
|
# The name(s) of the field(s) to unset.
|
|
155
155
|
# If a Hash is specified, its keys will be used irrespective of what
|
|
156
156
|
# each key's value is, even if the value is nil or false.
|
|
@@ -16,7 +16,7 @@ module Mongoid
|
|
|
16
16
|
# @example Get the average distance.
|
|
17
17
|
# geo_near.average_distance
|
|
18
18
|
#
|
|
19
|
-
# @return [ Float
|
|
19
|
+
# @return [ Float | nil ] The average distance.
|
|
20
20
|
def average_distance
|
|
21
21
|
average = stats["avgDistance"]
|
|
22
22
|
(average.nil? || average.nan?) ? nil : average
|
|
@@ -46,7 +46,7 @@ module Mongoid
|
|
|
46
46
|
# @example Provide the distance multiplier.
|
|
47
47
|
# geo_near.distance_multiplier(13113.1)
|
|
48
48
|
#
|
|
49
|
-
# @param [ Integer
|
|
49
|
+
# @param [ Integer | Float ] value The distance multiplier.
|
|
50
50
|
#
|
|
51
51
|
# @return [ GeoNear ] The GeoNear wrapper.
|
|
52
52
|
def distance_multiplier(value)
|
|
@@ -98,9 +98,9 @@ module Mongoid
|
|
|
98
98
|
# @example Get the max distance.
|
|
99
99
|
# geo_near.max_distance
|
|
100
100
|
#
|
|
101
|
-
# @param [ Integer
|
|
101
|
+
# @param [ Integer | Float ] value The maximum distance.
|
|
102
102
|
#
|
|
103
|
-
# @return [ GeoNear
|
|
103
|
+
# @return [ GeoNear | Float ] The GeoNear command or the value.
|
|
104
104
|
def max_distance(value = nil)
|
|
105
105
|
if value
|
|
106
106
|
command[:maxDistance] = value
|
|
@@ -115,7 +115,7 @@ module Mongoid
|
|
|
115
115
|
# @example Set the min distance.
|
|
116
116
|
# geo_near.min_distance(0.5)
|
|
117
117
|
#
|
|
118
|
-
# @param [ Integer
|
|
118
|
+
# @param [ Integer | Float ] value The minimum distance.
|
|
119
119
|
#
|
|
120
120
|
# @return [ GeoNear ] The GeoNear command.
|
|
121
121
|
def min_distance(value)
|
|
@@ -139,7 +139,7 @@ module Mongoid
|
|
|
139
139
|
# @example Set the unique flag.
|
|
140
140
|
# geo_near.unique(false)
|
|
141
141
|
#
|
|
142
|
-
# @param [ true
|
|
142
|
+
# @param [ true | false ] value Whether to return unique documents.
|
|
143
143
|
#
|
|
144
144
|
# @return [ GeoNear ] The command.
|
|
145
145
|
def unique(value = true)
|
|
@@ -211,7 +211,7 @@ module Mongoid
|
|
|
211
211
|
# @example Get the documents.
|
|
212
212
|
# geo_near.documents
|
|
213
213
|
#
|
|
214
|
-
# @return [ Array
|
|
214
|
+
# @return [ Array | Cursor ] The documents.
|
|
215
215
|
def documents
|
|
216
216
|
results["results"].map do |attributes|
|
|
217
217
|
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria)
|
|
@@ -25,7 +25,7 @@ module Mongoid
|
|
|
25
25
|
#
|
|
26
26
|
# @param [ Array ] other The other array.
|
|
27
27
|
#
|
|
28
|
-
# @return [ true
|
|
28
|
+
# @return [ true | false ] If the objects are equal.
|
|
29
29
|
def ==(other)
|
|
30
30
|
return false unless other.respond_to?(:entries)
|
|
31
31
|
entries == other.entries
|
|
@@ -110,7 +110,7 @@ module Mongoid
|
|
|
110
110
|
# @example Do any documents exist for the context.
|
|
111
111
|
# context.exists?
|
|
112
112
|
#
|
|
113
|
-
# @return [ true
|
|
113
|
+
# @return [ true | false ] If the count is more than zero.
|
|
114
114
|
def exists?
|
|
115
115
|
any?
|
|
116
116
|
end
|
|
@@ -244,7 +244,7 @@ module Mongoid
|
|
|
244
244
|
#
|
|
245
245
|
# @param [ String | Symbol ] *fields Field(s) to pluck.
|
|
246
246
|
#
|
|
247
|
-
# @return [ Array ] The
|
|
247
|
+
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
|
248
248
|
def pluck(*fields)
|
|
249
249
|
if Mongoid.legacy_pluck_distinct
|
|
250
250
|
documents.pluck(*fields)
|
|
@@ -318,7 +318,7 @@ module Mongoid
|
|
|
318
318
|
#
|
|
319
319
|
# @param [ Hash ] attributes The new attributes for the document.
|
|
320
320
|
#
|
|
321
|
-
# @return [ nil
|
|
321
|
+
# @return [ nil | false ] False if no attributes were provided.
|
|
322
322
|
def update(attributes = nil)
|
|
323
323
|
update_documents(attributes, [ first ])
|
|
324
324
|
end
|
|
@@ -330,7 +330,7 @@ module Mongoid
|
|
|
330
330
|
#
|
|
331
331
|
# @param [ Hash ] attributes The new attributes for each document.
|
|
332
332
|
#
|
|
333
|
-
# @return [ nil
|
|
333
|
+
# @return [ nil | false ] False if no attributes were provided.
|
|
334
334
|
def update_all(attributes = nil)
|
|
335
335
|
update_documents(attributes, entries)
|
|
336
336
|
end
|
|
@@ -109,7 +109,7 @@ module Mongoid
|
|
|
109
109
|
# @example Get the distinct values.
|
|
110
110
|
# context.distinct(:name)
|
|
111
111
|
#
|
|
112
|
-
# @param [ String
|
|
112
|
+
# @param [ String | Symbol ] field The name of the field.
|
|
113
113
|
#
|
|
114
114
|
# @return [ Array<Object> ] The distinct values for the field.
|
|
115
115
|
def distinct(field)
|
|
@@ -157,7 +157,7 @@ module Mongoid
|
|
|
157
157
|
# @note We don't use count here since Mongo does not use counted
|
|
158
158
|
# b-tree indexes.
|
|
159
159
|
#
|
|
160
|
-
# @return [ true
|
|
160
|
+
# @return [ true | false ] If the count is more than zero.
|
|
161
161
|
def exists?
|
|
162
162
|
!!(view.projection(_id: 1).limit(1).first)
|
|
163
163
|
end
|
|
@@ -181,9 +181,9 @@ module Mongoid
|
|
|
181
181
|
# @param [ Hash ] update The updates.
|
|
182
182
|
# @param [ Hash ] options The command options.
|
|
183
183
|
#
|
|
184
|
-
# @option options [ :before
|
|
184
|
+
# @option options [ :before | :after ] :return_document Return the updated document
|
|
185
185
|
# from before or after update.
|
|
186
|
-
# @option options [ true
|
|
186
|
+
# @option options [ true | false ] :upsert Create the document if it doesn't exist.
|
|
187
187
|
#
|
|
188
188
|
# @return [ Document ] The result of the command.
|
|
189
189
|
def find_one_and_update(update, options = {})
|
|
@@ -201,9 +201,9 @@ module Mongoid
|
|
|
201
201
|
# @param [ Hash ] replacement The replacement.
|
|
202
202
|
# @param [ Hash ] options The command options.
|
|
203
203
|
#
|
|
204
|
-
# @option options [ :before
|
|
204
|
+
# @option options [ :before | :after ] :return_document Return the updated document
|
|
205
205
|
# from before or after update.
|
|
206
|
-
# @option options [ true
|
|
206
|
+
# @option options [ true | false ] :upsert Create the document if it doesn't exist.
|
|
207
207
|
#
|
|
208
208
|
# @return [ Document ] The result of the command.
|
|
209
209
|
def find_one_and_replace(replacement, options = {})
|
|
@@ -397,9 +397,9 @@ module Mongoid
|
|
|
397
397
|
# @example Pluck a field.
|
|
398
398
|
# context.pluck(:_id)
|
|
399
399
|
#
|
|
400
|
-
# @param [ String
|
|
400
|
+
# @param [ String | Symbol ] *fields Field(s) to pluck.
|
|
401
401
|
#
|
|
402
|
-
# @return [ Array<Object
|
|
402
|
+
# @return [ Array<Object> | Array<Array<Object>> ] The plucked values.
|
|
403
403
|
def pluck(*fields)
|
|
404
404
|
# Multiple fields can map to the same field name. For example, plucking
|
|
405
405
|
# a field and its _translations field map to the same field in the database.
|
|
@@ -434,9 +434,9 @@ module Mongoid
|
|
|
434
434
|
# @example Pick a field.
|
|
435
435
|
# context.pick(:_id)
|
|
436
436
|
#
|
|
437
|
-
# @param [ String
|
|
437
|
+
# @param [ String | Symbol ] *fields Field(s) to pick.
|
|
438
438
|
#
|
|
439
|
-
# @return [ Object
|
|
439
|
+
# @return [ Object | Array<Object> ] The picked values.
|
|
440
440
|
def pick(*fields)
|
|
441
441
|
limit(1).pluck(*fields).first
|
|
442
442
|
end
|
|
@@ -586,7 +586,7 @@ module Mongoid
|
|
|
586
586
|
# @param [ Hash ] attributes The updates.
|
|
587
587
|
# @param [ Symbol ] method The method to use.
|
|
588
588
|
#
|
|
589
|
-
# @return [ true
|
|
589
|
+
# @return [ true | false ] If the update succeeded.
|
|
590
590
|
def update_documents(attributes, method = :update_one, opts = {})
|
|
591
591
|
return false unless attributes
|
|
592
592
|
attributes = Hash[attributes.map { |k, v| [klass.database_field_name(k.to_s), v] }]
|
|
@@ -654,7 +654,7 @@ module Mongoid
|
|
|
654
654
|
# @example Get the documents for iteration.
|
|
655
655
|
# context.documents_for_iteration
|
|
656
656
|
#
|
|
657
|
-
# @return [ Array<Document
|
|
657
|
+
# @return [ Array<Document> | Mongo::Collection::View ] The docs to iterate.
|
|
658
658
|
def documents_for_iteration
|
|
659
659
|
return view unless eager_loadable?
|
|
660
660
|
docs = view.map{ |doc| Factory.from_db(klass, doc, criteria) }
|
|
@@ -764,7 +764,7 @@ module Mongoid
|
|
|
764
764
|
#
|
|
765
765
|
# @param [ String ] field_name The name of the field to demongoize.
|
|
766
766
|
# @param [ Object ] value The value to demongoize.
|
|
767
|
-
# @param [
|
|
767
|
+
# @param [ true | false ] is_translation The field we are retrieving is an
|
|
768
768
|
# _translations field.
|
|
769
769
|
#
|
|
770
770
|
# @return [ Object ] The demongoized value.
|
|
@@ -778,7 +778,7 @@ module Mongoid
|
|
|
778
778
|
#
|
|
779
779
|
# @param [ Field ] field The field to use to demongoize.
|
|
780
780
|
# @param [ Object ] value The value to demongoize.
|
|
781
|
-
# @param [
|
|
781
|
+
# @param [ true | false ] is_translation The field we are retrieving is an
|
|
782
782
|
# _translations field.
|
|
783
783
|
#
|
|
784
784
|
# @return [ Object ] The demongoized value.
|
|
@@ -40,7 +40,7 @@ module Mongoid
|
|
|
40
40
|
#
|
|
41
41
|
# @param [ Array ] other The other array.
|
|
42
42
|
#
|
|
43
|
-
# @return [ true
|
|
43
|
+
# @return [ true | false ] If the objects are equal.
|
|
44
44
|
def ==(other)
|
|
45
45
|
other.is_a?(None)
|
|
46
46
|
end
|
|
@@ -88,7 +88,7 @@ module Mongoid
|
|
|
88
88
|
# @example Get the values for null context.
|
|
89
89
|
# context.pluck(:name)
|
|
90
90
|
#
|
|
91
|
-
# @param [ String | Symbol ] *_fields Field
|
|
91
|
+
# @param [ String | Symbol ] *_fields Field(s) to pluck.
|
|
92
92
|
#
|
|
93
93
|
# @return [ Array ] An empty Array.
|
|
94
94
|
def pluck(*_fields)
|
data/lib/mongoid/contextual.rb
CHANGED
|
@@ -30,7 +30,7 @@ module Mongoid
|
|
|
30
30
|
# @example Get the context.
|
|
31
31
|
# criteria.context
|
|
32
32
|
#
|
|
33
|
-
# @return [ Memory
|
|
33
|
+
# @return [ Memory | Mongo ] The context.
|
|
34
34
|
def context
|
|
35
35
|
@context ||= create_context
|
|
36
36
|
end
|
|
@@ -45,7 +45,7 @@ module Mongoid
|
|
|
45
45
|
# @example Create the context.
|
|
46
46
|
# contextual.create_context
|
|
47
47
|
#
|
|
48
|
-
# @return [ Mongo
|
|
48
|
+
# @return [ Mongo | Memory ] The context.
|
|
49
49
|
def create_context
|
|
50
50
|
return None.new(self) if empty_and_chainable?
|
|
51
51
|
embedded ? Memory.new(self) : Mongo.new(self)
|
|
@@ -10,11 +10,11 @@ module Mongoid
|
|
|
10
10
|
# criteria.execute_or_raise(id)
|
|
11
11
|
#
|
|
12
12
|
# @param [ Object ] ids The arguments passed.
|
|
13
|
-
# @param [ true
|
|
13
|
+
# @param [ true | false ] multi Whether there arguments were a list.
|
|
14
14
|
#
|
|
15
15
|
# @raise [ Errors::DocumentNotFound ] If nothing returned.
|
|
16
16
|
#
|
|
17
|
-
# @return [ Document
|
|
17
|
+
# @return [ Document | Array<Document> ] The document(s).
|
|
18
18
|
def execute_or_raise(ids, multi)
|
|
19
19
|
result = multiple_from_db(ids)
|
|
20
20
|
check_for_missing_documents!(result, ids)
|
|
@@ -23,15 +23,18 @@ module Mongoid
|
|
|
23
23
|
|
|
24
24
|
# Find the matchind document(s) in the criteria for the provided ids.
|
|
25
25
|
#
|
|
26
|
+
# @note Each argument can be an individual id, an array of ids or
|
|
27
|
+
# a nested array. Each array will be flattened.
|
|
28
|
+
#
|
|
26
29
|
# @example Find by an id.
|
|
27
30
|
# criteria.find(BSON::ObjectId.new)
|
|
28
31
|
#
|
|
29
32
|
# @example Find by multiple ids.
|
|
30
33
|
# criteria.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
|
31
34
|
#
|
|
32
|
-
# @param [ Array<
|
|
35
|
+
# @param [ Object | Array<Object> ] *args The ids to search for.
|
|
33
36
|
#
|
|
34
|
-
# @return [ Array<Document
|
|
37
|
+
# @return [ Document | Array<Document> ] The matching document(s).
|
|
35
38
|
def find(*args)
|
|
36
39
|
ids = args.__find_args__
|
|
37
40
|
raise_invalid if ids.any?(&:nil?)
|
|
@@ -66,7 +66,7 @@ module Mongoid
|
|
|
66
66
|
|
|
67
67
|
# Iterate through the list of relations and create the inclusions list.
|
|
68
68
|
#
|
|
69
|
-
# @param [ Class
|
|
69
|
+
# @param [ Class | String | Symbol ] _parent_class The class from which the
|
|
70
70
|
# association originates.
|
|
71
71
|
# @param [ String ] parent The name of the association above this one in
|
|
72
72
|
# the inclusion tree, if it is a nested inclusion.
|
|
@@ -54,7 +54,7 @@ module Mongoid
|
|
|
54
54
|
# @api private
|
|
55
55
|
#
|
|
56
56
|
# @param [ Object ] criteria
|
|
57
|
-
# @return [
|
|
57
|
+
# @return [ true | false ] if should permit
|
|
58
58
|
def should_permit?(criteria)
|
|
59
59
|
if criteria.respond_to?(:permitted?)
|
|
60
60
|
return criteria.permitted?
|