mongoid 7.5.4 → 8.1.9

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 (446) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +32 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +11 -6
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +48 -39
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +135 -36
  121. data/lib/mongoid/equality.rb +9 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +187 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +9 -2
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +41 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +26 -3
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/association_spec.rb +60 -0
  269. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  270. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  271. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  272. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  273. data/spec/mongoid/attributes/readonly_spec.rb +19 -0
  274. data/spec/mongoid/attributes_spec.rb +526 -33
  275. data/spec/mongoid/changeable_spec.rb +429 -37
  276. data/spec/mongoid/clients/factory_spec.rb +23 -30
  277. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  278. data/spec/mongoid/clients_spec.rb +149 -15
  279. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  280. data/spec/mongoid/config/defaults_spec.rb +160 -0
  281. data/spec/mongoid/config_spec.rb +214 -31
  282. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  283. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  284. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  285. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  286. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  287. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  288. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  289. data/spec/mongoid/contextual/none_spec.rb +60 -21
  290. data/spec/mongoid/copyable_spec.rb +453 -11
  291. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  292. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  293. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  294. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  295. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  296. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  297. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  298. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  299. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  300. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  301. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  302. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  303. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  304. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  305. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  306. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  307. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  308. data/spec/mongoid/criteria/queryable/selectable_spec.rb +107 -86
  309. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  310. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  311. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  312. data/spec/mongoid/criteria_spec.rb +469 -1205
  313. data/spec/mongoid/document_fields_spec.rb +173 -24
  314. data/spec/mongoid/document_spec.rb +59 -41
  315. data/spec/mongoid/equality_spec.rb +6 -0
  316. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  317. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  318. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  319. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  320. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  321. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  322. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  323. data/spec/mongoid/extensions/array_spec.rb +16 -2
  324. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  325. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  326. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  327. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  328. data/spec/mongoid/extensions/date_spec.rb +71 -1
  329. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  330. data/spec/mongoid/extensions/float_spec.rb +53 -74
  331. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  332. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  333. data/spec/mongoid/extensions/range_spec.rb +255 -54
  334. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  335. data/spec/mongoid/extensions/set_spec.rb +106 -0
  336. data/spec/mongoid/extensions/string_spec.rb +53 -25
  337. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  338. data/spec/mongoid/extensions/time_spec.rb +639 -106
  339. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  340. data/spec/mongoid/factory_spec.rb +61 -1
  341. data/spec/mongoid/fields/localized_spec.rb +80 -37
  342. data/spec/mongoid/fields_spec.rb +503 -87
  343. data/spec/mongoid/findable_spec.rb +450 -58
  344. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  345. data/spec/mongoid/indexable_spec.rb +55 -30
  346. data/spec/mongoid/interceptable_spec.rb +904 -22
  347. data/spec/mongoid/interceptable_spec_models.rb +189 -22
  348. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  349. data/spec/mongoid/mongoizable_spec.rb +285 -0
  350. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  351. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  352. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  353. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  354. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  355. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  357. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  358. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  360. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  361. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  362. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  363. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  364. data/spec/mongoid/persistence_context_spec.rb +31 -57
  365. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  366. data/spec/mongoid/query_cache_spec.rb +56 -215
  367. data/spec/mongoid/reloadable_spec.rb +83 -6
  368. data/spec/mongoid/scopable_spec.rb +91 -1
  369. data/spec/mongoid/serializable_spec.rb +25 -39
  370. data/spec/mongoid/shardable_spec.rb +4 -4
  371. data/spec/mongoid/stateful_spec.rb +150 -8
  372. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  373. data/spec/mongoid/tasks/database_spec.rb +127 -0
  374. data/spec/mongoid/timestamps/created_spec.rb +23 -0
  375. data/spec/mongoid/timestamps_spec.rb +392 -4
  376. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  377. data/spec/mongoid/touchable_spec.rb +390 -2
  378. data/spec/mongoid/touchable_spec_models.rb +14 -8
  379. data/spec/mongoid/traversable_spec.rb +13 -35
  380. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  381. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  382. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  383. data/spec/mongoid/warnings_spec.rb +35 -0
  384. data/spec/mongoid_spec.rb +34 -16
  385. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  386. data/spec/rails/mongoid_spec.rb +4 -16
  387. data/spec/spec_helper.rb +5 -0
  388. data/spec/support/constraints.rb +24 -0
  389. data/spec/support/immutable_ids.rb +118 -0
  390. data/spec/support/macros.rb +78 -0
  391. data/spec/support/models/artist.rb +0 -1
  392. data/spec/support/models/augmentation.rb +12 -0
  393. data/spec/support/models/band.rb +5 -0
  394. data/spec/support/models/book.rb +1 -0
  395. data/spec/support/models/building.rb +2 -0
  396. data/spec/support/models/catalog.rb +24 -0
  397. data/spec/support/models/circus.rb +3 -0
  398. data/spec/support/models/cover.rb +10 -0
  399. data/spec/support/models/fanatic.rb +8 -0
  400. data/spec/support/models/implant.rb +9 -0
  401. data/spec/support/models/label.rb +2 -0
  402. data/spec/support/models/lat_lng.rb +6 -0
  403. data/spec/support/models/name.rb +10 -0
  404. data/spec/support/models/passport.rb +9 -0
  405. data/spec/support/models/person.rb +2 -0
  406. data/spec/support/models/player.rb +2 -0
  407. data/spec/support/models/powerup.rb +12 -0
  408. data/spec/support/models/product.rb +1 -0
  409. data/spec/support/models/purse.rb +9 -0
  410. data/spec/support/models/registry.rb +1 -0
  411. data/spec/support/models/school.rb +14 -0
  412. data/spec/support/models/shield.rb +18 -0
  413. data/spec/support/models/student.rb +14 -0
  414. data/spec/support/models/weapon.rb +12 -0
  415. metadata +98 -96
  416. checksums.yaml.gz.sig +0 -0
  417. data/lib/mongoid/errors/eager_load.rb +0 -23
  418. data/lib/mongoid/errors/invalid_value.rb +0 -17
  419. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  420. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  421. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  422. data/spec/shared/LICENSE +0 -20
  423. data/spec/shared/bin/get-mongodb-download-url +0 -17
  424. data/spec/shared/bin/s3-copy +0 -45
  425. data/spec/shared/bin/s3-upload +0 -69
  426. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  427. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  428. data/spec/shared/lib/mrss/constraints.rb +0 -378
  429. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  430. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  431. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  432. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  433. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  434. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  435. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  436. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  437. data/spec/shared/lib/mrss/utils.rb +0 -15
  438. data/spec/shared/share/Dockerfile.erb +0 -325
  439. data/spec/shared/share/haproxy-1.conf +0 -16
  440. data/spec/shared/share/haproxy-2.conf +0 -17
  441. data/spec/shared/shlib/config.sh +0 -27
  442. data/spec/shared/shlib/distro.sh +0 -74
  443. data/spec/shared/shlib/server.sh +0 -392
  444. data/spec/shared/shlib/set_env.sh +0 -169
  445. data.tar.gz.sig +0 -0
  446. metadata.gz.sig +0 -3
