mongoid 4.0.2 → 5.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -251,7 +251,7 @@ describe Mongoid::Document do
251
251
  end
252
252
 
253
253
  it "does not set the default scoping" do
254
- expect(audio.likes).to be_nil
254
+ expect(audio.attributes.except('_id')).to be_empty
255
255
  end
256
256
  end
257
257
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Errors::MixedSessionConfiguration do
3
+ describe Mongoid::Errors::MixedClientConfiguration do
4
4
 
5
5
  describe "#message" do
6
6
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Errors::NoSessionConfig do
3
+ describe Mongoid::Errors::NoClientConfig do
4
4
 
5
5
  describe "#message" do
6
6
 
@@ -10,19 +10,19 @@ describe Mongoid::Errors::NoSessionConfig do
10
10
 
11
11
  it "contains the problem in the message" do
12
12
  expect(error.message).to include(
13
- "No configuration could be found for a session named 'secondary'."
13
+ "No configuration could be found for a client named 'secondary'."
14
14
  )
15
15
  end
16
16
 
17
17
  it "contains the summary in the message" do
18
18
  expect(error.message).to include(
19
- "When attempting to create the new session, Mongoid could not find a session"
19
+ "When attempting to create the new client, Mongoid could not find a client"
20
20
  )
21
21
  end
22
22
 
23
23
  it "contains the resolution in the message" do
24
24
  expect(error.message).to include(
25
- "Double check your mongoid.yml to make sure under the sessions"
25
+ "Double check your mongoid.yml to make sure under the clients"
26
26
  )
27
27
  end
28
28
  end
@@ -1,22 +1,22 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Errors::NoSessionDatabase do
3
+ describe Mongoid::Errors::NoClientDatabase do
4
4
 
5
5
  describe "#message" do
6
6
 
7
7
  let(:error) do
8
- described_class.new(:secondary, { hosts: [ "localhost:27017" ] })
8
+ described_class.new(:secondary, { hosts: [ "127.0.0.1:27017" ] })
9
9
  end
10
10
 
11
11
  it "contains the problem in the message" do
12
12
  expect(error.message).to include(
13
- "No database provided for session configuration: :secondary."
13
+ "No database provided for client configuration: :secondary."
14
14
  )
15
15
  end
16
16
 
17
17
  it "contains the summary in the message" do
18
18
  expect(error.message).to include(
19
- "Each session configuration must provide a database so Mongoid"
19
+ "Each client configuration must provide a database so Mongoid"
20
20
  )
21
21
  end
22
22
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Errors::NoSessionHosts do
3
+ describe Mongoid::Errors::NoClientHosts do
4
4
 
5
5
  describe "#message" do
6
6
 
@@ -10,13 +10,13 @@ describe Mongoid::Errors::NoSessionHosts do
10
10
 
11
11
  it "contains the problem in the message" do
12
12
  expect(error.message).to include(
13
- "No hosts provided for session configuration: :secondary."
13
+ "No hosts provided for client configuration: :secondary."
14
14
  )
15
15
  end
16
16
 
17
17
  it "contains the summary in the message" do
18
18
  expect(error.message).to include(
19
- "Each session configuration must provide hosts so Mongoid"
19
+ "Each client configuration must provide hosts so Mongoid"
20
20
  )
21
21
  end
22
22
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Errors::NoSessionsConfig do
3
+ describe Mongoid::Errors::NoClientsConfig do
4
4
 
5
5
  describe "#message" do
6
6
 
@@ -10,7 +10,7 @@ describe Mongoid::Errors::NoSessionsConfig do
10
10
 
11
11
  it "contains the problem in the message" do
12
12
  expect(error.message).to include(
13
- "No sessions configuration provided."
13
+ "No clients configuration provided."
14
14
  )
15
15
  end
16
16
 
@@ -81,6 +81,7 @@ describe Mongoid::Fields::Localized do
81
81
  context "when a locale is provided" do
82
82
 
83
83
  before do
84
+ I18n.enforce_available_locales = false
84
85
  ::I18n.locale = :de
85
86
  end
86
87
 
@@ -18,6 +18,7 @@ describe Mongoid::Fields do
18
18
 
19
19
  before do
20
20
  product.description = "test"
21
+ I18n.enforce_available_locales = false
21
22
  ::I18n.locale = :de
22
23
  product.description = "The best"
23
24
  end
@@ -40,14 +40,14 @@ describe Mongoid::Findable do
40
40
  end
41
41
  end
42
42
 
43
- describe ".find_and_modify" do
43
+ describe ".find_one_and_update" do
44
44
 
45
45
  let!(:person) do
46
46
  Person.create(title: "Senior")
47
47
  end
48
48
 
49
49
  it "returns the document" do
50
- expect(Person.find_and_modify(title: "Junior")).to eq(person)
50
+ expect(Person.find_one_and_update(title: "Junior")).to eq(person)
51
51
  end
52
52
  end
53
53
 
@@ -485,25 +485,4 @@ describe Mongoid::Findable do
485
485
  end
486
486
  end
487
487
  end
