mongoid 7.4.0 → 8.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (315) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +3 -3
  4. data/lib/config/locales/en.yml +51 -28
  5. data/lib/mongoid/association/accessors.rb +32 -3
  6. data/lib/mongoid/association/bindable.rb +48 -0
  7. data/lib/mongoid/association/builders.rb +4 -2
  8. data/lib/mongoid/association/eager_loadable.rb +29 -7
  9. data/lib/mongoid/association/embedded/batchable.rb +48 -8
  10. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  11. data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
  12. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  13. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  14. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
  15. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  16. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
  17. data/lib/mongoid/association/macros.rb +22 -1
  18. data/lib/mongoid/association/many.rb +5 -0
  19. data/lib/mongoid/association/nested/many.rb +2 -1
  20. data/lib/mongoid/association/proxy.rb +12 -0
  21. data/lib/mongoid/association/referenced/auto_save.rb +3 -2
  22. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  23. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  24. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  25. data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
  26. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
  28. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -14
  29. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  30. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  31. data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
  32. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  33. data/lib/mongoid/association/relatable.rb +38 -4
  34. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
  35. data/lib/mongoid/attributes/processing.rb +9 -2
  36. data/lib/mongoid/attributes.rb +30 -27
  37. data/lib/mongoid/changeable.rb +37 -2
  38. data/lib/mongoid/clients/options.rb +4 -0
  39. data/lib/mongoid/clients/sessions.rb +2 -14
  40. data/lib/mongoid/config/environment.rb +20 -4
  41. data/lib/mongoid/config.rb +25 -10
  42. data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
  43. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  44. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  45. data/lib/mongoid/contextual/memory.rb +176 -17
  46. data/lib/mongoid/contextual/mongo.rb +226 -206
  47. data/lib/mongoid/contextual/none.rb +66 -4
  48. data/lib/mongoid/copyable.rb +32 -8
  49. data/lib/mongoid/criteria/includable.rb +24 -20
  50. data/lib/mongoid/criteria/marshalable.rb +10 -2
  51. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -13
  52. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  53. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  54. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  55. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  56. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -14
  57. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  58. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  59. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  60. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
  61. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  62. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  63. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  64. data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
  65. data/lib/mongoid/criteria/queryable/optional.rb +3 -9
  66. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  67. data/lib/mongoid/criteria/queryable/selectable.rb +28 -34
  68. data/lib/mongoid/criteria/queryable/selector.rb +89 -4
  69. data/lib/mongoid/criteria/queryable/smash.rb +39 -6
  70. data/lib/mongoid/criteria/queryable.rb +11 -6
  71. data/lib/mongoid/criteria.rb +1 -26
  72. data/lib/mongoid/deprecable.rb +36 -0
  73. data/lib/mongoid/deprecation.rb +25 -0
  74. data/lib/mongoid/document.rb +96 -32
  75. data/lib/mongoid/errors/document_not_found.rb +29 -8
  76. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  77. data/lib/mongoid/errors/invalid_field.rb +5 -1
  78. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  79. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  80. data/lib/mongoid/errors.rb +2 -2
  81. data/lib/mongoid/extensions/array.rb +8 -6
  82. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  83. data/lib/mongoid/extensions/binary.rb +42 -0
  84. data/lib/mongoid/extensions/boolean.rb +8 -2
  85. data/lib/mongoid/extensions/date.rb +26 -20
  86. data/lib/mongoid/extensions/date_time.rb +1 -1
  87. data/lib/mongoid/extensions/float.rb +4 -5
  88. data/lib/mongoid/extensions/hash.rb +12 -5
  89. data/lib/mongoid/extensions/integer.rb +4 -5
  90. data/lib/mongoid/extensions/object.rb +2 -0
  91. data/lib/mongoid/extensions/range.rb +41 -10
  92. data/lib/mongoid/extensions/regexp.rb +11 -4
  93. data/lib/mongoid/extensions/set.rb +11 -4
  94. data/lib/mongoid/extensions/string.rb +2 -13
  95. data/lib/mongoid/extensions/symbol.rb +3 -14
  96. data/lib/mongoid/extensions/time.rb +27 -16
  97. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  98. data/lib/mongoid/extensions.rb +1 -0
  99. data/lib/mongoid/factory.rb +42 -7
  100. data/lib/mongoid/fields/foreign_key.rb +7 -0
  101. data/lib/mongoid/fields/validators/macro.rb +3 -9
  102. data/lib/mongoid/fields.rb +194 -28
  103. data/lib/mongoid/findable.rb +27 -7
  104. data/lib/mongoid/indexable/specification.rb +1 -1
  105. data/lib/mongoid/indexable/validators/options.rb +4 -1
  106. data/lib/mongoid/interceptable.rb +69 -9
  107. data/lib/mongoid/persistable/creatable.rb +14 -5
  108. data/lib/mongoid/persistable/updatable.rb +12 -5
  109. data/lib/mongoid/persistable/upsertable.rb +1 -1
  110. data/lib/mongoid/persistence_context.rb +19 -2
  111. data/lib/mongoid/query_cache.rb +6 -258
  112. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  113. data/lib/mongoid/reloadable.rb +7 -3
  114. data/lib/mongoid/selectable.rb +1 -2
  115. data/lib/mongoid/stateful.rb +27 -1
  116. data/lib/mongoid/timestamps/created.rb +1 -1
  117. data/lib/mongoid/timestamps/updated.rb +1 -1
  118. data/lib/mongoid/touchable.rb +2 -3
  119. data/lib/mongoid/traversable.rb +5 -1
  120. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  121. data/lib/mongoid/version.rb +1 -1
  122. data/lib/mongoid/warnings.rb +28 -0
  123. data/lib/mongoid.rb +2 -0
  124. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
  125. data/spec/config/mongoid.yml +16 -0
  126. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  127. data/spec/integration/app_spec.rb +28 -26
  128. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  129. data/spec/integration/associations/embedded_dirty_spec.rb +28 -0
  130. data/spec/integration/associations/embedded_spec.rb +15 -0
  131. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  132. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  133. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  134. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  135. data/spec/integration/associations/has_one_spec.rb +97 -1
  136. data/spec/integration/associations/scope_option_spec.rb +1 -1
  137. data/spec/integration/callbacks_models.rb +95 -1
  138. data/spec/integration/callbacks_spec.rb +226 -4
  139. data/spec/integration/criteria/range_spec.rb +95 -1
  140. data/spec/integration/discriminator_key_spec.rb +115 -76
  141. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  142. data/spec/integration/matcher_examples_spec.rb +20 -13
  143. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  144. data/spec/integration/matcher_operator_spec.rb +3 -5
  145. data/spec/integration/persistence/range_field_spec.rb +350 -0
  146. data/spec/lite_spec_helper.rb +1 -1
  147. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  148. data/spec/mongoid/association/depending_spec.rb +9 -9
  149. data/spec/mongoid/association/eager_spec.rb +2 -1
  150. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  151. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  152. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  153. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  154. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  155. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  156. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  157. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  158. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  159. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  160. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  161. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  162. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  163. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  164. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  165. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  166. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  167. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  168. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  169. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  170. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
  171. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  172. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  173. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  174. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  175. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  176. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  177. data/spec/mongoid/association/syncable_spec.rb +14 -0
  178. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  179. data/spec/mongoid/atomic_spec.rb +22 -0
  180. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  181. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  182. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  183. data/spec/mongoid/attributes_spec.rb +524 -27
  184. data/spec/mongoid/changeable_spec.rb +130 -13
  185. data/spec/mongoid/clients/factory_spec.rb +34 -42
  186. data/spec/mongoid/clients/options_spec.rb +1 -0
  187. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  188. data/spec/mongoid/clients_spec.rb +32 -2
  189. data/spec/mongoid/config/environment_spec.rb +39 -1
  190. data/spec/mongoid/config_spec.rb +104 -13
  191. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  192. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  193. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  194. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  195. data/spec/mongoid/contextual/memory_spec.rb +1337 -69
  196. data/spec/mongoid/contextual/mongo_spec.rb +1105 -172
  197. data/spec/mongoid/contextual/none_spec.rb +38 -0
  198. data/spec/mongoid/copyable_spec.rb +451 -1
  199. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  200. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  201. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  202. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  203. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  204. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  205. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  206. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  207. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  208. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  209. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  210. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  211. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  212. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  213. data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
  214. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  215. data/spec/mongoid/criteria_spec.rb +474 -1198
  216. data/spec/mongoid/document_fields_spec.rb +173 -24
  217. data/spec/mongoid/document_spec.rb +32 -41
  218. data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
  219. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  220. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  221. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  222. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  223. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  224. data/spec/mongoid/extensions/array_spec.rb +16 -2
  225. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  226. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  227. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  228. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  229. data/spec/mongoid/extensions/date_spec.rb +71 -1
  230. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  231. data/spec/mongoid/extensions/float_spec.rb +48 -76
  232. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  233. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  234. data/spec/mongoid/extensions/range_spec.rb +255 -54
  235. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  236. data/spec/mongoid/extensions/set_spec.rb +106 -0
  237. data/spec/mongoid/extensions/string_spec.rb +53 -25
  238. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  239. data/spec/mongoid/extensions/time_spec.rb +634 -66
  240. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  241. data/spec/mongoid/factory_spec.rb +61 -1
  242. data/spec/mongoid/fields_spec.rb +321 -50
  243. data/spec/mongoid/findable_spec.rb +80 -15
  244. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  245. data/spec/mongoid/indexable_spec.rb +16 -19
  246. data/spec/mongoid/interceptable_spec.rb +584 -5
  247. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  248. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  249. data/spec/mongoid/mongoizable_spec.rb +285 -0
  250. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  251. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  252. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  253. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  254. data/spec/mongoid/persistence_context_spec.rb +50 -1
  255. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  256. data/spec/mongoid/query_cache_spec.rb +0 -154
  257. data/spec/mongoid/reloadable_spec.rb +35 -2
  258. data/spec/mongoid/scopable_spec.rb +21 -1
  259. data/spec/mongoid/shardable_spec.rb +14 -0
  260. data/spec/mongoid/stateful_spec.rb +28 -0
  261. data/spec/mongoid/timestamps_spec.rb +390 -0
  262. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  263. data/spec/mongoid/touchable_spec.rb +116 -0
  264. data/spec/mongoid/touchable_spec_models.rb +12 -8
  265. data/spec/mongoid/traversable_spec.rb +4 -11
  266. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  267. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  268. data/spec/mongoid/warnings_spec.rb +35 -0
  269. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  270. data/spec/rails/mongoid_spec.rb +4 -16
  271. data/spec/shared/lib/mrss/constraints.rb +8 -16
  272. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  273. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  274. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  275. data/spec/shared/share/Dockerfile.erb +34 -48
  276. data/spec/shared/shlib/config.sh +27 -0
  277. data/spec/shared/shlib/server.sh +32 -19
  278. data/spec/shared/shlib/set_env.sh +37 -0
  279. data/spec/support/constraints.rb +24 -0
  280. data/spec/support/macros.rb +39 -0
  281. data/spec/support/models/augmentation.rb +12 -0
  282. data/spec/support/models/band.rb +3 -0
  283. data/spec/support/models/catalog.rb +24 -0
  284. data/spec/support/models/circus.rb +3 -0
  285. data/spec/support/models/code.rb +2 -0
  286. data/spec/support/models/fanatic.rb +8 -0
  287. data/spec/support/models/implant.rb +9 -0
  288. data/spec/support/models/label.rb +2 -0
  289. data/spec/support/models/membership.rb +1 -0
  290. data/spec/support/models/passport.rb +9 -0
  291. data/spec/support/models/person.rb +1 -0
  292. data/spec/support/models/player.rb +2 -0
  293. data/spec/support/models/powerup.rb +12 -0
  294. data/spec/support/models/registry.rb +1 -0
  295. data/spec/support/models/school.rb +14 -0
  296. data/spec/support/models/shield.rb +18 -0
  297. data/spec/support/models/student.rb +14 -0
  298. data/spec/support/models/weapon.rb +12 -0
  299. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  300. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  301. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  302. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  303. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  304. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  305. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  306. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  307. data/spec/support/schema_maps/schema_map_local.json +18 -0
  308. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  309. data/spec/support/spec_config.rb +4 -0
  310. data.tar.gz.sig +0 -0
  311. metadata +76 -13
  312. metadata.gz.sig +0 -0
  313. data/lib/mongoid/errors/eager_load.rb +0 -23
  314. data/lib/mongoid/errors/invalid_value.rb +0 -17
  315. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -40,29 +40,11 @@ describe Mongoid::QueryCache::Middleware do
