mongoid 5.0.1 → 5.0.2
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 +0 -0
- data/CHANGELOG.md +2 -0
- data/README.md +0 -1
- data/lib/mongoid.rb +0 -7
- data/lib/mongoid/attributes.rb +2 -1
- data/lib/mongoid/attributes/nested.rb +3 -0
- data/lib/mongoid/clients.rb +0 -6
- data/lib/mongoid/clients/options.rb +0 -6
- data/lib/mongoid/clients/storage_options.rb +0 -3
- data/lib/mongoid/clients/thread_options.rb +0 -3
- data/lib/mongoid/config.rb +0 -7
- data/lib/mongoid/contextual/command.rb +0 -3
- data/lib/mongoid/contextual/mongo.rb +2 -2
- data/lib/mongoid/criteria.rb +6 -1
- data/lib/mongoid/extensions/hash.rb +1 -1
- data/lib/mongoid/indexable.rb +7 -5
- data/lib/mongoid/indexable/specification.rb +14 -0
- data/lib/mongoid/indexable/validators/options.rb +2 -1
- data/lib/mongoid/persistable/settable.rb +8 -1
- data/lib/mongoid/query_cache.rb +14 -4
- data/lib/mongoid/railtie.rb +1 -0
- data/lib/mongoid/relations/accessors.rb +3 -1
- data/lib/mongoid/relations/embedded/batchable.rb +5 -1
- data/lib/mongoid/relations/metadata.rb +3 -0
- data/lib/mongoid/tasks/database.rb +1 -1
- data/lib/mongoid/threaded.rb +0 -5
- data/lib/mongoid/version.rb +1 -1
- data/spec/app/models/bomb.rb +4 -0
- data/spec/app/models/building.rb +2 -1
- data/spec/app/models/building_address.rb +3 -1
- data/spec/app/models/courier_job.rb +4 -0
- data/spec/app/models/explosion.rb +4 -0
- data/spec/app/models/message.rb +3 -0
- data/spec/app/models/name.rb +1 -0
- data/spec/app/models/post.rb +3 -0
- data/spec/app/models/sandwich.rb +5 -0
- data/spec/app/models/shipment_address.rb +2 -0
- data/spec/mongoid/attributes/nested_spec.rb +77 -18
- data/spec/mongoid/attributes_spec.rb +13 -0
- data/spec/mongoid/criteria_spec.rb +52 -0
- data/spec/mongoid/document_spec.rb +37 -13
- data/spec/mongoid/indexable/specification_spec.rb +25 -0
- data/spec/mongoid/persistable_spec.rb +17 -0
- data/spec/mongoid/query_cache_spec.rb +51 -2
- data/spec/mongoid/relations/accessors_spec.rb +69 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +63 -0
- data/spec/mongoid/relations/embedded/one_spec.rb +45 -0
- data/spec/mongoid/relations/metadata_spec.rb +16 -0
- data/spec/mongoid/relations/referenced/one_spec.rb +24 -0
- data/spec/mongoid/tasks/database_spec.rb +19 -0
- data/spec/spec_helper.rb +1 -8
- metadata +10 -2
- metadata.gz.sig +0 -0
@@ -75,6 +75,55 @@ describe Mongoid::QueryCache do
|
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
+
context "when the first query has no limit" do
|
79
|
+
|
80
|
+
let(:game) do
|
81
|
+
Game.create!(name: "2048")
|
82
|
+
end
|
83
|
+
|
84
|
+
before do
|
85
|
+
game.ratings.where(:value.gt => 5).asc(:id).all.to_a
|
86
|
+
end
|
87
|
+
|
88
|
+
context "when the next query has a limit" do
|
89
|
+
|
90
|
+
it "uses the cache" do
|
91
|
+
expect_no_queries do
|
92
|
+
game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when the first query has a limit" do
|
99
|
+
|
100
|
+
let(:game) do
|
101
|
+
Game.create!(name: "2048")
|
102
|
+
end
|
103
|
+
|
104
|
+
before do
|
105
|
+
game.ratings.where(:value.gt => 5).limit(3).asc(:id).all.to_a
|
106
|
+
end
|
107
|
+
|
108
|
+
context "when the next query has a limit" do
|
109
|
+
|
110
|
+
it "queries again" do
|
111
|
+
expect_query(1) do
|
112
|
+
game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context "when the new query does not have a limit" do
|
118
|
+
|
119
|
+
it "queries again" do
|
120
|
+
expect_query(1) do
|
121
|
+
game.ratings.where(:value.gt => 5).asc(:id).to_a
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
78
127
|
context "when querying only the first" do
|
79
128
|
|
80
129
|
let(:game) do
|
@@ -94,8 +143,8 @@ describe Mongoid::QueryCache do
|
|
94
143
|
|
95
144
|
context "when limiting the result" do
|
96
145
|
|
97
|
-
it "
|
98
|
-
expect_query(
|
146
|
+
it "does not query again" do
|
147
|
+
expect_query(0) do
|
99
148
|
Band.limit(2).all.to_a
|
100
149
|
end
|
101
150
|
end
|
@@ -749,4 +749,73 @@ describe Mongoid::Relations::Accessors do
|
|
749
749
|
end
|
750
750
|
end
|
751
751
|
end
|
752
|
+
|
753
|
+
context 'when setting the relation more than once' do
|
754
|
+
|
755
|
+
let(:person) do
|
756
|
+
Person.create
|
757
|
+
end
|
758
|
+
|
759
|
+
context 'when the relation is a references one' do
|
760
|
+
|
761
|
+
let(:game) do
|
762
|
+
Game.create
|
763
|
+
end
|
764
|
+
|
765
|
+
before do
|
766
|
+
person.game = game
|
767
|
+
game.person = person
|
768
|
+
end
|
769
|
+
|
770
|
+
it 'allows the object to be set twice' do
|
771
|
+
expect(person.game = game).to be(game)
|
772
|
+
end
|
773
|
+
end
|
774
|
+
|
775
|
+
context 'when the relation is a references many' do
|
776
|
+
|
777
|
+
let!(:preference) do
|
778
|
+
Preference.create(name: "Setting")
|
779
|
+
end
|
780
|
+
|
781
|
+
before do
|
782
|
+
person.preferences << Preference.last
|
783
|
+
end
|
784
|
+
|
785
|
+
it 'allows the object to be set twice' do
|
786
|
+
expect(person.preferences << Preference.last).to be_a(Array)
|
787
|
+
end
|
788
|
+
end
|
789
|
+
|
790
|
+
context 'when the relation is an embeds one' do
|
791
|
+
|
792
|
+
let!(:name) do
|
793
|
+
Name.new
|
794
|
+
end
|
795
|
+
|
796
|
+
before do
|
797
|
+
person.name = name
|
798
|
+
name.person = person
|
799
|
+
end
|
800
|
+
|
801
|
+
it 'allows the object to be set twice' do
|
802
|
+
expect(person.name = name).to be(name)
|
803
|
+
end
|
804
|
+
end
|
805
|
+
|
806
|
+
context 'when the relation is an embeds many' do
|
807
|
+
|
808
|
+
let!(:address) do
|
809
|
+
Address.new
|
810
|
+
end
|
811
|
+
|
812
|
+
before do
|
813
|
+
person.addresses << address
|
814
|
+
end
|
815
|
+
|
816
|
+
it 'allows the object to be set twice' do
|
817
|
+
expect(person.addresses << address).to be_a(Array)
|
818
|
+
end
|
819
|
+
end
|
820
|
+
end
|
752
821
|
end
|
@@ -1545,6 +1545,38 @@ describe Mongoid::Relations::Embedded::Many do
|
|
1545
1545
|
person.addresses.create!(street: "1")
|
1546
1546
|
}.to raise_error(Mongoid::Errors::Validations)
|
1547
1547
|
end
|
1548
|
+
|
1549
|
+
context 'when the presence of the embedded relation is validated' do
|
1550
|
+
|
1551
|
+
before do
|
1552
|
+
class Book
|
1553
|
+
validates :pages, presence: true
|
1554
|
+
end
|
1555
|
+
end
|
1556
|
+
|
1557
|
+
let(:book) do
|
1558
|
+
Book.new.tap do |b|
|
1559
|
+
b.pages = [Page.new]
|
1560
|
+
b.save!
|
1561
|
+
end
|
1562
|
+
end
|
1563
|
+
|
1564
|
+
let(:num_pages) do
|
1565
|
+
book.pages.size
|
1566
|
+
end
|
1567
|
+
|
1568
|
+
let(:reloaded) do
|
1569
|
+
book.reload
|
1570
|
+
end
|
1571
|
+
|
1572
|
+
before do
|
1573
|
+
begin; book.update_attributes!({"pages"=>nil}); rescue; end
|
1574
|
+
end
|
1575
|
+
|
1576
|
+
it 'does not delete the embedded relation' do
|
1577
|
+
expect(reloaded.pages.size).to eq(num_pages)
|
1578
|
+
end
|
1579
|
+
end
|
1548
1580
|
end
|
1549
1581
|
end
|
1550
1582
|
|
@@ -3531,6 +3563,37 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3531
3563
|
end
|
3532
3564
|
end
|
3533
3565
|
|
3566
|
+
context "when the association has an order defined" do
|
3567
|
+
|
3568
|
+
let(:person) do
|
3569
|
+
Person.create
|
3570
|
+
end
|
3571
|
+
|
3572
|
+
let(:message_one) do
|
3573
|
+
Message.new(priority: 5, body: 'This is a test')
|
3574
|
+
end
|
3575
|
+
|
3576
|
+
let(:message_two) do
|
3577
|
+
Message.new(priority: 10, body: 'This is a test')
|
3578
|
+
end
|
3579
|
+
|
3580
|
+
let(:message_three) do
|
3581
|
+
Message.new(priority: 20, body: 'Zee test')
|
3582
|
+
end
|
3583
|
+
|
3584
|
+
before do
|
3585
|
+
person.messages.push(message_one, message_two, message_three)
|
3586
|
+
end
|
3587
|
+
|
3588
|
+
let(:criteria) do
|
3589
|
+
person.messages.order_by(:body.asc, :priority.desc)
|
3590
|
+
end
|
3591
|
+
|
3592
|
+
it "properly orders the related objects" do
|
3593
|
+
expect(criteria.to_a).to eq([message_two, message_one, message_three])
|
3594
|
+
end
|
3595
|
+
end
|
3596
|
+
|
3534
3597
|
context "when using dot notation in a criteria" do
|
3535
3598
|
|
3536
3599
|
let(:person) do
|
@@ -768,6 +768,37 @@ describe Mongoid::Relations::Embedded::One do
|
|
768
768
|
end
|
769
769
|
end
|
770
770
|
|
771
|
+
describe "when the relationship is polymorphic" do
|
772
|
+
|
773
|
+
context "when updating an aliased embedded document" do
|
774
|
+
|
775
|
+
context "when the embedded document inherits its relationship" do
|
776
|
+
|
777
|
+
let(:courier_job) do
|
778
|
+
CourierJob.create
|
779
|
+
end
|
780
|
+
|
781
|
+
let(:old_child) do
|
782
|
+
ShipmentAddress.new
|
783
|
+
end
|
784
|
+
|
785
|
+
let(:new_child) do
|
786
|
+
ShipmentAddress.new
|
787
|
+
end
|
788
|
+
|
789
|
+
before do
|
790
|
+
courier_job.drop_address = old_child
|
791
|
+
courier_job.update_attribute(:drop_address, new_child)
|
792
|
+
courier_job.reload
|
793
|
+
end
|
794
|
+
|
795
|
+
it "the child is embedded correctly" do
|
796
|
+
expect(courier_job.drop_address).to eq(new_child)
|
797
|
+
end
|
798
|
+
end
|
799
|
+
end
|
800
|
+
end
|
801
|
+
|
771
802
|
describe ".embedded?" do
|
772
803
|
|
773
804
|
it "returns true" do
|
@@ -1019,4 +1050,18 @@ describe Mongoid::Relations::Embedded::One do
|
|
1019
1050
|
end
|
1020
1051
|
end
|
1021
1052
|
end
|
1053
|
+
|
1054
|
+
context "when parent validation of child is set to false" do
|
1055
|
+
|
1056
|
+
let(:building) do
|
1057
|
+
building = Building.create
|
1058
|
+
building.building_address = BuildingAddress.new
|
1059
|
+
building.save
|
1060
|
+
building.reload
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
it "parent successfully embeds an invalid child" do
|
1064
|
+
expect(building.building_address).to be_a(BuildingAddress)
|
1065
|
+
end
|
1066
|
+
end
|
1022
1067
|
end
|
@@ -586,6 +586,22 @@ describe Mongoid::Relations::Metadata do
|
|
586
586
|
end
|
587
587
|
end
|
588
588
|
|
589
|
+
context "when the association is polymorphic" do
|
590
|
+
|
591
|
+
let(:metadata) do
|
592
|
+
described_class.new(
|
593
|
+
name: :ratable,
|
594
|
+
relation: Mongoid::Relations::Referenced::In,
|
595
|
+
polymorphic: true,
|
596
|
+
inverse_class_name: "Rating"
|
597
|
+
)
|
598
|
+
end
|
599
|
+
|
600
|
+
it "returns the polymorphic class name" do
|
601
|
+
expect(metadata.class_name).to eq("Ratable")
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
589
605
|
describe "#destructive?" do
|
590
606
|
|
591
607
|
context "when the relation has a destructive dependent option" do
|
@@ -1213,4 +1213,28 @@ describe Mongoid::Relations::Referenced::One do
|
|
1213
1213
|
end
|
1214
1214
|
end
|
1215
1215
|
end
|
1216
|
+
|
1217
|
+
context "when dependent is set to delete for child" do
|
1218
|
+
|
1219
|
+
context "when autobuild is true for child" do
|
1220
|
+
|
1221
|
+
let(:explosion) do
|
1222
|
+
Explosion.create
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
let(:bomb) do
|
1226
|
+
bomb = Bomb.create
|
1227
|
+
bomb.explosion = explosion
|
1228
|
+
bomb
|
1229
|
+
end
|
1230
|
+
|
1231
|
+
let(:clear_child) do
|
1232
|
+
bomb.explosion.clear
|
1233
|
+
end
|
1234
|
+
|
1235
|
+
it "clearing the child raises no error" do
|
1236
|
+
expect{ clear_child }.not_to raise_error
|
1237
|
+
end
|
1238
|
+
end
|
1239
|
+
end
|
1216
1240
|
end
|
@@ -132,6 +132,25 @@ describe "Mongoid::Tasks::Database" do
|
|
132
132
|
it "returns the removed indexes" do
|
133
133
|
expect(removed_indexes).to be_empty
|
134
134
|
end
|
135
|
+
|
136
|
+
context 'when the index is a text index', if: non_legacy_server? do
|
137
|
+
|
138
|
+
before do
|
139
|
+
class Band
|
140
|
+
index origin: Mongo::Index::TEXT
|
141
|
+
end
|
142
|
+
Mongoid::Tasks::Database.create_indexes([Band])
|
143
|
+
Mongoid::Tasks::Database.remove_undefined_indexes([Band])
|
144
|
+
end
|
145
|
+
|
146
|
+
let(:indexes) do
|
147
|
+
Band.collection.indexes
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'does not delete the text index' do
|
151
|
+
expect(indexes.find { |i| i['name'] == 'origin_text' }).not_to be_nil
|
152
|
+
end
|
153
|
+
end
|
135
154
|
end
|
136
155
|
|
137
156
|
describe ".remove_indexes" do
|
data/spec/spec_helper.rb
CHANGED
@@ -4,13 +4,6 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
|
4
4
|
MODELS = File.join(File.dirname(__FILE__), "app/models")
|
5
5
|
$LOAD_PATH.unshift(MODELS)
|
6
6
|
|
7
|
-
if ENV["CI"]
|
8
|
-
require "coveralls"
|
9
|
-
Coveralls.wear! do
|
10
|
-
add_filter "spec"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
7
|
require "action_controller"
|
15
8
|
require "mongoid"
|
16
9
|
require "rspec"
|
@@ -48,7 +41,7 @@ if (ENV['CI'] == 'travis')
|
|
48
41
|
client = Mongo::Client.new(['127.0.0.1:27017'])
|
49
42
|
while starting
|
50
43
|
begin
|
51
|
-
client.command(Mongo::Server::Monitor::
|
44
|
+
client.command(Mongo::Server::Monitor::Connection::ISMASTER)
|
52
45
|
break
|
53
46
|
rescue Mongo::Error::OperationFailure => e
|
54
47
|
sleep(2)
|
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: 5.0.
|
4
|
+
version: 5.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
ZIvvwAhgCjVW5QCi2I1noxXLmtZ3XDawWu8kaGtu8giHXcwL3941m8hvFZ/Wr9Yi
|
31
31
|
JvcXJt2a4/JvwnIs2hmKuyfhZmB9HEE5wQQaCMnnC14=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2015-
|
33
|
+
date: 2015-12-22 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activemodel
|
@@ -387,6 +387,7 @@ files:
|
|
387
387
|
- spec/app/models/bed.rb
|
388
388
|
- spec/app/models/big_palette.rb
|
389
389
|
- spec/app/models/birthday.rb
|
390
|
+
- spec/app/models/bomb.rb
|
390
391
|
- spec/app/models/book.rb
|
391
392
|
- spec/app/models/breed.rb
|
392
393
|
- spec/app/models/browser.rb
|
@@ -413,6 +414,7 @@ files:
|
|
413
414
|
- spec/app/models/contractor.rb
|
414
415
|
- spec/app/models/cookie.rb
|
415
416
|
- spec/app/models/country_code.rb
|
417
|
+
- spec/app/models/courier_job.rb
|
416
418
|
- spec/app/models/definition.rb
|
417
419
|
- spec/app/models/description.rb
|
418
420
|
- spec/app/models/dictionary.rb
|
@@ -434,6 +436,7 @@ files:
|
|
434
436
|
- spec/app/models/event.rb
|
435
437
|
- spec/app/models/exhibition.rb
|
436
438
|
- spec/app/models/exhibitor.rb
|
439
|
+
- spec/app/models/explosion.rb
|
437
440
|
- spec/app/models/eye.rb
|
438
441
|
- spec/app/models/eye_bowl.rb
|
439
442
|
- spec/app/models/face.rb
|
@@ -522,6 +525,7 @@ files:
|
|
522
525
|
- spec/app/models/service.rb
|
523
526
|
- spec/app/models/shape.rb
|
524
527
|
- spec/app/models/shelf.rb
|
528
|
+
- spec/app/models/shipment_address.rb
|
525
529
|
- spec/app/models/shipping_container.rb
|
526
530
|
- spec/app/models/shipping_pack.rb
|
527
531
|
- spec/app/models/shop.rb
|
@@ -838,6 +842,7 @@ test_files:
|
|
838
842
|
- spec/app/models/bed.rb
|
839
843
|
- spec/app/models/big_palette.rb
|
840
844
|
- spec/app/models/birthday.rb
|
845
|
+
- spec/app/models/bomb.rb
|
841
846
|
- spec/app/models/book.rb
|
842
847
|
- spec/app/models/breed.rb
|
843
848
|
- spec/app/models/browser.rb
|
@@ -864,6 +869,7 @@ test_files:
|
|
864
869
|
- spec/app/models/contractor.rb
|
865
870
|
- spec/app/models/cookie.rb
|
866
871
|
- spec/app/models/country_code.rb
|
872
|
+
- spec/app/models/courier_job.rb
|
867
873
|
- spec/app/models/definition.rb
|
868
874
|
- spec/app/models/description.rb
|
869
875
|
- spec/app/models/dictionary.rb
|
@@ -885,6 +891,7 @@ test_files:
|
|
885
891
|
- spec/app/models/event.rb
|
886
892
|
- spec/app/models/exhibition.rb
|
887
893
|
- spec/app/models/exhibitor.rb
|
894
|
+
- spec/app/models/explosion.rb
|
888
895
|
- spec/app/models/eye.rb
|
889
896
|
- spec/app/models/eye_bowl.rb
|
890
897
|
- spec/app/models/face.rb
|
@@ -973,6 +980,7 @@ test_files:
|
|
973
980
|
- spec/app/models/service.rb
|
974
981
|
- spec/app/models/shape.rb
|
975
982
|
- spec/app/models/shelf.rb
|
983
|
+
- spec/app/models/shipment_address.rb
|
976
984
|
- spec/app/models/shipping_container.rb
|
977
985
|
- spec/app/models/shipping_pack.rb
|
978
986
|
- spec/app/models/shop.rb
|