mongoid 4.0.2 → 5.0.0.beta
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 +4 -4
- data/CHANGELOG.md +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
@@ -150,5 +150,14 @@ describe Mongoid::Relations::Eager::BelongsTo do
|
|
150
150
|
}.to raise_error(Mongoid::Errors::EagerLoad)
|
151
151
|
end
|
152
152
|
end
|
153
|
+
|
154
|
+
context "when setting the foreign key id directly" do
|
155
|
+
|
156
|
+
it "works" do
|
157
|
+
id = BSON::ObjectId.new
|
158
|
+
game = Game.new(:person_id => id)
|
159
|
+
expect(game.person_id).to eql(id)
|
160
|
+
end
|
161
|
+
end
|
153
162
|
end
|
154
163
|
end
|
@@ -45,7 +45,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
45
45
|
|
46
46
|
it "queries twice" do
|
47
47
|
expect_query(2) do
|
48
|
-
Person.
|
48
|
+
Person.asc(:_id).includes(:houses).each do |person|
|
49
49
|
expect(person.houses).to_not be_nil
|
50
50
|
|
51
51
|
expect(person.houses.length).to be(3)
|
@@ -54,7 +54,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "has all items" do
|
57
|
-
Person.
|
57
|
+
Person.asc(:_id).includes(:houses).each do |person|
|
58
58
|
expect(person.ivar(:houses).length).to be(3)
|
59
59
|
end
|
60
60
|
end
|
@@ -63,7 +63,7 @@ describe Mongoid::Relations::Eager::HasAndBelongsToMany do
|
|
63
63
|
context "when the relation is not polymorphic" do
|
64
64
|
|
65
65
|
let(:eager) do
|
66
|
-
Person.includes(:preferences).last
|
66
|
+
Person.asc(:_id).includes(:preferences).last
|
67
67
|
end
|
68
68
|
|
69
69
|
context "when the eager load has returned documents" do
|
@@ -3873,7 +3873,7 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3873
3873
|
before do
|
3874
3874
|
band.collection.
|
3875
3875
|
find(_id: band.id).
|
3876
|
-
|
3876
|
+
update_one("$set" => { records: [{ name: "Moderat" }]})
|
3877
3877
|
end
|
3878
3878
|
|
3879
3879
|
context "when loading the documents" do
|
@@ -3933,4 +3933,126 @@ describe Mongoid::Relations::Embedded::Many do
|
|
3933
3933
|
expect(loaded.extension).to eq("Testing")
|
3934
3934
|
end
|
3935
3935
|
end
|
3936
|
+
|
3937
|
+
context "deleting embedded documents" do
|
3938
|
+
|
3939
|
+
it "able to delete embedded documents upon condition" do
|
3940
|
+
company = Company.new
|
3941
|
+
4.times { |i| company.staffs << Staff.new(age: 50 + i)}
|
3942
|
+
2.times { |i| company.staffs << Staff.new(age: 40)}
|
3943
|
+
company.save
|
3944
|
+
company.staffs.delete_if {|x| x.age >= 50}
|
3945
|
+
expect(company.staffs.count).to eq(2)
|
3946
|
+
end
|
3947
|
+
end
|
3948
|
+
|
3949
|
+
context "when substituting polymorphic documents" do
|
3950
|
+
|
3951
|
+
before(:all) do
|
3952
|
+
class DNS; end
|
3953
|
+
|
3954
|
+
class DNS::Zone
|
3955
|
+
include Mongoid::Document
|
3956
|
+
embeds_many :rrsets, class_name: 'DNS::RRSet', inverse_of: :zone
|
3957
|
+
embeds_one :soa, class_name: 'DNS::Record', as: :container
|
3958
|
+
end
|
3959
|
+
|
3960
|
+
class DNS::RRSet
|
3961
|
+
include Mongoid::Document
|
3962
|
+
embedded_in :zone, class_name: 'DNS::Zone', inverse_of: :rrsets
|
3963
|
+
embeds_many :records, class_name: 'DNS::Record', as: :container
|
3964
|
+
end
|
3965
|
+
|
3966
|
+
class DNS::Record
|
3967
|
+
include Mongoid::Document
|
3968
|
+
embedded_in :container, polymorphic: true
|
3969
|
+
end
|
3970
|
+
end
|
3971
|
+
|
3972
|
+
after(:all) do
|
3973
|
+
Object.send(:remove_const, :DNS)
|
3974
|
+
end
|
3975
|
+
|
3976
|
+
context "when the parent is new" do
|
3977
|
+
|
3978
|
+
let(:zone) do
|
3979
|
+
DNS::Zone.new
|
3980
|
+
end
|
3981
|
+
|
3982
|
+
let(:soa_1) do
|
3983
|
+
DNS::Record.new
|
3984
|
+
end
|
3985
|
+
|
3986
|
+
context "when replacing the set document" do
|
3987
|
+
|
3988
|
+
let(:soa_2) do
|
3989
|
+
DNS::Record.new
|
3990
|
+
end
|
3991
|
+
|
3992
|
+
before do
|
3993
|
+
zone.soa = soa_1
|
3994
|
+
end
|
3995
|
+
|
3996
|
+
it "properly sets the metadata" do
|
3997
|
+
expect(zone.soa = soa_2).to eq(soa_2)
|
3998
|
+
end
|
3999
|
+
end
|
4000
|
+
|
4001
|
+
context "when deleting the set document" do
|
4002
|
+
|
4003
|
+
let(:soa_2) do
|
4004
|
+
DNS::Record.new
|
4005
|
+
end
|
4006
|
+
|
4007
|
+
before do
|
4008
|
+
zone.soa = soa_1
|
4009
|
+
end
|
4010
|
+
|
4011
|
+
it "properly sets the metadata" do
|
4012
|
+
expect(zone.soa.delete).to be true
|
4013
|
+
end
|
4014
|
+
end
|
4015
|
+
end
|
4016
|
+
|
4017
|
+
context "when the parent is persisted" do
|
4018
|
+
|
4019
|
+
let(:zone) do
|
4020
|
+
DNS::Zone.create
|
4021
|
+
end
|
4022
|
+
|
4023
|
+
let(:soa_1) do
|
4024
|
+
DNS::Record.new
|
4025
|
+
end
|
4026
|
+
|
4027
|
+
context "when replacing the set document" do
|
4028
|
+
|
4029
|
+
let(:soa_2) do
|
4030
|
+
DNS::Record.new
|
4031
|
+
end
|
4032
|
+
|
4033
|
+
before do
|
4034
|
+
zone.soa = soa_1
|
4035
|
+
end
|
4036
|
+
|
4037
|
+
it "properly sets the metadata" do
|
4038
|
+
expect(zone.soa = soa_2).to eq(soa_2)
|
4039
|
+
end
|
4040
|
+
end
|
4041
|
+
|
4042
|
+
context "when deleting the set document" do
|
4043
|
+
|
4044
|
+
let(:soa_2) do
|
4045
|
+
DNS::Record.new
|
4046
|
+
end
|
4047
|
+
|
4048
|
+
before do
|
4049
|
+
zone.soa = soa_1
|
4050
|
+
end
|
4051
|
+
|
4052
|
+
it "properly sets the metadata" do
|
4053
|
+
expect(zone.soa.delete).to be true
|
4054
|
+
end
|
4055
|
+
end
|
4056
|
+
end
|
4057
|
+
end
|
3936
4058
|
end
|
@@ -947,7 +947,7 @@ describe Mongoid::Relations::Embedded::One do
|
|
947
947
|
context "when a parent was removed outside of mongoid" do
|
948
948
|
|
949
949
|
before do
|
950
|
-
person.collection.
|
950
|
+
person.collection.find(_id: person.id).update_one(
|
951
951
|
"$pull" => { "addresses" => { _id: address_one.id }}
|
952
952
|
)
|
953
953
|
end
|
@@ -963,7 +963,7 @@ describe Mongoid::Relations::Embedded::One do
|
|
963
963
|
end
|
964
964
|
|
965
965
|
before do
|
966
|
-
|
966
|
+
person.reload.addresses.first.code = code
|
967
967
|
end
|
968
968
|
|
969
969
|
it "reloads the correct number" do
|
@@ -982,7 +982,7 @@ describe Mongoid::Relations::Embedded::One do
|
|
982
982
|
before do
|
983
983
|
band.collection.
|
984
984
|
find(_id: band.id).
|
985
|
-
|
985
|
+
update_one("$set" => { label: { name: "Mute" }})
|
986
986
|
end
|
987
987
|
|
988
988
|
context "when loading the documents" do
|
@@ -2,6 +2,34 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Mongoid::Relations::Proxy do
|
4
4
|
|
5
|
+
describe "#find" do
|
6
|
+
let(:person) do
|
7
|
+
Person.create
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:messages) do
|
11
|
+
person.messages
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:msg1) do
|
15
|
+
messages.create(body: 'msg1')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns nil with no arguments" do
|
19
|
+
expect(messages.find).to be_nil
|
20
|
+
expect(messages.send(:find)).to be_nil
|
21
|
+
expect(messages.__send__(:find)).to be_nil
|
22
|
+
expect(messages.public_send(:find)).to be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns the object corresponding to the id" do
|
26
|
+
expect(messages.find(msg1.id)).to eq(msg1)
|
27
|
+
expect(messages.send(:find, msg1.id)).to eq(msg1)
|
28
|
+
expect(messages.__send__(:find, msg1.id)).to eq(msg1)
|
29
|
+
expect(messages.public_send(:find, msg1.id)).to eq(msg1)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
5
33
|
describe "#extend" do
|
6
34
|
|
7
35
|
before(:all) do
|
@@ -1240,7 +1240,7 @@ describe Mongoid::Relations::Referenced::In do
|
|
1240
1240
|
|
1241
1241
|
before do
|
1242
1242
|
Person.collection.find({ _id: person_one.id }).
|
1243
|
-
|
1243
|
+
update_one({ "$set" => { title: "Madam" }})
|
1244
1244
|
end
|
1245
1245
|
|
1246
1246
|
let(:reloaded) do
|
@@ -292,7 +292,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
292
292
|
it "raises an error" do
|
293
293
|
expect {
|
294
294
|
person.posts.send(method, post)
|
295
|
-
}.to raise_error(
|
295
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
296
296
|
end
|
297
297
|
end
|
298
298
|
end
|
@@ -1536,7 +1536,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
1536
1536
|
person.posts.create do |doc|
|
1537
1537
|
doc._id = existing.id
|
1538
1538
|
end
|
1539
|
-
}.to raise_error(
|
1539
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
1540
1540
|
end
|
1541
1541
|
end
|
1542
1542
|
end
|
@@ -2164,30 +2164,24 @@ describe Mongoid::Relations::Referenced::Many do
|
|
2164
2164
|
|
2165
2165
|
describe "#find" do
|
2166
2166
|
|
2167
|
-
context "when
|
2167
|
+
context "when iterating after the find" do
|
2168
2168
|
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
Person.create
|
2173
|
-
end
|
2174
|
-
|
2175
|
-
before do
|
2176
|
-
person.posts.create(title: "Test")
|
2177
|
-
end
|
2169
|
+
let(:person) do
|
2170
|
+
Person.create!
|
2171
|
+
end
|
2178
2172
|
|
2179
|
-
|
2173
|
+
let(:post_id) do
|
2174
|
+
person.posts.first.id
|
2175
|
+
end
|
2180
2176
|
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2177
|
+
before do
|
2178
|
+
5.times { person.posts.create! }
|
2179
|
+
end
|
2184
2180
|
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
end
|
2190
|
-
end
|
2181
|
+
it "does not change the in memory size" do
|
2182
|
+
expect {
|
2183
|
+
person.posts.find(post_id)
|
2184
|
+
}.not_to change { person.posts.to_a.size }
|
2191
2185
|
end
|
2192
2186
|
end
|
2193
2187
|
|
@@ -2807,6 +2801,35 @@ describe Mongoid::Relations::Referenced::Many do
|
|
2807
2801
|
end
|
2808
2802
|
end
|
2809
2803
|
|
2804
|
+
describe "#last" do
|
2805
|
+
|
2806
|
+
let(:person) do
|
2807
|
+
Person.create!
|
2808
|
+
end
|
2809
|
+
|
2810
|
+
let!(:persisted_post) do
|
2811
|
+
person.posts.create!
|
2812
|
+
end
|
2813
|
+
|
2814
|
+
context "when a new document is added" do
|
2815
|
+
|
2816
|
+
let!(:new_post) do
|
2817
|
+
person.posts.new
|
2818
|
+
end
|
2819
|
+
|
2820
|
+
context "when the target is subsequently loaded" do
|
2821
|
+
|
2822
|
+
before do
|
2823
|
+
person.posts.entries
|
2824
|
+
end
|
2825
|
+
|
2826
|
+
it "returns the expected last document" do
|
2827
|
+
expect(person.posts.last).to eq(new_post)
|
2828
|
+
end
|
2829
|
+
end
|
2830
|
+
end
|
2831
|
+
end
|
2832
|
+
|
2810
2833
|
describe ".macro" do
|
2811
2834
|
|
2812
2835
|
it "returns has_many" do
|
@@ -3344,7 +3367,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3344
3367
|
|
3345
3368
|
before do
|
3346
3369
|
Post.collection.find({ _id: post_one.id }).
|
3347
|
-
|
3370
|
+
update_one({ "$set" => { title: "reloaded" }})
|
3348
3371
|
end
|
3349
3372
|
|
3350
3373
|
let(:reloaded) do
|
@@ -3687,6 +3710,7 @@ describe Mongoid::Relations::Referenced::Many do
|
|
3687
3710
|
end
|
3688
3711
|
|
3689
3712
|
context "when accessing a relation named parent" do
|
3713
|
+
|
3690
3714
|
let!(:parent) do
|
3691
3715
|
Odd.create(name: "odd parent")
|
3692
3716
|
end
|
@@ -3274,7 +3274,7 @@ describe Mongoid::Relations::Referenced::ManyToMany do
|
|
3274
3274
|
|
3275
3275
|
before do
|
3276
3276
|
Preference.collection.find({ _id: preference_one.id }).
|
3277
|
-
|
3277
|
+
update_one({ "$set" => { name: "reloaded" }})
|
3278
3278
|
end
|
3279
3279
|
|
3280
3280
|
let(:reloaded) do
|
@@ -1178,7 +1178,7 @@ describe Mongoid::Relations::Referenced::One do
|
|
1178
1178
|
|
1179
1179
|
before do
|
1180
1180
|
Game.collection.find({ _id: game_one.id }).
|
1181
|
-
|
1181
|
+
update_one({ "$set" => { name: "Diablo 2" }})
|
1182
1182
|
end
|
1183
1183
|
|
1184
1184
|
let(:reloaded) do
|
@@ -122,6 +122,13 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
+
context "when compared to an enumerable class" do
|
126
|
+
|
127
|
+
it "returns true" do
|
128
|
+
expect(enumerable === described_class).to be true
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
125
132
|
context "when compared to a different class" do
|
126
133
|
|
127
134
|
it "returns false" do
|
@@ -1186,7 +1193,7 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
1186
1193
|
context "when the enumerable is not loaded" do
|
1187
1194
|
|
1188
1195
|
let(:criteria) do
|
1189
|
-
Post.where(person_id: person.id)
|
1196
|
+
Post.asc(:_id).where(person_id: person.id)
|
1190
1197
|
end
|
1191
1198
|
|
1192
1199
|
let(:enumerable) do
|
@@ -1272,7 +1279,7 @@ describe Mongoid::Relations::Targets::Enumerable do
|
|
1272
1279
|
context "when accessing from a reloaded child" do
|
1273
1280
|
|
1274
1281
|
it "returns the last document" do
|
1275
|
-
expect(post_one.reload.person.posts.last).to eq(post_two)
|
1282
|
+
expect(post_one.reload.person.posts.asc(:_id).last).to eq(post_two)
|
1276
1283
|
end
|
1277
1284
|
end
|
1278
1285
|
end
|
@@ -115,7 +115,7 @@ describe Mongoid::Reloadable do
|
|
115
115
|
before do
|
116
116
|
Person.collection.find(
|
117
117
|
{ "_id" => person.id }
|
118
|
-
).
|
118
|
+
).update_one({ "$set" => { "addresses.0.number" => 3 }})
|
119
119
|
end
|
120
120
|
|
121
121
|
let!(:reloaded) do
|
@@ -143,7 +143,7 @@ describe Mongoid::Reloadable do
|
|
143
143
|
|
144
144
|
before do
|
145
145
|
Person.collection.find({ "_id" => person.id }).
|
146
|
-
|
146
|
+
update_one({ "$set" => { "name.last_name" => "Vicious" }})
|
147
147
|
end
|
148
148
|
|
149
149
|
let!(:reloaded) do
|
@@ -176,7 +176,7 @@ describe Mongoid::Reloadable do
|
|
176
176
|
|
177
177
|
before do
|
178
178
|
Person.collection.find({ "_id" => person.id }).
|
179
|
-
|
179
|
+
update_one({ "$set" => { "addresses.0.locations.0.name" => "work" }})
|
180
180
|
end
|
181
181
|
|
182
182
|
let!(:reloaded) do
|
@@ -209,7 +209,7 @@ describe Mongoid::Reloadable do
|
|
209
209
|
|
210
210
|
before do
|
211
211
|
Person.collection.find({ "_id" => person.id }).
|
212
|
-
|
212
|
+
update_one({ "$set" => { "addresses" => [] }})
|
213
213
|
person.reload
|
214
214
|
end
|
215
215
|
|
@@ -232,7 +232,7 @@ describe Mongoid::Reloadable do
|
|
232
232
|
|
233
233
|
before do
|
234
234
|
Game.collection.find({ "_id" => game.id }).
|
235
|
-
|
235
|
+
update_one({ "$set" => { "score" => 75 }})
|
236
236
|
person.reload
|
237
237
|
end
|
238
238
|
|
@@ -251,7 +251,7 @@ describe Mongoid::Reloadable do
|
|
251
251
|
|
252
252
|
before do
|
253
253
|
Person.collection.find({ "_id" => person.id }).
|
254
|
-
|
254
|
+
update_one({ "$set" => { "title" => "Mam" }})
|
255
255
|
game.reload
|
256
256
|
end
|
257
257
|
|