mongoid 7.4.0 → 8.0.3

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 (391) 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 +52 -28
  5. data/lib/mongoid/association/accessors.rb +38 -9
  6. data/lib/mongoid/association/bindable.rb +50 -2
  7. data/lib/mongoid/association/builders.rb +4 -2
  8. data/lib/mongoid/association/constrainable.rb +0 -1
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +53 -13
  11. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  12. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  13. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -2
  14. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  15. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  16. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  17. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +50 -28
  18. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  19. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  20. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +23 -4
  21. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  22. data/lib/mongoid/association/macros.rb +22 -1
  23. data/lib/mongoid/association/many.rb +11 -7
  24. data/lib/mongoid/association/nested/many.rb +5 -4
  25. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  26. data/lib/mongoid/association/nested/one.rb +5 -5
  27. data/lib/mongoid/association/one.rb +2 -2
  28. data/lib/mongoid/association/options.rb +9 -9
  29. data/lib/mongoid/association/proxy.rb +14 -3
  30. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  31. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  32. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  33. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  34. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  35. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  36. data/lib/mongoid/association/referenced/eager.rb +2 -2
  37. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +66 -13
  38. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  39. data/lib/mongoid/association/referenced/has_many/enumerable.rb +20 -24
  40. data/lib/mongoid/association/referenced/has_many/proxy.rb +24 -18
  41. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  42. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  43. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  44. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  45. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  46. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  47. data/lib/mongoid/association/reflections.rb +2 -2
  48. data/lib/mongoid/association/relatable.rb +44 -10
  49. data/lib/mongoid/association.rb +5 -5
  50. data/lib/mongoid/atomic/modifiers.rb +2 -2
  51. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -0
  52. data/lib/mongoid/attributes/dynamic.rb +3 -3
  53. data/lib/mongoid/attributes/nested.rb +5 -5
  54. data/lib/mongoid/attributes/processing.rb +10 -3
  55. data/lib/mongoid/attributes/projector.rb +1 -1
  56. data/lib/mongoid/attributes/readonly.rb +2 -2
  57. data/lib/mongoid/attributes.rb +43 -40
  58. data/lib/mongoid/cacheable.rb +2 -2
  59. data/lib/mongoid/changeable.rb +42 -7
  60. data/lib/mongoid/clients/options.rb +5 -1
  61. data/lib/mongoid/clients/sessions.rb +2 -14
  62. data/lib/mongoid/clients/validators/storage.rb +3 -3
  63. data/lib/mongoid/config/environment.rb +20 -4
  64. data/lib/mongoid/config/validators/client.rb +6 -6
  65. data/lib/mongoid/config.rb +32 -17
  66. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  67. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  68. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  69. data/lib/mongoid/contextual/atomic.rb +1 -1
  70. data/lib/mongoid/contextual/geo_near.rb +7 -7
  71. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  72. data/lib/mongoid/contextual/memory.rb +180 -21
  73. data/lib/mongoid/contextual/mongo.rb +237 -217
  74. data/lib/mongoid/contextual/none.rb +67 -5
  75. data/lib/mongoid/contextual/queryable.rb +1 -1
  76. data/lib/mongoid/contextual.rb +2 -2
  77. data/lib/mongoid/copyable.rb +32 -8
  78. data/lib/mongoid/criteria/findable.rb +7 -4
  79. data/lib/mongoid/criteria/includable.rb +24 -20
  80. data/lib/mongoid/criteria/marshalable.rb +10 -2
  81. data/lib/mongoid/criteria/permission.rb +1 -1
  82. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  83. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -13
  84. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  85. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  86. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  87. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  88. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -14
  89. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  91. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  92. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  93. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  94. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -3
  95. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -2
  96. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  97. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  98. data/lib/mongoid/criteria/queryable/key.rb +3 -3
  99. data/lib/mongoid/criteria/queryable/mergeable.rb +21 -0
  100. data/lib/mongoid/criteria/queryable/optional.rb +5 -11
  101. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  102. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  103. data/lib/mongoid/criteria/queryable/selectable.rb +31 -37
  104. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  105. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  106. data/lib/mongoid/criteria/queryable.rb +12 -7
  107. data/lib/mongoid/criteria/scopable.rb +2 -2
  108. data/lib/mongoid/criteria.rb +15 -35
  109. data/lib/mongoid/deprecable.rb +36 -0
  110. data/lib/mongoid/deprecation.rb +25 -0
  111. data/lib/mongoid/document.rb +98 -34
  112. data/lib/mongoid/equality.rb +12 -12
  113. data/lib/mongoid/errors/document_not_found.rb +33 -12
  114. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  115. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  116. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  117. data/lib/mongoid/errors/invalid_field.rb +6 -2
  118. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  119. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  120. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  121. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  122. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  123. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  124. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  125. data/lib/mongoid/errors/no_client_database.rb +1 -1
  126. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  127. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  128. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  129. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  130. data/lib/mongoid/errors.rb +2 -2
  131. data/lib/mongoid/extensions/array.rb +9 -7
  132. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  133. data/lib/mongoid/extensions/binary.rb +42 -0
  134. data/lib/mongoid/extensions/boolean.rb +8 -2
  135. data/lib/mongoid/extensions/date.rb +26 -20
  136. data/lib/mongoid/extensions/date_time.rb +1 -1
  137. data/lib/mongoid/extensions/false_class.rb +1 -1
  138. data/lib/mongoid/extensions/float.rb +7 -4
  139. data/lib/mongoid/extensions/hash.rb +13 -6
  140. data/lib/mongoid/extensions/integer.rb +7 -4
  141. data/lib/mongoid/extensions/module.rb +1 -1
  142. data/lib/mongoid/extensions/object.rb +8 -6
  143. data/lib/mongoid/extensions/range.rb +41 -10
  144. data/lib/mongoid/extensions/regexp.rb +11 -4
  145. data/lib/mongoid/extensions/set.rb +11 -4
  146. data/lib/mongoid/extensions/string.rb +11 -22
  147. data/lib/mongoid/extensions/symbol.rb +4 -15
  148. data/lib/mongoid/extensions/time.rb +27 -16
  149. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  150. data/lib/mongoid/extensions/true_class.rb +1 -1
  151. data/lib/mongoid/extensions.rb +1 -0
  152. data/lib/mongoid/factory.rb +42 -7
  153. data/lib/mongoid/fields/foreign_key.rb +11 -4
  154. data/lib/mongoid/fields/localized.rb +9 -4
  155. data/lib/mongoid/fields/standard.rb +7 -7
  156. data/lib/mongoid/fields/validators/macro.rb +3 -9
  157. data/lib/mongoid/fields.rb +201 -35
  158. data/lib/mongoid/findable.rb +34 -13
  159. data/lib/mongoid/indexable/specification.rb +2 -2
  160. data/lib/mongoid/indexable/validators/options.rb +6 -2
  161. data/lib/mongoid/interceptable.rb +73 -13
  162. data/lib/mongoid/matchable.rb +1 -1
  163. data/lib/mongoid/matcher.rb +12 -7
  164. data/lib/mongoid/persistable/creatable.rb +18 -9
  165. data/lib/mongoid/persistable/deletable.rb +1 -1
  166. data/lib/mongoid/persistable/destroyable.rb +1 -1
  167. data/lib/mongoid/persistable/savable.rb +2 -2
  168. data/lib/mongoid/persistable/unsettable.rb +1 -1
  169. data/lib/mongoid/persistable/updatable.rb +19 -12
  170. data/lib/mongoid/persistable/upsertable.rb +2 -2
  171. data/lib/mongoid/persistable.rb +3 -3
  172. data/lib/mongoid/persistence_context.rb +63 -10
  173. data/lib/mongoid/query_cache.rb +8 -260
  174. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  175. data/lib/mongoid/reloadable.rb +7 -3
  176. data/lib/mongoid/scopable.rb +26 -22
  177. data/lib/mongoid/selectable.rb +1 -2
  178. data/lib/mongoid/serializable.rb +10 -6
  179. data/lib/mongoid/stateful.rb +35 -9
  180. data/lib/mongoid/tasks/database.rb +0 -2
  181. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  182. data/lib/mongoid/threaded.rb +12 -12
  183. data/lib/mongoid/timestamps/created.rb +1 -1
  184. data/lib/mongoid/timestamps/updated.rb +2 -2
  185. data/lib/mongoid/touchable.rb +2 -3
  186. data/lib/mongoid/traversable.rb +8 -4
  187. data/lib/mongoid/validatable/localizable.rb +1 -1
  188. data/lib/mongoid/validatable/macros.rb +0 -2
  189. data/lib/mongoid/validatable/presence.rb +2 -2
  190. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  191. data/lib/mongoid/validatable.rb +6 -6
  192. data/lib/mongoid/version.rb +1 -1
  193. data/lib/mongoid/warnings.rb +28 -0
  194. data/lib/mongoid.rb +2 -0
  195. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +11 -5
  196. data/spec/config/mongoid.yml +16 -0
  197. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  198. data/spec/integration/app_spec.rb +28 -26
  199. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  200. data/spec/integration/associations/embedded_dirty_spec.rb +28 -0
  201. data/spec/integration/associations/embedded_spec.rb +15 -0
  202. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  203. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  204. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  205. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  206. data/spec/integration/associations/has_one_spec.rb +97 -1
  207. data/spec/integration/associations/scope_option_spec.rb +1 -1
  208. data/spec/integration/callbacks_models.rb +95 -1
  209. data/spec/integration/callbacks_spec.rb +226 -4
  210. data/spec/integration/criteria/range_spec.rb +95 -1
  211. data/spec/integration/discriminator_key_spec.rb +115 -76
  212. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  213. data/spec/integration/i18n_fallbacks_spec.rb +1 -17
  214. data/spec/integration/matcher_examples_spec.rb +20 -13
  215. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  216. data/spec/integration/matcher_operator_spec.rb +3 -5
  217. data/spec/integration/persistence/range_field_spec.rb +350 -0
  218. data/spec/lite_spec_helper.rb +1 -1
  219. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  220. data/spec/mongoid/association/depending_spec.rb +9 -9
  221. data/spec/mongoid/association/eager_spec.rb +2 -1
  222. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  223. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  224. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  225. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  226. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +219 -8
  227. data/spec/mongoid/association/embedded/embeds_many_models.rb +157 -0
  228. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  229. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  230. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  231. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  232. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  233. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  234. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  235. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  236. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  237. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  238. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +67 -4
  239. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  240. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  241. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  242. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +8 -8
  243. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +82 -13
  244. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  245. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  246. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  247. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  248. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  249. data/spec/mongoid/association/syncable_spec.rb +14 -0
  250. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  251. data/spec/mongoid/atomic_spec.rb +22 -0
  252. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  253. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  254. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  255. data/spec/mongoid/attributes_spec.rb +524 -27
  256. data/spec/mongoid/cacheable_spec.rb +3 -3
  257. data/spec/mongoid/changeable_spec.rb +130 -13
  258. data/spec/mongoid/clients/factory_spec.rb +34 -42
  259. data/spec/mongoid/clients/options_spec.rb +1 -0
  260. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  261. data/spec/mongoid/clients_spec.rb +57 -2
  262. data/spec/mongoid/config/environment_spec.rb +39 -1
  263. data/spec/mongoid/config_spec.rb +104 -13
  264. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  265. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  266. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  267. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  268. data/spec/mongoid/contextual/memory_spec.rb +1336 -69
  269. data/spec/mongoid/contextual/mongo_spec.rb +1105 -174
  270. data/spec/mongoid/contextual/none_spec.rb +38 -0
  271. data/spec/mongoid/copyable_spec.rb +451 -1
  272. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  273. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  274. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  275. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  276. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  277. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  278. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  279. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  280. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  281. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  282. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  283. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  284. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  285. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  286. data/spec/mongoid/criteria/queryable/selectable_spec.rb +289 -124
  287. data/spec/mongoid/criteria/queryable/selector_spec.rb +14 -2
  288. data/spec/mongoid/criteria_projection_spec.rb +0 -1
  289. data/spec/mongoid/criteria_spec.rb +475 -1199
  290. data/spec/mongoid/document_fields_spec.rb +173 -24
  291. data/spec/mongoid/document_spec.rb +32 -41
  292. data/spec/mongoid/equality_spec.rb +12 -12
  293. data/spec/mongoid/errors/document_not_found_spec.rb +76 -0
  294. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  295. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  296. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  297. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  298. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  299. data/spec/mongoid/extensions/array_spec.rb +16 -2
  300. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  301. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  302. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  303. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  304. data/spec/mongoid/extensions/date_spec.rb +71 -1
  305. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  306. data/spec/mongoid/extensions/float_spec.rb +53 -74
  307. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  308. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  309. data/spec/mongoid/extensions/range_spec.rb +255 -54
  310. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  311. data/spec/mongoid/extensions/set_spec.rb +106 -0
  312. data/spec/mongoid/extensions/string_spec.rb +53 -25
  313. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  314. data/spec/mongoid/extensions/time_spec.rb +634 -66
  315. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  316. data/spec/mongoid/factory_spec.rb +61 -1
  317. data/spec/mongoid/fields/localized_spec.rb +37 -12
  318. data/spec/mongoid/fields_spec.rb +321 -50
  319. data/spec/mongoid/findable_spec.rb +80 -15
  320. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  321. data/spec/mongoid/indexable_spec.rb +39 -20
  322. data/spec/mongoid/interceptable_spec.rb +584 -5
  323. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  324. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  325. data/spec/mongoid/mongoizable_spec.rb +285 -0
  326. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  327. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  328. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  329. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  330. data/spec/mongoid/persistence_context_spec.rb +50 -1
  331. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  332. data/spec/mongoid/query_cache_spec.rb +0 -154
  333. data/spec/mongoid/reloadable_spec.rb +35 -2
  334. data/spec/mongoid/scopable_spec.rb +54 -16
  335. data/spec/mongoid/shardable_spec.rb +14 -0
  336. data/spec/mongoid/stateful_spec.rb +28 -0
  337. data/spec/mongoid/timestamps_spec.rb +390 -0
  338. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  339. data/spec/mongoid/touchable_spec.rb +116 -0
  340. data/spec/mongoid/touchable_spec_models.rb +12 -8
  341. data/spec/mongoid/traversable_spec.rb +4 -11
  342. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  343. data/spec/mongoid/validatable/uniqueness_spec.rb +59 -31
  344. data/spec/mongoid/warnings_spec.rb +35 -0
  345. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  346. data/spec/rails/mongoid_spec.rb +4 -16
  347. data/spec/shared/lib/mrss/constraints.rb +8 -16
  348. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  349. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  350. data/spec/shared/lib/mrss/lite_constraints.rb +32 -1
  351. data/spec/shared/share/Dockerfile.erb +34 -48
  352. data/spec/shared/shlib/config.sh +27 -0
  353. data/spec/shared/shlib/server.sh +32 -19
  354. data/spec/shared/shlib/set_env.sh +37 -0
  355. data/spec/support/constraints.rb +24 -0
  356. data/spec/support/macros.rb +55 -0
  357. data/spec/support/models/augmentation.rb +12 -0
  358. data/spec/support/models/band.rb +3 -0
  359. data/spec/support/models/catalog.rb +24 -0
  360. data/spec/support/models/circus.rb +3 -0
  361. data/spec/support/models/code.rb +2 -0
  362. data/spec/support/models/fanatic.rb +8 -0
  363. data/spec/support/models/implant.rb +9 -0
  364. data/spec/support/models/label.rb +2 -0
  365. data/spec/support/models/membership.rb +1 -0
  366. data/spec/support/models/passport.rb +9 -0
  367. data/spec/support/models/person.rb +1 -0
  368. data/spec/support/models/player.rb +2 -0
  369. data/spec/support/models/powerup.rb +12 -0
  370. data/spec/support/models/registry.rb +1 -0
  371. data/spec/support/models/school.rb +14 -0
  372. data/spec/support/models/shield.rb +18 -0
  373. data/spec/support/models/student.rb +14 -0
  374. data/spec/support/models/weapon.rb +12 -0
  375. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  376. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  377. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  378. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  379. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  380. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  381. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  382. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  383. data/spec/support/schema_maps/schema_map_local.json +18 -0
  384. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  385. data/spec/support/spec_config.rb +4 -0
  386. data.tar.gz.sig +0 -0
  387. metadata +682 -619
  388. metadata.gz.sig +0 -0
  389. data/lib/mongoid/errors/eager_load.rb +0 -23
  390. data/lib/mongoid/errors/invalid_value.rb +0 -17
  391. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
