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
@@ -82,6 +82,13 @@ describe Mongoid::Boolean do
|
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
+
context "when provided on" do
|
86
|
+
|
87
|
+
it "returns true" do
|
88
|
+
expect(described_class.mongoize("on")).to eq(true)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
85
92
|
context "when provided false" do
|
86
93
|
|
87
94
|
it "returns false" do
|
@@ -123,6 +130,13 @@ describe Mongoid::Boolean do
|
|
123
130
|
expect(described_class.mongoize("n")).to eq(false)
|
124
131
|
end
|
125
132
|
end
|
133
|
+
|
134
|
+
context "when provided off" do
|
135
|
+
|
136
|
+
it "returns true" do
|
137
|
+
expect(described_class.mongoize("off")).to eq(false)
|
138
|
+
end
|
139
|
+
end
|
126
140
|
end
|
127
141
|
end
|
128
142
|
|
@@ -135,12 +135,8 @@ describe Mongoid::Extensions::Date do
|
|
135
135
|
|
136
136
|
context "when the string is an invalid time" do
|
137
137
|
|
138
|
-
|
139
|
-
Date.
|
140
|
-
end
|
141
|
-
|
142
|
-
it "returns epoch" do
|
143
|
-
expect(Date.mongoize("time")).to eq(epoch)
|
138
|
+
it "returns nil" do
|
139
|
+
expect(Date.mongoize("time")).to eq(nil)
|
144
140
|
end
|
145
141
|
end
|
146
142
|
end
|
@@ -129,12 +129,8 @@ describe Mongoid::Extensions::DateTime do
|
|
129
129
|
|
130
130
|
context "when the string is an invalid time" do
|
131
131
|
|
132
|
-
|
133
|
-
|
134
|
-
end
|
135
|
-
|
136
|
-
it "returns epoch" do
|
137
|
-
expect(DateTime.mongoize("time")).to eq(epoch)
|
132
|
+
it "returns nil" do
|
133
|
+
expect(DateTime.mongoize("time")).to eq(nil)
|
138
134
|
end
|
139
135
|
end
|
140
136
|
end
|
@@ -23,7 +23,7 @@ describe Mongoid::Extensions::Float do
|
|
23
23
|
|
24
24
|
describe ".demongoize" do
|
25
25
|
|
26
|
-
context "when the
|
26
|
+
context "when the value is a float" do
|
27
27
|
|
28
28
|
it "returns a float" do
|
29
29
|
expect(Float.demongoize(number)).to eq(number)
|
@@ -144,4 +144,11 @@ describe Mongoid::Extensions::Float do
|
|
144
144
|
expect(number.mongoize).to eq(number)
|
145
145
|
end
|
146
146
|
end
|
147
|
+
|
148
|
+
describe "#numeric?" do
|
149
|
+
|
150
|
+
it "returns true" do
|
151
|
+
expect(number.numeric?).to eq(true)
|
152
|
+
end
|
153
|
+
end
|
147
154
|
end
|
@@ -247,6 +247,21 @@ describe Mongoid::Extensions::Hash do
|
|
247
247
|
end
|
248
248
|
end
|
249
249
|
|
250
|
+
context "when the parent key is not present" do
|
251
|
+
|
252
|
+
let(:hash) do
|
253
|
+
{ "101" => { "name" => "hundred and one" } }
|
254
|
+
end
|
255
|
+
|
256
|
+
let(:nested) do
|
257
|
+
hash.__nested__("100.name")
|
258
|
+
end
|
259
|
+
|
260
|
+
it "should return nil" do
|
261
|
+
expect(nested).to eq(nil)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
250
265
|
describe ".demongoize" do
|
251
266
|
|
252
267
|
let(:hash) do
|
@@ -23,7 +23,7 @@ describe Mongoid::Extensions::Integer do
|
|
23
23
|
|
24
24
|
describe ".demongoize" do
|
25
25
|
|
26
|
-
context "when the
|
26
|
+
context "when the value is an integer" do
|
27
27
|
|
28
28
|
it "returns a integer" do
|
29
29
|
expect(Integer.demongoize(number)).to eq(number)
|
@@ -133,4 +133,11 @@ describe Mongoid::Extensions::Integer do
|
|
133
133
|
expect(number.mongoize).to eq(number)
|
134
134
|
end
|
135
135
|
end
|
136
|
+
|
137
|
+
describe "#numeric?" do
|
138
|
+
|
139
|
+
it "returns true" do
|
140
|
+
expect(number.numeric?).to eq(true)
|
141
|
+
end
|
142
|
+
end
|
136
143
|
end
|
@@ -301,6 +301,27 @@ describe Mongoid::Extensions::String do
|
|
301
301
|
expect("blah").to_not be_numeric
|
302
302
|
end
|
303
303
|
end
|
304
|
+
|
305
|
+
context "when the string is NaN" do
|
306
|
+
|
307
|
+
it "returns true" do
|
308
|
+
expect("NaN").to be_numeric
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
context "when the string is Infinity" do
|
313
|
+
|
314
|
+
it "returns true" do
|
315
|
+
expect("Infinity").to be_numeric
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
context "when the string is -Infinity" do
|
320
|
+
|
321
|
+
it "returns true" do
|
322
|
+
expect("-Infinity").to be_numeric
|
323
|
+
end
|
324
|
+
end
|
304
325
|
end
|
305
326
|
|
306
327
|
describe "#singularize" do
|
@@ -204,12 +204,8 @@ describe Mongoid::Extensions::Time do
|
|
204
204
|
|
205
205
|
context "when the string is an invalid time" do
|
206
206
|
|
207
|
-
|
208
|
-
Time.
|
209
|
-
end
|
210
|
-
|
211
|
-
it "converts the time to epoch" do
|
212
|
-
expect(Time.mongoize("time")).to eq(epoch)
|
207
|
+
it "converts the time to nil" do
|
208
|
+
expect(Time.mongoize("time")).to eq(nil)
|
213
209
|
end
|
214
210
|
end
|
215
211
|
|
@@ -204,12 +204,8 @@ describe Mongoid::Extensions::TimeWithZone do
|
|
204
204
|
|
205
205
|
context "when the string is an invalid time" do
|
206
206
|
|
207
|
-
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
it "returns epoch" do
|
212
|
-
expect(ActiveSupport::TimeWithZone.mongoize("time")).to eq(epoch)
|
207
|
+
it "returns nil" do
|
208
|
+
expect(ActiveSupport::TimeWithZone.mongoize("time")).to eq(nil)
|
213
209
|
end
|
214
210
|
end
|
215
211
|
|
@@ -476,7 +476,7 @@ describe Mongoid::Findable do
|
|
476
476
|
end
|
477
477
|
end
|
478
478
|
|
479
|
-
|
479
|
+
Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
|
480
480
|
|
481
481
|
describe "##{method}" do
|
482
482
|
|
@@ -485,4 +485,49 @@ describe Mongoid::Findable do
|
|
485
485
|
end
|
486
486
|
end
|
487
487
|
end
|
488
|
+
|
489
|
+
context 'when Mongoid is configured to use activesupport time zone' do
|
490
|
+
|
491
|
+
before do
|
492
|
+
Mongoid.use_utc = false
|
493
|
+
Mongoid.use_activesupport_time_zone = true
|
494
|
+
Time.zone = "Asia/Kolkata"
|
495
|
+
end
|
496
|
+
|
497
|
+
let!(:time) do
|
498
|
+
Time.zone.now.tap do |t|
|
499
|
+
User.create(last_login: t, name: 'Tom')
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
it 'uses activesupport time zone' do
|
504
|
+
expect(User.distinct(:last_login).first.to_s).to eql(time.in_time_zone('Asia/Kolkata').to_s)
|
505
|
+
end
|
506
|
+
|
507
|
+
it 'loads other fields accurately' do
|
508
|
+
expect(User.distinct(:name)).to match_array(['Tom'])
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
512
|
+
context 'when Mongoid is not configured to use activesupport time zone' do
|
513
|
+
|
514
|
+
before do
|
515
|
+
Mongoid.use_utc = true
|
516
|
+
Mongoid.use_activesupport_time_zone = false
|
517
|
+
end
|
518
|
+
|
519
|
+
let!(:time) do
|
520
|
+
Time.now.tap do |t|
|
521
|
+
User.create(last_login: t, name: 'Tom')
|
522
|
+
end
|
523
|
+
end
|
524
|
+
|
525
|
+
it 'uses utc' do
|
526
|
+
expect(User.distinct(:last_login).first.to_s).to eql(time.utc.to_s)
|
527
|
+
end
|
528
|
+
|
529
|
+
it 'loads other fields accurately' do
|
530
|
+
expect(User.distinct(:name)).to match_array(['Tom'])
|
531
|
+
end
|
532
|
+
end
|
488
533
|
end
|
@@ -2,6 +2,10 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Mongoid::Indexable do
|
4
4
|
|
5
|
+
after do
|
6
|
+
Person.collection.drop
|
7
|
+
end
|
8
|
+
|
5
9
|
describe ".included" do
|
6
10
|
|
7
11
|
let(:klass) do
|
@@ -58,7 +62,9 @@ describe Mongoid::Indexable do
|
|
58
62
|
end
|
59
63
|
|
60
64
|
let(:indexes) do
|
61
|
-
klass.with(database: "mongoid_optional")
|
65
|
+
klass.with(database: "mongoid_optional") do |klass|
|
66
|
+
klass.collection.indexes
|
67
|
+
end
|
62
68
|
end
|
63
69
|
|
64
70
|
it "creates the indexes" do
|
@@ -107,7 +113,9 @@ describe Mongoid::Indexable do
|
|
107
113
|
end
|
108
114
|
|
109
115
|
let(:indexes) do
|
110
|
-
klass.with(database: "mongoid_optional")
|
116
|
+
klass.with(database: "mongoid_optional") do |klass|
|
117
|
+
klass.collection.indexes
|
118
|
+
end
|
111
119
|
end
|
112
120
|
|
113
121
|
it "creates the indexes" do
|
@@ -121,7 +129,7 @@ describe Mongoid::Indexable do
|
|
121
129
|
Class.new do
|
122
130
|
include Mongoid::Document
|
123
131
|
store_in collection: "test_db_indexes"
|
124
|
-
index({name: 1}, {collation: {locale: 'en_US', strength: 2}})
|
132
|
+
index({ name: 1 }, { collation: { locale: 'en_US', strength: 2 }})
|
125
133
|
end
|
126
134
|
end
|
127
135
|
|
@@ -181,6 +189,10 @@ describe Mongoid::Indexable do
|
|
181
189
|
end
|
182
190
|
end
|
183
191
|
|
192
|
+
after do
|
193
|
+
klass.collection.drop
|
194
|
+
end
|
195
|
+
|
184
196
|
context "when indexing a field that is aliased" do
|
185
197
|
|
186
198
|
before do
|
@@ -280,13 +280,18 @@ describe Mongoid::Interceptable do
|
|
280
280
|
end
|
281
281
|
end
|
282
282
|
|
283
|
-
context "callback
|
283
|
+
context "callback aborts the callback chain" do
|
284
284
|
|
285
285
|
before do
|
286
|
-
|
286
|
+
Artist.before_create(:before_create_fail_stub)
|
287
|
+
expect(artist).to receive(:before_create_fail_stub).once.and_call_original
|
287
288
|
artist.save
|
288
289
|
end
|
289
290
|
|
291
|
+
after do
|
292
|
+
Artist.reset_callbacks(:create)
|
293
|
+
end
|
294
|
+
|
290
295
|
it "does not get saved" do
|
291
296
|
expect(artist.persisted?).to be false
|
292
297
|
end
|
@@ -316,13 +321,18 @@ describe Mongoid::Interceptable do
|
|
316
321
|
end
|
317
322
|
end
|
318
323
|
|
319
|
-
context "when callback
|
324
|
+
context "when callback halts the callback chain" do
|
320
325
|
|
321
326
|
before do
|
322
|
-
|
327
|
+
Artist.before_save(:before_save_fail_stub)
|
328
|
+
end
|
329
|
+
|
330
|
+
after do
|
331
|
+
Artist.reset_callbacks(:save)
|
323
332
|
end
|
324
333
|
|
325
334
|
it "the save returns false" do
|
335
|
+
expect(artist).to receive(:before_save_fail_stub).once.and_call_original
|
326
336
|
expect(artist.save).to be false
|
327
337
|
end
|
328
338
|
end
|
@@ -343,7 +353,7 @@ describe Mongoid::Interceptable do
|
|
343
353
|
context "when the callback returns true" do
|
344
354
|
|
345
355
|
before do
|
346
|
-
expect(artist).to receive(:
|
356
|
+
expect(artist).to receive(:before_update_stub).once.and_return(true)
|
347
357
|
end
|
348
358
|
|
349
359
|
it "the save returns true" do
|
@@ -351,13 +361,18 @@ describe Mongoid::Interceptable do
|
|
351
361
|
end
|
352
362
|
end
|
353
363
|
|
354
|
-
context "when the callback
|
364
|
+
context "when the callback halts the callback chain" do
|
355
365
|
|
356
366
|
before do
|
357
|
-
|
367
|
+
Artist.before_update(:before_update_fail_stub)
|
368
|
+
end
|
369
|
+
|
370
|
+
after do
|
371
|
+
Artist.reset_callbacks(:update)
|
358
372
|
end
|
359
373
|
|
360
374
|
it "the save returns false" do
|
375
|
+
expect(artist).to receive(:before_update_fail_stub).once.and_call_original
|
361
376
|
expect(artist.save).to be false
|
362
377
|
end
|
363
378
|
end
|
@@ -389,13 +404,18 @@ describe Mongoid::Interceptable do
|
|
389
404
|
end
|
390
405
|
end
|
391
406
|
|
392
|
-
context "when the callback
|
407
|
+
context "when the callback halts the callback chain" do
|
393
408
|
|
394
409
|
before do
|
395
|
-
|
410
|
+
Artist.before_destroy(:before_destroy_fail_stub)
|
411
|
+
end
|
412
|
+
|
413
|
+
after do
|
414
|
+
Artist.reset_callbacks(:destroy)
|
396
415
|
end
|
397
416
|
|
398
417
|
it "the destroy returns false" do
|
418
|
+
expect(artist).to receive(:before_destroy_fail_stub).once.and_call_original
|
399
419
|
expect(artist.destroy).to be false
|
400
420
|
end
|
401
421
|
end
|
@@ -1132,6 +1152,25 @@ describe Mongoid::Interceptable do
|
|
1132
1152
|
expect(band.reload.records.first.before_validation_called).to be true
|
1133
1153
|
end
|
1134
1154
|
end
|
1155
|
+
|
1156
|
+
context 'when the parent is updated' do
|
1157
|
+
|
1158
|
+
let(:band) do
|
1159
|
+
Band.create(name: "Moderat")
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
before do
|
1163
|
+
band.update(records: [ { name: 'Black on Both Sides' }])
|
1164
|
+
end
|
1165
|
+
|
1166
|
+
it 'executes the callback' do
|
1167
|
+
expect(band.records.first.before_validation_called).to be true
|
1168
|
+
end
|
1169
|
+
|
1170
|
+
it 'persists the change' do
|
1171
|
+
expect(band.reload.records.first.before_validation_called).to be true
|
1172
|
+
end
|
1173
|
+
end
|
1135
1174
|
end
|
1136
1175
|
|
1137
1176
|
context "when the child is persisted" do
|
@@ -1434,6 +1473,25 @@ describe Mongoid::Interceptable do
|
|
1434
1473
|
end
|
1435
1474
|
end
|
1436
1475
|
|
1476
|
+
describe '#after_destroy' do
|
1477
|
+
|
1478
|
+
context 'when the parent is updated in a child after_destroy callback' do
|
1479
|
+
|
1480
|
+
let!(:person) do
|
1481
|
+
Person.create!(ordered_posts: [OrderedPost.new])
|
1482
|
+
end
|
1483
|
+
|
1484
|
+
before do
|
1485
|
+
post = OrderedPost.first
|
1486
|
+
post.destroy
|
1487
|
+
end
|
1488
|
+
|
1489
|
+
it 'updates the parent' do
|
1490
|
+
expect(person.reload.title).to eq('Minus one ordered post.')
|
1491
|
+
end
|
1492
|
+
end
|
1493
|
+
end
|
1494
|
+
|
1437
1495
|
describe "#before_validation" do
|
1438
1496
|
|
1439
1497
|
context "when the child is new" do
|
@@ -1544,7 +1602,7 @@ describe Mongoid::Interceptable do
|
|
1544
1602
|
|
1545
1603
|
before(:all) do
|
1546
1604
|
Person.before_save do |doc|
|
1547
|
-
doc.mode
|
1605
|
+
throw(:abort) if doc.mode == :prevent_save
|
1548
1606
|
end
|
1549
1607
|
end
|
1550
1608
|
|