40
40
  end
41
41
 
42
42
  context 'with driver query cache' do
43
- min_driver_version '2.14'
44
43
 
45
44
  it "cleans the query cache after it responds" do
46
45
  middleware.call({})
47
46
  expect(Mongo::QueryCache.send(:cache_table)).to be_empty
48
47
  end
49
48
  end
50
-
51
- context 'with mongoid query cache' do
52
- max_driver_version '2.13'
53
-
54
- it "cleans the query cache after it responds" do
55
- middleware.call({})
56
- expect(Mongoid::QueryCache.cache_table).to be_empty
57
- end
58
- end
59
- end
60
-
61
- context 'when driver implements query cache middleware' do
62
- min_driver_version '2.15'
63
-
64
- it 'uses the driver query cache middleware' do
65
- Mongoid::QueryCache::Middleware.should be Mongo::QueryCache::Middleware
66
- end
67
49
  end
68
50
  end
@@ -34,66 +34,6 @@ describe Mongoid::QueryCache do
34
34
 
35
35
  describe '#cache' do
36
36
  context 'with driver query cache' do
37
- min_driver_version '2.14'
38
-
39
- it 'does not log a deprecation warning' do
40
- reset_legacy_qc_warning
41
-
42
- expect_any_instance_of(Logger).to_not receive(:warn).with(
43
- described_class::LEGACY_WARNING
44
- )
45
- described_class.cache { }
46
- end
47
-
48
- context 'when query cache is not enabled' do
49
- before do
50
- Mongoid::QueryCache.enabled = false
51
- end
52
-
53
- it 'turns on the query cache within the block' do
54
- expect(Mongoid::QueryCache.enabled?).to be false
55
-
56
- Mongoid::QueryCache.cache do
57
- expect(Mongoid::QueryCache.enabled?).to be true
58
- end
59
-
60
- expect(Mongoid::QueryCache.enabled?).to be false
61
- end
62
- end
63
-
64
- context 'when query cache is enabled' do
65
- before do
66
- Mongoid::QueryCache.enabled = true
67
- end
68
-
69
- it 'keeps the query cache enabled within the block' do
70
- expect(Mongoid::QueryCache.enabled?).to be true
71
-
72
- Mongoid::QueryCache.cache do
73
- expect(Mongoid::QueryCache.enabled?).to be true
74
- end
75
-
76
- expect(Mongoid::QueryCache.enabled?).to be true
77
- end
78
- end
79
-
80
- context 'nested inside #uncached' do
81
- it 'turns on the query cache in the block' do
82
- Mongoid::QueryCache.uncached do
83
- expect(Mongoid::QueryCache.enabled?).to be false
84
-
85
- Mongoid::QueryCache.cache do
86
- expect(Mongoid::QueryCache.enabled?).to be true
87
- end
88
-
89
- expect(Mongoid::QueryCache.enabled?).to be false
90
- end
91
- end
92
- end
93
- end
94
-
95
- context 'with mongoid query cache' do
96
- max_driver_version '2.13'
97
37
 