@@ -0,0 +1,277 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Dots and Dollars" do
6
+ min_server_version '5.0'
7
+
8
+ before(:all) do
9
+ class DADMUser
10
+ include Mongoid::Document
11
+ field :"first.last", type: String, default: "Neil.Shweky"
12
+ field :"$_amount", type: Integer, default: 0
13
+ field :"$a.b", type: Boolean, default: true
14
+ end
15
+ end
16
+
17
+ let!(:user) { DADMUser.create! }
18
+
19
+ describe "accessing the fields" do
20
+
21
+ context "when using the field getters" do
22
+
23
+ context "on dotted fields" do
24
+ it "gets the right value" do
25
+ expect(user.send(:"first.last")).to eq("Neil.Shweky")
26
+ end
27
+ end
28
+
29
+ context "on dollared fields" do
30
+ it "gets the right value" do
31
+ expect(user.send(:"$_amount")).to eq(0)
32
+ end
33
+ end
34
+
35
+ context "on dotted and dollared fields" do
36
+ it "gets the right value" do
37
+ expect(user.send(:"$a.b")).to be true
38
+ end
39
+ end
40
+ end
41
+
42
+ context "when using the read_attribute" do
43
+
44
+ context "on dotted fields" do
45
+ it "gets the right value" do
46
+ expect(user.read_attribute("first.last")).to eq("Neil.Shweky")
47
+ end
48
+ end
49
+
50
+ context "on dollared fields" do
51
+ it "gets the right value" do
52
+ expect(user.read_attribute("$_amount")).to eq(0)
53
+ end
54
+ end
55
+
56
+ context "on dotted and dollared fields" do
57
+ it "gets the right value" do
58
+ expect(user.read_attribute("$a.b")).to be true
59
+ end
60
+ end
61
+ end
62
+
63
+ context "when using the field setters" do
64
+
65
+ context "on dotted fields" do
66
+ it "raises an error" do
67
+ expect do
68
+ user.send(:"first.last=", "Nissim.Shweky")
69
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
70
+ end
71
+ end
72
+
73
+ context "on dollared fields" do
74
+ it "raises an error" do
75
+ expect do
76
+ user.send(:"$_amount=", 1)
77
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
78
+ end
79
+ end
80
+
81
+ context "on dotted and dollared fields" do
82
+ it "raises an error" do
83
+ expect do
84
+ user.send(:"$a.b=", false)
85
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
86
+ end
87
+ end
88
+ end
89
+
90
+ context "when updating via write_attribute" do
91
+
92
+ context "on dotted fields" do
93
+ it "raises an error" do
94
+ expect do
95
+ user.write_attribute("first.last", "Nissim.Shweky")
96
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
97
+ end
98
+ end
99
+
100
+ context "on dollared fields" do
101
+ it "raises an error" do
102
+ expect do
103
+ user.write_attribute("$_amount", 1)
104
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
105
+ end
106
+ end
107
+
108
+ context "on dotted and dollared fields" do
109
+ it "raises an error" do
110
+ expect do
111
+ user.write_attribute("$a.b", false)
112
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
113
+ end
114
+ end
115
+ end
116
+
117
+ context "when updating via update_attribute" do
118
+
119
+ context "on dotted fields" do
120
+ it "raises an error" do
121
+ expect do
122
+ user.update_attribute("first.last", "Nissim.Shweky")
123
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
124
+ end
125
+ end
126
+
127
+ context "on dollared fields" do
128
+ it "raises an error" do
129
+ expect do
130
+ user.update_attribute("$_amount", 1)
131
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
132
+ end
133
+ end
134
+
135
+ context "on dotted and dollared fields" do
136
+ it "raises an error" do
137
+ expect do
138
+ user.update_attribute("$a.b", false)
139
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
140
+ end
141
+ end
142
+ end
143
+
144
+ context "when updating via update_attributes!" do
145
+
146
+ context "on dotted fields" do
147
+ it "raises an error" do
148
+ expect do
149
+ user.update_attributes!("first.last": "Nissim.Shweky")
150
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
151
+ end
152
+ end
153
+
154
+ context "on dollared fields" do
155
+ it "raises an error" do
156
+ expect do
157
+ user.update_attributes!("$_amount": 1)
158
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
159
+ end
160
+ end
161
+
162
+ context "on dotted and dollared fields" do
163
+ it "raises an error" do
164
+ expect do
165
+ user.update_attributes!("$a.b": false)
166
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
167
+ end
168
+ end
169
+ end
170
+
171
+ context "when updating via []=" do
172
+
173
+ context "on dotted fields" do
174
+ it "raises an error" do
175
+ expect do
176
+ user[:"first.last"] = "Nissim.Shweky"
177
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
178
+ end
179
+ end
180
+
181
+ context "on dollared fields" do
182
+ it "raises an error" do
183
+ expect do
184
+ user[:"$_amount"] = 1
185
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
186
+ end
187
+ end
188
+
189
+ context "on dotted and dollared fields" do
190
+ it "raises an error" do
191
+ expect do
192
+ user[:"$a.b"] = false
193
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
194
+ end
195
+ end
196
+ end
197
+
198
+ context "when updating via remove_attribute" do
199
+
200
+ context "on dotted fields" do
201
+ it "raises an error" do
202
+ expect do
203
+ user.remove_attribute("first.last")
204
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
205
+ end
206
+ end
207
+
208
+ context "on dollared fields" do
209
+ it "raises an error" do
210
+ expect do
211
+ user.remove_attribute("$_amount")
212
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
213
+ end
214
+ end
215
+
216
+ context "on dotted and dollared fields" do
217
+ it "raises an error" do
218
+ expect do
219
+ user.remove_attribute("$a.b")
220
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
221
+ end
222
+ end
223
+ end
224
+ end
225
+
226
+ describe "persisting to the db" do
227
+
228
+ context "when saving to the db" do
229
+
230
+ let(:user) { DADMUser.new }
231
+
232
+ it "the save succeeds" do
233
+ expect do
234
+ user.save!
235
+ end.to_not raise_error
236
+ end
237
+ end
238
+
239
+ context "when retrieving it from the db" do
240
+
241
+ let(:from_db) { DADMUser.first }
242
+
243
+ it "has the fields populated correctly" do
244
+ expect(from_db.attributes["first.last"]).to eq("Neil.Shweky")
245
+ expect(from_db.attributes["$_amount"]).to eq(0)
246
+ expect(from_db.attributes["$a.b"]).to eq(true)
247
+ end
248
+ end
249
+ end
250
+
251
+ describe "querying that field" do
252
+
253
+ context "when attempting to query a dotted field" do
254
+
255
+ let(:queried) do
256
+ DADMUser.where("first.last": "Neil.Shweky").first
257
+ end
258
+
259
+ it "does not work" do
260
+ expect(queried).to be nil
261
+ end
262
+ end
263
+
264
+ context "when attempting to query a dollared field" do
265
+
266
+ let(:queried) do
267
+ DADMUser.where("$_amount": 0).first
268
+ end
269
+
270
+ it "raise an error" do
271
+ expect do
272
+ queried
273
+ end.to raise_error(Mongo::Error::OperationFailure)
274
+ end
275
+ end
276
+ end
277
+ end
@@ -3,19 +3,7 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe 'i18n fallbacks' do
6
- # These tests modify the environment
7
- before(:all) do
8
- unless %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
9
- skip 'Set TEST_I18N_FALLBACKS=1 environment variable to run these tests'
10
- end
11
- end
12
-
13
- before(:all) do
14
- puts "I18n version: #{I18n::VERSION}"
15
-
16
- require "i18n/backend/fallbacks"
17
- I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
18
- end
6
+ with_i18n_fallbacks
19
7
 
