mongoid 5.4.0 → 6.4.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +3 -3
- data/Rakefile +26 -0
- data/lib/config/locales/en.yml +40 -0
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic.rb +5 -5
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/attributes.rb +22 -21
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +36 -0
- data/lib/mongoid/clients/options.rb +55 -250
- data/lib/mongoid/clients/sessions.rb +113 -0
- data/lib/mongoid/clients/storage_options.rb +2 -69
- data/lib/mongoid/clients.rb +10 -63
- data/lib/mongoid/composable.rb +29 -2
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +4 -4
- data/lib/mongoid/contextual/map_reduce.rb +7 -3
- data/lib/mongoid/contextual/memory.rb +9 -4
- data/lib/mongoid/contextual/mongo.rb +65 -30
- data/lib/mongoid/contextual/none.rb +12 -0
- data/lib/mongoid/copyable.rb +13 -6
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +29 -3
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
- data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
- data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
- data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
- data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
- data/lib/mongoid/criteria/queryable/key.rb +103 -0
- data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
- data/lib/mongoid/criteria/queryable/mergeable.rb +273 -0
- data/lib/mongoid/criteria/queryable/optional.rb +429 -0
- data/lib/mongoid/criteria/queryable/options.rb +153 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +689 -0
- data/lib/mongoid/criteria/queryable/selector.rb +212 -0
- data/lib/mongoid/criteria/queryable/smash.rb +104 -0
- data/lib/mongoid/criteria/queryable.rb +87 -0
- data/lib/mongoid/criteria.rb +6 -2
- data/lib/mongoid/document.rb +34 -41
- data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -1
- data/lib/mongoid/errors/invalid_field.rb +2 -2
- data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
- data/lib/mongoid/errors/invalid_relation.rb +66 -0
- data/lib/mongoid/errors/invalid_session_use.rb +24 -0
- data/lib/mongoid/errors.rb +3 -0
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions/big_decimal.rb +17 -8
- data/lib/mongoid/extensions/date.rb +4 -1
- data/lib/mongoid/extensions/decimal128.rb +3 -3
- data/lib/mongoid/extensions/hash.rb +1 -0
- data/lib/mongoid/extensions/regexp.rb +1 -0
- data/lib/mongoid/extensions/string.rb +6 -3
- data/lib/mongoid/extensions/time.rb +4 -1
- data/lib/mongoid/extensions.rb +0 -4
- data/lib/mongoid/factory.rb +2 -1
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +2 -2
- data/lib/mongoid/indexable.rb +16 -14
- data/lib/mongoid/interceptable.rb +9 -22
- 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 +28 -0
- data/lib/mongoid/matchable/exists.rb +2 -2
- data/lib/mongoid/matchable/gt.rb +4 -2
- data/lib/mongoid/matchable/gte.rb +4 -2
- data/lib/mongoid/matchable/in.rb +2 -2
- data/lib/mongoid/matchable/lt.rb +4 -2
- data/lib/mongoid/matchable/lte.rb +4 -2
- data/lib/mongoid/matchable/ne.rb +2 -2
- data/lib/mongoid/matchable/nin.rb +2 -2
- data/lib/mongoid/matchable/nor.rb +37 -0
- data/lib/mongoid/matchable/or.rb +3 -3
- data/lib/mongoid/matchable/regexp.rb +3 -3
- data/lib/mongoid/matchable/size.rb +2 -2
- data/lib/mongoid/matchable.rb +16 -7
- data/lib/mongoid/persistable/creatable.rb +5 -3
- data/lib/mongoid/persistable/deletable.rb +5 -3
- data/lib/mongoid/persistable/destroyable.rb +1 -5
- data/lib/mongoid/persistable/settable.rb +5 -5
- data/lib/mongoid/persistable/updatable.rb +7 -14
- data/lib/mongoid/persistable/upsertable.rb +2 -1
- data/lib/mongoid/persistable.rb +4 -6
- data/lib/mongoid/persistence_context.rb +220 -0
- data/lib/mongoid/query_cache.rb +67 -23
- data/lib/mongoid/railtie.rb +17 -1
- data/lib/mongoid/railties/controller_runtime.rb +86 -0
- data/lib/mongoid/relations/accessors.rb +3 -0
- data/lib/mongoid/relations/auto_save.rb +12 -4
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
- data/lib/mongoid/relations/counter_cache.rb +15 -5
- data/lib/mongoid/relations/eager/base.rb +3 -3
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +2 -2
- data/lib/mongoid/relations/eager/has_many.rb +1 -1
- data/lib/mongoid/relations/eager.rb +6 -11
- data/lib/mongoid/relations/embedded/batchable.rb +20 -18
- data/lib/mongoid/relations/embedded/in.rb +13 -1
- data/lib/mongoid/relations/embedded/many.rb +51 -10
- data/lib/mongoid/relations/embedded/one.rb +14 -1
- data/lib/mongoid/relations/macros.rb +9 -1
- data/lib/mongoid/relations/many.rb +4 -0
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/proxy.rb +1 -31
- data/lib/mongoid/relations/referenced/in.rb +19 -10
- data/lib/mongoid/relations/referenced/many.rb +30 -26
- data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
- data/lib/mongoid/relations/referenced/one.rb +15 -1
- data/lib/mongoid/relations/synchronization.rb +12 -12
- data/lib/mongoid/relations/targets/enumerable.rb +24 -4
- data/lib/mongoid/relations/touchable.rb +7 -4
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +3 -3
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/stateful.rb +1 -0
- data/lib/mongoid/tasks/database.rb +3 -2
- data/lib/mongoid/threaded.rb +74 -0
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +6 -6
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +18 -3
- data/spec/app/models/agent.rb +2 -0
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/array_field.rb +7 -0
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/band.rb +3 -0
- data/spec/app/models/book.rb +2 -1
- data/spec/app/models/delegating_patient.rb +16 -0
- data/spec/app/models/dokument.rb +1 -0
- data/spec/app/models/ordered_post.rb +5 -0
- data/spec/app/models/oscar.rb +1 -2
- data/spec/app/models/page.rb +1 -1
- data/spec/app/models/person.rb +3 -3
- data/spec/app/models/princess.rb +2 -0
- data/spec/app/models/record.rb +1 -0
- data/spec/app/models/subscription.rb +1 -0
- data/spec/app/models/thing.rb +1 -1
- data/spec/config/mongoid.yml +15 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +3 -3
- data/spec/mongoid/atomic_spec.rb +5 -5
- data/spec/mongoid/attributes/nested_spec.rb +18 -14
- data/spec/mongoid/attributes/readonly_spec.rb +87 -44
- data/spec/mongoid/attributes_spec.rb +90 -5
- data/spec/mongoid/cacheable_spec.rb +112 -0
- data/spec/mongoid/changeable_spec.rb +58 -0
- data/spec/mongoid/clients/factory_spec.rb +80 -28
- data/spec/mongoid/clients/options_spec.rb +396 -95
- data/spec/mongoid/clients/sessions_spec.rb +334 -0
- data/spec/mongoid/clients_spec.rb +243 -101
- data/spec/mongoid/composable_spec.rb +7 -0
- data/spec/mongoid/config_spec.rb +67 -11
- data/spec/mongoid/contextual/atomic_spec.rb +3 -3
- data/spec/mongoid/contextual/geo_near_spec.rb +1 -0
- data/spec/mongoid/contextual/mongo_spec.rb +275 -22
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +13 -4
- data/spec/mongoid/criteria/modifiable_spec.rb +297 -16
- data/spec/mongoid/criteria/options_spec.rb +29 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
- data/spec/mongoid/{extensions/origin → criteria/queryable/extensions}/regexp_raw_spec.rb +2 -2
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +90 -0
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
- data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
- data/spec/mongoid/criteria/queryable/optional_spec.rb +1799 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +4242 -0
- data/spec/mongoid/criteria/queryable/selector_spec.rb +844 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
- data/spec/mongoid/criteria/scopable_spec.rb +81 -0
- data/spec/mongoid/criteria_spec.rb +156 -22
- data/spec/mongoid/document_spec.rb +100 -90
- data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
- data/spec/mongoid/extensions/big_decimal_spec.rb +321 -19
- data/spec/mongoid/extensions/boolean_spec.rb +14 -0
- data/spec/mongoid/extensions/date_spec.rb +2 -6
- data/spec/mongoid/extensions/date_time_spec.rb +2 -6
- data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
- data/spec/mongoid/extensions/float_spec.rb +8 -1
- data/spec/mongoid/extensions/hash_spec.rb +15 -0
- data/spec/mongoid/extensions/integer_spec.rb +8 -1
- data/spec/mongoid/extensions/object_spec.rb +11 -0
- data/spec/mongoid/extensions/regexp_spec.rb +23 -0
- data/spec/mongoid/extensions/string_spec.rb +53 -4
- data/spec/mongoid/extensions/time_spec.rb +2 -6
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/factory_spec.rb +11 -0
- data/spec/mongoid/fields_spec.rb +1 -1
- data/spec/mongoid/findable_spec.rb +47 -2
- data/spec/mongoid/indexable_spec.rb +15 -3
- data/spec/mongoid/interceptable_spec.rb +85 -19
- 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 +86 -0
- data/spec/mongoid/matchable/exists_spec.rb +5 -5
- data/spec/mongoid/matchable/gt_spec.rb +18 -7
- data/spec/mongoid/matchable/gte_spec.rb +17 -7
- data/spec/mongoid/matchable/in_spec.rb +5 -5
- data/spec/mongoid/matchable/lt_spec.rb +18 -7
- data/spec/mongoid/matchable/lte_spec.rb +18 -7
- data/spec/mongoid/matchable/ne_spec.rb +5 -5
- data/spec/mongoid/matchable/nin_spec.rb +5 -5
- data/spec/mongoid/matchable/nor_spec.rb +209 -0
- data/spec/mongoid/matchable/or_spec.rb +7 -7
- data/spec/mongoid/matchable/regexp_spec.rb +5 -5
- data/spec/mongoid/matchable/size_spec.rb +3 -3
- data/spec/mongoid/matchable_spec.rb +199 -54
- data/spec/mongoid/persistable/creatable_spec.rb +7 -2
- data/spec/mongoid/persistable/deletable_spec.rb +35 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +25 -2
- data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
- data/spec/mongoid/persistable/savable_spec.rb +34 -29
- data/spec/mongoid/persistable/settable_spec.rb +77 -27
- data/spec/mongoid/persistable/updatable_spec.rb +182 -3
- data/spec/mongoid/persistable_spec.rb +16 -16
- data/spec/mongoid/persistence_context_spec.rb +694 -0
- data/spec/mongoid/positional_spec.rb +1 -1
- data/spec/mongoid/query_cache_spec.rb +170 -12
- data/spec/mongoid/relations/accessors_spec.rb +1 -1
- data/spec/mongoid/relations/auto_save_spec.rb +39 -6
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
- data/spec/mongoid/relations/builders_spec.rb +37 -10
- data/spec/mongoid/relations/counter_cache_spec.rb +64 -3
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +16 -0
- data/spec/mongoid/relations/eager_spec.rb +40 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +305 -59
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +415 -7
- data/spec/mongoid/relations/metadata_spec.rb +15 -1
- data/spec/mongoid/relations/proxy_spec.rb +27 -1
- data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +35 -25
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +14 -26
- data/spec/mongoid/relations/synchronization_spec.rb +48 -2
- data/spec/mongoid/relations/targets/enumerable_spec.rb +108 -0
- data/spec/mongoid/relations/touchable_spec.rb +40 -0
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/scopable_spec.rb +13 -0
- data/spec/mongoid/serializable_spec.rb +0 -50
- data/spec/mongoid/threaded_spec.rb +68 -0
- data/spec/mongoid/validatable/presence_spec.rb +1 -1
- data/spec/mongoid/validatable/uniqueness_spec.rb +18 -9
- data/spec/mongoid/validatable_spec.rb +16 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
- data/spec/spec_helper.rb +101 -8
- data/spec/support/cluster_config.rb +158 -0
- data/spec/support/constraints.rb +101 -0
- data/spec/support/macros.rb +20 -0
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/spec_config.rb +42 -0
- data.tar.gz.sig +0 -0
- metadata +163 -61
- metadata.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- data/lib/mongoid/railties/document.rb +0 -12
- data/spec/mongoid/railties/document_spec.rb +0 -24
data/lib/mongoid.rb
CHANGED
@@ -12,11 +12,11 @@ require "active_support/inflector"
|
|
12
12
|
require "active_support/time_with_zone"
|
13
13
|
require "active_model"
|
14
14
|
|
15
|
-
require "origin"
|
16
15
|
require "mongo"
|
17
16
|
|
18
17
|
require "mongoid/version"
|
19
18
|
require "mongoid/config"
|
19
|
+
require "mongoid/persistence_context"
|
20
20
|
require "mongoid/loggable"
|
21
21
|
require "mongoid/clients"
|
22
22
|
require "mongoid/document"
|
@@ -42,7 +42,7 @@ module Mongoid
|
|
42
42
|
PLATFORM_DETAILS = "mongoid-#{VERSION}".freeze
|
43
43
|
|
44
44
|
# The minimum MongoDB version supported.
|
45
|
-
MONGODB_VERSION = "2.
|
45
|
+
MONGODB_VERSION = "2.6.0"
|
46
46
|
|
47
47
|
# Sets the Mongoid configuration options. Best used by passing a block.
|
48
48
|
#
|
@@ -65,7 +65,7 @@ module Mongoid
|
|
65
65
|
#
|
66
66
|
# @return [ Mongo::Client ] The default client.
|
67
67
|
#
|
68
|
-
# @since
|
68
|
+
# @since 5.0.0
|
69
69
|
def default_client
|
70
70
|
Clients.default
|
71
71
|
end
|
@@ -77,7 +77,7 @@ module Mongoid
|
|
77
77
|
#
|
78
78
|
# @return [ true ] True.
|
79
79
|
#
|
80
|
-
# @since
|
80
|
+
# @since 5.0.0
|
81
81
|
def disconnect_clients
|
82
82
|
Clients.disconnect
|
83
83
|
end
|
@@ -89,7 +89,7 @@ module Mongoid
|
|
89
89
|
#
|
90
90
|
# @return [ Mongo::Client ] The named client.
|
91
91
|
#
|
92
|
-
# @since
|
92
|
+
# @since 5.0.0
|
93
93
|
def client(name)
|
94
94
|
Clients.with_name(name)
|
95
95
|
end
|
@@ -101,5 +101,5 @@ module Mongoid
|
|
101
101
|
# Mongoid.database = Mongo::Connection.new.db("test")
|
102
102
|
#
|
103
103
|
# @since 1.0.0
|
104
|
-
delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ]
|
104
|
+
delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ]), to: Config)
|
105
105
|
end
|
@@ -11,6 +11,10 @@ development:
|
|
11
11
|
hosts:
|
12
12
|
- localhost:27017
|
13
13
|
options:
|
14
|
+
# Note that all options listed below are Ruby driver client options (the mongo gem).
|
15
|
+
# Please refer to the driver documentation of the version of the mongo gem you are using
|
16
|
+
# for the most up-to-date list of options.
|
17
|
+
#
|
14
18
|
# Change the default write concern. (default = { w: 1 })
|
15
19
|
# write:
|
16
20
|
# w: 1
|
@@ -34,11 +38,13 @@ development:
|
|
34
38
|
# - 'dbOwner'
|
35
39
|
|
36
40
|
# Change the default authentication mechanism. Valid options are: :scram,
|
37
|
-
# :mongodb_cr, :mongodb_x509, and :plain.
|
38
|
-
#
|
41
|
+
# :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
|
42
|
+
# mechanisms require username and password, with the exception of :mongodb_x509.
|
43
|
+
# Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
|
39
44
|
# auth_mech: :scram
|
40
45
|
|
41
|
-
# The database or source to authenticate the user against.
|
46
|
+
# The database or source to authenticate the user against.
|
47
|
+
# (default: the database specified above or admin)
|
42
48
|
# auth_source: admin
|
43
49
|
|
44
50
|
# Force a the driver cluster to behave in a certain manner instead of auto-
|
@@ -120,6 +126,10 @@ development:
|
|
120
126
|
# existing method. (default: false)
|
121
127
|
# scope_overwrite_exception: false
|
122
128
|
|
129
|
+
# Raise an error when defining a field with the same name as an
|
130
|
+
# existing method. (default: false)
|
131
|
+
# duplicate_fields_exception: false
|
132
|
+
|
123
133
|
# Use Active Support's time zone in conversions. (default: true)
|
124
134
|
# use_activesupport_time_zone: true
|
125
135
|
|
@@ -131,6 +141,11 @@ development:
|
|
131
141
|
# otherwise.(default: :info)
|
132
142
|
# log_level: :info
|
133
143
|
|
144
|
+
# Control whether `belongs_to` association is required. By default
|
145
|
+
# `belongs_to` will trigger a validation error if the association
|
146
|
+
# is not present. (default: true)
|
147
|
+
# belongs_to_required_by_default: true
|
148
|
+
|
134
149
|
# Application name that is printed to the mongodb logs upon establishing a
|
135
150
|
# connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
|
136
151
|
# app_name: MyApplicationName
|
data/spec/app/models/agent.rb
CHANGED
data/spec/app/models/album.rb
CHANGED
data/spec/app/models/artist.rb
CHANGED
@@ -13,16 +13,37 @@ class Artist
|
|
13
13
|
after_create :create_songs
|
14
14
|
before_save :before_save_stub
|
15
15
|
before_destroy :before_destroy_stub
|
16
|
+
before_update :before_update_stub
|
16
17
|
|
17
18
|
protected
|
18
19
|
def before_create_stub
|
19
20
|
true
|
20
21
|
end
|
21
22
|
|
23
|
+
def before_update_stub
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
def before_update_fail_stub
|
28
|
+
throw(:abort)
|
29
|
+
end
|
30
|
+
|
31
|
+
def before_save_fail_stub
|
32
|
+
throw(:abort)
|
33
|
+
end
|
34
|
+
|
35
|
+
def before_create_fail_stub
|
36
|
+
throw(:abort)
|
37
|
+
end
|
38
|
+
|
22
39
|
def before_save_stub
|
23
40
|
true
|
24
41
|
end
|
25
42
|
|
43
|
+
def before_destroy_fail_stub
|
44
|
+
throw(:abort)
|
45
|
+
end
|
46
|
+
|
26
47
|
def before_destroy_stub
|
27
48
|
true
|
28
49
|
end
|
data/spec/app/models/band.rb
CHANGED
@@ -20,8 +20,11 @@ class Band
|
|
20
20
|
|
21
21
|
embeds_many :records, cascade_callbacks: true
|
22
22
|
embeds_many :notes, as: :noteable, cascade_callbacks: true, validate: false
|
23
|
+
embeds_many :labels
|
23
24
|
embeds_one :label, cascade_callbacks: true
|
24
25
|
|
26
|
+
has_many :same_name, class_name: 'Agent', inverse_of: :same_name
|
27
|
+
|
25
28
|
after_upsert do |doc|
|
26
29
|
doc.upserted = true
|
27
30
|
end
|
data/spec/app/models/book.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Book
|
2
2
|
include Mongoid::Document
|
3
3
|
include Mongoid::Attributes::Dynamic
|
4
|
+
include Mongoid::Timestamps
|
4
5
|
field :title, type: String
|
5
6
|
field :chapters, type: Integer
|
6
7
|
belongs_to :series
|
@@ -11,5 +12,5 @@ class Book
|
|
11
12
|
doc.chapters = 5
|
12
13
|
end
|
13
14
|
|
14
|
-
embeds_many :pages
|
15
|
+
embeds_many :pages, cascade_callbacks: true
|
15
16
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
class DelegatingPatient
|
5
|
+
include Mongoid::Document
|
6
|
+
|
7
|
+
embeds_one :email
|
8
|
+
|
9
|
+
# Instance level delegation
|
10
|
+
delegate :address, to: :email
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# Class level delegation
|
14
|
+
delegate :default_client, to: ::Mongoid
|
15
|
+
end
|
16
|
+
end
|
data/spec/app/models/dokument.rb
CHANGED
data/spec/app/models/oscar.rb
CHANGED
data/spec/app/models/page.rb
CHANGED
data/spec/app/models/person.rb
CHANGED
@@ -36,6 +36,7 @@ class Person
|
|
36
36
|
field :overridden_setter, type: String
|
37
37
|
field :arrays, type: Array
|
38
38
|
field :range, type: Range
|
39
|
+
field :species, type: Symbol
|
39
40
|
|
40
41
|
index age: 1
|
41
42
|
index addresses: 1
|
@@ -43,8 +44,6 @@ class Person
|
|
43
44
|
index name: 1
|
44
45
|
index title: 1
|
45
46
|
|
46
|
-
index({ ssn: 1 }, { unique: true })
|
47
|
-
|
48
47
|
attr_reader :rescored
|
49
48
|
|
50
49
|
embeds_many :favorites, order: :title.desc, inverse_of: :perp, validate: false
|
@@ -134,7 +133,8 @@ class Person
|
|
134
133
|
self.score_without_rescoring = score
|
135
134
|
end
|
136
135
|
|
137
|
-
|
136
|
+
alias_method :score_without_rescoring=, :score=
|
137
|
+
alias_method :score=, :score_with_rescoring=
|
138
138
|
|
139
139
|
def update_addresses
|
140
140
|
addresses.each do |address|
|
data/spec/app/models/princess.rb
CHANGED
data/spec/app/models/record.rb
CHANGED
data/spec/app/models/thing.rb
CHANGED
data/spec/config/mongoid.yml
CHANGED
@@ -17,6 +17,10 @@ test:
|
|
17
17
|
database: reports
|
18
18
|
hosts:
|
19
19
|
- <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
|
20
|
+
options:
|
21
|
+
user: "mongoid-user"
|
22
|
+
password: "password"
|
23
|
+
auth_source: "admin"
|
20
24
|
options:
|
21
25
|
include_root_in_json: false
|
22
26
|
include_type_for_serialization: false
|
@@ -26,4 +30,15 @@ test:
|
|
26
30
|
use_activesupport_time_zone: true
|
27
31
|
use_utc: false
|
28
32
|
log_level: :warn
|
33
|
+
belongs_to_required_by_default: false
|
29
34
|
app_name: 'testing'
|
35
|
+
test_with_max_staleness:
|
36
|
+
clients:
|
37
|
+
default:
|
38
|
+
database: mongoid_test
|
39
|
+
hosts:
|
40
|
+
- <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
|
41
|
+
options:
|
42
|
+
read:
|
43
|
+
mode: :primary_preferred
|
44
|
+
max_staleness: 100
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
|
6
|
+
describe Mongoid::Document do
|
7
|
+
context 'when including class uses delegate' do
|
8
|
+
let(:patient) do
|
9
|
+
DelegatingPatient.new(
|
10
|
+
email: Email.new(address: 'test@example.com'),
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'works for instance level delegation' do
|
15
|
+
patient.address.should == 'test@example.com'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'works for class level delegation' do
|
19
|
+
DelegatingPatient.default_client.should be Mongoid.default_client
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -212,7 +212,7 @@ describe Mongoid::Atomic::Modifiers do
|
|
212
212
|
it "adds the push all modifiers" do
|
213
213
|
expect(modifiers).to eq(
|
214
214
|
{ "$push" =>
|
215
|
-
|
215
|
+
{ "addresses" => { '$each' => [
|
216
216
|
{ "street" => "Oxford St" }
|
217
217
|
] }
|
218
218
|
}
|
@@ -300,7 +300,7 @@ describe Mongoid::Atomic::Modifiers do
|
|
300
300
|
expect(modifiers).to eq(
|
301
301
|
{ "$pullAll" => {
|
302
302
|
"addresses" => { "street" => "Bond St" }},
|
303
|
-
conflicts: { "$push" =>
|
303
|
+
conflicts: { "$push" =>
|
304
304
|
{ "addresses" => { '$each' => [
|
305
305
|
{ "street" => "Oxford St" }
|
306
306
|
] }
|
@@ -329,7 +329,7 @@ describe Mongoid::Atomic::Modifiers do
|
|
329
329
|
it "adds the push all modifiers to the conflicts hash" do
|
330
330
|
expect(modifiers).to eq(
|
331
331
|
{ "$push" => {
|
332
|
-
"addresses.0.locations" => {'$each' => [{ "street" => "Bond St" }]}},
|
332
|
+
"addresses.0.locations" => { '$each' => [{ "street" => "Bond St" }] } },
|
333
333
|
conflicts: { "$push" =>
|
334
334
|
{ "addresses" => { '$each' => [
|
335
335
|
{ "street" => "Oxford St" }
|
data/spec/mongoid/atomic_spec.rb
CHANGED
@@ -76,13 +76,13 @@ describe Mongoid::Atomic do
|
|
76
76
|
person.addresses.build(street: "Oxford St")
|
77
77
|
end
|
78
78
|
|
79
|
-
it "returns a $set and $push
|
79
|
+
it "returns a $set and $push for modifications" do
|
80
80
|
expect(person.atomic_updates).to eq(
|
81
81
|
{
|
82
82
|
"$set" => { "title" => "Sir" },
|
83
|
-
"$push" => { "addresses" => {'$each' => [
|
83
|
+
"$push" => { "addresses" => { '$each' => [
|
84
84
|
{ "_id" => "oxford-st", "street" => "Oxford St" }
|
85
|
-
]
|
85
|
+
]} }
|
86
86
|
}
|
87
87
|
)
|
88
88
|
end
|
@@ -339,14 +339,14 @@ describe Mongoid::Atomic do
|
|
339
339
|
address.locations.build(name: "Home")
|
340
340
|
end
|
341
341
|
|
342
|
-
it "returns the proper $sets and $
|
342
|
+
it "returns the proper $sets and $pushes for all levels" do
|
343
343
|
expect(person.atomic_updates).to eq(
|
344
344
|
{
|
345
345
|
"$set" => {
|
346
346
|
"title" => "Sir",
|
347
347
|
},
|
348
348
|
"$push" => {
|
349
|
-
"addresses" => {
|
349
|
+
"addresses" => { '$each' => [{
|
350
350
|
"_id" => address.id,
|
351
351
|
"street" => "Another",
|
352
352
|
"locations" => [
|
@@ -205,6 +205,10 @@ describe Mongoid::Attributes::Nested do
|
|
205
205
|
Post.accepts_nested_attributes_for :person
|
206
206
|
end
|
207
207
|
|
208
|
+
after do
|
209
|
+
Post.reset_callbacks(:save)
|
210
|
+
end
|
211
|
+
|
208
212
|
let(:post) do
|
209
213
|
Post.new(person_attributes: { title: "Sir" })
|
210
214
|
end
|
@@ -1335,7 +1339,7 @@ describe Mongoid::Attributes::Nested do
|
|
1335
1339
|
expect {
|
1336
1340
|
person.addresses_attributes =
|
1337
1341
|
{ "foo" => { "id" => "test", "street" => "Test" } }
|
1338
|
-
}.to raise_error
|
1342
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
1339
1343
|
end
|
1340
1344
|
end
|
1341
1345
|
end
|
@@ -1434,7 +1438,7 @@ describe Mongoid::Attributes::Nested do
|
|
1434
1438
|
Person.create(age: 42)
|
1435
1439
|
end
|
1436
1440
|
|
1437
|
-
context "when the child
|
1441
|
+
context "when the child halts the callback chain in a before callback" do
|
1438
1442
|
|
1439
1443
|
context "when the child is not paranoid" do
|
1440
1444
|
|
@@ -1970,7 +1974,7 @@ describe Mongoid::Attributes::Nested do
|
|
1970
1974
|
}
|
1971
1975
|
end
|
1972
1976
|
|
1973
|
-
it "ignores the
|
1977
|
+
it "ignores the marked document" do
|
1974
1978
|
expect(person.addresses.size).to eq(1)
|
1975
1979
|
end
|
1976
1980
|
|
@@ -2031,7 +2035,7 @@ describe Mongoid::Attributes::Nested do
|
|
2031
2035
|
}
|
2032
2036
|
end
|
2033
2037
|
|
2034
|
-
it "adds the
|
2038
|
+
it "adds the marked document" do
|
2035
2039
|
expect(person.addresses.first.street).to eq("Maybachufer")
|
2036
2040
|
end
|
2037
2041
|
|
@@ -2091,7 +2095,7 @@ describe Mongoid::Attributes::Nested do
|
|
2091
2095
|
}
|
2092
2096
|
end
|
2093
2097
|
|
2094
|
-
it "adds the
|
2098
|
+
it "adds the marked document" do
|
2095
2099
|
expect(person.addresses.first.street).to eq("Maybachufer")
|
2096
2100
|
end
|
2097
2101
|
|
@@ -3028,7 +3032,7 @@ describe Mongoid::Attributes::Nested do
|
|
3028
3032
|
expect {
|
3029
3033
|
person.posts_attributes =
|
3030
3034
|
{ "foo" => { "id" => "test", "title" => "Test" } }
|
3031
|
-
}.to raise_error
|
3035
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
3032
3036
|
end
|
3033
3037
|
end
|
3034
3038
|
end
|
@@ -3431,7 +3435,7 @@ describe Mongoid::Attributes::Nested do
|
|
3431
3435
|
}
|
3432
3436
|
end
|
3433
3437
|
|
3434
|
-
it "ignores the
|
3438
|
+
it "ignores the marked document" do
|
3435
3439
|
expect(person.posts.size).to eq(1)
|
3436
3440
|
end
|
3437
3441
|
|
@@ -3492,7 +3496,7 @@ describe Mongoid::Attributes::Nested do
|
|
3492
3496
|
}
|
3493
3497
|
end
|
3494
3498
|
|
3495
|
-
it "adds the
|
3499
|
+
it "adds the marked document" do
|
3496
3500
|
expect(person.posts.first.title).to eq("New Blog")
|
3497
3501
|
end
|
3498
3502
|
|
@@ -3552,7 +3556,7 @@ describe Mongoid::Attributes::Nested do
|
|
3552
3556
|
}
|
3553
3557
|
end
|
3554
3558
|
|
3555
|
-
it "adds the
|
3559
|
+
it "adds the marked document" do
|
3556
3560
|
expect(person.posts.first.title).to eq("New Blog")
|
3557
3561
|
end
|
3558
3562
|
|
@@ -3745,7 +3749,7 @@ describe Mongoid::Attributes::Nested do
|
|
3745
3749
|
expect {
|
3746
3750
|
person.preferences_attributes =
|
3747
3751
|
{ "foo" => { "id" => "test", "name" => "Test" } }
|
3748
|
-
}.to raise_error
|
3752
|
+
}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
3749
3753
|
end
|
3750
3754
|
end
|
3751
3755
|
end
|
@@ -4097,7 +4101,7 @@ describe Mongoid::Attributes::Nested do
|
|
4097
4101
|
}
|
4098
4102
|
end
|
4099
4103
|
|
4100
|
-
it "ignores the
|
4104
|
+
it "ignores the marked document" do
|
4101
4105
|
expect(person.preferences.size).to eq(1)
|
4102
4106
|
end
|
4103
4107
|
|
@@ -4158,7 +4162,7 @@ describe Mongoid::Attributes::Nested do
|
|
4158
4162
|
}
|
4159
4163
|
end
|
4160
4164
|
|
4161
|
-
it "adds the
|
4165
|
+
it "adds the marked document" do
|
4162
4166
|
expect(person.preferences.first.name).to eq("New Blog")
|
4163
4167
|
end
|
4164
4168
|
|
@@ -4218,7 +4222,7 @@ describe Mongoid::Attributes::Nested do
|
|
4218
4222
|
}
|
4219
4223
|
end
|
4220
4224
|
|
4221
|
-
it "adds the
|
4225
|
+
it "adds the marked document" do
|
4222
4226
|
expect(person.preferences.first.name).to eq("New Blog")
|
4223
4227
|
end
|
4224
4228
|
|
@@ -4852,7 +4856,7 @@ describe Mongoid::Attributes::Nested do
|
|
4852
4856
|
end
|
4853
4857
|
|
4854
4858
|
it "the update raises an error" do
|
4855
|
-
expect{ error_raising_update }.to raise_error
|
4859
|
+
expect{ error_raising_update }.to raise_error(Mongoid::Errors::Validations)
|
4856
4860
|
end
|
4857
4861
|
|
4858
4862
|
it "the update does not occur" do
|