98
38
  context 'when query cache is not enabled' do
99
39
  before do
@@ -145,64 +85,6 @@ describe Mongoid::QueryCache do
145
85
 
146
86
  describe '#uncached' do
147
87
  context 'with driver query cache' do
148
- min_driver_version '2.14'
149
-
150
- context 'when query cache is not enabled' do
151
- before do
152
- Mongoid::QueryCache.enabled = false
153
- end
154
-
155
- it 'keeps the query cache turned off within the block' do
156
- expect(Mongoid::QueryCache.enabled?).to be false
157
-
158
- Mongoid::QueryCache.uncached do
159
- expect(Mongoid::QueryCache.enabled?).to be false
160
- end
161
-
162
- expect(Mongoid::QueryCache.enabled?).to be false
163
- end
164
- end
165
-
166
- context 'when query cache is enabled' do
167
- before do
168
- Mongoid::QueryCache.enabled = true
169
- end
170
-
171
- it 'turns off the query cache within the block' do
172
- expect(Mongoid::QueryCache.enabled?).to be true
173
-
174
- Mongoid::QueryCache.uncached do
175
- expect(Mongoid::QueryCache.enabled?).to be false
176
- end
177
-
178
- expect(Mongoid::QueryCache.enabled?).to be true
179
- end
180
- end
181
-
182
- context 'nested inside #cache' do
183
- it 'turns on the query cache in the block' do
184
- Mongoid::QueryCache.cache do
185
- expect(Mongoid::QueryCache.enabled?).to be true
186
-
187
- Mongoid::QueryCache.uncached do
188
- expect(Mongoid::QueryCache.enabled?).to be false
189
- end
190
-
191
- expect(Mongoid::QueryCache.enabled?).to be true
192
- end
193
- end
194
- end
195
- end
196
-
197
- context 'with mongoid query cache' do
198
- max_driver_version '2.13'
199
-
200
- it 'logs a deprecation warning' do
201
- reset_legacy_qc_warning
202
-
203
- expect_any_instance_of(Logger).to receive(:warn).with(described_class::LEGACY_WARNING)
204
- described_class.cache { }
205
- end
206
88
 
