mongoid 4.0.2 → 5.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
@@ -51,6 +51,19 @@ module Mongoid
|
|
51
51
|
# @since 4.0.0
|
52
52
|
def exists?; false; end
|
53
53
|
|
54
|
+
|
55
|
+
# Allow pluck for null context.
|
56
|
+
#
|
57
|
+
# @example Allow pluck for null context.
|
58
|
+
# context.pluck(:name)
|
59
|
+
#
|
60
|
+
# @param [ String, Symbol, Array ] field or fields to pluck.
|
61
|
+
#
|
62
|
+
# @return [ Array ] Emtpy Array
|
63
|
+
def pluck(*args)
|
64
|
+
[]
|
65
|
+
end
|
66
|
+
|
54
67
|
# Create the new null context.
|
55
68
|
#
|
56
69
|
# @example Create the new context.
|
data/lib/mongoid/copyable.rb
CHANGED
@@ -22,7 +22,12 @@ module Mongoid
|
|
22
22
|
# _id and id field in the document would cause problems with Mongoid
|
23
23
|
# elsewhere.
|
24
24
|
attrs = clone_document.except("_id", "id")
|
25
|
-
|
25
|
+
begin
|
26
|
+
self.class.new(attrs)
|
27
|
+
rescue Errors::UnknownAttribute
|
28
|
+
self.class.send(:include, Attributes::Dynamic)
|
29
|
+
self.class.new(attrs)
|
30
|
+
end
|
26
31
|
end
|
27
32
|
alias :dup :clone
|
28
33
|
|
data/lib/mongoid/criteria.rb
CHANGED
@@ -4,7 +4,6 @@ require "mongoid/criteria/inspectable"
|
|
4
4
|
require "mongoid/criteria/marshalable"
|
5
5
|
require "mongoid/criteria/modifiable"
|
6
6
|
require "mongoid/criteria/scopable"
|
7
|
-
require "mongoid/sessions/options"
|
8
7
|
|
9
8
|
module Mongoid
|
10
9
|
|
@@ -23,7 +22,7 @@ module Mongoid
|
|
23
22
|
include Marshalable
|
24
23
|
include Modifiable
|
25
24
|
include Scopable
|
26
|
-
include
|
25
|
+
include Clients::Options
|
27
26
|
|
28
27
|
# Static array used to check with method missing - we only need to ever
|
29
28
|
# instantiate once.
|
@@ -293,7 +292,7 @@ module Mongoid
|
|
293
292
|
options.merge!(criteria.options)
|
294
293
|
self.documents = criteria.documents.dup unless criteria.documents.empty?
|
295
294
|
self.scoping_options = criteria.scoping_options
|
296
|
-
self.inclusions = (inclusions + criteria.inclusions
|
295
|
+
self.inclusions = (inclusions + criteria.inclusions).uniq
|
297
296
|
self
|
298
297
|
end
|
299
298
|
|
@@ -335,6 +334,9 @@ module Mongoid
|
|
335
334
|
def only(*args)
|
336
335
|
return clone if args.flatten.empty?
|
337
336
|
args = args.flatten
|
337
|
+
if (args & Fields::IDS).empty?
|
338
|
+
args.unshift(:_id)
|
339
|
+
end
|
338
340
|
if klass.hereditary?
|
339
341
|
super(*args.push(:_type))
|
340
342
|
else
|
@@ -342,6 +344,37 @@ module Mongoid
|
|
342
344
|
end
|
343
345
|
end
|
344
346
|
|
347
|
+
# Set the read preference for the criteria.
|
348
|
+
#
|
349
|
+
# @example Set the read preference.
|
350
|
+
# criteria.read(mode: :primary_preferred)
|
351
|
+
#
|
352
|
+
# @param [ Hash ] value The mode preference.
|
353
|
+
#
|
354
|
+
# @return [ Criteria ] The cloned criteria.
|
355
|
+
#
|
356
|
+
# @since 5.0.0
|
357
|
+
def read(value = nil)
|
358
|
+
clone.tap do |criteria|
|
359
|
+
criteria.options.merge!(read: value)
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
# Overriden to exclude _id from the fields.
|
364
|
+
#
|
365
|
+
# @example Exclude fields returned from the database.
|
366
|
+
# Band.without(:name)
|
367
|
+
#
|
368
|
+
# @param [ Array<Symbol> ] args The names of the fields.
|
369
|
+
#
|
370
|
+
# @return [ Criteria ] The cloned criteria.
|
371
|
+
#
|
372
|
+
# @since 4.0.3
|
373
|
+
def without(*args)
|
374
|
+
args -= Fields::IDS
|
375
|
+
super(*args)
|
376
|
+
end
|
377
|
+
|
345
378
|
# Returns true if criteria responds to the given method.
|
346
379
|
#
|
347
380
|
# @example Does the criteria respond to the method?
|
data/lib/mongoid/document.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "mongoid/positional"
|
3
2
|
require "mongoid/evolvable"
|
4
3
|
require "mongoid/extensions"
|
5
4
|
require "mongoid/errors"
|
@@ -168,7 +167,7 @@ module Mongoid
|
|
168
167
|
embedded_relations.each_pair do |name, meta|
|
169
168
|
without_autobuild do
|
170
169
|
relation, stored = send(name), meta.store_as
|
171
|
-
if attributes.
|
170
|
+
if attributes.key?(stored) || !relation.blank?
|
172
171
|
if relation
|
173
172
|
attributes[stored] = relation.as_document
|
174
173
|
else
|
@@ -262,7 +261,7 @@ module Mongoid
|
|
262
261
|
#
|
263
262
|
# @since 2.4.0
|
264
263
|
def model_key
|
265
|
-
@model_cache_key ||=
|
264
|
+
@model_cache_key ||= self.class.model_name.cache_key
|
266
265
|
end
|
267
266
|
|
268
267
|
# Implement this for calls to flatten on array.
|
@@ -327,7 +326,7 @@ module Mongoid
|
|
327
326
|
#
|
328
327
|
# @since 1.0.0
|
329
328
|
def _types
|
330
|
-
@_type ||= (descendants + [ self ]).uniq.map
|
329
|
+
@_type ||= (descendants + [ self ]).uniq.map(&:to_s)
|
331
330
|
end
|
332
331
|
|
333
332
|
# Set the i18n scope to overwrite ActiveModel.
|
data/lib/mongoid/errors.rb
CHANGED
@@ -22,17 +22,17 @@ require "mongoid/errors/invalid_time"
|
|
22
22
|
require "mongoid/errors/invalid_value"
|
23
23
|
require "mongoid/errors/inverse_not_found"
|
24
24
|
require "mongoid/errors/mixed_relations"
|
25
|
-
require "mongoid/errors/
|
25
|
+
require "mongoid/errors/mixed_client_configuration"
|
26
26
|
require "mongoid/errors/nested_attributes_metadata_not_found"
|
27
|
-
require "mongoid/errors/
|
27
|
+
require "mongoid/errors/no_default_client"
|
28
28
|
require "mongoid/errors/no_environment"
|
29
29
|
require "mongoid/errors/no_map_reduce_output"
|
30
30
|
require "mongoid/errors/no_metadata"
|
31
31
|
require "mongoid/errors/no_parent"
|
32
|
-
require "mongoid/errors/
|
33
|
-
require "mongoid/errors/
|
34
|
-
require "mongoid/errors/
|
35
|
-
require "mongoid/errors/
|
32
|
+
require "mongoid/errors/no_client_config"
|
33
|
+
require "mongoid/errors/no_clients_config"
|
34
|
+
require "mongoid/errors/no_client_database"
|
35
|
+
require "mongoid/errors/no_client_hosts"
|
36
36
|
require "mongoid/errors/readonly_attribute"
|
37
37
|
require "mongoid/errors/readonly_document"
|
38
38
|
require "mongoid/errors/scope_overwrite"
|
@@ -2,23 +2,23 @@
|
|
2
2
|
module Mongoid
|
3
3
|
module Errors
|
4
4
|
|
5
|
-
# This error is raised when a
|
5
|
+
# This error is raised when a client configuration contains both a uri and
|
6
6
|
# other standard options.
|
7
|
-
class
|
7
|
+
class MixedClientConfiguration < MongoidError
|
8
8
|
|
9
9
|
# Initialize the error.
|
10
10
|
#
|
11
11
|
# @example Initialize the error.
|
12
|
-
#
|
12
|
+
# MixedClientConfiguration.new(:name, {})
|
13
13
|
#
|
14
|
-
# @param [ Symbol ] name The name of the
|
14
|
+
# @param [ Symbol ] name The name of the client config.
|
15
15
|
# @param [ Hash ] config The configuration options.
|
16
16
|
#
|
17
17
|
# @since 3.0.0
|
18
18
|
def initialize(name, config)
|
19
19
|
super(
|
20
20
|
compose_message(
|
21
|
-
"
|
21
|
+
"mixed_client_configuration",
|
22
22
|
{ name: name, config: config }
|
23
23
|
)
|
24
24
|
)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised when attempting to create a new client that does
|
6
|
+
# not have a named configuration.
|
7
|
+
class NoClientConfig < MongoidError
|
8
|
+
|
9
|
+
# Create the new error.
|
10
|
+
#
|
11
|
+
# @example Create the error.
|
12
|
+
# NoClientConfig.new(:secondary)
|
13
|
+
#
|
14
|
+
# @param [ String, Symbol ] name The name of the client.
|
15
|
+
#
|
16
|
+
# @since 3.0.0
|
17
|
+
def initialize(name)
|
18
|
+
super(compose_message("no_client_config", { name: name }))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,13 +2,13 @@
|
|
2
2
|
module Mongoid
|
3
3
|
module Errors
|
4
4
|
|
5
|
-
# This error is raised when a
|
6
|
-
class
|
5
|
+
# This error is raised when a client is configured without a database.
|
6
|
+
class NoClientDatabase < MongoidError
|
7
7
|
|
8
8
|
# Create the new error.
|
9
9
|
#
|
10
10
|
# @example Create the new error.
|
11
|
-
#
|
11
|
+
# NoClientDatabase.new(:default, {}})
|
12
12
|
#
|
13
13
|
# @param [ Symbol, String ] name The db config key.
|
14
14
|
# @param [ Hash ] config The hash configuration options.
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
def initialize(name, config)
|
18
18
|
super(
|
19
19
|
compose_message(
|
20
|
-
"
|
20
|
+
"no_client_database",
|
21
21
|
{ name: name, config: config }
|
22
22
|
)
|
23
23
|
)
|
@@ -2,13 +2,13 @@
|
|
2
2
|
module Mongoid
|
3
3
|
module Errors
|
4
4
|
|
5
|
-
# This error is raised when a
|
6
|
-
class
|
5
|
+
# This error is raised when a client is configured without hosts.
|
6
|
+
class NoClientHosts < MongoidError
|
7
7
|
|
8
8
|
# Create the new error.
|
9
9
|
#
|
10
10
|
# @example Create the new error.
|
11
|
-
#
|
11
|
+
# NoClientHosts.new(:default, {}})
|
12
12
|
#
|
13
13
|
# @param [ Symbol, String ] name The db config key.
|
14
14
|
# @param [ Hash ] config The hash configuration options.
|
@@ -17,7 +17,7 @@ module Mongoid
|
|
17
17
|
def initialize(name, config)
|
18
18
|
super(
|
19
19
|
compose_message(
|
20
|
-
"
|
20
|
+
"no_client_hosts",
|
21
21
|
{ name: name, config: config }
|
22
22
|
)
|
23
23
|
)
|
@@ -2,18 +2,18 @@
|
|
2
2
|
module Mongoid
|
3
3
|
module Errors
|
4
4
|
|
5
|
-
# This error is raised when no
|
5
|
+
# This error is raised when no clients exists in the database
|
6
6
|
# configuration.
|
7
|
-
class
|
7
|
+
class NoClientsConfig < MongoidError
|
8
8
|
|
9
9
|
# Create the new error.
|
10
10
|
#
|
11
11
|
# @example Create the error.
|
12
|
-
#
|
12
|
+
# NoClientsConfig.new
|
13
13
|
#
|
14
14
|
# @since 3.0.0
|
15
15
|
def initialize
|
16
|
-
super(compose_message("
|
16
|
+
super(compose_message("no_clients_config", {}))
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Errors
|
4
|
+
|
5
|
+
# This error is raised when a default client is not defined.
|
6
|
+
class NoDefaultClient < MongoidError
|
7
|
+
|
8
|
+
# Create the new error with the defined client names.
|
9
|
+
#
|
10
|
+
# @example Create the new error.
|
11
|
+
# NoDefaultClient.new([ :secondary ])
|
12
|
+
#
|
13
|
+
# @param [ Array<Symbol> ] keys The defined clients.
|
14
|
+
#
|
15
|
+
# @since 3.0.0
|
16
|
+
def initialize(keys)
|
17
|
+
super(
|
18
|
+
compose_message("no_default_client", { keys: keys.join(", ") })
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -24,7 +24,11 @@ module Mongoid
|
|
24
24
|
#
|
25
25
|
# @since 3.0.0
|
26
26
|
def __mongoize_object_id__
|
27
|
-
|
27
|
+
if id = self['$oid']
|
28
|
+
BSON::ObjectId.from_string(id)
|
29
|
+
else
|
30
|
+
update_values(&:__mongoize_object_id__)
|
31
|
+
end
|
28
32
|
end
|
29
33
|
|
30
34
|
# Consolidate the key/values in the hash under an atomic $set.
|
@@ -115,8 +115,9 @@ module Mongoid
|
|
115
115
|
#
|
116
116
|
# @since 2.0.0.rc.1
|
117
117
|
def ivar(name)
|
118
|
-
|
119
|
-
|
118
|
+
var_name = "@_#{name}"
|
119
|
+
if instance_variable_defined?(var_name)
|
120
|
+
return instance_variable_get(var_name)
|
120
121
|
else
|
121
122
|
false
|
122
123
|
end
|
@@ -9,7 +9,7 @@ module Mongoid
|
|
9
9
|
# @example Mongoize the object.
|
10
10
|
# set.mongoize
|
11
11
|
#
|
12
|
-
# @return [
|
12
|
+
# @return [ Array ] The object mongoized.
|
13
13
|
#
|
14
14
|
# @since 3.0.0
|
15
15
|
def mongoize
|
@@ -21,9 +21,9 @@ module Mongoid
|
|
21
21
|
# Convert the object from its mongo friendly ruby type to this type.
|
22
22
|
#
|
23
23
|
# @example Demongoize the object.
|
24
|
-
# Set.demongoize(
|
24
|
+
# Set.demongoize([1, 2, 3])
|
25
25
|
#
|
26
|
-
# @param [
|
26
|
+
# @param [ Array ] object The object to demongoize.
|
27
27
|
#
|
28
28
|
# @return [ Set ] The set.
|
29
29
|
#
|
@@ -36,11 +36,11 @@ module Mongoid
|
|
36
36
|
# type.
|
37
37
|
#
|
38
38
|
# @example Mongoize the object.
|
39
|
-
# Set.mongoize(1
|
39
|
+
# Set.mongoize(Set.new([1,2,3]))
|
40
40
|
#
|
41
41
|
# @param [ Set ] object The object to mongoize.
|
42
42
|
#
|
43
|
-
# @return [
|
43
|
+
# @return [ Array ] The object mongoized.
|
44
44
|
#
|
45
45
|
# @since 3.0.0
|
46
46
|
def mongoize(object)
|
data/lib/mongoid/factory.rb
CHANGED
@@ -5,6 +5,8 @@ module Mongoid
|
|
5
5
|
module Factory
|
6
6
|
extend self
|
7
7
|
|
8
|
+
TYPE = "_type".freeze
|
9
|
+
|
8
10
|
# Builds a new +Document+ from the supplied attributes.
|
9
11
|
#
|
10
12
|
# @example Build the document.
|
@@ -16,7 +18,7 @@ module Mongoid
|
|
16
18
|
#
|
17
19
|
# @return [ Document ] The instantiated document.
|
18
20
|
def build(klass, attributes = nil)
|
19
|
-
type = (attributes || {})[
|
21
|
+
type = (attributes || {})[TYPE]
|
20
22
|
if type && klass._types.include?(type)
|
21
23
|
type.constantize.new(attributes)
|
22
24
|
else
|
@@ -37,7 +39,7 @@ module Mongoid
|
|
37
39
|
#
|
38
40
|
# @return [ Document ] The instantiated document.
|
39
41
|
def from_db(klass, attributes = nil, selected_fields = nil)
|
40
|
-
type = (attributes || {})[
|
42
|
+
type = (attributes || {})[TYPE]
|
41
43
|
if type.blank?
|
42
44
|
klass.instantiate(attributes, selected_fields)
|
43
45
|
else
|
data/lib/mongoid/fields.rb
CHANGED
@@ -32,6 +32,11 @@ module Mongoid
|
|
32
32
|
time: Time
|
33
33
|
}.with_indifferent_access
|
34
34
|
|
35
|
+
# Constant for all names of the id field in a document.
|
36
|
+
#
|
37
|
+
# @since 5.0.0
|
38
|
+
IDS = [ :_id, :id, '_id', 'id' ].freeze
|
39
|
+
|
35
40
|
included do
|
36
41
|
class_attribute :aliased_fields
|
37
42
|
class_attribute :localized_fields
|
@@ -93,7 +98,7 @@ module Mongoid
|
|
93
98
|
#
|
94
99
|
# @since 2.4.0
|
95
100
|
def apply_default(name)
|
96
|
-
unless attributes.
|
101
|
+
unless attributes.key?(name)
|
97
102
|
if field = fields[name]
|
98
103
|
default = field.eval_default(self)
|
99
104
|
unless default.nil? || field.lazy?
|
@@ -358,7 +363,7 @@ module Mongoid
|
|
358
363
|
field_options = field.options
|
359
364
|
|
360
365
|
Fields.options.each_pair do |option_name, handler|
|
361
|
-
if field_options.
|
366
|
+
if field_options.key?(option_name)
|
362
367
|
handler.call(self, field, field_options[option_name])
|
363
368
|
end
|
364
369
|
end
|
data/lib/mongoid/findable.rb
CHANGED
@@ -19,7 +19,9 @@ module Mongoid
|
|
19
19
|
:each,
|
20
20
|
:each_with_index,
|
21
21
|
:extras,
|
22
|
-
:
|
22
|
+
:find_one_and_delete,
|
23
|
+
:find_one_and_replace,
|
24
|
+
:find_one_and_update,
|
23
25
|
:find_or_create_by,
|
24
26
|
:find_or_create_by!,
|
25
27
|
:find_or_initialize_by,
|
@@ -34,6 +36,7 @@ module Mongoid
|
|
34
36
|
:min,
|
35
37
|
:none,
|
36
38
|
:pluck,
|
39
|
+
:read,
|
37
40
|
:sum,
|
38
41
|
:text_search,
|
39
42
|
:update,
|