@@ -37,12 +37,18 @@ describe Mongoid::Validatable::AssociatedValidator do
37
37
  User.new(name: "test")
38
38
  end
39
39
 
40
- let(:description) do
40
+ let(:description1) do
41
+ Description.new
42
+ end
43
+
44
+ let(:description2) do
41
45
  Description.new
42
46
  end
43
47
 
44
48
  before do
45
- user.descriptions << description
49
+ user.descriptions << description1
50
+ user.descriptions << description2
51
+ user.valid?
46
52
  end
47
53
 
48
54
  it "only validates the parent once" do
@@ -50,12 +56,16 @@ describe Mongoid::Validatable::AssociatedValidator do
50
56
  end
51
57
 
52
58
  it "adds the errors from the relation" do
53
- user.valid?
54
59
  expect(user.errors[:descriptions]).to_not be_nil
55
60
  end
56
61
 
62
+ it 'reports all failed validations' do
63
+ errors = user.descriptions.flat_map { |d| d.errors[:details] }
64
+ expect(errors.length).to be == 2
65
+ end
66
+
57
67
  it "only validates the child once" do
58
- expect(description).to_not be_valid
68
+ expect(description1).to_not be_valid
59
69
  end
60
70
  end
61
71
 
@@ -75,7 +85,6 @@ describe Mongoid::Validatable::AssociatedValidator do
75
85
  end
76
86
 
77
87
  it "does not run validation on them" do
78
- expect(description).to receive(:valid?).never
79
88
  expect(user).to be_valid
80
89
  end
81
90
 
@@ -84,14 +93,14 @@ describe Mongoid::Validatable::AssociatedValidator do
84
93
  end