20
8
  context 'when fallbacks are enabled with a locale list' do
21
9
  before do
@@ -36,7 +24,6 @@ describe 'i18n fallbacks' do
36
24
  end
37
25
 
38
26
  context 'when translation is missing in active locale and present in fallback locale' do
39
-
40
27
  it 'falls back on default locale' do
41
28
  product = Product.new
42
29
  I18n.locale = :en
@@ -44,7 +31,6 @@ describe 'i18n fallbacks' do
44
31
  I18n.locale = :de
45
32
  product.description.should == 'Marvelous!'
46
33
  end
47
-
48
34
  end
49
35
 
50
36
  context 'when translation is missing in all locales' do
@@ -64,7 +50,6 @@ describe 'i18n fallbacks' do
64
50
  I18n.locale = :ru
65
51
  product.description.should be nil
66
52
  end
67
-
68
53
  end
69
54
 
70
55
  context 'i18n 1.0' do
@@ -82,7 +67,6 @@ describe 'i18n fallbacks' do
82
67
  I18n.locale = :ru
83
68
  product.description.should == 'Marvelous!'
84
69
  end
85
-
86
70
  end
87
71
  end
88
72
  end
@@ -652,10 +652,12 @@ describe 'Matcher' do
652
652
 
653
653
  describe 'range match on array element' do
