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
@@ -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