mongoid 6.0.3 → 6.1.0.rc0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +3 -2
- data/lib/config/locales/en.yml +15 -0
- data/lib/mongoid.rb +5 -0
- data/lib/mongoid/clients.rb +10 -2
- data/lib/mongoid/clients/factory.rb +2 -0
- data/lib/mongoid/config.rb +1 -0
- data/lib/mongoid/contextual/map_reduce.rb +20 -115
- data/lib/mongoid/contextual/memory.rb +1 -0
- data/lib/mongoid/contextual/mongo.rb +16 -13
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/optional.rb +14 -0
- data/lib/mongoid/errors.rb +1 -0
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +20 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/extensions.rb +1 -0
- data/lib/mongoid/extensions/decimal128.rb +39 -0
- data/lib/mongoid/indexable/validators/options.rb +2 -1
- data/lib/mongoid/persistable/deletable.rb +3 -7
- data/lib/mongoid/query_cache.rb +2 -2
- data/lib/mongoid/relations/metadata.rb +3 -3
- data/lib/mongoid/relations/referenced/many.rb +2 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -0
- data/spec/app/models/band.rb +1 -0
- data/spec/config/mongoid.yml +19 -0
- data/spec/mongoid/clients/factory_spec.rb +8 -0
- data/spec/mongoid/clients_spec.rb +69 -0
- data/spec/mongoid/config_spec.rb +34 -2
- data/spec/mongoid/contextual/atomic_spec.rb +342 -76
- data/spec/mongoid/contextual/map_reduce_spec.rb +102 -135
- data/spec/mongoid/contextual/memory_spec.rb +316 -56
- data/spec/mongoid/contextual/mongo_spec.rb +366 -4
- data/spec/mongoid/criteria/queryable/optional_spec.rb +13 -0
- data/spec/mongoid/criteria_spec.rb +19 -0
- data/spec/mongoid/extensions/boolean_spec.rb +14 -0
- data/spec/mongoid/extensions/decimal128_spec.rb +44 -0
- data/spec/mongoid/indexable_spec.rb +43 -0
- data/spec/mongoid/query_cache_spec.rb +34 -0
- data/spec/mongoid/relations/metadata_spec.rb +0 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +11 -0
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +11 -0
- data/spec/mongoid/scopable_spec.rb +12 -0
- data/spec/spec_helper.rb +9 -0
- metadata +17 -7
- metadata.gz.sig +0 -0
@@ -3477,6 +3477,25 @@ describe Mongoid::Criteria do
|
|
3477
3477
|
end
|
3478
3478
|
end
|
3479
3479
|
|
3480
|
+
context "when querying on a BSON::Decimal128", if: decimal128_supported? do
|
3481
|
+
|
3482
|
+
let(:decimal) do
|
3483
|
+
BSON::Decimal128.new("0.0005")
|
3484
|
+
end
|
3485
|
+
|
3486
|
+
let!(:band) do
|
3487
|
+
Band.create(name: "Boards of Canada", decimal: decimal)
|
3488
|
+
end
|
3489
|
+
|
3490
|
+
let(:from_db) do
|
3491
|
+
Band.where(decimal: decimal).first
|
3492
|
+
end
|
3493
|
+
|
3494
|
+
it "finds the document by the big decimal value" do
|
3495
|
+
expect(from_db).to eq(band)
|
3496
|
+
end
|
3497
|
+
end
|
3498
|
+
|
3480
3499
|
context 'when querying on a polymorphic relation' do
|
3481
3500
|
|
3482
3501
|
let(:movie) do
|
@@ -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
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Extensions::Decimal128 do
|
4
|
+
|
5
|
+
let(:decimal128) do
|
6
|
+
BSON::Decimal128.new("0.0005")
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#__evolve_decimal128__" do
|
10
|
+
|
11
|
+
it "returns the same instance" do
|
12
|
+
expect(decimal128.__evolve_decimal128__).to be(decimal128)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".evolve" do
|
17
|
+
|
18
|
+
context "when provided a single decimal128" do
|
19
|
+
|
20
|
+
let(:evolved) do
|
21
|
+
BSON::Decimal128.evolve(decimal128)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns the decimal128" do
|
25
|
+
expect(evolved).to be(decimal128)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when provided an array of decimal128s" do
|
30
|
+
|
31
|
+
let(:other_decimal128) do
|
32
|
+
BSON::Decimal128.new("3.14")
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:evolved) do
|
36
|
+
BSON::ObjectId.evolve([decimal128, other_decimal128])
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns the array of decimal128s" do
|
40
|
+
expect(evolved).to eq([decimal128, other_decimal128])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -122,6 +122,34 @@ describe Mongoid::Indexable do
|
|
122
122
|
expect(indexes.get(_type: 1)).to_not be_nil
|
123
123
|
end
|
124
124
|
end
|
125
|
+
|
126
|
+
context "when a collation option is specified", if: collation_supported? do
|
127
|
+
|
128
|
+
let(:klass) do
|
129
|
+
Class.new do
|
130
|
+
include Mongoid::Document
|
131
|
+
store_in collection: "test_db_indexes"
|
132
|
+
index({ name: 1 }, { collation: { locale: 'en_US', strength: 2 }})
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
before do
|
137
|
+
klass.create_indexes
|
138
|
+
end
|
139
|
+
|
140
|
+
after do
|
141
|
+
klass.remove_indexes
|
142
|
+
end
|
143
|
+
|
144
|
+
let(:indexes) do
|
145
|
+
klass.collection.indexes
|
146
|
+
end
|
147
|
+
|
148
|
+
it "creates the indexes" do
|
149
|
+
expect(indexes.get("name_1")["collation"]).to_not be_nil
|
150
|
+
expect(indexes.get("name_1")["collation"]["locale"]).to eq('en_US')
|
151
|
+
end
|
152
|
+
end
|
125
153
|
end
|
126
154
|
|
127
155
|
describe ".add_indexes" do
|
@@ -270,6 +298,21 @@ describe Mongoid::Indexable do
|
|
270
298
|
end
|
271
299
|
end
|
272
300
|
|
301
|
+
context "when providing a collation option", if: collation_supported? do
|
302
|
+
|
303
|
+
before do
|
304
|
+
klass.index({ name: 1 }, collation: { locale: 'en_US', strength: 2 })
|
305
|
+
end
|
306
|
+
|
307
|
+
let(:options) do
|
308
|
+
klass.index_specification(name: 1).options
|
309
|
+
end
|
310
|
+
|
311
|
+
it "sets the index with a collation option" do
|
312
|
+
expect(options).to eq(collation: { locale: 'en_US', strength: 2 })
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
273
316
|
context "when providing a compound index" do
|
274
317
|
|
275
318
|
before do
|
@@ -164,6 +164,40 @@ describe Mongoid::QueryCache do
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
+
context 'when the first query has a collation', if: collation_supported? do
|
168
|
+
|
169
|
+
before do
|
170
|
+
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2).to_a
|
171
|
+
end
|
172
|
+
|
173
|
+
context "when the next query has the same collation" do
|
174
|
+
|
175
|
+
it "uses the cache" do
|
176
|
+
expect_no_queries do
|
177
|
+
Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2).to_a
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
context "when the next query does not have the same collation" do
|
183
|
+
|
184
|
+
it "queries again" do
|
185
|
+
expect_query(1) do
|
186
|
+
Band.where(name: 'DEPECHE MODE').collation(locale: 'fr', strength: 2).to_a
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
context "when the next query does not have a collation" do
|
192
|
+
|
193
|
+
it "queries again" do
|
194
|
+
expect_query(1) do
|
195
|
+
Band.where(name: 'DEPECHE MODE').to_a
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
167
201
|
context "when the first query has no limit" do
|
168
202
|
|
169
203
|
let(:game) do
|
@@ -2934,6 +2934,17 @@ describe Mongoid::Relations::Referenced::Many do
|
|
2934
2934
|
it "applies the criteria to the documents" do
|
2935
2935
|
expect(posts).to eq([ post_one ])
|
2936
2936
|
end
|
2937
|
+
|
2938
|
+
context 'when providing a collation', if: collation_supported? do
|
2939
|
+
|
2940
|
+
let(:posts) do
|
2941
|
+
person.posts.where(title: "FIRST").collation(locale: 'en_US', strength: 2)
|
2942
|
+
end
|
2943
|
+
|
2944
|
+
it "applies the collation option to the query" do
|
2945
|
+
expect(posts).to eq([ post_one ])
|
2946
|
+
end
|
2947
|
+
end
|
2937
2948
|
end
|
2938
2949
|
|
2939
2950
|
context "when providing a criteria class method" do
|
@@ -2640,6 +2640,17 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
2640
2640
|
it "applies the criteria to the documents" do
|
2641
2641
|
expect(preferences).to eq([ preference_one ])
|
2642
2642
|
end
|
2643
|
+
|
2644
|
+
context 'when providing a collation', if: collation_supported? do
|
2645
|
+
|
2646
|
+
let(:preferences) do
|
2647
|
+
person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
|
2648
|
+
end
|
2649
|
+
|
2650
|
+
it "applies the collation option to the query" do
|
2651
|
+
expect(preferences).to eq([ preference_one ])
|
2652
|
+
end
|
2653
|
+
end
|
2643
2654
|
end
|
2644
2655
|
|
2645
2656
|
context "when providing a criteria on id" do
|
@@ -227,6 +227,18 @@ describe Mongoid::Scopable do
|
|
227
227
|
|
228
228
|
context "when provided a criteria" do
|
229
229
|
|
230
|
+
context 'when a collation is defined on the criteria', if: collation_supported? do
|
231
|
+
|
232
|
+
before do
|
233
|
+
Band.scope(:tests, ->{ Band.where(name: 'TESTING').collation(locale: 'en_US', strength: 2) })
|
234
|
+
Band.create(name: 'testing')
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'applies the collation' do
|
238
|
+
expect(Band.tests.first['name']).to eq('testing')
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
230
242
|
context "when the lambda includes a geo_near query" do
|
231
243
|
|
232
244
|
before do
|
data/spec/spec_helper.rb
CHANGED
@@ -74,6 +74,15 @@ def non_legacy_server?
|
|
74
74
|
Mongoid::Clients.default.cluster.servers.first.features.write_command_enabled?
|
75
75
|
end
|
76
76
|
|
77
|
+
def testing_replica_set?
|
78
|
+
Mongoid::Clients.default.cluster.replica_set?
|
79
|
+
end
|
80
|
+
|
81
|
+
def collation_supported?
|
82
|
+
Mongoid::Clients.default.cluster.next_primary.features.collation_enabled?
|
83
|
+
end
|
84
|
+
alias :decimal128_supported? :collation_supported?
|
85
|
+
|
77
86
|
def testing_locally?
|
78
87
|
!(ENV['CI'] == 'travis')
|
79
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.1.0.rc0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
cGiNQIiHBj/9/xHfOyOthBPUevTiVnuffarDr434z/LGLwYzgaG5EcJFvZqpvUpP
|
31
31
|
fGcAPtAZUMGLXwcOB1BJEFkDxUQIJiEpSmf4YzzZhEM=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2016-12-
|
33
|
+
date: 2016-12-22 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activemodel
|
@@ -50,16 +50,22 @@ dependencies:
|
|
50
50
|
name: mongo
|
51
51
|
requirement: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.4.1
|
56
|
+
- - "<"
|
54
57
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
58
|
+
version: 3.0.0
|
56
59
|
type: :runtime
|
57
60
|
prerelease: false
|
58
61
|
version_requirements: !ruby/object:Gem::Requirement
|
59
62
|
requirements:
|
60
|
-
- - "
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.4.1
|
66
|
+
- - "<"
|
61
67
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
68
|
+
version: 3.0.0
|
63
69
|
description: Mongoid is an ODM (Object Document Mapper) Framework for MongoDB, written
|
64
70
|
in Ruby.
|
65
71
|
email:
|
@@ -160,6 +166,7 @@ files:
|
|
160
166
|
- lib/mongoid/errors/document_not_destroyed.rb
|
161
167
|
- lib/mongoid/errors/document_not_found.rb
|
162
168
|
- lib/mongoid/errors/eager_load.rb
|
169
|
+
- lib/mongoid/errors/in_memory_collation_not_supported.rb
|
163
170
|
- lib/mongoid/errors/invalid_collection.rb
|
164
171
|
- lib/mongoid/errors/invalid_config_option.rb
|
165
172
|
- lib/mongoid/errors/invalid_field.rb
|
@@ -206,6 +213,7 @@ files:
|
|
206
213
|
- lib/mongoid/extensions/boolean.rb
|
207
214
|
- lib/mongoid/extensions/date.rb
|
208
215
|
- lib/mongoid/extensions/date_time.rb
|
216
|
+
- lib/mongoid/extensions/decimal128.rb
|
209
217
|
- lib/mongoid/extensions/false_class.rb
|
210
218
|
- lib/mongoid/extensions/float.rb
|
211
219
|
- lib/mongoid/extensions/hash.rb
|
@@ -690,6 +698,7 @@ files:
|
|
690
698
|
- spec/mongoid/extensions/boolean_spec.rb
|
691
699
|
- spec/mongoid/extensions/date_spec.rb
|
692
700
|
- spec/mongoid/extensions/date_time_spec.rb
|
701
|
+
- spec/mongoid/extensions/decimal128_spec.rb
|
693
702
|
- spec/mongoid/extensions/false_class_spec.rb
|
694
703
|
- spec/mongoid/extensions/float_spec.rb
|
695
704
|
- spec/mongoid/extensions/hash_spec.rb
|
@@ -853,7 +862,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
853
862
|
version: 1.3.6
|
854
863
|
requirements: []
|
855
864
|
rubyforge_project: mongoid
|
856
|
-
rubygems_version: 2.
|
865
|
+
rubygems_version: 2.6.8
|
857
866
|
signing_key:
|
858
867
|
specification_version: 4
|
859
868
|
summary: Elegant Persistence in Ruby for MongoDB.
|
@@ -1181,6 +1190,7 @@ test_files:
|
|
1181
1190
|
- spec/mongoid/extensions/boolean_spec.rb
|
1182
1191
|
- spec/mongoid/extensions/date_spec.rb
|
1183
1192
|
- spec/mongoid/extensions/date_time_spec.rb
|
1193
|
+
- spec/mongoid/extensions/decimal128_spec.rb
|
1184
1194
|
- spec/mongoid/extensions/false_class_spec.rb
|
1185
1195
|
- spec/mongoid/extensions/float_spec.rb
|
1186
1196
|
- spec/mongoid/extensions/hash_spec.rb
|
metadata.gz.sig
CHANGED
Binary file
|