654
654
 
655
+ let(:record) do
656
+ Record.new(producers: [123, 456])
657
+ end
658
+
655
659
  let!(:band) do
656
- Band.create!(records: [
657
- Record.new(producers: [123, 456]),
658
- ])
660
+ Band.create!(records: [ record ])
659
661
  end
660
662
 
661
663
  describe 'MongoDB query' do
@@ -667,14 +669,13 @@ describe 'Matcher' do
667
669
  expect(found_band).to eq(band)
668
670
  end
669
671
 
670
- # https://jira.mongodb.org/browse/MONGOID-4911
671
672
  context 'no match' do
672
673
 
673
- let!(:band) do
674
- Band.create!(records: [
675
- Record.new(producers: [50]),
676
- ])
677
- end
674
+ let!(:band) do
675
+ Band.create!(records: [
676
+ Record.new(producers: [50, 250]),
677
+ ])
678
+ end
678
679
 
679
680
  it 'does not find' do
680
681
  expect(found_band).to be nil
@@ -687,10 +688,16 @@ describe 'Matcher' do
687
688
  band.records.where(producers: 100..200).first
688
689
  end
689
690
 
690
- it 'raises InvalidQuery' do
691
- lambda do
692
- found_record
693
- end.should raise_error(Mongoid::Errors::InvalidQuery)
691
+ let(:no_record) do
692
+ band.records.where(producers: 199..200).first
693
+ end
694
+
695
+ it 'finds correctly' do
696
+ expect(found_record).to eq(record)
697
+ end
698
+
699
+ it "correctly does not find" do
700
+ expect(no_record).to eq(nil)
694
701
  end
