mongoid 7.4.0 → 8.0.1

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