mongoid 7.6.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 (313) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -0
  3. data/README.md +3 -3
  4. data/Rakefile +21 -85
  5. data/lib/config/locales/en.yml +46 -30
  6. data/lib/mongoid/association/accessors.rb +32 -3
  7. data/lib/mongoid/association/bindable.rb +48 -0
  8. data/lib/mongoid/association/builders.rb +4 -2
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +28 -5
  11. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  12. data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
  13. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  14. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  15. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
  16. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  17. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
  18. data/lib/mongoid/association/macros.rb +2 -1
  19. data/lib/mongoid/association/many.rb +5 -0
  20. data/lib/mongoid/association/nested/many.rb +2 -1
  21. data/lib/mongoid/association/proxy.rb +12 -0
  22. data/lib/mongoid/association/referenced/auto_save.rb +3 -2
  23. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  24. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  25. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  26. data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
  28. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
  29. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
  30. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  31. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  32. data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
  33. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  34. data/lib/mongoid/association/relatable.rb +38 -4
  35. data/lib/mongoid/attributes/processing.rb +9 -2
  36. data/lib/mongoid/attributes.rb +30 -27
  37. data/lib/mongoid/cacheable.rb +2 -2
  38. data/lib/mongoid/changeable.rb +37 -2
  39. data/lib/mongoid/clients/options.rb +4 -0
  40. data/lib/mongoid/clients/sessions.rb +2 -14
  41. data/lib/mongoid/config.rb +15 -11
  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 +55 -28
  46. data/lib/mongoid/contextual/mongo.rb +173 -287
  47. data/lib/mongoid/contextual/none.rb +33 -15
  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 -15
  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 -16
  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/optional.rb +3 -9
  65. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  66. data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
  67. data/lib/mongoid/criteria/queryable/selector.rb +90 -5
  68. data/lib/mongoid/criteria/queryable/smash.rb +39 -6
  69. data/lib/mongoid/criteria/queryable/storable.rb +1 -1
  70. data/lib/mongoid/criteria/queryable.rb +11 -6
  71. data/lib/mongoid/criteria.rb +1 -28
  72. data/lib/mongoid/deprecable.rb +36 -0
  73. data/lib/mongoid/deprecation.rb +25 -0
  74. data/lib/mongoid/document.rb +88 -33
  75. data/lib/mongoid/equality.rb +4 -4
  76. data/lib/mongoid/errors/document_not_found.rb +6 -2
  77. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  78. data/lib/mongoid/errors/invalid_field.rb +5 -1
  79. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  80. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  81. data/lib/mongoid/errors.rb +2 -2
  82. data/lib/mongoid/extensions/array.rb +8 -6
  83. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  84. data/lib/mongoid/extensions/binary.rb +42 -0
  85. data/lib/mongoid/extensions/boolean.rb +8 -2
  86. data/lib/mongoid/extensions/date.rb +26 -20
  87. data/lib/mongoid/extensions/date_time.rb +1 -1
  88. data/lib/mongoid/extensions/float.rb +4 -5
  89. data/lib/mongoid/extensions/hash.rb +12 -5
  90. data/lib/mongoid/extensions/integer.rb +4 -5
  91. data/lib/mongoid/extensions/object.rb +2 -0
  92. data/lib/mongoid/extensions/range.rb +41 -10
  93. data/lib/mongoid/extensions/regexp.rb +11 -4
  94. data/lib/mongoid/extensions/set.rb +11 -4
  95. data/lib/mongoid/extensions/string.rb +2 -13
  96. data/lib/mongoid/extensions/symbol.rb +3 -14
  97. data/lib/mongoid/extensions/time.rb +27 -16
  98. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  99. data/lib/mongoid/extensions.rb +1 -0
  100. data/lib/mongoid/factory.rb +42 -7
  101. data/lib/mongoid/fields/foreign_key.rb +7 -0
  102. data/lib/mongoid/fields/validators/macro.rb +3 -9
  103. data/lib/mongoid/fields.rb +49 -7
  104. data/lib/mongoid/findable.rb +21 -16
  105. data/lib/mongoid/indexable/specification.rb +1 -1
  106. data/lib/mongoid/indexable/validators/options.rb +4 -1
  107. data/lib/mongoid/interceptable.rb +69 -9
  108. data/lib/mongoid/persistable/creatable.rb +14 -5
  109. data/lib/mongoid/persistable/updatable.rb +12 -5
  110. data/lib/mongoid/persistence_context.rb +8 -42
  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/scopable.rb +9 -11
  115. data/lib/mongoid/selectable.rb +1 -2
  116. data/lib/mongoid/shardable.rb +11 -35
  117. data/lib/mongoid/stateful.rb +27 -1
  118. data/lib/mongoid/timestamps/created.rb +1 -1
  119. data/lib/mongoid/timestamps/updated.rb +1 -1
  120. data/lib/mongoid/touchable.rb +2 -3
  121. data/lib/mongoid/traversable.rb +1 -0
  122. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  123. data/lib/mongoid/version.rb +1 -5
  124. data/lib/mongoid/warnings.rb +3 -4
  125. data/lib/mongoid.rb +1 -0
  126. data/spec/config/mongoid.yml +16 -0
  127. data/spec/integration/app_spec.rb +8 -12
  128. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  129. data/spec/integration/associations/embedded_spec.rb +15 -0
  130. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  131. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  132. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  133. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  134. data/spec/integration/associations/has_one_spec.rb +97 -1
  135. data/spec/integration/associations/scope_option_spec.rb +1 -1
  136. data/spec/integration/callbacks_models.rb +95 -1
  137. data/spec/integration/callbacks_spec.rb +226 -4
  138. data/spec/integration/criteria/range_spec.rb +95 -1
  139. data/spec/integration/discriminator_key_spec.rb +115 -76
  140. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  141. data/spec/integration/i18n_fallbacks_spec.rb +1 -15
  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/mongoid/association/counter_cache_spec.rb +1 -1
  147. data/spec/mongoid/association/depending_spec.rb +9 -9
  148. data/spec/mongoid/association/eager_spec.rb +2 -1
  149. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  150. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  151. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  152. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  153. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
  154. data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
  155. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  156. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  157. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  158. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  159. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  160. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  161. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  162. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  163. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  164. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  165. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
  166. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  167. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  168. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  169. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  170. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
  171. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  172. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  173. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  174. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  175. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  176. data/spec/mongoid/association/syncable_spec.rb +14 -0
  177. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  178. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  179. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  180. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  181. data/spec/mongoid/attributes_spec.rb +480 -27
  182. data/spec/mongoid/cacheable_spec.rb +3 -3
  183. data/spec/mongoid/changeable_spec.rb +130 -13
  184. data/spec/mongoid/clients/factory_spec.rb +23 -30
  185. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  186. data/spec/mongoid/clients_spec.rb +2 -2
  187. data/spec/mongoid/config_spec.rb +52 -15
  188. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  189. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  190. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  191. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  192. data/spec/mongoid/contextual/memory_spec.rb +521 -14
  193. data/spec/mongoid/contextual/mongo_spec.rb +566 -426
  194. data/spec/mongoid/contextual/none_spec.rb +11 -19
  195. data/spec/mongoid/copyable_spec.rb +451 -2
  196. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  197. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  198. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  199. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  200. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  201. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  202. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
  203. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  204. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  205. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
  206. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  207. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  208. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  209. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  210. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  211. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  212. data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
  213. data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
  214. data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
  215. data/spec/mongoid/criteria_spec.rb +469 -1201
  216. data/spec/mongoid/document_fields_spec.rb +173 -24
  217. data/spec/mongoid/document_spec.rb +32 -41
  218. data/spec/mongoid/equality_spec.rb +12 -12
  219. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  220. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  221. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  222. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  223. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  224. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  225. data/spec/mongoid/extensions/array_spec.rb +16 -2
  226. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  227. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  228. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  229. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  230. data/spec/mongoid/extensions/date_spec.rb +71 -1
  231. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  232. data/spec/mongoid/extensions/float_spec.rb +48 -76
  233. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  234. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  235. data/spec/mongoid/extensions/range_spec.rb +255 -54
  236. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  237. data/spec/mongoid/extensions/set_spec.rb +106 -0
  238. data/spec/mongoid/extensions/string_spec.rb +53 -25
  239. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  240. data/spec/mongoid/extensions/time_spec.rb +634 -66
  241. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  242. data/spec/mongoid/factory_spec.rb +61 -1
  243. data/spec/mongoid/fields_spec.rb +321 -50
  244. data/spec/mongoid/findable_spec.rb +64 -29
  245. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  246. data/spec/mongoid/indexable_spec.rb +16 -19
  247. data/spec/mongoid/interceptable_spec.rb +584 -5
  248. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  249. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  250. data/spec/mongoid/mongoizable_spec.rb +285 -0
  251. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  252. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  253. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  254. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  255. data/spec/mongoid/persistence_context_spec.rb +24 -0
  256. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  257. data/spec/mongoid/query_cache_spec.rb +1 -156
  258. data/spec/mongoid/reloadable_spec.rb +35 -2
  259. data/spec/mongoid/scopable_spec.rb +36 -34
  260. data/spec/mongoid/serializable_spec.rb +14 -7
  261. data/spec/mongoid/shardable_models.rb +0 -14
  262. data/spec/mongoid/shardable_spec.rb +61 -153
  263. data/spec/mongoid/stateful_spec.rb +28 -0
  264. data/spec/mongoid/timestamps_spec.rb +390 -0
  265. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  266. data/spec/mongoid/touchable_spec.rb +116 -0
  267. data/spec/mongoid/touchable_spec_models.rb +12 -8
  268. data/spec/mongoid/traversable_spec.rb +4 -11
  269. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  270. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  271. data/spec/mongoid/warnings_spec.rb +35 -0
  272. data/spec/mongoid_spec.rb +1 -7
  273. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  274. data/spec/rails/mongoid_spec.rb +4 -16
  275. data/spec/shared/lib/mrss/docker_runner.rb +1 -8
  276. data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
  277. data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
  278. data/spec/shared/lib/mrss/server_version_registry.rb +24 -17
  279. data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
  280. data/spec/shared/lib/mrss/utils.rb +6 -28
  281. data/spec/shared/share/Dockerfile.erb +107 -33
  282. data/spec/shared/shlib/distro.sh +0 -10
  283. data/spec/shared/shlib/server.sh +33 -64
  284. data/spec/shared/shlib/set_env.sh +71 -12
  285. data/spec/support/constraints.rb +24 -0
  286. data/spec/support/expectations.rb +17 -20
  287. data/spec/support/macros.rb +30 -0
  288. data/spec/support/models/augmentation.rb +12 -0
  289. data/spec/support/models/band.rb +3 -0
  290. data/spec/support/models/catalog.rb +24 -0
  291. data/spec/support/models/circus.rb +3 -0
  292. data/spec/support/models/fanatic.rb +8 -0
  293. data/spec/support/models/implant.rb +9 -0
  294. data/spec/support/models/label.rb +2 -0
  295. data/spec/support/models/passport.rb +9 -0
  296. data/spec/support/models/person.rb +1 -0
  297. data/spec/support/models/player.rb +2 -0
  298. data/spec/support/models/powerup.rb +12 -0
  299. data/spec/support/models/registry.rb +1 -0
  300. data/spec/support/models/school.rb +14 -0
  301. data/spec/support/models/shield.rb +18 -0
  302. data/spec/support/models/student.rb +14 -0
  303. data/spec/support/models/weapon.rb +12 -0
  304. data.tar.gz.sig +0 -0
  305. metadata +695 -641
  306. metadata.gz.sig +0 -0
  307. data/lib/mongoid/errors/eager_load.rb +0 -23
  308. data/lib/mongoid/errors/invalid_value.rb +0 -17
  309. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  310. data/spec/shared/CANDIDATE.md +0 -28
  311. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  312. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  313. data/spec/shared/lib/tasks/candidate.rake +0 -64
