mongoid 5.4.1 → 6.1.1
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 +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
|
|