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.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -1
  3. data/README.md +14 -13
  4. data/lib/config/locales/en.yml +28 -28
  5. data/lib/mongoid.rb +28 -21
  6. data/lib/mongoid/atomic.rb +2 -4
  7. data/lib/mongoid/attributes.rb +7 -7
  8. data/lib/mongoid/attributes/processing.rb +4 -1
  9. data/lib/mongoid/attributes/readonly.rb +2 -2
  10. data/lib/mongoid/changeable.rb +4 -6
  11. data/lib/mongoid/clients.rb +142 -0
  12. data/lib/mongoid/clients/factory.rb +78 -0
  13. data/lib/mongoid/{sessions → clients}/options.rb +30 -19
  14. data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
  15. data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
  16. data/lib/mongoid/clients/validators.rb +2 -0
  17. data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
  18. data/lib/mongoid/composable.rb +3 -3
  19. data/lib/mongoid/config.rb +39 -41
  20. data/lib/mongoid/config/environment.rb +1 -1
  21. data/lib/mongoid/config/validators.rb +1 -1
  22. data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
  23. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  24. data/lib/mongoid/contextual/atomic.rb +11 -11
  25. data/lib/mongoid/contextual/command.rb +9 -6
  26. data/lib/mongoid/contextual/geo_near.rb +17 -1
  27. data/lib/mongoid/contextual/map_reduce.rb +12 -11
  28. data/lib/mongoid/contextual/memory.rb +2 -5
  29. data/lib/mongoid/contextual/mongo.rb +92 -82
  30. data/lib/mongoid/contextual/none.rb +13 -0
  31. data/lib/mongoid/copyable.rb +6 -1
  32. data/lib/mongoid/criteria.rb +36 -3
  33. data/lib/mongoid/document.rb +3 -4
  34. data/lib/mongoid/errors.rb +6 -6
  35. data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
  36. data/lib/mongoid/errors/no_client_config.rb +22 -0
  37. data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
  38. data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
  39. data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
  40. data/lib/mongoid/errors/no_default_client.rb +23 -0
  41. data/lib/mongoid/extensions/hash.rb +5 -1
  42. data/lib/mongoid/extensions/object.rb +3 -2
  43. data/lib/mongoid/extensions/set.rb +5 -5
  44. data/lib/mongoid/factory.rb +4 -2
  45. data/lib/mongoid/fields.rb +7 -2
  46. data/lib/mongoid/findable.rb +4 -1
  47. data/lib/mongoid/indexable.rb +15 -9
  48. data/lib/mongoid/persistable.rb +1 -2
  49. data/lib/mongoid/persistable/creatable.rb +2 -2
  50. data/lib/mongoid/persistable/deletable.rb +3 -3
  51. data/lib/mongoid/persistable/incrementable.rb +1 -1
  52. data/lib/mongoid/persistable/logical.rb +1 -1
  53. data/lib/mongoid/persistable/poppable.rb +1 -1
  54. data/lib/mongoid/persistable/pullable.rb +2 -2
  55. data/lib/mongoid/persistable/pushable.rb +2 -2
  56. data/lib/mongoid/persistable/renamable.rb +1 -1
  57. data/lib/mongoid/persistable/settable.rb +1 -1
  58. data/lib/mongoid/persistable/unsettable.rb +1 -1
  59. data/lib/mongoid/persistable/updatable.rb +2 -2
  60. data/lib/mongoid/persistable/upsertable.rb +1 -1
  61. data/lib/mongoid/query_cache.rb +98 -104
  62. data/lib/mongoid/railtie.rb +1 -21
  63. data/lib/mongoid/railties/database.rake +1 -1
  64. data/lib/mongoid/relations/builders.rb +3 -1
  65. data/lib/mongoid/relations/counter_cache.rb +1 -1
  66. data/lib/mongoid/relations/embedded/batchable.rb +3 -10
  67. data/lib/mongoid/relations/embedded/many.rb +4 -2
  68. data/lib/mongoid/relations/many.rb +1 -0
  69. data/lib/mongoid/relations/proxy.rb +6 -6
  70. data/lib/mongoid/relations/referenced/many.rb +2 -1
  71. data/lib/mongoid/relations/targets/enumerable.rb +11 -11
  72. data/lib/mongoid/relations/touchable.rb +1 -1
  73. data/lib/mongoid/reloadable.rb +2 -2
  74. data/lib/mongoid/scopable.rb +6 -17
  75. data/lib/mongoid/selectable.rb +1 -36
  76. data/lib/mongoid/serializable.rb +2 -2
  77. data/lib/mongoid/stateful.rb +0 -1
  78. data/lib/mongoid/tasks/database.rake +2 -2
  79. data/lib/mongoid/tasks/database.rb +23 -16
  80. data/lib/mongoid/threaded.rb +54 -33
  81. data/lib/mongoid/threaded/lifecycle.rb +21 -16
  82. data/lib/mongoid/traversable.rb +16 -1
  83. data/lib/mongoid/validatable.rb +1 -1
  84. data/lib/mongoid/validatable/queryable.rb +1 -1
  85. data/lib/mongoid/validatable/uniqueness.rb +3 -20
  86. data/lib/mongoid/version.rb +1 -1
  87. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
  88. data/lib/rails/mongoid.rb +2 -2
  89. data/spec/app/models/audio.rb +1 -1
  90. data/spec/app/models/band.rb +1 -0
  91. data/spec/app/models/company.rb +5 -0
  92. data/spec/app/models/label.rb +7 -0
  93. data/spec/app/models/pub.rb +6 -0
  94. data/spec/app/models/staff.rb +7 -0
  95. data/spec/app/models/store_as_dup_test1.rb +5 -0
  96. data/spec/app/models/store_as_dup_test2.rb +5 -0
  97. data/spec/config/mongoid.yml +7 -25
  98. data/spec/mongoid/atomic/paths_spec.rb +3 -11
  99. data/spec/mongoid/attributes/nested_spec.rb +16 -16
  100. data/spec/mongoid/attributes/readonly_spec.rb +80 -18
  101. data/spec/mongoid/attributes_spec.rb +3 -3
  102. data/spec/mongoid/changeable_spec.rb +70 -0
  103. data/spec/mongoid/clients/factory_spec.rb +284 -0
  104. data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
  105. data/spec/mongoid/clients_spec.rb +739 -0
  106. data/spec/mongoid/config/environment_spec.rb +14 -11
  107. data/spec/mongoid/config_spec.rb +33 -48
  108. data/spec/mongoid/contextual/atomic_spec.rb +1 -17
  109. data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
  110. data/spec/mongoid/contextual/mongo_spec.rb +26 -83
  111. data/spec/mongoid/contextual/none_spec.rb +15 -0
  112. data/spec/mongoid/copyable_spec.rb +35 -1
  113. data/spec/mongoid/criteria/findable_spec.rb +197 -0
  114. data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
  115. data/spec/mongoid/criteria_spec.rb +74 -91
  116. data/spec/mongoid/document_spec.rb +1 -1
  117. data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
  118. data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
  119. data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
  120. data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
  121. data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
  122. data/spec/mongoid/fields/localized_spec.rb +1 -0
  123. data/spec/mongoid/fields_spec.rb +1 -0
  124. data/spec/mongoid/findable_spec.rb +2 -23
  125. data/spec/mongoid/indexable_spec.rb +12 -8
  126. data/spec/mongoid/interceptable_spec.rb +15 -0
  127. data/spec/mongoid/persistable/settable_spec.rb +16 -0
  128. data/spec/mongoid/persistable/updatable_spec.rb +3 -2
  129. data/spec/mongoid/persistable_spec.rb +4 -4
  130. data/spec/mongoid/query_cache_spec.rb +13 -8
  131. data/spec/mongoid/relations/auto_save_spec.rb +1 -1
  132. data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
  133. data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
  134. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
  135. data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
  136. data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
  137. data/spec/mongoid/relations/proxy_spec.rb +28 -0
  138. data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
  139. data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
  140. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
  141. data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
  142. data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
  143. data/spec/mongoid/reloadable_spec.rb +6 -6
  144. data/spec/mongoid/scopable_spec.rb +41 -28
  145. data/spec/mongoid/selectable_spec.rb +6 -16
  146. data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
  147. data/spec/mongoid/tasks/database_spec.rb +2 -2
  148. data/spec/mongoid/threaded_spec.rb +0 -7
  149. data/spec/mongoid/traversable_spec.rb +2 -2
  150. data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
  151. data/spec/mongoid_spec.rb +13 -15
  152. data/spec/rails/mongoid_spec.rb +13 -4
  153. data/spec/spec_helper.rb +44 -27
  154. data/spec/support/authorization.rb +12 -0
  155. data/spec/support/expectations.rb +14 -0
  156. metadata +52 -59
  157. data/lib/mongoid/contextual/find_and_modify.rb +0 -69
  158. data/lib/mongoid/contextual/text_search.rb +0 -178
  159. data/lib/mongoid/criteria/#findable.rb# +0 -141
  160. data/lib/mongoid/errors/no_default_session.rb +0 -23
  161. data/lib/mongoid/errors/no_session_config.rb +0 -22
  162. data/lib/mongoid/log_subscriber.rb +0 -55
  163. data/lib/mongoid/positional.rb +0 -71
  164. data/lib/mongoid/sessions.rb +0 -125
  165. data/lib/mongoid/sessions/factory.rb +0 -131
  166. data/lib/mongoid/sessions/mongo_uri.rb +0 -93
  167. data/lib/mongoid/sessions/validators.rb +0 -2
  168. data/lib/mongoid/support/query_counter.rb +0 -23
  169. data/spec/helpers.rb +0 -18
  170. data/spec/mongoid/#atomic_spec.rb# +0 -365
  171. data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
  172. data/spec/mongoid/contextual/text_search_spec.rb +0 -209
  173. data/spec/mongoid/log_subscriber_spec.rb +0 -75
  174. data/spec/mongoid/positional_spec.rb +0 -222
  175. data/spec/mongoid/sessions/factory_spec.rb +0 -333
  176. data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
  177. 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.all.includes(:houses).each do |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.all.includes(:houses).each do |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