488
-
489
- describe "#text_search" do
490
-
491
- before do
492
- Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
493
- Word.create_indexes
494
- Word.create!(name: "phase", origin: "latin")
495
- end
496
-
497
- after(:all) do
498
- Word.remove_indexes
499
- end
500
-
501
- let(:search) do
502
- Word.text_search("phase")
503
- end
504
-
505
- it "returns all fields" do
506
- expect(search.first.origin).to eq("latin")
507
- end
508
- end
509
488
  end
@@ -41,13 +41,13 @@ describe Mongoid::Indexable do
41
41
  end
42
42
  end
43
43
 
44
- context "when database specific options exist" do
44
+ context "when database specific options exist", if: non_legacy_server? do
45
45
 
46
46
  let(:klass) do
47
47
  Class.new do
48
48
  include Mongoid::Document
49
49
  store_in collection: "test_db_remove"
50
- index({ test: 1 }, { database: "mia_2" })
50
+ index({ test: 1 }, { database: "mongoid_optional" })
51
51
  index({ name: 1 }, { background: true })
52
52
  end
53
53
  end
@@ -58,7 +58,7 @@ describe Mongoid::Indexable do
58
58
  end
59
59
 
60
60
  let(:indexes) do
61
- klass.with(database: "mia_2").collection.indexes
61
+ klass.with(database: "mongoid_optional").collection.indexes
62
62
  end
63
63
 
64
64
  it "creates the indexes" do
@@ -84,17 +84,17 @@ describe Mongoid::Indexable do
84
84
  end
85
85
 
86
86
  it "creates the indexes" do
87
- expect(klass.collection.indexes[_type: 1]).to_not be_nil
87
+ expect(klass.collection.indexes.get(_type: 1)).to_not be_nil
88
88
  end
89
89
  end
90
90
 
91
- context "when database options are specified" do
91
+ context "when database options are specified", if: non_legacy_server? do
92
92
 
93
93
  let(:klass) do
94
94
  Class.new do
95
95
  include Mongoid::Document
96
96
  store_in collection: "test_db_indexes"
97
- index({ _type: 1 }, { database: "mia_1" })
97
+ index({ _type: 1 }, { database: "mongoid_optional" })
98
98
  end
99
99
  end
100
100
 
@@ -102,12 +102,16 @@ describe Mongoid::Indexable do
102
102
  klass.create_indexes
103
103
  end
104
104
 
105
+ after do
106
+ klass.remove_indexes
107
+ end
108
+
105
109
  let(:indexes) do
106
- klass.with(database: "mia_1").collection.indexes
110
+ klass.with(database: "mongoid_optional").collection.indexes
107
111
  end
108
112
 
109
113
  it "creates the indexes" do
110
- expect(indexes[_type: 1]).to_not be_nil
114
+ expect(indexes.get(_type: 1)).to_not be_nil
111
115
  end
112
116
  end
113
117
  end
@@ -929,6 +929,21 @@ describe Mongoid::Interceptable do
929
929
  expect(band.reload.records.first.before_save_called).to be true
930
930
  end
931
931
  end
932
+
933
+ context "when the child is created" do
934
+
935
+ let!(:band) do
936
+ Band.create
937
+ end
938
+
939
+ let!(:label) do
940
+ band.create_label(name: 'Label')
941
+ end
942
+
943
+ it "only executes callback once" do
944
+ expect(label.before_save_count).to be 1
945
+ end
946
+ end
932
947
  end
933
948
 
934
949
  describe "#before_update" do
@@ -159,4 +159,20 @@ describe Mongoid::Persistable::Settable do
159
159
  expect(person.reload.somethingnew).to eq "somethingnew"
160
160
  end
161
161
  end
162
+
163
+ context "with an attribute with private setter" do
164
+ let(:agent) do
165
+ Agent.create
166
+ end
167
+
168
+ let(:title) do
169
+ "Double-Oh Seven"
170
+ end
171
+
172
+ it "updates the attribute" do
173
+ agent.singleton_class.send :private, :title=
174
+ agent.set(title: title)
175
+ expect(agent.reload.title).to eq title
176
+ end
177
+ end
162
178
  end
@@ -217,6 +217,7 @@ describe Mongoid::Persistable::Updatable do
217
217
  end
218
218
 
219
219
  before do
220
+ I18n.enforce_available_locales = false
220
221
  ::I18n.locale = :de
221
222
  product.update_attribute(:description, "Die Bombe")
222
223
  end
@@ -283,7 +284,7 @@ describe Mongoid::Persistable::Updatable do
283
284
  it "raises an error" do
284
285
  expect {
285
286
  person.update_attributes(map: { "bad.key" => "value" })
286
- }.to raise_error(Moped::Errors::OperationFailure)
287
+ }.to raise_error(Mongo::Error::OperationFailure)
287
288
  end
288
289
  end
289
290
 
@@ -319,7 +320,7 @@ describe Mongoid::Persistable::Updatable do
319
320
  it "raises an error" do