85
94
  end
86
95
 
87
- describe "#validate_each" do
96
+ describe "#validate" do
88
97
 
89
98
  let(:person) do
90
99
  Person.new
91
100
  end
92
101
 
93
102
  let(:validator) do
94
- described_class.new(attributes: person.attributes)
103
+ described_class.new(attributes: person.relations.keys)
95
104
  end
96
105
 
97
106
  context "when the association is a one to one" do
@@ -99,7 +108,7 @@ describe Mongoid::Validatable::AssociatedValidator do
99
108
  context "when the association is nil" do
100
109
 
101
110
  before do
102
- validator.validate_each(person, :name, nil)
111
+ validator.validate(person)
103
112
  end
104
113
 
105
114
  it "adds no errors" do
@@ -108,14 +117,9 @@ describe Mongoid::Validatable::AssociatedValidator do
108
117
  end
109
118
 
110
119
  context "when the association is valid" do
111
-
112
- let(:associated) do
113
- double(valid?: true, flagged_for_destroy?: false)
114
- end
115
-
116
120
  before do
117
- expect(associated).to receive(:validated?).and_return(false)
118
- validator.validate_each(person, :name, associated)
121
+ person.name = Name.new(first_name: 'A', last_name: 'B')
122
+ validator.validate(person)
119
123
  end
120
124
 
121
125
  it "adds no errors" do
@@ -125,13 +129,9 @@ describe Mongoid::Validatable::AssociatedValidator do
125
129
 
126
130
  context "when the association is invalid" do
127
131
 
128
- let(:associated) do
129
- double(valid?: false, flagged_for_destroy?: false)
130
- end
131
-
132
132
  before do
133
- expect(associated).to receive(:validated?).and_return(false)
134
- validator.validate_each(person, :name, associated)
133
+ person.name = Name.new(first_name: 'Jamis', last_name: 'Buck')
134
+ validator.validate(person)
135
135
  end
136
136
 
137
137
  it "adds errors to the parent document" do
@@ -149,7 +149,7 @@ describe Mongoid::Validatable::AssociatedValidator do
149
149
  context "when the association is empty" do
150
150
 
151
151
  before do
152
- validator.validate_each(person, :addresses, [])
152
+ validator.validate(person)
153
153
  end
154
154
 
155
155
  it "adds no errors" do
@@ -159,13 +159,9 @@ describe Mongoid::Validatable::AssociatedValidator do
159
159
 
160
160
  context "when the association has invalid documents" do
161
161
 
162
- let(:associated) do
163
- double(valid?: false, flagged_for_destroy?: false)
164
- end
165
-
166
162
  before do
167
- expect(associated).to receive(:validated?).and_return(false)
168
- validator.validate_each(person, :addresses, [ associated ])
163
+ person.addresses << Address.new(street: '123')
164
+ validator.validate(person)
169
165
  end
170
166
 
171
167
  it "adds errors to the parent document" do
@@ -175,13 +171,10 @@ describe Mongoid::Validatable::AssociatedValidator do
175
171
 
176
172
  context "when the association has all valid documents" do
177
173
 
178
- let(:associated) do
179
- double(valid?: true, flagged_for_destroy?: false)
180
- end
181
-
182
174
  before do
183
- expect(associated).to receive(:validated?).and_return(false)
184
- validator.validate_each(person, :addresses, [ associated ])
175
+ person.addresses << Address.new(street: '123 First St')
176
+ person.addresses << Address.new(street: '456 Second St')
177
+ validator.validate(person)
185
178
  end
186
179
 
187
180
  it "adds no errors" do
@@ -287,7 +287,7 @@ describe Mongoid::Validatable::PresenceValidator do
287
287
  it "does not save the association target" do
288
288
  child.persisted?.should be false
289
289
 
290
- expect { child.reload }.to raise_error(Mongoid::Errors::DocumentNotFound)
290
+ expect { child.reload }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class HomAccreditation with id\(s\)/)
291
291
  end
292
292
  end
293
293
  end
@@ -120,7 +120,7 @@ describe Mongoid::Validatable::UniquenessValidator do
120
120
  it "adds the uniqueness error to the aliased field name" do
121
121
  dictionary.valid?
122
122
  expect(dictionary.errors).to have_key(:language)
123
- expect(dictionary.errors[:language]).to eq([ "is already taken" ])
123
+ expect(dictionary.errors[:language]).to eq([ "has already been taken" ])
124
124
  end