@@ -4,7 +4,6 @@ require "spec_helper"
4
4
  require 'mongoid/association/referenced/has_many_models'
5
5
 
6
6
  describe Mongoid::QueryCache do
7
- require_mri
8
7
 
9
8
  around do |spec|
10
9
  Mongoid::QueryCache.clear_cache
@@ -22,7 +21,7 @@ describe Mongoid::QueryCache do
22
21
  end
23
22
 
24
23
  after do
25
- # Mrss::SessionRegistry.instance.verify_sessions_ended!
24
+ Mrss::SessionRegistry.instance.verify_sessions_ended!
26
25
  end
27
26
 
28
27
  let(:reset_legacy_qc_warning) do
@@ -35,66 +34,6 @@ describe Mongoid::QueryCache do
35
34
 
36
35
  describe '#cache' do
37
36
  context 'with driver query cache' do
38
- min_driver_version '2.14'
39
-
40
- it 'does not log a deprecation warning' do
41
- reset_legacy_qc_warning
42
-
43
- expect_any_instance_of(Logger).to_not receive(:warn).with(
44
- described_class::LEGACY_WARNING
45
- )
46
- described_class.cache { }
47
- end
48
-
49
- context 'when query cache is not enabled' do
50
- before do
51
- Mongoid::QueryCache.enabled = false
52
- end
53
-
54
- it 'turns on the query cache within the block' do
55
- expect(Mongoid::QueryCache.enabled?).to be false
56
-
57
- Mongoid::QueryCache.cache do
58
- expect(Mongoid::QueryCache.enabled?).to be true
59
- end
60
-
61
- expect(Mongoid::QueryCache.enabled?).to be false
62
- end
63
- end
64
-
65
- context 'when query cache is enabled' do
66
- before do
67
- Mongoid::QueryCache.enabled = true
68
- end
69
-
70
- it 'keeps the query cache enabled within the block' do
71
- expect(Mongoid::QueryCache.enabled?).to be true
72
-
73
- Mongoid::QueryCache.cache do
74
- expect(Mongoid::QueryCache.enabled?).to be true
75
- end
76
-
77
- expect(Mongoid::QueryCache.enabled?).to be true
78
- end
79
- end
80
-
81
- context 'nested inside #uncached' do
82
- it 'turns on the query cache in the block' do
83
- Mongoid::QueryCache.uncached do
84
- expect(Mongoid::QueryCache.enabled?).to be false
85
-
86
- Mongoid::QueryCache.cache do
87
- expect(Mongoid::QueryCache.enabled?).to be true
88
- end
89
-
90
- expect(Mongoid::QueryCache.enabled?).to be false
91
- end
92
- end
93
- end
94
- end
95
-
96
- context 'with mongoid query cache' do
97
- max_driver_version '2.13'
98
37
 
