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
data/spec/mongoid/config_spec.rb
CHANGED
@@ -9,6 +9,12 @@ describe Mongoid::Config do
|
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
after do
|
13
|
+
Mongoid.configure do |config|
|
14
|
+
config.load_configuration(CONFIG)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
describe "#configured?" do
|
13
19
|
|
14
20
|
after do
|
@@ -64,7 +70,7 @@ describe Mongoid::Config do
|
|
64
70
|
|
65
71
|
before do
|
66
72
|
if defined?(Rails)
|
67
|
-
RailsTemp = Rails
|
73
|
+
RailsTemp = Rails unless defined?(RailsTemp)
|
68
74
|
Object.send(:remove_const, :Rails)
|
69
75
|
end
|
70
76
|
|
@@ -82,10 +88,62 @@ describe Mongoid::Config do
|
|
82
88
|
end
|
83
89
|
end
|
84
90
|
|
91
|
+
context 'when the belongs_to_required_by_default option is not set in the config' do
|
92
|
+
|
93
|
+
before do
|
94
|
+
Mongoid::Config.reset
|
95
|
+
Mongoid.configure do |config|
|
96
|
+
config.load_configuration(clients: CONFIG[:clients])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to true' do
|
101
|
+
expect(Mongoid.belongs_to_required_by_default).to be(true)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'when the belongs_to_required_by_default option is set in the config' do
|
106
|
+
|
107
|
+
before do
|
108
|
+
Mongoid.configure do |config|
|
109
|
+
config.load_configuration(conf)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when the value is set to true' do
|
114
|
+
|
115
|
+
let(:conf) do
|
116
|
+
CONFIG.merge(options: { belongs_to_required_by_default: true })
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to true' do
|
120
|
+
expect(Mongoid.belongs_to_required_by_default).to be(true)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'when the value is set to false' do
|
125
|
+
|
126
|
+
let(:conf) do
|
127
|
+
CONFIG.merge(options: { belongs_to_required_by_default: false })
|
128
|
+
end
|
129
|
+
|
130
|
+
before do
|
131
|
+
Mongoid::Config.reset
|
132
|
+
Mongoid.configure do |config|
|
133
|
+
config.load_configuration(conf)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'sets the Mongoid.belongs_to_required_by_default value to false' do
|
138
|
+
expect(Mongoid.belongs_to_required_by_default).to be(false)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
85
143
|
context 'when the app_name is set in the config' do
|
86
144
|
|
87
145
|
let(:conf) do
|
88
|
-
CONFIG.merge(options: {app_name: 'admin-reporting'})
|
146
|
+
CONFIG.merge(options: { app_name: 'admin-reporting' })
|
89
147
|
end
|
90
148
|
|
91
149
|
before do
|
@@ -137,6 +195,10 @@ describe Mongoid::Config do
|
|
137
195
|
described_class.load!(file, :test)
|
138
196
|
end
|
139
197
|
|
198
|
+
after do
|
199
|
+
client.close
|
200
|
+
end
|
201
|
+
|
140
202
|
it "clears the previous clients" do
|
141
203
|
expect(Mongoid::Clients.clients[:test]).to be_nil
|
142
204
|
end
|
@@ -148,12 +210,6 @@ describe Mongoid::Config do
|
|
148
210
|
described_class.load!(file, :test)
|
149
211
|
end
|
150
212
|
|
151
|
-
after do
|
152
|
-
Mongoid.configure do |config|
|
153
|
-
config.load_configuration(CONFIG)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
213
|
it "sets the Mongoid logger level" do
|
158
214
|
expect(Mongoid.logger.level).to eq(Logger::WARN)
|
159
215
|
end
|
@@ -176,7 +232,7 @@ describe Mongoid::Config do
|
|
176
232
|
|
177
233
|
after do
|
178
234
|
if defined?(Rails)
|
179
|
-
RailsTemp = Rails
|
235
|
+
RailsTemp = Rails unless defined?(RailsTemp)
|
180
236
|
Object.send(:remove_const, :Rails)
|
181
237
|
end
|
182
238
|
end
|
@@ -282,7 +338,7 @@ describe Mongoid::Config do
|
|
282
338
|
context "when a default is provided" do
|
283
339
|
|
284
340
|
before do
|
285
|
-
described_class.load!(file)
|
341
|
+
described_class.load!(file, :test_with_max_staleness)
|
286
342
|
end
|
287
343
|
|
288
344
|
let(:default) do
|
@@ -301,7 +357,7 @@ describe Mongoid::Config do
|
|
301
357
|
|
302
358
|
it "sets the read option" do
|
303
359
|
expect(options["read"]).to eq({ "mode" => :primary_preferred,
|
304
|
-
"
|
360
|
+
"max_staleness" => 100 })
|
305
361
|
end
|
306
362
|
end
|
307
363
|
end
|
@@ -496,7 +496,7 @@ describe Mongoid::Contextual::Atomic do
|
|
496
496
|
end
|
497
497
|
end
|
498
498
|
|
499
|
-
describe "#
|
499
|
+
describe "#push_all" do
|
500
500
|
|
501
501
|
context 'when the criteria does not have a collation' do
|
502
502
|
|
@@ -517,7 +517,7 @@ describe Mongoid::Contextual::Atomic do
|
|
517
517
|
end
|
518
518
|
|
519
519
|
before do
|
520
|
-
context.
|
520
|
+
context.push_all(members: [ "Alan", "Fletch" ])
|
521
521
|
end
|
522
522
|
|
523
523
|
it "pushes the values to existing arrays" do
|
@@ -548,7 +548,7 @@ describe Mongoid::Contextual::Atomic do
|
|
548
548
|
end
|
549
549
|
|
550
550
|
before do
|
551
|
-
context.
|
551
|
+
context.push_all(members: [ "Alan", "Fletch" ])
|
552
552
|
end
|
553
553
|
|
554
554
|
it "pushes the values to existing arrays" do
|
@@ -228,36 +228,36 @@ describe Mongoid::Contextual::Mongo do
|
|
228
228
|
it "returns the number of documents deleted" do
|
229
229
|
expect(deleted).to eq(1)
|
230
230
|
end
|
231
|
-
end
|
232
231
|
|
233
|
-
|
232
|
+
context 'when the criteria has a collation', if: collation_supported? do
|
234
233
|
|
235
|
-
|
236
|
-
|
237
|
-
|
234
|
+
let(:criteria) do
|
235
|
+
Band.where(name: "DEPECHE MODE").collation(locale: 'en_US', strength: 2)
|
236
|
+
end
|
238
237
|
|
239
|
-
|
240
|
-
|
241
|
-
|
238
|
+
let(:context) do
|
239
|
+
described_class.new(criteria)
|
240
|
+
end
|
242
241
|
|
243
|
-
|
244
|
-
|
245
|
-
|
242
|
+
let!(:deleted) do
|
243
|
+
context.send(method)
|
244
|
+
end
|
246
245
|
|
247
|
-
|
248
|
-
|
249
|
-
|
246
|
+
it "deletes the matching documents" do
|
247
|
+
expect(Band.find(new_order.id)).to eq(new_order)
|
248
|
+
end
|
250
249
|
|
251
|
-
|
252
|
-
|
253
|
-
|
250
|
+
it "deletes the correct number of documents" do
|
251
|
+
expect(Band.count).to eq(1)
|
252
|
+
end
|
254
253
|
|
255
|
-
|
256
|
-
|
254
|
+
it "returns the number of documents deleted" do
|
255
|
+
expect(deleted).to eq(1)
|
256
|
+
end
|
257
257
|
end
|
258
258
|
end
|
259
259
|
|
260
|
-
context "when the selector is not
|
260
|
+
context "when the selector is not contraining" do
|
261
261
|
|
262
262
|
let(:criteria) do
|
263
263
|
Band.all
|
@@ -275,6 +275,23 @@ describe Mongoid::Contextual::Mongo do
|
|
275
275
|
expect(Band.count).to eq(0)
|
276
276
|
end
|
277
277
|
end
|
278
|
+
|
279
|
+
context 'when the write concern is unacknowledged' do
|
280
|
+
|
281
|
+
let(:criteria) do
|
282
|
+
Band.all
|
283
|
+
end
|
284
|
+
|
285
|
+
let!(:deleted) do
|
286
|
+
criteria.with(write: { w: 0 }) do |crit|
|
287
|
+
crit.send(method)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'returns 0' do
|
292
|
+
expect(deleted).to eq(0)
|
293
|
+
end
|
294
|
+
end
|
278
295
|
end
|
279
296
|
end
|
280
297
|
|
@@ -363,6 +380,27 @@ describe Mongoid::Contextual::Mongo do
|
|
363
380
|
end
|
364
381
|
end
|
365
382
|
end
|
383
|
+
|
384
|
+
context 'when the write concern is unacknowledged' do
|
385
|
+
|
386
|
+
before do
|
387
|
+
2.times { Band.create }
|
388
|
+
end
|
389
|
+
|
390
|
+
let(:criteria) do
|
391
|
+
Band.all
|
392
|
+
end
|
393
|
+
|
394
|
+
let!(:deleted) do
|
395
|
+
criteria.with(write: { w: 0 }) do |crit|
|
396
|
+
crit.send(method)
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
it 'returns 0' do
|
401
|
+
expect(deleted).to eq(0)
|
402
|
+
end
|
403
|
+
end
|
366
404
|
end
|
367
405
|
|
368
406
|
describe "#distinct" do
|
@@ -413,7 +451,7 @@ describe Mongoid::Contextual::Mongo do
|
|
413
451
|
end
|
414
452
|
|
415
453
|
it "returns the distinct field values" do
|
416
|
-
expect(context.distinct(:years)).to eq([
|
454
|
+
expect(context.distinct(:years).sort).to eq([ 25, 30 ])
|
417
455
|
end
|
418
456
|
end
|
419
457
|
|
@@ -1124,6 +1162,92 @@ describe Mongoid::Contextual::Mongo do
|
|
1124
1162
|
end
|
1125
1163
|
end
|
1126
1164
|
|
1165
|
+
context 'when the criteria has no sort' do
|
1166
|
+
|
1167
|
+
let(:criteria) do
|
1168
|
+
Band.all
|
1169
|
+
end
|
1170
|
+
|
1171
|
+
let(:context) do
|
1172
|
+
described_class.new(criteria)
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
|
1176
|
+
it 'applies a sort on _id' do
|
1177
|
+
expect(context.send(method)).to eq(depeche_mode)
|
1178
|
+
end
|
1179
|
+
|
1180
|
+
context 'when calling #last' do
|
1181
|
+
|
1182
|
+
it 'returns the last document, sorted by _id' do
|
1183
|
+
expect(context.send(method)).to eq(depeche_mode)
|
1184
|
+
expect(context.last).to eq(new_order)
|
1185
|
+
end
|
1186
|
+
end
|
1187
|
+
|
1188
|
+
context 'with option { sort: :none }' do
|
1189
|
+
|
1190
|
+
let(:opts) do
|
1191
|
+
{ id_sort: :none }
|
1192
|
+
end
|
1193
|
+
|
1194
|
+
it 'does not apply the sort on _id' do
|
1195
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
1196
|
+
end
|
1197
|
+
|
1198
|
+
context 'when calling #last' do
|
1199
|
+
|
1200
|
+
it 'does not apply a sort on _id' do
|
1201
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
1202
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
1203
|
+
end
|
1204
|
+
end
|
1205
|
+
end
|
1206
|
+
end
|
1207
|
+
|
1208
|
+
context 'when the criteria has a sort' do
|
1209
|
+
|
1210
|
+
let(:criteria) do
|
1211
|
+
Band.desc(:name)
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
let(:context) do
|
1215
|
+
described_class.new(criteria)
|
1216
|
+
end
|
1217
|
+
|
1218
|
+
|
1219
|
+
it 'applies the criteria sort' do
|
1220
|
+
expect(context.send(method)).to eq(new_order)
|
1221
|
+
end
|
1222
|
+
|
1223
|
+
context 'when calling #last' do
|
1224
|
+
|
1225
|
+
it 'applies the criteria sort' do
|
1226
|
+
expect(context.send(method)).to eq(new_order)
|
1227
|
+
expect(context.last).to eq(depeche_mode)
|
1228
|
+
end
|
1229
|
+
end
|
1230
|
+
|
1231
|
+
context 'with option { sort: :none }' do
|
1232
|
+
|
1233
|
+
let(:opts) do
|
1234
|
+
{ id_sort: :none }
|
1235
|
+
end
|
1236
|
+
|
1237
|
+
it 'applies the criteria sort' do
|
1238
|
+
expect(context.send(method, opts)).to eq(new_order)
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
context 'when calling #last' do
|
1242
|
+
|
1243
|
+
it 'applies the criteria sort' do
|
1244
|
+
expect(context.send(method, opts)).to eq(new_order)
|
1245
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
1246
|
+
end
|
1247
|
+
end
|
1248
|
+
end
|
1249
|
+
end
|
1250
|
+
|
1127
1251
|
context "when using .sort" do
|
1128
1252
|
|
1129
1253
|
let(:criteria) do
|
@@ -1674,6 +1798,65 @@ describe Mongoid::Contextual::Mongo do
|
|
1674
1798
|
end
|
1675
1799
|
end
|
1676
1800
|
|
1801
|
+
context "when the output specifies a different db" do
|
1802
|
+
|
1803
|
+
let(:criteria) do
|
1804
|
+
Band.limit(1)
|
1805
|
+
end
|
1806
|
+
|
1807
|
+
let(:context) do
|
1808
|
+
described_class.new(criteria)
|
1809
|
+
end
|
1810
|
+
|
1811
|
+
after do
|
1812
|
+
Band.with(database: 'another-db') do |b|
|
1813
|
+
b.all.delete
|
1814
|
+
end
|
1815
|
+
end
|
1816
|
+
|
1817
|
+
context 'when db is a string' do
|
1818
|
+
|
1819
|
+
let(:results) do
|
1820
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, db: 'another-db')
|
1821
|
+
end
|
1822
|
+
|
1823
|
+
it "returns the correct number of documents" do
|
1824
|
+
expect(results.count).to eq(1)
|
1825
|
+
end
|
1826
|
+
|
1827
|
+
it "contains the entire results" do
|
1828
|
+
expect(results).to eq([
|
1829
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1830
|
+
])
|
1831
|
+
end
|
1832
|
+
|
1833
|
+
it 'writes to the specified db' do
|
1834
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
1835
|
+
end
|
1836
|
+
end
|
1837
|
+
|
1838
|
+
context 'when db is a symbol' do
|
1839
|
+
|
1840
|
+
let(:results) do
|
1841
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, 'db' => 'another-db')
|
1842
|
+
end
|
1843
|
+
|
1844
|
+
it "returns the correct number of documents" do
|
1845
|
+
expect(results.count).to eq(1)
|
1846
|
+
end
|
1847
|
+
|
1848
|
+
it "contains the entire results" do
|
1849
|
+
expect(results).to eq([
|
1850
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1851
|
+
])
|
1852
|
+
end
|
1853
|
+
|
1854
|
+
it 'writes to the specified db' do
|
1855
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
1856
|
+
end
|
1857
|
+
end
|
1858
|
+
end
|
1859
|
+
|
1677
1860
|
context "when providing no output" do
|
1678
1861
|
|
1679
1862
|
let(:criteria) do
|
@@ -1949,6 +2132,41 @@ describe Mongoid::Contextual::Mongo do
|
|
1949
2132
|
expect(context.update).to be false
|
1950
2133
|
end
|
1951
2134
|
end
|
2135
|
+
|
2136
|
+
context 'when provided array filters', if: array_filters_supported? do
|
2137
|
+
|
2138
|
+
before do
|
2139
|
+
Band.delete_all
|
2140
|
+
b = Band.new(name: 'Depeche Mode')
|
2141
|
+
b.labels << Label.new(name: 'Warner')
|
2142
|
+
b.labels << Label.new(name: 'Sony')
|
2143
|
+
b.labels << Label.new(name: 'Cbs')
|
2144
|
+
b.save
|
2145
|
+
|
2146
|
+
b = Band.new(name: 'FKA Twigs')
|
2147
|
+
b.labels << Label.new(name: 'Warner')
|
2148
|
+
b.labels << Label.new(name: 'Cbs')
|
2149
|
+
b.save
|
2150
|
+
end
|
2151
|
+
|
2152
|
+
|
2153
|
+
let(:criteria) do
|
2154
|
+
Band.where(name: 'Depeche Mode')
|
2155
|
+
end
|
2156
|
+
|
2157
|
+
let!(:update) do
|
2158
|
+
context.update({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
2159
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
2160
|
+
end
|
2161
|
+
|
2162
|
+
it 'applies the array filters' do
|
2163
|
+
expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
|
2164
|
+
end
|
2165
|
+
|
2166
|
+
it 'does not affect other documents' do
|
2167
|
+
expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Cbs'])
|
2168
|
+
end
|
2169
|
+
end
|
1952
2170
|
end
|
1953
2171
|
|
1954
2172
|
describe "#update_all" do
|
@@ -2086,6 +2304,41 @@ describe Mongoid::Contextual::Mongo do
|
|
2086
2304
|
expect(context.update_all).to be false
|
2087
2305
|
end
|
2088
2306
|
end
|
2307
|
+
|
2308
|
+
context 'when provided array filters', if: array_filters_supported? do
|
2309
|
+
|
2310
|
+
before do
|
2311
|
+
Band.delete_all
|
2312
|
+
b = Band.new(name: 'Depeche Mode')
|
2313
|
+
b.labels << Label.new(name: 'Warner')
|
2314
|
+
b.labels << Label.new(name: 'Sony')
|
2315
|
+
b.labels << Label.new(name: 'Cbs')
|
2316
|
+
b.save
|
2317
|
+
|
2318
|
+
b = Band.new(name: 'FKA Twigs')
|
2319
|
+
b.labels << Label.new(name: 'Warner')
|
2320
|
+
b.labels << Label.new(name: 'Cbs')
|
2321
|
+
b.save
|
2322
|
+
end
|
2323
|
+
|
2324
|
+
|
2325
|
+
let(:criteria) do
|
2326
|
+
Band.all
|
2327
|
+
end
|
2328
|
+
|
2329
|
+
let!(:update) do
|
2330
|
+
context.update_all({ '$set' => { 'labels.$[i].name' => 'Sony' } },
|
2331
|
+
array_filters: [{ 'i.name' => 'Cbs' }])
|
2332
|
+
end
|
2333
|
+
|
2334
|
+
it 'applies the array filters' do
|
2335
|
+
expect(Band.where(name: 'Depeche Mode').first.labels.collect(&:name)).to match_array(['Warner', 'Sony', 'Sony'])
|
2336
|
+
end
|
2337
|
+
|
2338
|
+
it 'updates all documents' do
|
2339
|
+
expect(Band.where(name: 'FKA Twigs').first.labels.collect(&:name)).to match_array(['Warner', 'Sony'])
|
2340
|
+
end
|
2341
|
+
end
|
2089
2342
|
end
|
2090
2343
|
|
2091
2344
|
describe '#pipeline' do
|
@@ -2110,7 +2363,7 @@ describe Mongoid::Contextual::Mongo do
|
|
2110
2363
|
end
|
2111
2364
|
|
2112
2365
|
it 'creates a pipeline with the selector as one of the $match criteria' do
|
2113
|
-
expect(pipeline_match).to include({
|
2366
|
+
expect(pipeline_match).to include({ '$text' => { '$search' => "New Order" } })
|
2114
2367
|
end
|
2115
2368
|
|
2116
2369
|
it 'creates a pipeline with the $exists operator as one of the $match criteria' do
|
@@ -65,6 +65,21 @@ describe Mongoid::Contextual::None do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe "#distinct" do
|
69
|
+
|
70
|
+
let!(:band) do
|
71
|
+
Band.create(name: "Depeche Mode")
|
72
|
+
end
|
73
|
+
|
74
|
+
let(:context) do
|
75
|
+
described_class.new(Band.where(name: "Depeche Mode"))
|
76
|
+
end
|
77
|
+
|
78
|
+
it "returns an empty array" do
|
79
|
+
expect(context.distinct(:id)).to eq([])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
68
83
|
describe "#pluck" do
|
69
84
|
|
70
85
|
let!(:band) do
|
@@ -54,22 +54,31 @@ describe Mongoid::Copyable do
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
context "when a document has
|
57
|
+
context "when a document has fields from a legacy schema" do
|
58
58
|
|
59
59
|
let!(:actor) do
|
60
60
|
Actor.create(name: "test")
|
61
61
|
end
|
62
62
|
|
63
63
|
before do
|
64
|
-
|
64
|
+
legacy_fields = { "this_is_not_a_field" => 1, "this_legacy_field_is_nil" => nil }
|
65
|
+
Actor.collection.find(_id: actor.id).update_one("$set" => legacy_fields)
|
65
66
|
end
|
66
67
|
|
67
68
|
let(:cloned) do
|
68
69
|
actor.reload.send(method)
|
69
70
|
end
|
70
71
|
|
71
|
-
it "
|
72
|
-
expect(cloned.this_is_not_a_field).to eq(1)
|
72
|
+
it "sets the legacy attribute" do
|
73
|
+
expect(cloned.attributes['this_is_not_a_field']).to eq(1)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "contains legacy attributes that are nil" do
|
77
|
+
expect(cloned.attributes.key?('this_legacy_field_is_nil')).to eq(true)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "copies the known attributes" do
|
81
|
+
expect(cloned.name).to eq('test')
|
73
82
|
end
|
74
83
|
end
|
75
84
|
|