125
125
  end
126
126
 
@@ -137,7 +137,7 @@ describe Mongoid::Validatable::UniquenessValidator do
137
137
  it "adds the uniqueness error to the underlying field name" do
138
138
  dictionary.valid?
139
139
  expect(dictionary.errors).to have_key(:l)
140
- expect(dictionary.errors[:l]).to eq([ "is already taken" ])
140
+ expect(dictionary.errors[:l]).to eq([ "has already been taken" ])
141
141
  end
142
142
  end
143
143
  end
@@ -239,7 +239,7 @@ describe Mongoid::Validatable::UniquenessValidator do
239
239
 
240
240
  it "adds the uniqueness error" do
241
241
  dictionary.valid?
242
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
242
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
243
243
  end
244
244
  end
245
245
 
@@ -260,7 +260,7 @@ describe Mongoid::Validatable::UniquenessValidator do
260
260
 
261
261
  it "adds the uniqueness error" do
262
262
  dictionary.valid?
263
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
263
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
264
264
  end
265
265
  end
266
266
  end
@@ -330,7 +330,7 @@ describe Mongoid::Validatable::UniquenessValidator do
330
330
 
331
331
  it "adds the uniqueness error" do
332
332
  dictionary.valid?
333
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
333
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
334
334
  end
335
335
  end
336
336
 
@@ -351,7 +351,7 @@ describe Mongoid::Validatable::UniquenessValidator do
351
351
 
352
352
  it "adds the uniqueness error" do
353
353
  dictionary.valid?
354
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
354
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
355
355
  end
356
356
  end
357
357
  end
@@ -399,7 +399,7 @@ describe Mongoid::Validatable::UniquenessValidator do
399
399
 
400
400
  it "adds the uniqueness error" do
401
401
  dictionary.valid?
402
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
402
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
403
403
  end
404
404
  end
405
405
  end
@@ -460,7 +460,7 @@ describe Mongoid::Validatable::UniquenessValidator do
460
460
 
461
461
  it "adds the uniqueness error" do
462
462
  dictionary.valid?
463
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
463
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
464
464
  end
465
465
  end
466
466
 
@@ -623,7 +623,7 @@ describe Mongoid::Validatable::UniquenessValidator do
623
623
 
624
624
  it "adds the uniqueness errors" do
625
625
  dictionary.valid?
626
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
626
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
627
627
  end
628
628
  end
629
629
 
@@ -701,7 +701,7 @@ describe Mongoid::Validatable::UniquenessValidator do
701
701
 
702
702
  it "should set an error for associated object not being unique" do
703
703
  item.update_attributes(folder_id: personal_folder.id)
704
- expect(item.errors.messages[:name].first).to eq("is already taken")
704
+ expect(item.errors.messages[:name].first).to eq("has already been taken")
705
705
  end
706
706
  end
707
707
 
@@ -753,7 +753,7 @@ describe Mongoid::Validatable::UniquenessValidator do
753
753
 
754
754
  it "adds the uniqueness errors" do
755
755
  dictionary.valid?
756
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
756
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
757
757
  end
758
758
  end
759
759
 
@@ -792,7 +792,7 @@ describe Mongoid::Validatable::UniquenessValidator do
792
792
 
793
793
  it "adds the uniqueness errors" do
794
794
  dictionary.valid?
795
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
795
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
796
796
  end
797
797
  end
798
798
  end
@@ -815,7 +815,7 @@ describe Mongoid::Validatable::UniquenessValidator do
815
815
 
816
816
  expect do
817
817
  Dictionary.create!(name: "French-English", year: 1960)
818
- end.to raise_error(Mongoid::Errors::Validations, /Name is already taken/)
818
+ end.to raise_error(Mongoid::Errors::Validations, /Name has already been taken/)
819
819
 
820
820
  expect(Dictionary.all.size).to eq(1)
821
821
  end
@@ -954,7 +954,7 @@ describe Mongoid::Validatable::UniquenessValidator do
954
954
 
955
955
  it "adds the uniqueness errors" do
956
956
  dictionary.valid?
957
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
957
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
958
958
  end
959
959
  end
960
960
 
@@ -1018,7 +1018,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1018
1018
 
1019
1019
  it "adds the uniqueness error" do
1020
1020
  dictionary.valid?
1021
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1021
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1022
1022
  end
1023
1023
  end