99
38
  context 'when query cache is not enabled' do
100
39
  before do
@@ -146,64 +85,6 @@ describe Mongoid::QueryCache do
146
85
 
147
86
  describe '#uncached' do
148
87
  context 'with driver query cache' do
149
- min_driver_version '2.14'
150
-
151
- context 'when query cache is not enabled' do
152
- before do
153
- Mongoid::QueryCache.enabled = false
154
- end
155
-
156
- it 'keeps the query cache turned off within the block' do
157
- expect(Mongoid::QueryCache.enabled?).to be false
158
-
159
- Mongoid::QueryCache.uncached do
160
- expect(Mongoid::QueryCache.enabled?).to be false
161
- end
162
-
163
- expect(Mongoid::QueryCache.enabled?).to be false
164
- end
165
- end
166
-
167
- context 'when query cache is enabled' do
168
- before do
169
- Mongoid::QueryCache.enabled = true
170
- end
171
-
172
- it 'turns off the query cache within the block' do
173
- expect(Mongoid::QueryCache.enabled?).to be true
174
-
175
- Mongoid::QueryCache.uncached do
176
- expect(Mongoid::QueryCache.enabled?).to be false
177
- end
178
-
179
- expect(Mongoid::QueryCache.enabled?).to be true
180
- end
181
- end
182
-
183
- context 'nested inside #cache' do
184
- it 'turns on the query cache in the block' do
185
- Mongoid::QueryCache.cache do
186
- expect(Mongoid::QueryCache.enabled?).to be true
187
-
188
- Mongoid::QueryCache.uncached do
189
- expect(Mongoid::QueryCache.enabled?).to be false
190
- end
191
-
192
- expect(Mongoid::QueryCache.enabled?).to be true
193
- end
194
- end
195
- end
196
- end
197
-
198
- context 'with mongoid query cache' do
199
- max_driver_version '2.13'
200
-
201
- it 'logs a deprecation warning' do
202
- reset_legacy_qc_warning
203
-
204
- expect_any_instance_of(Logger).to receive(:warn).with(described_class::LEGACY_WARNING)
205
- described_class.cache { }
206
- end
207
88
 