207
89
  context 'when query cache is not enabled' do
208
90
  before do
@@ -328,7 +210,6 @@ describe Mongoid::QueryCache do
328
210
  end
329
211
 
330
212
  context 'when driver query cache exists' do
331
- min_driver_version '2.14'
332
213
 
333
214
  before do
334
215
  Band.all.to_a
@@ -424,14 +305,6 @@ describe Mongoid::QueryCache do
424
305
  end
425
306
  end
426
307
 
427
- context 'when drivers query cache does not exist' do
428
- max_driver_version '2.13'
429
-
430
- it 'does not recognize the driver query cache' do
431
- expect(defined?(Mongo::QueryCache)).to be_nil
432
- end
433
- end
434
-
435
308
  context "when querying for a single document" do
436
309
 
437
310
  [ :first, :one, :last ].each do |method|
@@ -662,12 +535,8 @@ describe Mongoid::QueryCache do
662
535
  end
663
536
 
664
537
  context "when the next query has a limit" do
665
- # Server versions older than 3.2 also perform a killCursors operation,
666
- # which causes this test to fail.
667
- min_server_version '3.2'
668
538
 
669
539
  context 'with driver query cache' do
670
- min_driver_version '2.14'
671
540
 
672
541
  # The driver query cache re-uses results with a larger limit