1024
1024
 
@@ -1096,7 +1096,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1096
1096
 
1097
1097
  it "adds the uniqueness error" do
1098
1098
  dictionary.valid?
1099
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1099
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1100
1100
  end
1101
1101
  end
1102
1102
 
@@ -1218,7 +1218,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1218
1218
 
1219
1219
  it "adds the uniqueness error" do
1220
1220
  login.valid?
1221
- expect(login.errors[:username]).to eq([ "is already taken" ])
1221
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1222
1222
  end
1223
1223
  end
1224
1224
 
@@ -1323,7 +1323,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1323
1323
 
1324
1324
  it "adds the uniqueness errors" do
1325
1325
  login.valid?
1326
- expect(login.errors[:username]).to eq([ "is already taken" ])
1326
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1327
1327
  end
1328
1328
  end
1329
1329
 
@@ -1383,7 +1383,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1383
1383
 
1384
1384
  it "adds the uniqueness error" do
1385
1385
  login.valid?
1386
- expect(login.errors[:username]).to eq([ "is already taken" ])
1386
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1387
1387
  end
1388
1388
  end
1389
1389
 
@@ -1461,7 +1461,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1461
1461
 
1462
1462
  it "adds the uniqueness error" do
1463
1463
  login.valid?
1464
- expect(login.errors[:username]).to eq([ "is already taken" ])
1464
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1465
1465
  end
1466
1466
  end
1467
1467
 
@@ -1710,7 +1710,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1710
1710
 
1711
1711
  it "adds the uniqueness error" do
1712
1712
  definition.valid?
1713
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1713
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1714
1714
  end
1715
1715
  end
1716
1716
 
@@ -1838,7 +1838,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1838
1838
 
1839
1839
  it "adds the uniqueness errors" do
1840
1840
  definition.valid?
1841
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1841
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1842
1842
  end
1843
1843
  end
1844
1844
 
@@ -1976,7 +1976,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1976
1976
 
1977
1977
  it "adds the uniqueness errors" do
1978
1978
  definition.valid?
1979
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1979
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1980
1980
  end
1981
1981
  end
1982
1982
 
@@ -2040,7 +2040,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2040
2040
 
2041
2041
  it "adds the uniqueness error" do
2042
2042
  definition.valid?
2043
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2043
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2044
2044
  end
2045
2045
  end
2046
2046
 
@@ -2118,7 +2118,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2118
2118
 
2119
2119
  it "adds the uniqueness error" do
2120
2120
  definition.valid?
2121
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2121
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2122
2122
  end
2123
2123
  end
2124
2124
 
@@ -2214,7 +2214,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2214
2214
  it "adds the uniqueness error to the aliased field name" do
2215
2215
  definition.valid?
2216
2216
  expect(definition.errors).to have_key(:part)
2217
- expect(definition.errors[:part]).to eq([ "is already taken" ])
2217
+ expect(definition.errors[:part]).to eq([ "has already been taken" ])
2218
2218
  end
2219
2219
  end
2220
2220
 
@@ -2231,7 +2231,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2231
2231
  it "adds the uniqueness error to the underlying field name" do
2232
2232
  definition.valid?
2233
2233
  expect(definition.errors).to have_key(:p)
2234
- expect(definition.errors[:p]).to eq([ "is already taken" ])
2234
+ expect(definition.errors[:p]).to eq([ "has already been taken" ])
2235
2235
  end
2236
2236
  end
2237
2237
 
@@ -2250,7 +2250,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2250
2250
  it "adds the uniqueness error to the aliased field name" do
2251
2251
  definition.valid?
2252
2252
  expect(definition.errors).to have_key(:synonyms)
2253
- expect(definition.errors[:synonyms]).to eq([ "is already taken" ])
2253
+ expect(definition.errors[:synonyms]).to eq([ "has already been taken" ])
2254
2254
  end
2255
2255
  end
2256
2256
 
@@ -2267,7 +2267,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2267
2267
  it "adds the uniqueness error to the aliased field name" do
2268
2268
  definition.valid?
2269
2269
  expect(definition.errors).to have_key(:syn)
2270
- expect(definition.errors[:syn]).to eq([ "is already taken" ])
2270
+ expect(definition.errors[:syn]).to eq([ "has already been taken" ])
2271
2271
  end
2272
2272
  end
2273
2273
  end
@@ -2319,7 +2319,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2319
2319
 