208
89
  context 'when query cache is not enabled' do
209
90
  before do
@@ -329,7 +210,6 @@ describe Mongoid::QueryCache do
329
210
  end
330
211
 
331
212
  context 'when driver query cache exists' do
332
- min_driver_version '2.14'
333
213
 
334
214
  before do
335
215
  Band.all.to_a
@@ -425,14 +305,6 @@ describe Mongoid::QueryCache do
425
305
  end
426
306
  end
427
307
 
428
- context 'when drivers query cache does not exist' do
429
- max_driver_version '2.13'
430
-
431
- it 'does not recognize the driver query cache' do
432
- expect(defined?(Mongo::QueryCache)).to be_nil
433
- end
434
- end
435
-
436
308
  context "when querying for a single document" do
437
309
 
438
310
  [ :first, :one, :last ].each do |method|
@@ -663,12 +535,8 @@ describe Mongoid::QueryCache do
663
535
  end
664
536
 
665
537
  context "when the next query has a limit" do
666
- # Server versions older than 3.2 also perform a killCursors operation,
667
- # which causes this test to fail.
668
- min_server_version '3.2'
669
538
 
670
539
  context 'with driver query cache' do
671
- min_driver_version '2.14'
672
540
 
673
541
  # The driver query cache re-uses results with a larger limit