320
321
  expect {
321
322
  person.send(method, map: { "bad.key" => "value" })
322
- }.to raise_error(Moped::Errors::OperationFailure)
323
+ }.to raise_error(Mongo::Error::OperationFailure)
323
324
  end
324
325
  end
325
326
 
@@ -61,7 +61,7 @@ describe Mongoid::Persistable do
61
61
  end
62
62
 
63
63
  before do
64
- expect_any_instance_of(Moped::Query).to receive(:update).with(operations).and_call_original
64
+ expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
65
65
  end
66
66
 
67
67
  let!(:update) do
@@ -88,7 +88,7 @@ describe Mongoid::Persistable do
88
88
  end
89
89
 
90
90
  before do
91
- expect_any_instance_of(Moped::Query).to receive(:update).with(operations).and_call_original
91
+ expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
92
92
  end
93
93
 
94
94
  let!(:update) do
@@ -116,7 +116,7 @@ describe Mongoid::Persistable do
116
116
  end
117
117
 
118
118
  before do
119
- expect_any_instance_of(Moped::Query).to receive(:update).with(operations).and_call_original
119
+ expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
120
120
  end
121
121
 
122
122
  let!(:update) do
@@ -153,7 +153,7 @@ describe Mongoid::Persistable do
153
153
  end
154
154
 
155
155
  before do
156
- expect_any_instance_of(Moped::Query).to receive(:update).with(operations).and_call_original
156
+ expect_any_instance_of(Mongo::Collection::View).to receive(:update_one).with(operations).and_call_original
157
157
  end
158
158
 
159
159
  let!(:update) do
@@ -15,7 +15,7 @@ describe Mongoid::QueryCache do
15
15
  Band.all.send(method)
16
16
  end
17
17
 
18
- context "when query cache disable" do
18
+ context "when query cache is disabled" do
19
19
 
20
20
  before do
21
21
  Mongoid::QueryCache.enabled = false
@@ -54,7 +54,7 @@ describe Mongoid::QueryCache do
54
54
  Band.all.to_a
55
55
  end
56
56
 
57
- context "when query cache disable" do
57
+ context "when query cache is disabled" do
58
58
 
59
59
  before do
60
60
  Mongoid::QueryCache.enabled = false
@@ -76,20 +76,24 @@ describe Mongoid::QueryCache do
76
76
  end
77
77
 
78
78
  context "when querying only the first" do
79
- let(:game) { Game.create!(name: "2048") }
79
+
80
+ let(:game) do
81
+ Game.create!(name: "2048")
82
+ end
80
83
 
81
84
  before do
82
85
  game.ratings.where(:value.gt => 5).asc(:id).all.to_a
83
86
  end
84
87
 
85
- it "queries again" do
86
- expect_query(1) do
88
+ it "does not query again" do
89
+ expect_no_queries do
87
90
  game.ratings.where(:value.gt => 5).asc(:id).first
88
91
  end
89
92
  end
90
93
  end
91
94
 
92
- context "limiting the result" do
95
+ context "when limiting the result" do
96
+
93
97
  it "queries again" do
94
98
  expect_query(1) do
95
99
  Band.limit(2).all.to_a
@@ -97,7 +101,8 @@ describe Mongoid::QueryCache do
97
101
  end
98
102
  end
99
103
 
100
- context "specifying a different skip value" do
104
+ context "when specifying a different skip value" do
105
+
101
106
  before do
102
107
  Band.limit(2).skip(1).all.to_a
103
108
  end
@@ -213,7 +218,7 @@ describe Mongoid::QueryCache do
213
218
 
214
219
  it "does not cache the query" do
215
220
  expect(Mongoid::QueryCache).to receive(:cache_table).never
216
- Band.collection.indexes.create(name: 1)
221
+ Band.collection.indexes.create_one(name: 1)
217
222
  end
218
223
  end
219
224
  end
@@ -150,7 +150,7 @@ describe Mongoid::Relations::AutoSave do
150
150
  end
151
151
  end
152
152
 
153
- context "when updating the child" do
153
+ pending "when updating the child" do
154
154
 
155
155
  before do
156
156
  person.account = account
@@ -287,4 +287,38 @@ describe Mongoid::Relations::CounterCache do
287
287
  end
288
288
  end
289
289
  end
290
+
291
+ describe "#add_counter_cache_callbacks" do
292
+
293
+ let(:person) do
294
+ Person.create
295
+ end
296
+
297
+ let!(:drug) do
298
+ person.drugs.create
299
+ end
300
+
301
+ context "when parent is not frozen" do
302
+
303
+ before do
304
+ drug.destroy
305
+ end
306
+
307
+ it "before_destroy updates counter cache" do
308
+ expect(person.drugs_count).to eq(0)
309
+ end
310
+ end
311
+
312
+ context "when parent is frozen" do
313
+
314
+ before do
315
+ person.destroy
316
+ drug.destroy
317
+ end
318
+
319
+ it "before_destroy doesn't update counter cache" do
320
+ expect(person.drugs_count).to eq(1)
321
+ end
322
+ end
323
+ end
290
324
  end