2320
2320
  it "adds the uniqueness error" do
2321
2321
  word_origin.valid?
2322
- expect(word_origin.errors[:origin_id]).to eq([ "is already taken" ])
2322
+ expect(word_origin.errors[:origin_id]).to eq([ "has already been taken" ])
2323
2323
  end
2324
2324
  end
2325
2325
 
@@ -2444,7 +2444,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2444
2444
  it "should be invalid" do
2445
2445
  subclass_document_with_duplicated_name.tap do |d|
2446
2446
  expect(d).to be_invalid
2447
- expect(d.errors[:name]).to eq([ "is already taken" ])
2447
+ expect(d.errors[:name]).to eq([ "has already been taken" ])
2448
2448
  end
2449
2449
  end
2450
2450
  end
@@ -2472,4 +2472,31 @@ describe Mongoid::Validatable::UniquenessValidator do
2472
2472
  }.to raise_error(Mongo::Error::OperationFailure)
2473
2473
  end
2474
2474
  end
2475
+
2476
+ describe "i18n" do
2477
+
2478
+ context 'when using a different locale' do
2479
+ with_default_i18n_configs
2480
+
2481
+ before do
2482
+ I18n.locale = :fr
2483
+ # Translation key location is as per rails-i18n gem.
2484
+ # See: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en.yml
2485
+ I18n.backend.store_translations(:fr, { errors: { messages: { taken: 'est déjà utilisé(e)' } } })
2486
+ end
2487
+
2488
+ after do
2489
+ # i18n 1.0 requires +send+ because +translations+ aren't public.
2490
+ # Newer i18n versions have it as public.
2491
+ I18n.backend.send(:translations).delete(:fr)
2492
+ end
2493
+
2494
+ it "correctly translates the error message" do
2495
+ Circus.create!(slogan: 'The Greatest Show on Mars')
2496
+ dict = Circus.new(slogan: 'The Greatest Show on Mars')
2497
+ dict.valid?
2498
+ expect(dict.errors.messages[:slogan]).to eq(["est déjà utilisé(e)"])
2499
+ end
2500
+ end
2501
+ end
2475
2502
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe Mongoid::Warnings do
6
+
7
+ describe ".warn_*" do
8
+
9
+ context "when calling a warn_* method" do
10
+
11
+ let(:id) { :geo_haystack_deprecated }
12
+ let(:message) do
13
+ 'The geoHaystack type is deprecated.'
14
+ end
15
+
16
+ before do
17
+ warn_id = id
18
+ Mongoid::Warnings.class_eval do
19
+ instance_variable_set("@#{warn_id}", false)
20
+ end
21
+ end
22
+
23
+ it "logs the warning" do
24
+ expect_any_instance_of(Logger).to receive(:warn).once.with(message)
25
+ Mongoid::Warnings.send("warn_#{id}")
26
+ end
27
+
28
+ it "logs the warning only once" do
29
+ expect_any_instance_of(Logger).to receive(:warn).once.with(message)
30
+ Mongoid::Warnings.send("warn_#{id}")
31
+ Mongoid::Warnings.send("warn_#{id}")
32
+ end
33
+ end
34
+ end
35
+ end
data/spec/mongoid_spec.rb CHANGED
@@ -13,22 +13,46 @@ describe Mongoid do
13
13
  end
14
14
  end
15
15
 
16
- context "when a block is supplied" do
16
+ context "when a block is given" do
17
+ config_override :preload_models, false
17
18
 
18
- before do
19
- Mongoid.configure do |config|
20
- config.preload_models = true
19
+ context "with arity 0" do
20
+
21
+ before do
22
+ Mongoid.configure do
23
+ config.preload_models = true
24
+ end
25
+ end
26
+
27
+ it "sets the values on the config instance" do
28
+ expect(Mongoid.preload_models).to be true
21
29
  end
22
30
  end
23
31
 
24
- after do
25
- Mongoid.configure do |config|
26
- config.preload_models = false
32
+ context "with arity 1" do
33
+
34
+ before do
35
+ Mongoid.configure do |config|
36
+ config.preload_models = true
37
+ end
38
+ end
39
+
40
+ it "sets the values on the config instance" do
41
+ expect(Mongoid.preload_models).to be true
27
42
  end
28
43
  end
29
44
 