674
542
  it 'does not query again' do
@@ -679,18 +547,6 @@ describe Mongoid::QueryCache do
679
547
  end
680
548
  end
681
549
  end
682
-
683
- context 'with mongoid query cache' do
684
- max_driver_version '2.13'
685
-
686
- it 'queries again' do
687
- expect_query(1) do
688
- result = game.ratings.where(:value.gt => 5).limit(2).asc(:id).to_a
689
- expect(result.length).to eq(2)
690
- expect(result.map { |r| r['value'] }).to eq([6, 7])
691
- end
692
- end
693
- end
694
550
  end
695
551
 
696
552
  context "when the new query does not have a limit" do
@@ -971,7 +827,6 @@ describe Mongoid::QueryCache do
971
827
  end
972
828
 
973
829
  context 'with driver query cache' do
974
- min_driver_version '2.14'
975
830
 
976
831
  # The driver query cache caches multi-batch cursors
977
832
  it 'does cache the result' do
@@ -980,16 +835,6 @@ describe Mongoid::QueryCache do
980
835
  end
981
836
  end
982
837
  end
983
-
984
- context 'with mongoid query cache' do
985
- max_driver_version '2.13'
986
-
987
- it 'does not cache the result' do
988
- expect_query(1) do
989
- expect(Band.all.map(&:id).size).to eq(10)
990
- end
991
- end
992
- end
993
838
  end
994
839
 
995
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
@@ -481,45 +481,27 @@ describe Mongoid::Scopable do
481
481
 
482
482
  context "when a block is provided" do
483
483
 
484
- context "when with optional and keyword arguments" do
485
- before do
486
- Band.scope(:named_by, ->(name, deleted: false) {
487
- Band.where(name: name, deleted: deleted)
488
- })
489
- end
490
-
491
- let(:scope) do
492
- Band.named_by("Emily", deleted: true)
493
- end
494
-
495
- it "sets the conditions from keyword arguments" do
496
- scope.selector.should == {'name' => 'Emily', 'deleted' => true}
497
- end
498
- end
499
-
500
- context "when without arguments" do
501
- before do
502
- Band.scope(:active, ->{ Band.where(active: true) }) do
503
- def add_origin
504
- tap { |c| c.selector[:origin] = "Deutschland" }
505
- end
484
+ before do
485
+ Band.scope(:active, ->{ Band.where(active: true) }) do
486
+ def add_origin
487
+ tap { |c| c.selector[:origin] = "Deutschland" }
506
488
  end
507
489
  end
490
+ end
508
491
 
509
- after do
510
- class << Band
511
- undef_method :active
512
- end
513
- Band._declared_scopes.clear
492
+ after do
493
+ class << Band
494
+ undef_method :active
514
495
  end
496
+ Band._declared_scopes.clear
497
+ end
515
498
 