673
542
  it 'does not query again' do
@@ -678,18 +547,6 @@ describe Mongoid::QueryCache do
678
547
  end
679
548
  end
680
549
  end
681
-
682
- context 'with mongoid query cache' do
683
- max_driver_version '2.13'
684
-
685
- it 'queries again' do
686
- expect_query(1) do
687
- result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
688
- expect(result.length).to eq(2)
689
- expect(result.map { |r| r['value'] }).to eq([6, 7])
690
- end
691
- end
692
- end
693
550
  end
694
551
 
695
552
  context "when the new query does not have a limit" do
@@ -970,7 +827,6 @@ describe Mongoid::QueryCache do
970
827
  end
971
828
 
972
829
  context 'with driver query cache' do
973
- min_driver_version '2.14'
974
830
 
975
831
  # The driver query cache caches multi-batch cursors
976
832
  it 'does cache the result' do
@@ -979,16 +835,6 @@ describe Mongoid::QueryCache do
979
835
  end
980
836
  end
981
837
  end
982
-
983
- context 'with mongoid query cache' do
984
- max_driver_version '2.13'
985
-
986
- it 'does not cache the result' do
987
- expect_query(1) do
988
- expect(Band.all.map(&:id).size).to eq(10)
989
- end
990
- end
991
- end
992
838
  end
993
839
 
994
840
  context 'when storing in system collection' do
@@ -103,7 +103,7 @@ describe Mongoid::Reloadable do
103
103
  end
104
104
 
105
105
  it "resets attributes_before_type_cast" do
106
- expect(person.attributes_before_type_cast).to be_empty
106
+ expect(person.attributes_before_type_cast).to eq(person.attributes)
107
107
  end
108
108
  end
109
109
 
@@ -114,7 +114,7 @@ describe Mongoid::Reloadable do
114
114
  it "raises an error" do
115
115
  expect {
116
116
  Person.new.reload
117
- }.to raise_error(Mongoid::Errors::DocumentNotFound)
117
+ }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Person with id\(s\)/)
118
118
  end
119
119
  end
120
120
 
@@ -628,5 +628,38 @@ describe Mongoid::Reloadable do
628
628
  church.acolytes.first.name.should == 'Borg'