30
- it "sets the values on the config instance" do
31
- expect(Mongoid.preload_models).to be true
45
+ context "with arity 2" do
46
+
47
+ before do
48
+ Mongoid.configure do |config, _other|
49
+ config.preload_models = true
50
+ end
51
+ end
52
+
53
+ it "sets the values on the config instance" do
54
+ expect(Mongoid.preload_models).to be true
55
+ end
32
56
  end
33
57
  end
34
58
  end
@@ -51,14 +75,8 @@ describe Mongoid do
51
75
  end
52
76
 
53
77
  it "disconnects from all active clients" do
54
- method_name = if Gem::Version.new(Mongo::VERSION) >= Gem::Version.new('2.19.0')
55
- :close
56
- else
57
- :disconnect!
58
- end
59
-
60
78
  clients.each do |client|
61
- expect(client.cluster).to receive(method_name).and_call_original
79
+ expect(client).to receive(:close).and_call_original
62
80
  end
63
81
  Mongoid.disconnect_clients
64
82
  end
@@ -30,11 +30,11 @@ describe "Mongoid::Railties::ControllerRuntime" do
30
30
 
31
31
  clear_metric!
32
32
  instance.succeeded event_payload
33
- expect(collector.runtime).to eq(42)
33
+ expect(collector.runtime).to eq(42000)
34
34
 
35
35
  clear_metric!
36
36
  instance.failed event_payload
37
- expect(collector.runtime).to eq(42)
37
+ expect(collector.runtime).to eq(42000)
38
38
  end
39
39
 
40
40
  it "resets the metric and returns the value" do
@@ -30,6 +30,7 @@ describe "Rails::Mongoid" do
30
30
  end
31
31
 
32
32
  context "when preload models config is false" do
33
+ config_override :preload_models, false
33
34
 
34
35
  let(:files) do
35
36
  [
@@ -38,10 +39,6 @@ describe "Rails::Mongoid" do
38
39
  ]
39
40
  end
40
41
 
41
- before(:all) do
42
- Mongoid.preload_models = false
43
- end
44
-
45
42
  it "does not load any models" do
46
43
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
47
44
  expect(Rails::Mongoid).to receive(:load_model).never
@@ -50,10 +47,7 @@ describe "Rails::Mongoid" do
50
47
  end
51
48
 
52
49
  context "when preload models config is true" do
53
-
54
- before(:all) do
55
- Mongoid.preload_models = true
56
- end
50
+ config_override :preload_models, true
57
51
 
58
52
  context "when all models are in the models directory" do
59
53
 
@@ -112,6 +106,7 @@ describe "Rails::Mongoid" do
112
106
  end
113
107
 
114
108
  context "even when preload models config is false" do
109
+ config_override :preload_models, false
115
110
 
116
111
  let(:files) do
117
112
  [
@@ -120,10 +115,6 @@ describe "Rails::Mongoid" do
120
115
  ]
121
116
  end
122
117
 
123
- before(:all) do
124
- Mongoid.preload_models = false
125
- end
126
-
127
118
  it "loads all models" do
128
119
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
129
120
  expect(Rails::Mongoid).to receive(:load_model).with("address")
@@ -133,6 +124,7 @@ describe "Rails::Mongoid" do
133
124
  end
134
125
 
135
126
  context "when list of models to load was configured" do
127
+ config_override :preload_models, %w(user AddressNumber)
136
128
 
137
129
  let(:files) do
138
130
  [
@@ -141,10 +133,6 @@ describe "Rails::Mongoid" do
141
133
  ]
142
134
  end
143
135
 
144
- before(:all) do
145
- Mongoid.preload_models = ["user", "AddressNumber"]
146
- end
147
-
148
136
  it "loads selected models only" do
149
137
  allow(Dir).to receive(:glob).with("/rails/root/app/models/**/*.rb").and_return(files)
150
138
  expect(Rails::Mongoid).to receive(:load_model).with("user")
data/spec/spec_helper.rb CHANGED
@@ -124,6 +124,11 @@ end
124
124
 
125
125
  I18n.config.enforce_available_locales = false
126
126
 
127
+
128
+ if %w(yes true 1).include?((ENV['TEST_I18N_FALLBACKS'] || '').downcase)
129
+ require "i18n/backend/fallbacks"
130
+ end
131
+
127
132
  # The user must be created before any of the tests are loaded, until
128
133
  # https://jira.mongodb.org/browse/MONGOID-4827 is implemented.
129
134
  client = Mongo::Client.new(SpecConfig.instance.addresses, server_selection_timeout: 3.03)