516
- let(:scope) do
517
- Band.active.add_origin
518
- end
499
+ let(:scope) do
500
+ Band.active.add_origin
501
+ end
519
502
 
520
- it "adds the extension to the scope" do
521
- expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
522
- end
503
+ it "adds the extension to the scope" do
504
+ expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
523
505
  end
524
506
  end
525
507
 
@@ -801,9 +783,11 @@ describe Mongoid::Scopable do
801
783
  "$or" => [
802
784
  { "ccc" => nil },
803
785
  { "ccc" => { "$gt" => 1.0 }},
786
+ ],
787
+ '$and' => ['$or' => [
804
788
  { "aaa" => { "$gt" => 0.0 }},
805
789
  { "bbb" => { "$gt" => 0.0 }}
806
- ]
790
+ ]],
807
791
  })
808
792
  end
809
793
  end
@@ -1188,6 +1172,24 @@ describe Mongoid::Scopable do
1188
1172
  end
1189
1173
  end
1190
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
1191
1193
  end
1192
1194
 
1193
1195
  describe ".without_default_scope" do
@@ -528,11 +528,13 @@ describe Mongoid::Serializable do
528
528
  end
529
529
 
530
530
  it "includes the first relation" do
531
- expect(relation_hash[0]).to include({ "_id" => "kudamm", "street" => "Kudamm" })
531
+ expect(relation_hash[0]).to include
532
+ { "_id" => "kudamm", "street" => "Kudamm" }
532
533
  end
533
534
 
534
535
  it "includes the second relation" do
535
- expect(relation_hash[1]).to include( "_id" => "tauentzienstr", "street" => "Tauentzienstr" )
536
+ expect(relation_hash[1]).to include
537
+ { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
536
538
  end
537
539
  end
538
540
 
@@ -543,11 +545,13 @@ describe Mongoid::Serializable do
543
545
  end
544
546
 
545
547
  it "includes the first relation" do
546
- expect(relation_hash[0]).to include({ "_id" => "kudamm", "street" => "Kudamm" })
548
+ expect(relation_hash[0]).to include
549
+ { "_id" => "kudamm", "street" => "Kudamm" }
547
550
  end
548
551
 
549
552
  it "includes the second relation" do
550
- expect(relation_hash[1]).to include({ "_id" => "tauentzienstr", "street" => "Tauentzienstr" })
553
+ expect(relation_hash[1]).to include
554
+ { "_id" => "tauentzienstr", "street" => "Tauentzienstr" }
551
555
  end
552
556
  end
553
557
 
@@ -666,7 +670,8 @@ describe Mongoid::Serializable do
666
670
  end
667
671
 
668
672
  it "includes the specified relation" do
669
- expect(relation_hash).to include({ "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" })
673
+ expect(relation_hash).to include
674
+ { "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
670
675
  end
671
676
  end
672
677
 
@@ -677,7 +682,8 @@ describe Mongoid::Serializable do
677
682
  end
678
683
 
679
684
  it "includes the specified relation" do
680
- expect(relation_hash).to include({ "_id" => "Leo-Marvin", "first_name" => "Leo", "last_name" => "Marvin" })
685
+ expect(relation_hash).to include
686
+ { "_id" => "leo-marvin", "first_name" => "Leo", "last_name" => "Marvin" }
681
687
  end
682
688
  end
683
689
 
@@ -688,7 +694,8 @@ describe Mongoid::Serializable do
688
694
  end
689
695
 
690
696
  it "includes the specified relation sans exceptions" do
691
- expect(relation_hash).to include({ "first_name" => "Leo", "last_name" => "Marvin" })
697
+ expect(relation_hash).to include
698
+ { "first_name" => "Leo", "last_name" => "Marvin" }
692
699
  end
693
700
  end
694
701
  end
@@ -59,17 +59,3 @@ end
59
59
  class SmNotSharded
60
60
  include Mongoid::Document
61
61
  end
62
-
63
- class SmReviewAuthor
64
- include Mongoid::Document
65
- embedded_in :review, class_name: "SmReview", touch: false
66
- field :name, type: String
67
- end
68
-
69
- class SmReview
70
- include Mongoid::Document
71
-
72
- embeds_one :author, class_name: "SmReviewAuthor"
73
-
74
- shard_key "author.name" => 1
75
- end