mongoid 5.4.0 → 6.4.8
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/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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8c453904dce4061c6cd88c36e21f3514fb778b37976ffd12e985aaf80fc2b98
|
4
|
+
data.tar.gz: d10421a146387851daa6a9c27184b48da1cc50d96a946bce0851aa69fd56c9a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c0e672470d68faab3afc70e65524baa771801b46bbbb51b831a5cc709baf6df4ed7f0d81aed2dd5d0c3e3cf6730166da9bc8345b33577298f4438ec6c11fca3
|
7
|
+
data.tar.gz: 2008465437ba6eafe50235b22204df40b560b8e3bd27d064e97912c3249f5443af2ad1016c9a545d9d487abc6c1b38835624090a6d9165d06f9c4e676b561a23
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -21,17 +21,17 @@ Project Tracking
|
|
21
21
|
Compatibility
|
22
22
|
-------------
|
23
23
|
|
24
|
-
Mongoid is tested against MRI
|
24
|
+
Mongoid is tested against MRI 2.2, 2.3 and JRuby (9.1).
|
25
25
|
|
26
26
|
Documentation
|
27
27
|
-------------
|
28
28
|
|
29
|
-
Please see the [MongoDB website](http://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#ruby-mongoid-tutorial) for up-to-date documentation
|
29
|
+
Please see the [MongoDB website](http://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#ruby-mongoid-tutorial) for up-to-date documentation.
|
30
30
|
|
31
31
|
License
|
32
32
|
-------
|
33
33
|
|
34
|
-
Copyright (c) 2009-
|
34
|
+
Copyright (c) 2009-2017 Durran Jordan
|
35
35
|
|
36
36
|
Permission is hereby granted, free of charge, to any person obtaining
|
37
37
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "bundler"
|
2
|
+
require "bundler/gem_tasks"
|
2
3
|
Bundler.setup
|
3
4
|
|
4
5
|
require "rake"
|
@@ -7,6 +8,9 @@ require "rspec/core/rake_task"
|
|
7
8
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
8
9
|
require "mongoid/version"
|
9
10
|
|
11
|
+
tasks = Rake.application.instance_variable_get('@tasks')
|
12
|
+
tasks['release:do'] = tasks.delete('release')
|
13
|
+
|
10
14
|
task :gem => :build
|
11
15
|
task :build do
|
12
16
|
system "gem build mongoid.gemspec"
|
@@ -33,3 +37,25 @@ RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
|
33
37
|
end
|
34
38
|
|
35
39
|
task :default => :spec
|
40
|
+
|
41
|
+
desc "Generate all documentation"
|
42
|
+
task :docs => 'docs:yard'
|
43
|
+
|
44
|
+
namespace :docs do
|
45
|
+
desc "Generate yard documention"
|
46
|
+
task :yard do
|
47
|
+
out = File.join('yard-docs', Mongoid::VERSION)
|
48
|
+
FileUtils.rm_rf(out)
|
49
|
+
system "yardoc -o #{out} --title mongoid-#{Mongoid::VERSION}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
namespace :release do
|
54
|
+
task :check_private_key do
|
55
|
+
unless File.exist?('gem-private_key.pem')
|
56
|
+
raise "No private key present, cannot release"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
task :release => ['release:check_private_key', 'release:do']
|
data/lib/config/locales/en.yml
CHANGED
@@ -177,6 +177,25 @@ en:
|
|
177
177
|
collection. Double check the relation definitions and fix any
|
178
178
|
instances where embedded documents are improperly referenced
|
179
179
|
from other collections."
|
180
|
+
invalid_persistence_option:
|
181
|
+
message: "Invalid persistence option :%{invalid}."
|
182
|
+
summary: "The options used to change the persistence context must be one
|
183
|
+
of the valid options for a mongo client, or a collection name."
|
184
|
+
resolution: "Valid options are: %{valid}, make sure these are the ones
|
185
|
+
you are using."
|
186
|
+
invalid_relation:
|
187
|
+
message: "Defining a relation named '%{name}' is not allowed."
|
188
|
+
summary: "Defining this relation would override the method '%{name}',
|
189
|
+
which would cause issues with expectations around the original
|
190
|
+
method and cause extremely hard to debug issues. The original
|
191
|
+
method was defined in:\n
|
192
|
+
\_\_Object: %{origin}\n
|
193
|
+
\_\_File: %{file}\n
|
194
|
+
\_\_Line: %{line}"
|
195
|
+
resolution: "Use Mongoid.destructive_fields to see what names are not
|
196
|
+
allowed, and don't use these names. These include names that also
|
197
|
+
conflict with core Ruby methods on Object, Module, Enumerable, or
|
198
|
+
included gems that inject methods into these or Mongoid internals."
|
180
199
|
invalid_scope:
|
181
200
|
message: "Defining a scope of value %{value} on %{klass} is not
|
182
201
|
allowed."
|
@@ -187,6 +206,20 @@ en:
|
|
187
206
|
\_\_\_\_include Mongoid::Document\n
|
188
207
|
\_\_\_\_scope :inactive, ->{ where(active: false) }\n
|
189
208
|
\_\_end\n\n"
|
209
|
+
invalid_session_use:
|
210
|
+
message: "A session was attempted to be used with a model whose client cannot use
|
211
|
+
that session."
|
212
|
+
summary: "Sessions are started via driver clients (Model#mongo_client) and, in most cases, driver
|
213
|
+
clients are shared across models. When different models have their own clients, a session cannot
|
214
|
+
be obtained via one model and used for operations on another model."
|
215
|
+
resolution: "Only execute operations on the model class or instances of the model through which
|
216
|
+
the session was created. Otherwise, ensure that all models on which operations are executed
|
217
|
+
in the session block share the same driver client. For example, a model may have a different
|
218
|
+
client specified in its 'store_in' options.\n\n"
|
219
|
+
invalid_session_nesting:
|
220
|
+
message: "A session was started while another session was being used."
|
221
|
+
summary: "Sessions cannot be nested. Only one session can be used in a thread at once."
|
222
|
+
resolution: "Only use one session at a time; sessions cannot be nested."
|
190
223
|
invalid_storage_options:
|
191
224
|
message: "Invalid options passed to %{klass}.store_in: %{options}."
|
192
225
|
summary: "The :store_in macro takes only a hash of parameters with
|
@@ -433,6 +466,13 @@ en:
|
|
433
466
|
with the already defined method %{model_name}, or set the
|
434
467
|
configuration option Mongoid.scope_overwrite_exception to false,
|
435
468
|
which is its default. In this case a warning will be logged."
|
469
|
+
sessions_not_supported:
|
470
|
+
message: "Sessions are not supported by the connected server(s)."
|
471
|
+
summary: "A session was attempted to be used with a MongoDB server version
|
472
|
+
that doesn't support sessions. Sessions are supported in MongoDB
|
473
|
+
server versions 3.6 and higher."
|
474
|
+
resolution: "Verify that all servers in your deployment are at least
|
475
|
+
version 3.6 or don't attempt to use sessions with older server versions."
|
436
476
|
taken:
|
437
477
|
"is already taken"
|
438
478
|
too_many_nested_attribute_records:
|
@@ -68,7 +68,7 @@ module Mongoid
|
|
68
68
|
modifications.each_pair do |field, value|
|
69
69
|
push_fields[field] = field
|
70
70
|
mods = push_conflict?(field) ? conflicting_pushes : pushes
|
71
|
-
add_operation(mods, field, {'$each' => Array.wrap(value)})
|
71
|
+
add_operation(mods, field, { '$each' => Array.wrap(value) })
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -123,7 +123,7 @@ module Mongoid
|
|
123
123
|
mods[field].push(val)
|
124
124
|
end
|
125
125
|
elsif mods[field]['$each']
|
126
|
-
mods[field]['$each'].concat(value['$each'])
|
126
|
+
mods[field]['$each'].concat(value['$each'])
|
127
127
|
end
|
128
128
|
else
|
129
129
|
mods[field] = value
|
data/lib/mongoid/atomic.rb
CHANGED
@@ -110,10 +110,10 @@ module Mongoid
|
|
110
110
|
# performed in a single operation. Conflicting modifications are
|
111
111
|
# detected by the 'haveConflictingMod' function in MongoDB.
|
112
112
|
# Examination of the code suggests that two modifications (a $set
|
113
|
-
# and a $
|
113
|
+
# and a $push with $each, for example) conflict if:
|
114
114
|
# (1) the key paths being modified are equal.
|
115
115
|
# (2) one key path is a prefix of the other.
|
116
|
-
# So a $set of 'addresses.0.street' will conflict with a $
|
116
|
+
# So a $set of 'addresses.0.street' will conflict with a $push and $each
|
117
117
|
# to 'addresses', and we will need to split our update into two
|
118
118
|
# pieces. We do not, however, attempt to match MongoDB's logic
|
119
119
|
# exactly. Instead, we assume that two updates conflict if the
|
@@ -218,11 +218,11 @@ module Mongoid
|
|
218
218
|
# @example Get the pushes.
|
219
219
|
# person.atomic_pushes
|
220
220
|
#
|
221
|
-
# @return [ Hash ] The $
|
221
|
+
# @return [ Hash ] The The $push and $each operations.
|
222
222
|
#
|
223
223
|
# @since 2.1.0
|
224
224
|
def atomic_pushes
|
225
|
-
pushable? ? { atomic_position =>
|
225
|
+
pushable? ? { atomic_position => as_attributes } : {}
|
226
226
|
end
|
227
227
|
|
228
228
|
# Get all the attributes that need to be set.
|
@@ -234,7 +234,7 @@ module Mongoid
|
|
234
234
|
#
|
235
235
|
# @since 2.1.0
|
236
236
|
def atomic_sets
|
237
|
-
updateable? ? setters : settable? ? { atomic_path =>
|
237
|
+
updateable? ? setters : settable? ? { atomic_path => as_attributes } : {}
|
238
238
|
end
|
239
239
|
|
240
240
|
# Get all the attributes that need to be unset.
|
@@ -22,10 +22,32 @@ module Mongoid
|
|
22
22
|
# readonly.
|
23
23
|
#
|
24
24
|
# @since 3.0.0
|
25
|
+
#
|
26
|
+
# @deprecated Use #as_writable_attribute! instead.
|
25
27
|
def attribute_writable?(name)
|
26
28
|
new_record? || !readonly_attributes.include?(database_field_name(name))
|
27
29
|
end
|
28
30
|
|
31
|
+
private
|
32
|
+
|
33
|
+
def as_writable_attribute!(name, value = :nil)
|
34
|
+
normalized_name = database_field_name(name)
|
35
|
+
if new_record? || (!readonly_attributes.include?(normalized_name) && _loaded?(normalized_name))
|
36
|
+
yield(normalized_name)
|
37
|
+
else
|
38
|
+
raise Errors::ReadonlyAttribute.new(name, value)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def _loaded?(name)
|
43
|
+
__selected_fields.nil? || projected_field?(name)
|
44
|
+
end
|
45
|
+
|
46
|
+
def projected_field?(name)
|
47
|
+
projected = (__selected_fields || {}).keys.select { |f| __selected_fields[f] == 1 }
|
48
|
+
projected.empty? || projected.include?(name)
|
49
|
+
end
|
50
|
+
|
29
51
|
module ClassMethods
|
30
52
|
|
31
53
|
# Defines an attribute as readonly. This will ensure that the value for
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -139,14 +139,12 @@ module Mongoid
|
|
139
139
|
#
|
140
140
|
# @since 1.0.0
|
141
141
|
def remove_attribute(name)
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
delayed_atomic_unsets[atomic_attribute_name(access)] = [] unless new_record?
|
149
|
-
attributes.delete(access)
|
142
|
+
as_writable_attribute!(name) do |access|
|
143
|
+
_assigning do
|
144
|
+
attribute_will_change!(access)
|
145
|
+
delayed_atomic_unsets[atomic_attribute_name(access)] = [] unless new_record?
|
146
|
+
attributes.delete(access)
|
147
|
+
end
|
150
148
|
end
|
151
149
|
end
|
152
150
|
|
@@ -165,8 +163,7 @@ module Mongoid
|
|
165
163
|
#
|
166
164
|
# @since 1.0.0
|
167
165
|
def write_attribute(name, value)
|
168
|
-
|
169
|
-
if attribute_writable?(access)
|
166
|
+
as_writable_attribute!(name) do |access|
|
170
167
|
_assigning do
|
171
168
|
validate_attribute_value(access, value)
|
172
169
|
localized = fields[access].try(:localized?)
|
@@ -244,22 +241,26 @@ module Mongoid
|
|
244
241
|
(selection.values.first == 1 && !selection_included?(name, selection, field))
|
245
242
|
end
|
246
243
|
|
244
|
+
# Return type-casted attributes.
|
245
|
+
#
|
246
|
+
# @example Type-casted attributes.
|
247
|
+
# document.typed_attributes
|
248
|
+
#
|
249
|
+
# @return [ Object ] The hash with keys and values of the type-casted attributes.
|
250
|
+
#
|
251
|
+
# @since 6.1.0
|
252
|
+
def typed_attributes
|
253
|
+
attribute_names.map { |name| [name, send(name)] }.to_h
|
254
|
+
end
|
255
|
+
|
247
256
|
private
|
248
257
|
|
249
258
|
def selection_excluded?(name, selection, field)
|
250
|
-
|
251
|
-
selection["#{name}.#{::I18n.locale}"] == 0
|
252
|
-
else
|
253
|
-
selection[name] == 0
|
254
|
-
end
|
259
|
+
selection[name] == 0
|
255
260
|
end
|
256
261
|
|
257
262
|
def selection_included?(name, selection, field)
|
258
|
-
|
259
|
-
selection.key?("#{name}.#{::I18n.locale}")
|
260
|
-
else
|
261
|
-
selection.key?(name) || selection.keys.collect { |k| k.partition('.').first }.include?(name)
|
262
|
-
end
|
263
|
+
selection.key?(name) || selection.keys.collect { |k| k.partition('.').first }.include?(name)
|
263
264
|
end
|
264
265
|
|
265
266
|
# Does the string contain dot syntax for accessing hashes?
|
@@ -346,7 +347,7 @@ module Mongoid
|
|
346
347
|
end
|
347
348
|
|
348
349
|
def lookup_attribute_presence(name, value)
|
349
|
-
if localized_fields.has_key?(name)
|
350
|
+
if localized_fields.has_key?(name) && value
|
350
351
|
value = localized_fields[name].send(:lookup, value)
|
351
352
|
end
|
352
353
|
value.present?
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
|
4
|
+
# Encapsulates behaviour around caching.
|
5
|
+
#
|
6
|
+
# @since 6.0.0
|
7
|
+
module Cacheable
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
cattr_accessor :cache_timestamp_format, instance_writer: false
|
12
|
+
self.cache_timestamp_format = :nsec
|
13
|
+
end
|
14
|
+
|
15
|
+
# Print out the cache key. This will append different values on the
|
16
|
+
# plural model name.
|
17
|
+
#
|
18
|
+
# If new_record? - will append /new
|
19
|
+
# If not - will append /id-updated_at.to_s(cache_timestamp_format)
|
20
|
+
# Without updated_at - will append /id
|
21
|
+
#
|
22
|
+
# This is usually called insode a cache() block
|
23
|
+
#
|
24
|
+
# @example Returns the cache key
|
25
|
+
# document.cache_key
|
26
|
+
#
|
27
|
+
# @return [ String ] the string with or without updated_at
|
28
|
+
#
|
29
|
+
# @since 2.4.0
|
30
|
+
def cache_key
|
31
|
+
return "#{model_key}/new" if new_record?
|
32
|
+
return "#{model_key}/#{id}-#{updated_at.utc.to_s(cache_timestamp_format)}" if do_or_do_not(:updated_at)
|
33
|
+
"#{model_key}/#{id}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/mongoid/changeable.rb
CHANGED
@@ -278,6 +278,8 @@ module Mongoid
|
|
278
278
|
create_dirty_previous_value_accessor(name, meth)
|
279
279
|
create_dirty_reset(name, meth)
|
280
280
|
create_dirty_reset_to_default(name, meth)
|
281
|
+
create_dirty_previously_changed?(name, meth)
|
282
|
+
create_dirty_previous_change(name, meth)
|
281
283
|
end
|
282
284
|
|
283
285
|
# Creates the dirty change accessor.
|
@@ -398,6 +400,40 @@ module Mongoid
|
|
398
400
|
end
|
399
401
|
end
|
400
402
|
end
|
403
|
+
|
404
|
+
# Creates the dirty change check.
|
405
|
+
#
|
406
|
+
# @example Create the dirty change check.
|
407
|
+
# Model.create_dirty_previously_changed?("name", "alias")
|
408
|
+
#
|
409
|
+
# @param [ String ] name The attribute name.
|
410
|
+
# @param [ String ] meth The name of the accessor.
|
411
|
+
#
|
412
|
+
# @since 6.0.0
|
413
|
+
def create_dirty_previously_changed?(name, meth)
|
414
|
+
generated_methods.module_eval do
|
415
|
+
re_define_method("#{meth}_previously_changed?") do
|
416
|
+
previous_changes.keys.include?(name)
|
417
|
+
end
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
# Creates the dirty change accessor.
|
422
|
+
#
|
423
|
+
# @example Create the dirty change accessor.
|
424
|
+
# Model.create_dirty_previous_change("name", "alias")
|
425
|
+
#
|
426
|
+
# @param [ String ] name The attribute name.
|
427
|
+
# @param [ String ] meth The name of the accessor.
|
428
|
+
#
|
429
|
+
# @since 6.0.0
|
430
|
+
def create_dirty_previous_change(name, meth)
|
431
|
+
generated_methods.module_eval do
|
432
|
+
re_define_method("#{meth}_previous_change") do
|
433
|
+
previous_changes[name]
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
401
437
|
end
|
402
438
|
end
|
403
439
|
end
|