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
@@ -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
|
|