695
702
  end
696
703
  end
@@ -29,12 +29,13 @@
29
29
  matches: false
30
30
  min_server_version: 3.4
31
31
 
32
- - name: BigDecimal field - does not match
32
+ # Requires :map_big_decimal_to_decimal128 option to be true.
33
+ - name: BigDecimal field - matches
33
34
  document:
34
35
  big_decimal_field: !ruby/object:BigDecimal
35
36
  18:0.42e2
36
37
  query:
37
38
  big_decimal_field:
38
39
  $type: 19
39
- matches: false
40
+ matches: true
40
41
  min_server_version: 3.4
@@ -12,6 +12,8 @@ def mop_error?(spec, kind)
12
12
  end
13
13
 
14
14
  describe 'Matcher operators' do
15
+ config_override :map_big_decimal_to_decimal128, true
16
+
15
17
  Dir[File.join(File.dirname(__FILE__), 'matcher_operator_data', '*.yml')].sort.each do |path|
16
18
  context File.basename(path) do
17
19
  permitted_classes = [ BigDecimal,
@@ -35,11 +37,7 @@ describe 'Matcher operators' do
35
37
  BSON::Timestamp,
36
38
  BSON::Undefined ]
37
39
 
38
- specs = if RUBY_VERSION.start_with?("2.5")
39
- YAML.safe_load(File.read(path), permitted_classes, [], true)
40
- else
41
- YAML.safe_load(File.read(path), permitted_classes: permitted_classes, aliases: true)
42
- end
40
+ specs = YAML.safe_load(File.read(path), permitted_classes: permitted_classes, aliases: true)
43
41
 
44
42
  specs.each do |spec|
45
43
  context spec['name'] do