mongoid 5.4.1 → 6.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +3 -3
- data/lib/config/locales/en.yml +19 -0
- data/lib/mongoid.rb +4 -4
- data/lib/mongoid/atomic.rb +2 -2
- data/lib/mongoid/atomic/modifiers.rb +8 -12
- data/lib/mongoid/attributes.rb +22 -21
- data/lib/mongoid/attributes/readonly.rb +22 -0
- data/lib/mongoid/cacheable.rb +36 -0
- data/lib/mongoid/changeable.rb +36 -0
- data/lib/mongoid/clients.rb +8 -63
- data/lib/mongoid/clients/options.rb +55 -250
- data/lib/mongoid/clients/storage_options.rb +1 -69
- data/lib/mongoid/composable.rb +29 -3
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/atomic.rb +5 -8
- data/lib/mongoid/contextual/map_reduce.rb +0 -4
- data/lib/mongoid/contextual/memory.rb +2 -2
- data/lib/mongoid/contextual/mongo.rb +40 -22
- data/lib/mongoid/contextual/none.rb +12 -0
- data/lib/mongoid/copyable.rb +13 -6
- data/lib/mongoid/criteria.rb +5 -2
- data/lib/mongoid/criteria/marshalable.rb +2 -2
- data/lib/mongoid/criteria/modifiable.rb +17 -1
- data/lib/mongoid/criteria/options.rb +25 -0
- data/lib/mongoid/criteria/queryable.rb +87 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
- data/lib/mongoid/criteria/queryable/extensions.rb +28 -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/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 +271 -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 +662 -0
- data/lib/mongoid/criteria/queryable/selector.rb +212 -0
- data/lib/mongoid/criteria/queryable/smash.rb +104 -0
- data/lib/mongoid/document.rb +30 -37
- data/lib/mongoid/errors.rb +2 -0
- 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/evolvable.rb +1 -1
- data/lib/mongoid/extensions.rb +0 -4
- 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/string.rb +4 -3
- data/lib/mongoid/extensions/time.rb +4 -1
- data/lib/mongoid/fields/validators/macro.rb +18 -0
- data/lib/mongoid/findable.rb +2 -2
- data/lib/mongoid/indexable.rb +15 -13
- data/lib/mongoid/interceptable.rb +5 -22
- data/lib/mongoid/matchable.rb +13 -7
- 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/or.rb +3 -3
- data/lib/mongoid/matchable/regexp.rb +3 -3
- data/lib/mongoid/matchable/size.rb +2 -2
- data/lib/mongoid/persistable.rb +3 -5
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +5 -12
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +215 -0
- data/lib/mongoid/query_cache.rb +3 -6
- 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.rb +6 -11
- 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/embedded/batchable.rb +12 -36
- data/lib/mongoid/relations/embedded/in.rb +13 -1
- data/lib/mongoid/relations/embedded/many.rb +28 -10
- data/lib/mongoid/relations/embedded/one.rb +14 -1
- data/lib/mongoid/relations/macros.rb +9 -1
- 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 +23 -17
- 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 +11 -11
- data/lib/mongoid/relations/touchable.rb +6 -3
- data/lib/mongoid/reloadable.rb +1 -1
- data/lib/mongoid/serializable.rb +1 -1
- data/lib/mongoid/traversable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +1 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +14 -3
- data/spec/app/models/album.rb +5 -1
- data/spec/app/models/artist.rb +21 -0
- data/spec/app/models/book.rb +2 -1
- 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/mongoid/atomic/modifiers_spec.rb +17 -17
- data/spec/mongoid/atomic_spec.rb +17 -17
- data/spec/mongoid/attributes/nested_spec.rb +14 -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 +31 -3
- data/spec/mongoid/clients/options_spec.rb +382 -96
- 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/mongo_spec.rb +165 -20
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +13 -4
- data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
- 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 +4174 -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_spec.rb +152 -21
- data/spec/mongoid/document_spec.rb +37 -88
- 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 +320 -18
- 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/string_spec.rb +21 -0
- data/spec/mongoid/extensions/time_spec.rb +2 -6
- data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
- data/spec/mongoid/findable_spec.rb +46 -1
- data/spec/mongoid/indexable_spec.rb +15 -3
- data/spec/mongoid/interceptable_spec.rb +68 -10
- 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/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 +173 -53
- data/spec/mongoid/persistable/creatable_spec.rb +7 -2
- data/spec/mongoid/persistable/deletable_spec.rb +16 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
- data/spec/mongoid/persistable/savable_spec.rb +35 -30
- data/spec/mongoid/persistable/settable_spec.rb +45 -29
- data/spec/mongoid/persistable/updatable_spec.rb +184 -5
- data/spec/mongoid/persistence_context_spec.rb +680 -0
- data/spec/mongoid/positional_spec.rb +10 -10
- data/spec/mongoid/query_cache_spec.rb +89 -0
- 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 +63 -47
- data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
- data/spec/mongoid/relations/macros_spec.rb +395 -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 +13 -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/touchable_spec.rb +40 -0
- data/spec/mongoid/reloadable_spec.rb +51 -0
- data/spec/mongoid/serializable_spec.rb +0 -50
- 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/spec_helper.rb +20 -11
- metadata +524 -469
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongoid/clients/thread_options.rb +0 -19
- data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
- metadata.gz.sig +0 -0
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
|
@@ -1124,6 +1124,92 @@ describe Mongoid::Contextual::Mongo do
|
|
1124
1124
|
end
|
1125
1125
|
end
|
1126
1126
|
|
1127
|
+
context 'when the criteria has no sort' do
|
1128
|
+
|
1129
|
+
let(:criteria) do
|
1130
|
+
Band.all
|
1131
|
+
end
|
1132
|
+
|
1133
|
+
let(:context) do
|
1134
|
+
described_class.new(criteria)
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
|
1138
|
+
it 'applies a sort on _id' do
|
1139
|
+
expect(context.send(method)).to eq(depeche_mode)
|
1140
|
+
end
|
1141
|
+
|
1142
|
+
context 'when calling #last' do
|
1143
|
+
|
1144
|
+
it 'returns the last document, sorted by _id' do
|
1145
|
+
expect(context.send(method)).to eq(depeche_mode)
|
1146
|
+
expect(context.last).to eq(new_order)
|
1147
|
+
end
|
1148
|
+
end
|
1149
|
+
|
1150
|
+
context 'with option { sort: :none }' do
|
1151
|
+
|
1152
|
+
let(:opts) do
|
1153
|
+
{ id_sort: :none }
|
1154
|
+
end
|
1155
|
+
|
1156
|
+
it 'does not apply the sort on _id' do
|
1157
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
1158
|
+
end
|
1159
|
+
|
1160
|
+
context 'when calling #last' do
|
1161
|
+
|
1162
|
+
it 'does not apply a sort on _id' do
|
1163
|
+
expect(context.send(method, opts)).to eq(depeche_mode)
|
1164
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
1165
|
+
end
|
1166
|
+
end
|
1167
|
+
end
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
context 'when the criteria has a sort' do
|
1171
|
+
|
1172
|
+
let(:criteria) do
|
1173
|
+
Band.desc(:name)
|
1174
|
+
end
|
1175
|
+
|
1176
|
+
let(:context) do
|
1177
|
+
described_class.new(criteria)
|
1178
|
+
end
|
1179
|
+
|
1180
|
+
|
1181
|
+
it 'applies the criteria sort' do
|
1182
|
+
expect(context.send(method)).to eq(new_order)
|
1183
|
+
end
|
1184
|
+
|
1185
|
+
context 'when calling #last' do
|
1186
|
+
|
1187
|
+
it 'applies the criteria sort' do
|
1188
|
+
expect(context.send(method)).to eq(new_order)
|
1189
|
+
expect(context.last).to eq(depeche_mode)
|
1190
|
+
end
|
1191
|
+
end
|
1192
|
+
|
1193
|
+
context 'with option { sort: :none }' do
|
1194
|
+
|
1195
|
+
let(:opts) do
|
1196
|
+
{ id_sort: :none }
|
1197
|
+
end
|
1198
|
+
|
1199
|
+
it 'applies the criteria sort' do
|
1200
|
+
expect(context.send(method, opts)).to eq(new_order)
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
context 'when calling #last' do
|
1204
|
+
|
1205
|
+
it 'applies the criteria sort' do
|
1206
|
+
expect(context.send(method, opts)).to eq(new_order)
|
1207
|
+
expect(context.last(opts)).to eq(depeche_mode)
|
1208
|
+
end
|
1209
|
+
end
|
1210
|
+
end
|
1211
|
+
end
|
1212
|
+
|
1127
1213
|
context "when using .sort" do
|
1128
1214
|
|
1129
1215
|
let(:criteria) do
|
@@ -1674,6 +1760,65 @@ describe Mongoid::Contextual::Mongo do
|
|
1674
1760
|
end
|
1675
1761
|
end
|
1676
1762
|
|
1763
|
+
context "when the output specifies a different db" do
|
1764
|
+
|
1765
|
+
let(:criteria) do
|
1766
|
+
Band.limit(1)
|
1767
|
+
end
|
1768
|
+
|
1769
|
+
let(:context) do
|
1770
|
+
described_class.new(criteria)
|
1771
|
+
end
|
1772
|
+
|
1773
|
+
after do
|
1774
|
+
Band.with(database: 'another-db') do |b|
|
1775
|
+
b.all.delete
|
1776
|
+
end
|
1777
|
+
end
|
1778
|
+
|
1779
|
+
context 'when db is a string' do
|
1780
|
+
|
1781
|
+
let(:results) do
|
1782
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, db: 'another-db')
|
1783
|
+
end
|
1784
|
+
|
1785
|
+
it "returns the correct number of documents" do
|
1786
|
+
expect(results.count).to eq(1)
|
1787
|
+
end
|
1788
|
+
|
1789
|
+
it "contains the entire results" do
|
1790
|
+
expect(results).to eq([
|
1791
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1792
|
+
])
|
1793
|
+
end
|
1794
|
+
|
1795
|
+
it 'writes to the specified db' do
|
1796
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
1797
|
+
end
|
1798
|
+
end
|
1799
|
+
|
1800
|
+
context 'when db is a symbol' do
|
1801
|
+
|
1802
|
+
let(:results) do
|
1803
|
+
context.map_reduce(map, reduce).out(merge: :mr_output, 'db' => 'another-db')
|
1804
|
+
end
|
1805
|
+
|
1806
|
+
it "returns the correct number of documents" do
|
1807
|
+
expect(results.count).to eq(1)
|
1808
|
+
end
|
1809
|
+
|
1810
|
+
it "contains the entire results" do
|
1811
|
+
expect(results).to eq([
|
1812
|
+
{ "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
|
1813
|
+
])
|
1814
|
+
end
|
1815
|
+
|
1816
|
+
it 'writes to the specified db' do
|
1817
|
+
expect(Band.mongo_client.with(database: 'another-db')[:mr_output].find.count).to eq(1)
|
1818
|
+
end
|
1819
|
+
end
|
1820
|
+
end
|
1821
|
+
|
1677
1822
|
context "when providing no output" do
|
1678
1823
|
|
1679
1824
|
let(: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
|
|