- update("$set" => { records: [{ name: "Moderat" }]})
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.where(_id: person.id).update(
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
- address_two.code = code
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
- update("$set" => { label: { name: "Mute" }})
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
- update({ "$set" => { title: "Madam" }})
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(Moped::Errors::OperationFailure)
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(Moped::Errors::OperationFailure)
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 the identity map is enabled" do
2167
+ context "when iterating after the find" do
2168
2168
 
2169
- context "when the document is in the map" do
2170
-
2171
- let(:person) do
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
- context "when the document does not belong to the relation" do
2173
+ let(:post_id) do
2174
+ person.posts.first.id
2175
+ end
2180
2176
 
2181
- let!(:post) do
2182
- Post.create(title: "testing")
2183
- end
2177
+ before do
2178
+ 5.times { person.posts.create! }
2179
+ end
2184
2180
 
2185
- it "raises an error" do
2186
- expect {
2187
- person.posts.find(post.id)
2188
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
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
- update({ "$set" => { title: "reloaded" }})
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
- update({ "$set" => { name: "reloaded" }})
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
- update({ "$set" => { name: "Diablo 2" }})
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
- ).update({ "$set" => { "addresses.0.number" => 3 }})
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
- update({ "$set" => { "name.last_name" => "Vicious" }})
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
- update({ "$set" => { "addresses.0.locations.0.name" => "work" }})
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
- update({ "$set" => { "addresses" => [] }})
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
- update({ "$set" => { "score" => 75 }})
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
- update({ "$set" => { "title" => "Mam" }})
254
+ update_one({ "$set" => { "title" => "Mam" }})
255
255
  game.reload
256
256
  end
257
257