629
629
  end
630
630
  end
631
+
632
+ context 'when document has previous changes' do
633
+ context 'when document was updated' do
634
+ let(:person) do
635
+ Person.create!(title: 'Sir')
636
+ end
637
+
638
+ before do
639
+ person.title = 'Madam'
640
+ person.save!
641
+ person.reload
642
+ end
643
+
644
+ it "resets previous changes" do
645
+ expect(person.title_previously_was).to be_nil
646
+ expect(person).not_to be_previously_persisted
647
+ end
648
+ end
649
+
650
+ context 'when document was created' do
651
+ let(:person) do
652
+ Person.create!(title: 'Sir')
653
+ end
654
+
655
+ before do
656
+ person.reload
657
+ end
658
+
659
+ it "resets previous changes" do
660
+ expect(person).not_to be_previously_new_record
661
+ end
662
+ end
663
+ end
631
664
  end
632
665
  end
@@ -783,9 +783,11 @@ describe Mongoid::Scopable do
783
783
  "$or" => [
784
784
  { "ccc" => nil },
785
785
  { "ccc" => { "$gt" => 1.0 }},
786
+ ],
787
+ '$and' => ['$or' => [
786
788
  { "aaa" => { "$gt" => 0.0 }},
787
789
  { "bbb" => { "$gt" => 0.0 }}
788
- ]
790
+ ]],
789
791
  })
790
792
  end
791
793
  end
@@ -1170,6 +1172,24 @@ describe Mongoid::Scopable do
1170
1172
  end
1171
1173
  end
1172
1174
  end
1175
+
1176
+ context 'when nesting unsoped under with_scope' do
1177
+ let(:c1) { Band.where(active: true) }
1178
+
1179
+ it 'restores previous scope' do
1180
+ pending 'MONGOID-5214'
1181
+
1182
+ Band.with_scope(c1) do |crit|
1183
+ Band.unscoped do |crit2|
1184
+ Mongoid::Threaded.current_scope(Band).should be nil
1185
+ end
1186
+
1187
+ Mongoid::Threaded.current_scope(Band).selector.should == {
1188
+ 'active' => true,
1189
+ }
1190
+ end
1191
+ end
1192
+ end
1173
1193
  end
1174
1194
 
1175
1195
  describe ".without_default_scope" do
@@ -186,5 +186,19 @@ describe Mongoid::Shardable do
186
186
  it { is_expected.to eq({ 'name' => value }) }
187
187
  end
188
188
  end
189
+
190
+ context "when record is not found" do
191
+ let!(:instance) { klass.create!(name: value) }
192
+
193
+ before do
194
+ instance.destroy
195
+ end
196
+
197
+ it "raises a DocumentNotFound error with the shard key in the description on reload" do
198
+ expect do
199
+ instance.reload
200
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Band with id #{instance.id.to_s} and shard key name: a-brand-name./)
201
+ end
202
+ end
189
203
  end
190
204
  end
@@ -40,6 +40,25 @@ describe Mongoid::Stateful do
40
40
  end
41
41
  end
42
42
 
43
+ describe '#previously_new_record?' do
44
+ it "returns correct values" do
45
+ person = Person.new
46
+ expect(person).not_to be_a_previously_new_record
47
+ person.save!
48
+ expect(person).to be_a_previously_new_record
49
+ person.title = "Title"
50
+ person.save!
51
+ expect(person).not_to be_a_previously_new_record
52
+ end
53
+
54
+ it "resets after reload" do
55
+ person = Person.create!
56
+ expect(person).to be_a_previously_new_record
57
+ person.reload
58
+ expect(person).not_to be_a_previously_new_record
59
+ end
60
+ end
61
+
43
62
  describe "#persisted?" do
44
63
 
45
64
  let(:person) do
@@ -62,6 +81,15 @@ describe Mongoid::Stateful do
62
81
  end
63
82
  end
64
83
 
84
+ describe "#previously_persisted?" do
85
+ it "returns true after being destroyed" do
86
+ person = Person.create!
87
+ expect(person).not_to be_previously_persisted
88
+ person.destroy
89
+ expect(person).to be_previously_persisted
90
+ end
91
+ end
92
+
65
93
  describe "destroyed?" do
66
94
 
67
95
  let(:person) do