mongoid 7.1.1 → 8.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1094) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +20 -20
  4. data/README.md +15 -8
  5. data/Rakefile +61 -5
  6. data/lib/config/locales/en.yml +162 -56
  7. data/lib/mongoid/association/accessors.rb +89 -40
  8. data/lib/mongoid/association/bindable.rb +50 -23
  9. data/lib/mongoid/association/builders.rb +5 -12
  10. data/lib/mongoid/association/constrainable.rb +1 -5
  11. data/lib/mongoid/association/depending.rb +5 -17
  12. data/lib/mongoid/association/eager_loadable.rb +29 -10
  13. data/lib/mongoid/association/embedded/batchable.rb +64 -52
  14. data/lib/mongoid/association/embedded/cyclic.rb +3 -12
  15. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -9
  16. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -5
  17. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -16
  18. data/lib/mongoid/association/embedded/embedded_in.rb +4 -26
  19. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -7
  20. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -6
  21. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +110 -92
  22. data/lib/mongoid/association/embedded/embeds_many.rb +4 -34
  23. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
  24. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -8
  25. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +50 -19
  26. data/lib/mongoid/association/embedded/embeds_one.rb +5 -31
  27. data/lib/mongoid/association/embedded.rb +0 -1
  28. data/lib/mongoid/association/macros.rb +27 -5
  29. data/lib/mongoid/association/many.rb +14 -27
  30. data/lib/mongoid/association/marshalable.rb +0 -5
  31. data/lib/mongoid/association/nested/many.rb +6 -16
  32. data/lib/mongoid/association/nested/nested_buildable.rb +4 -13
  33. data/lib/mongoid/association/nested/one.rb +48 -23
  34. data/lib/mongoid/association/nested.rb +0 -3
  35. data/lib/mongoid/association/one.rb +2 -11
  36. data/lib/mongoid/association/options.rb +9 -42
  37. data/lib/mongoid/association/proxy.rb +22 -27
  38. data/lib/mongoid/association/referenced/auto_save.rb +6 -14
  39. data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -8
  40. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +5 -6
  41. data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
  42. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -19
  43. data/lib/mongoid/association/referenced/belongs_to.rb +11 -36
  44. data/lib/mongoid/association/referenced/counter_cache.rb +12 -25
  45. data/lib/mongoid/association/referenced/eager.rb +5 -26
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +81 -51
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +17 -41
  51. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
  52. data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
  53. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
  54. data/lib/mongoid/association/referenced/has_many/enumerable.rb +438 -461
  55. data/lib/mongoid/association/referenced/has_many/proxy.rb +58 -84
  56. data/lib/mongoid/association/referenced/has_many.rb +15 -42
  57. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
  58. data/lib/mongoid/association/referenced/has_one/buildable.rb +12 -5
  59. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
  60. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +7 -22
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -16
  62. data/lib/mongoid/association/referenced/has_one.rb +12 -35
  63. data/lib/mongoid/association/referenced/syncable.rb +4 -21
  64. data/lib/mongoid/association/referenced.rb +0 -1
  65. data/lib/mongoid/association/reflections.rb +4 -5
  66. data/lib/mongoid/association/relatable.rb +46 -71
  67. data/lib/mongoid/association.rb +5 -22
  68. data/lib/mongoid/atomic/modifiers.rb +7 -54
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +19 -5
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
  71. data/lib/mongoid/atomic/paths/embedded.rb +0 -3
  72. data/lib/mongoid/atomic/paths/root.rb +0 -5
  73. data/lib/mongoid/atomic/paths.rb +0 -1
  74. data/lib/mongoid/atomic.rb +40 -47
  75. data/lib/mongoid/attributes/dynamic.rb +5 -22
  76. data/lib/mongoid/attributes/nested.rb +6 -11
  77. data/lib/mongoid/attributes/processing.rb +11 -21
  78. data/lib/mongoid/attributes/projector.rb +119 -0
  79. data/lib/mongoid/attributes/readonly.rb +3 -8
  80. data/lib/mongoid/attributes.rb +82 -88
  81. data/lib/mongoid/cacheable.rb +4 -9
  82. data/lib/mongoid/changeable.rb +148 -69
  83. data/lib/mongoid/clients/factory.rb +41 -17
  84. data/lib/mongoid/clients/options.rb +13 -14
  85. data/lib/mongoid/clients/sessions.rb +8 -11
  86. data/lib/mongoid/clients/storage_options.rb +7 -17
  87. data/lib/mongoid/clients/validators/storage.rb +3 -24
  88. data/lib/mongoid/clients/validators.rb +0 -1
  89. data/lib/mongoid/clients.rb +1 -10
  90. data/lib/mongoid/collection_configurable.rb +58 -0
  91. data/lib/mongoid/composable.rb +3 -7
  92. data/lib/mongoid/config/defaults.rb +60 -0
  93. data/lib/mongoid/config/environment.rb +28 -5
  94. data/lib/mongoid/config/options.rb +0 -11
  95. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  96. data/lib/mongoid/config/validators/client.rb +6 -23
  97. data/lib/mongoid/config/validators/option.rb +0 -3
  98. data/lib/mongoid/config/validators.rb +1 -1
  99. data/lib/mongoid/config.rb +183 -39
  100. data/lib/mongoid/contextual/aggregable/memory.rb +37 -26
  101. data/lib/mongoid/contextual/aggregable/mongo.rb +29 -32
  102. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  103. data/lib/mongoid/contextual/aggregable.rb +17 -0
  104. data/lib/mongoid/contextual/atomic.rb +7 -27
  105. data/lib/mongoid/contextual/command.rb +0 -5
  106. data/lib/mongoid/contextual/geo_near.rb +8 -41
  107. data/lib/mongoid/contextual/map_reduce.rb +2 -33
  108. data/lib/mongoid/contextual/memory.rb +383 -79
  109. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  110. data/lib/mongoid/contextual/mongo.rb +636 -283
  111. data/lib/mongoid/contextual/none.rb +262 -31
  112. data/lib/mongoid/contextual/queryable.rb +1 -4
  113. data/lib/mongoid/contextual.rb +14 -7
  114. data/lib/mongoid/copyable.rb +39 -16
  115. data/lib/mongoid/criteria/findable.rb +9 -19
  116. data/lib/mongoid/criteria/includable.rb +27 -31
  117. data/lib/mongoid/criteria/inspectable.rb +0 -3
  118. data/lib/mongoid/criteria/marshalable.rb +10 -7
  119. data/lib/mongoid/criteria/modifiable.rb +2 -20
  120. data/lib/mongoid/criteria/options.rb +0 -3
  121. data/lib/mongoid/criteria/permission.rb +1 -2
  122. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -15
  123. data/lib/mongoid/criteria/queryable/expandable.rb +0 -25
  124. data/lib/mongoid/criteria/queryable/extensions/array.rb +4 -40
  125. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -7
  126. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -6
  127. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -8
  128. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -6
  129. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -40
  130. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
  131. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -20
  132. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -29
  133. data/lib/mongoid/criteria/queryable/extensions/range.rb +46 -16
  134. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -18
  135. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -4
  136. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -31
  137. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -21
  138. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -8
  139. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +16 -6
  140. data/lib/mongoid/criteria/queryable/extensions.rb +0 -5
  141. data/lib/mongoid/criteria/queryable/key.rb +6 -19
  142. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  143. data/lib/mongoid/criteria/queryable/mergeable.rb +123 -38
  144. data/lib/mongoid/criteria/queryable/optional.rb +11 -62
  145. data/lib/mongoid/criteria/queryable/options.rb +2 -21
  146. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -14
  147. data/lib/mongoid/criteria/queryable/selectable.rb +138 -125
  148. data/lib/mongoid/criteria/queryable/selector.rb +94 -30
  149. data/lib/mongoid/criteria/queryable/smash.rb +40 -18
  150. data/lib/mongoid/criteria/queryable/storable.rb +14 -10
  151. data/lib/mongoid/criteria/queryable.rb +11 -13
  152. data/lib/mongoid/criteria/scopable.rb +27 -21
  153. data/lib/mongoid/criteria/translator.rb +45 -0
  154. data/lib/mongoid/criteria.rb +88 -108
  155. data/lib/mongoid/deprecable.rb +36 -0
  156. data/lib/mongoid/deprecation.rb +25 -0
  157. data/lib/mongoid/document.rb +149 -99
  158. data/lib/mongoid/equality.rb +32 -16
  159. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  160. data/lib/mongoid/errors/callback.rb +0 -3
  161. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  162. data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
  163. data/lib/mongoid/errors/delete_restriction.rb +8 -12
  164. data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
  165. data/lib/mongoid/errors/document_not_found.rb +33 -21
  166. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  167. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  168. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  169. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
  170. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  171. data/lib/mongoid/errors/invalid_collection.rb +0 -1
  172. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  173. data/lib/mongoid/errors/invalid_config_option.rb +1 -4
  174. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -4
  175. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +24 -0
  176. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  177. data/lib/mongoid/errors/invalid_elem_match_operator.rb +32 -0
  178. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +25 -0
  179. data/lib/mongoid/errors/invalid_expression_operator.rb +27 -0
  180. data/lib/mongoid/errors/invalid_field.rb +6 -7
  181. data/lib/mongoid/errors/invalid_field_operator.rb +32 -0
  182. data/lib/mongoid/errors/invalid_field_option.rb +0 -3
  183. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  184. data/lib/mongoid/errors/invalid_find.rb +0 -3
  185. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  186. data/lib/mongoid/errors/invalid_includes.rb +0 -3
  187. data/lib/mongoid/errors/invalid_index.rb +0 -3
  188. data/lib/mongoid/errors/invalid_options.rb +0 -3
  189. data/lib/mongoid/errors/invalid_path.rb +0 -3
  190. data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
  191. data/lib/mongoid/errors/invalid_query.rb +40 -0
  192. data/lib/mongoid/errors/invalid_relation.rb +1 -8
  193. data/lib/mongoid/errors/invalid_relation_option.rb +1 -4
  194. data/lib/mongoid/errors/invalid_scope.rb +0 -3
  195. data/lib/mongoid/errors/invalid_session_use.rb +1 -6
  196. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
  197. data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
  198. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -3
  199. data/lib/mongoid/errors/invalid_time.rb +0 -3
  200. data/lib/mongoid/errors/inverse_not_found.rb +0 -3
  201. data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
  202. data/lib/mongoid/errors/mixed_relations.rb +0 -3
  203. data/lib/mongoid/errors/mongoid_error.rb +4 -13
  204. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
  205. data/lib/mongoid/errors/no_client_config.rb +2 -5
  206. data/lib/mongoid/errors/no_client_database.rb +1 -4
  207. data/lib/mongoid/errors/no_client_hosts.rb +1 -4
  208. data/lib/mongoid/errors/no_clients_config.rb +0 -3
  209. data/lib/mongoid/errors/no_default_client.rb +1 -4
  210. data/lib/mongoid/errors/no_environment.rb +0 -3
  211. data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
  212. data/lib/mongoid/errors/no_metadata.rb +0 -3
  213. data/lib/mongoid/errors/no_parent.rb +0 -3
  214. data/lib/mongoid/errors/readonly_attribute.rb +1 -4
  215. data/lib/mongoid/errors/readonly_document.rb +1 -6
  216. data/lib/mongoid/errors/scope_overwrite.rb +0 -1
  217. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -2
  218. data/lib/mongoid/errors/unknown_attribute.rb +1 -4
  219. data/lib/mongoid/errors/unknown_model.rb +0 -3
  220. data/lib/mongoid/errors/unsaved_document.rb +1 -2
  221. data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
  222. data/lib/mongoid/errors/validations.rb +0 -1
  223. data/lib/mongoid/errors.rb +15 -4
  224. data/lib/mongoid/evolvable.rb +1 -4
  225. data/lib/mongoid/extensions/array.rb +12 -36
  226. data/lib/mongoid/extensions/big_decimal.rb +33 -21
  227. data/lib/mongoid/extensions/binary.rb +42 -0
  228. data/lib/mongoid/extensions/boolean.rb +8 -6
  229. data/lib/mongoid/extensions/date.rb +26 -29
  230. data/lib/mongoid/extensions/date_time.rb +1 -10
  231. data/lib/mongoid/extensions/decimal128.rb +0 -5
  232. data/lib/mongoid/extensions/false_class.rb +3 -8
  233. data/lib/mongoid/extensions/float.rb +7 -11
  234. data/lib/mongoid/extensions/hash.rb +19 -37
  235. data/lib/mongoid/extensions/integer.rb +7 -13
  236. data/lib/mongoid/extensions/module.rb +1 -4
  237. data/lib/mongoid/extensions/nil_class.rb +0 -5
  238. data/lib/mongoid/extensions/object.rb +11 -48
  239. data/lib/mongoid/extensions/object_id.rb +0 -7
  240. data/lib/mongoid/extensions/range.rb +40 -20
  241. data/lib/mongoid/extensions/regexp.rb +12 -8
  242. data/lib/mongoid/extensions/set.rb +11 -11
  243. data/lib/mongoid/extensions/string.rb +12 -52
  244. data/lib/mongoid/extensions/symbol.rb +4 -22
  245. data/lib/mongoid/extensions/time.rb +28 -26
  246. data/lib/mongoid/extensions/time_with_zone.rb +14 -11
  247. data/lib/mongoid/extensions/true_class.rb +3 -8
  248. data/lib/mongoid/extensions.rb +17 -3
  249. data/lib/mongoid/factory.rb +80 -16
  250. data/lib/mongoid/fields/foreign_key.rb +11 -25
  251. data/lib/mongoid/fields/localized.rb +19 -15
  252. data/lib/mongoid/fields/standard.rb +17 -40
  253. data/lib/mongoid/fields/validators/macro.rb +25 -24
  254. data/lib/mongoid/fields/validators.rb +0 -1
  255. data/lib/mongoid/fields.rb +346 -75
  256. data/lib/mongoid/findable.rb +107 -31
  257. data/lib/mongoid/indexable/specification.rb +2 -17
  258. data/lib/mongoid/indexable/validators/options.rb +6 -9
  259. data/lib/mongoid/indexable.rb +3 -20
  260. data/lib/mongoid/inspectable.rb +2 -11
  261. data/lib/mongoid/interceptable.rb +79 -41
  262. data/lib/mongoid/loggable.rb +0 -9
  263. data/lib/mongoid/matchable.rb +2 -155
  264. data/lib/mongoid/matcher/all.rb +22 -0
  265. data/lib/mongoid/matcher/and.rb +21 -0
  266. data/lib/mongoid/matcher/bits.rb +41 -0
  267. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  268. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  269. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  270. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  271. data/lib/mongoid/matcher/elem_match.rb +36 -0
  272. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  273. data/lib/mongoid/matcher/eq.rb +11 -0
  274. data/lib/mongoid/matcher/eq_impl.rb +67 -0
  275. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +26 -0
  276. data/lib/mongoid/matcher/exists.rb +15 -0
  277. data/lib/mongoid/matcher/expression.rb +35 -0
  278. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  279. data/lib/mongoid/matcher/field_expression.rb +62 -0
  280. data/lib/mongoid/matcher/field_operator.rb +54 -0
  281. data/lib/mongoid/matcher/gt.rb +17 -0
  282. data/lib/mongoid/matcher/gte.rb +17 -0
  283. data/lib/mongoid/matcher/in.rb +25 -0
  284. data/lib/mongoid/matcher/lt.rb +17 -0
  285. data/lib/mongoid/matcher/lte.rb +17 -0
  286. data/lib/mongoid/matcher/mod.rb +17 -0
  287. data/lib/mongoid/matcher/ne.rb +16 -0
  288. data/lib/mongoid/matcher/nin.rb +11 -0
  289. data/lib/mongoid/matcher/nor.rb +25 -0
  290. data/lib/mongoid/matcher/not.rb +29 -0
  291. data/lib/mongoid/matcher/or.rb +21 -0
  292. data/lib/mongoid/matcher/regex.rb +41 -0
  293. data/lib/mongoid/matcher/size.rb +26 -0
  294. data/lib/mongoid/matcher/type.rb +99 -0
  295. data/lib/mongoid/matcher.rb +130 -0
  296. data/lib/mongoid/persistable/creatable.rb +20 -29
  297. data/lib/mongoid/persistable/deletable.rb +4 -22
  298. data/lib/mongoid/persistable/destroyable.rb +9 -10
  299. data/lib/mongoid/persistable/incrementable.rb +0 -5
  300. data/lib/mongoid/persistable/logical.rb +0 -5
  301. data/lib/mongoid/persistable/poppable.rb +0 -5
  302. data/lib/mongoid/persistable/pullable.rb +0 -7
  303. data/lib/mongoid/persistable/pushable.rb +4 -8
  304. data/lib/mongoid/persistable/renamable.rb +0 -5
  305. data/lib/mongoid/persistable/savable.rb +13 -8
  306. data/lib/mongoid/persistable/settable.rb +0 -5
  307. data/lib/mongoid/persistable/unsettable.rb +2 -7
  308. data/lib/mongoid/persistable/updatable.rb +96 -29
  309. data/lib/mongoid/persistable/upsertable.rb +20 -8
  310. data/lib/mongoid/persistable.rb +6 -26
  311. data/lib/mongoid/persistence_context.rb +71 -43
  312. data/lib/mongoid/positional.rb +0 -5
  313. data/lib/mongoid/query_cache.rb +16 -236
  314. data/lib/mongoid/railtie.rb +0 -15
  315. data/lib/mongoid/railties/controller_runtime.rb +1 -2
  316. data/lib/mongoid/railties/database.rake +7 -2
  317. data/lib/mongoid/reloadable.rb +17 -20
  318. data/lib/mongoid/scopable.rb +32 -56
  319. data/lib/mongoid/selectable.rb +5 -17
  320. data/lib/mongoid/serializable.rb +11 -22
  321. data/lib/mongoid/shardable.rb +49 -16
  322. data/lib/mongoid/stateful.rb +57 -19
  323. data/lib/mongoid/stringified_symbol.rb +52 -0
  324. data/lib/mongoid/tasks/database.rake +12 -0
  325. data/lib/mongoid/tasks/database.rb +59 -11
  326. data/lib/mongoid/threaded/lifecycle.rb +5 -26
  327. data/lib/mongoid/threaded.rb +42 -67
  328. data/lib/mongoid/timestamps/created/short.rb +0 -1
  329. data/lib/mongoid/timestamps/created.rb +1 -2
  330. data/lib/mongoid/timestamps/short.rb +0 -1
  331. data/lib/mongoid/timestamps/timeless.rb +0 -7
  332. data/lib/mongoid/timestamps/updated/short.rb +0 -1
  333. data/lib/mongoid/timestamps/updated.rb +2 -5
  334. data/lib/mongoid/timestamps.rb +0 -1
  335. data/lib/mongoid/touchable.rb +34 -13
  336. data/lib/mongoid/traversable.rb +181 -59
  337. data/lib/mongoid/utils.rb +22 -0
  338. data/lib/mongoid/validatable/associated.rb +1 -4
  339. data/lib/mongoid/validatable/format.rb +0 -1
  340. data/lib/mongoid/validatable/length.rb +0 -1
  341. data/lib/mongoid/validatable/localizable.rb +1 -4
  342. data/lib/mongoid/validatable/macros.rb +5 -14
  343. data/lib/mongoid/validatable/presence.rb +6 -13
  344. data/lib/mongoid/validatable/queryable.rb +0 -3
  345. data/lib/mongoid/validatable/uniqueness.rb +26 -40
  346. data/lib/mongoid/validatable.rb +9 -27
  347. data/lib/mongoid/version.rb +1 -2
  348. data/lib/mongoid/warnings.rb +44 -0
  349. data/lib/mongoid.rb +42 -18
  350. data/lib/rails/generators/mongoid/config/config_generator.rb +8 -2
  351. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +12 -6
  352. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  353. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
  354. data/lib/rails/generators/mongoid_generator.rb +0 -1
  355. data/lib/rails/mongoid.rb +0 -3
  356. data/spec/README.md +19 -4
  357. data/spec/config/mongoid.yml +16 -0
  358. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  359. data/spec/integration/app_spec.rb +345 -0
  360. data/spec/integration/associations/belongs_to_spec.rb +18 -1
  361. data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
  362. data/spec/integration/associations/embedded_spec.rb +163 -1
  363. data/spec/integration/associations/embeds_many_spec.rb +219 -0
  364. data/spec/integration/associations/embeds_one_spec.rb +41 -0
  365. data/spec/integration/associations/foreign_key_spec.rb +9 -1
  366. data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
  367. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  368. data/spec/integration/associations/has_many_spec.rb +128 -0
  369. data/spec/integration/associations/has_one_spec.rb +272 -0
  370. data/spec/integration/associations/nested_attributes_assignment_spec.rb +115 -0
  371. data/spec/integration/associations/reverse_population_spec.rb +0 -1
  372. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  373. data/spec/integration/associations/scope_option_spec.rb +101 -0
  374. data/spec/integration/atomic/modifiers_spec.rb +116 -0
  375. data/spec/integration/bson_regexp_raw_spec.rb +19 -0
  376. data/spec/integration/callbacks_models.rb +192 -0
  377. data/spec/integration/callbacks_spec.rb +584 -0
  378. data/spec/integration/contextual/empty_spec.rb +141 -0
  379. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  380. data/spec/integration/criteria/date_field_spec.rb +40 -0
  381. data/spec/integration/criteria/default_scope_spec.rb +51 -0
  382. data/spec/integration/criteria/logical_spec.rb +43 -0
  383. data/spec/integration/criteria/range_spec.rb +359 -0
  384. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  385. data/spec/integration/discriminator_key_spec.rb +391 -0
  386. data/spec/integration/discriminator_value_spec.rb +206 -0
  387. data/spec/integration/document_spec.rb +30 -1
  388. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  389. data/spec/integration/i18n_fallbacks_spec.rb +3 -19
  390. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +130 -45
  391. data/spec/integration/matcher_operator_data/all.yml +140 -0
  392. data/spec/integration/matcher_operator_data/and.yml +93 -0
  393. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  394. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  395. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  396. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  397. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  398. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  399. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  400. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  401. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  402. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  403. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  404. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  405. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  406. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  407. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  408. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  409. data/spec/integration/matcher_operator_data/in.yml +210 -0
  410. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  411. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  412. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  413. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  414. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  415. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  416. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  417. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  418. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  419. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  420. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  421. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  422. data/spec/integration/matcher_operator_data/not.yml +196 -0
  423. data/spec/integration/matcher_operator_data/or.yml +137 -0
  424. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  425. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  426. data/spec/integration/matcher_operator_data/size.yml +174 -0
  427. data/spec/integration/matcher_operator_data/type.yml +70 -0
  428. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  429. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  430. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  431. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  432. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  433. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  434. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  435. data/spec/integration/matcher_operator_data/type_decimal.yml +41 -0
  436. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  437. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  438. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  439. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  440. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  441. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  442. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  443. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  444. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  445. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  446. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  447. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  448. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  449. data/spec/integration/matcher_operator_spec.rb +122 -0
  450. data/spec/integration/matcher_spec.rb +283 -0
  451. data/spec/integration/persistence/range_field_spec.rb +350 -0
  452. data/spec/integration/server_query_spec.rb +141 -0
  453. data/spec/integration/shardable_spec.rb +20 -5
  454. data/spec/integration/stringified_symbol_field_spec.rb +203 -0
  455. data/spec/lite_spec_helper.rb +25 -9
  456. data/spec/mongoid/association/accessors_spec.rb +282 -78
  457. data/spec/mongoid/association/auto_save_spec.rb +72 -34
  458. data/spec/mongoid/association/builders_spec.rb +1 -2
  459. data/spec/mongoid/association/constrainable_spec.rb +0 -1
  460. data/spec/mongoid/association/counter_cache_spec.rb +33 -34
  461. data/spec/mongoid/association/depending_spec.rb +429 -339
  462. data/spec/mongoid/association/eager_spec.rb +6 -6
  463. data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
  464. data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
  465. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -2
  466. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -1
  467. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +150 -14
  468. data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
  469. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
  470. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -1
  471. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +704 -198
  472. data/spec/mongoid/association/embedded/embeds_many_models.rb +194 -1
  473. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -1
  474. data/spec/mongoid/association/embedded/embeds_many_spec.rb +78 -1
  475. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
  476. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -1
  477. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +36 -24
  478. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  479. data/spec/mongoid/association/embedded/embeds_one_models.rb +20 -1
  480. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
  481. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -3
  482. data/spec/mongoid/association/macros_spec.rb +9 -10
  483. data/spec/mongoid/association/nested/many_spec.rb +0 -1
  484. data/spec/mongoid/association/nested/one_spec.rb +16 -13
  485. data/spec/mongoid/association/options_spec.rb +0 -1
  486. data/spec/mongoid/association/polymorphic_spec.rb +0 -1
  487. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -2
  488. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +109 -17
  489. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
  490. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +112 -59
  491. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  492. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
  493. data/spec/mongoid/association/referenced/belongs_to_spec.rb +26 -22
  494. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -2
  495. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
  496. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
  497. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
  498. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +523 -372
  499. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +43 -1
  500. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
  501. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +56 -3
  502. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -2
  503. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +130 -1
  504. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
  505. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +413 -130
  506. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
  507. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +857 -503
  508. data/spec/mongoid/association/referenced/has_many_models.rb +59 -2
  509. data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
  510. data/spec/mongoid/association/referenced/has_many_spec.rb +46 -1
  511. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
  512. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +53 -10
  513. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
  514. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +133 -28
  515. data/spec/mongoid/association/referenced/has_one_models.rb +63 -1
  516. data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
  517. data/spec/mongoid/association/referenced/has_one_spec.rb +22 -2
  518. data/spec/mongoid/association/reflections_spec.rb +0 -1
  519. data/spec/mongoid/association/syncable_spec.rb +46 -33
  520. data/spec/mongoid/association_spec.rb +0 -1
  521. data/spec/mongoid/atomic/modifiers_spec.rb +47 -1
  522. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
  523. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
  524. data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
  525. data/spec/mongoid/atomic/paths_spec.rb +91 -13
  526. data/spec/mongoid/atomic_spec.rb +51 -7
  527. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  528. data/spec/mongoid/attributes/nested_spec.rb +147 -79
  529. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  530. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  531. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  532. data/spec/mongoid/attributes/projector_spec.rb +40 -0
  533. data/spec/mongoid/attributes/readonly_spec.rb +22 -23
  534. data/spec/mongoid/attributes_spec.rb +888 -62
  535. data/spec/mongoid/cacheable_spec.rb +4 -5
  536. data/spec/mongoid/changeable_spec.rb +464 -73
  537. data/spec/mongoid/clients/factory_spec.rb +91 -9
  538. data/spec/mongoid/clients/options_spec.rb +27 -19
  539. data/spec/mongoid/clients/sessions_spec.rb +27 -67
  540. data/spec/mongoid/clients/transactions_spec.rb +69 -35
  541. data/spec/mongoid/clients_spec.rb +187 -24
  542. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  543. data/spec/mongoid/composable_spec.rb +0 -1
  544. data/spec/mongoid/config/defaults_spec.rb +160 -0
  545. data/spec/mongoid/config/environment_spec.rb +124 -9
  546. data/spec/mongoid/config/options_spec.rb +0 -1
  547. data/spec/mongoid/config_spec.rb +465 -1
  548. data/spec/mongoid/contextual/aggregable/memory_spec.rb +431 -154
  549. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  550. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  551. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
  552. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  553. data/spec/mongoid/contextual/atomic_spec.rb +148 -86
  554. data/spec/mongoid/contextual/geo_near_spec.rb +28 -20
  555. data/spec/mongoid/contextual/map_reduce_spec.rb +20 -20
  556. data/spec/mongoid/contextual/memory_spec.rb +1826 -304
  557. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  558. data/spec/mongoid/contextual/mongo_spec.rb +3501 -1272
  559. data/spec/mongoid/contextual/none_spec.rb +78 -68
  560. data/spec/mongoid/copyable_spec.rb +657 -37
  561. data/spec/mongoid/copyable_spec_models.rb +28 -1
  562. data/spec/mongoid/criteria/findable_spec.rb +109 -234
  563. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  564. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  565. data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
  566. data/spec/mongoid/criteria/marshalable_spec.rb +18 -2
  567. data/spec/mongoid/criteria/modifiable_spec.rb +37 -38
  568. data/spec/mongoid/criteria/options_spec.rb +0 -1
  569. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
  570. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -74
  571. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -20
  572. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -27
  573. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -2
  574. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -1
  575. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -1
  576. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
  577. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -16
  578. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
  579. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
  580. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -8
  581. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
  582. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
  583. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -2
  584. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +7 -8
  585. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
  586. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +5 -71
  587. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -60
  588. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +30 -8
  589. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +39 -2
  590. data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
  591. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +143 -13
  592. data/spec/mongoid/criteria/queryable/optional_spec.rb +16 -486
  593. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -2
  594. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
  595. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
  596. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1186 -195
  597. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +38 -0
  598. data/spec/mongoid/criteria/queryable/selectable_spec.rb +307 -705
  599. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +589 -0
  600. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -4
  601. data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
  602. data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
  603. data/spec/mongoid/criteria/scopable_spec.rb +127 -1
  604. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  605. data/spec/mongoid/criteria_projection_spec.rb +406 -0
  606. data/spec/mongoid/criteria_spec.rb +1267 -1739
  607. data/spec/mongoid/document_fields_spec.rb +179 -5
  608. data/spec/mongoid/document_persistence_context_spec.rb +32 -0
  609. data/spec/mongoid/document_query_spec.rb +51 -1
  610. data/spec/mongoid/document_spec.rb +151 -88
  611. data/spec/mongoid/equality_spec.rb +142 -42
  612. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
  613. data/spec/mongoid/errors/callback_spec.rb +0 -1
  614. data/spec/mongoid/errors/delete_restriction_spec.rb +2 -3
  615. data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
  616. data/spec/mongoid/errors/document_not_found_spec.rb +76 -1
  617. data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
  618. data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +5 -6
  619. data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
  620. data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
  621. data/spec/mongoid/errors/invalid_field_spec.rb +1 -2
  622. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  623. data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
  624. data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
  625. data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
  626. data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
  627. data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
  628. data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
  629. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
  630. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
  631. data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
  632. data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
  633. data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
  634. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
  635. data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
  636. data/spec/mongoid/errors/mongoid_error_spec.rb +22 -9
  637. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
  638. data/spec/mongoid/errors/no_client_config_spec.rb +2 -3
  639. data/spec/mongoid/errors/no_client_database_spec.rb +3 -4
  640. data/spec/mongoid/errors/no_client_hosts_spec.rb +3 -4
  641. data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
  642. data/spec/mongoid/errors/no_environment_spec.rb +3 -4
  643. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
  644. data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
  645. data/spec/mongoid/errors/no_parent_spec.rb +0 -1
  646. data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
  647. data/spec/mongoid/errors/readonly_document_spec.rb +2 -3
  648. data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
  649. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -2
  650. data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
  651. data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
  652. data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
  653. data/spec/mongoid/errors/validations_spec.rb +0 -1
  654. data/spec/mongoid/extensions/array_spec.rb +16 -3
  655. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -213
  656. data/spec/mongoid/extensions/binary_spec.rb +44 -10
  657. data/spec/mongoid/extensions/boolean_spec.rb +68 -83
  658. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -4
  659. data/spec/mongoid/extensions/date_spec.rb +71 -2
  660. data/spec/mongoid/extensions/date_time_spec.rb +15 -10
  661. data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
  662. data/spec/mongoid/extensions/false_class_spec.rb +1 -2
  663. data/spec/mongoid/extensions/float_spec.rb +53 -75
  664. data/spec/mongoid/extensions/hash_spec.rb +30 -1
  665. data/spec/mongoid/extensions/integer_spec.rb +50 -65
  666. data/spec/mongoid/extensions/module_spec.rb +0 -1
  667. data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
  668. data/spec/mongoid/extensions/object_id_spec.rb +0 -1
  669. data/spec/mongoid/extensions/object_spec.rb +0 -1
  670. data/spec/mongoid/extensions/range_spec.rb +255 -55
  671. data/spec/mongoid/extensions/regexp_spec.rb +58 -34
  672. data/spec/mongoid/extensions/set_spec.rb +106 -1
  673. data/spec/mongoid/extensions/string_spec.rb +58 -31
  674. data/spec/mongoid/extensions/stringified_symbol_spec.rb +84 -0
  675. data/spec/mongoid/extensions/symbol_spec.rb +18 -26
  676. data/spec/mongoid/extensions/time_spec.rb +639 -107
  677. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -84
  678. data/spec/mongoid/extensions/true_class_spec.rb +1 -2
  679. data/spec/mongoid/extensions_spec.rb +14 -3
  680. data/spec/mongoid/factory_spec.rb +323 -30
  681. data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
  682. data/spec/mongoid/fields/localized_spec.rb +84 -42
  683. data/spec/mongoid/fields/standard_spec.rb +0 -1
  684. data/spec/mongoid/fields_spec.rb +855 -118
  685. data/spec/mongoid/findable_spec.rb +518 -65
  686. data/spec/mongoid/indexable/specification_spec.rb +2 -3
  687. data/spec/mongoid/indexable_spec.rb +85 -33
  688. data/spec/mongoid/inspectable_spec.rb +37 -3
  689. data/spec/mongoid/interceptable_spec.rb +702 -104
  690. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  691. data/spec/mongoid/loggable_spec.rb +0 -1
  692. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  693. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  694. data/spec/mongoid/matcher/extract_attribute_spec.rb +36 -0
  695. data/spec/mongoid/mongoizable_spec.rb +285 -0
  696. data/spec/mongoid/persistable/creatable_spec.rb +112 -30
  697. data/spec/mongoid/persistable/deletable_spec.rb +298 -19
  698. data/spec/mongoid/persistable/destroyable_spec.rb +226 -19
  699. data/spec/mongoid/persistable/incrementable_spec.rb +45 -9
  700. data/spec/mongoid/persistable/logical_spec.rb +41 -5
  701. data/spec/mongoid/persistable/poppable_spec.rb +40 -5
  702. data/spec/mongoid/persistable/pullable_spec.rb +80 -9
  703. data/spec/mongoid/persistable/pushable_spec.rb +80 -9
  704. data/spec/mongoid/persistable/renamable_spec.rb +39 -4
  705. data/spec/mongoid/persistable/savable_spec.rb +282 -26
  706. data/spec/mongoid/persistable/settable_spec.rb +76 -10
  707. data/spec/mongoid/persistable/unsettable_spec.rb +40 -5
  708. data/spec/mongoid/persistable/updatable_spec.rb +61 -50
  709. data/spec/mongoid/persistable/upsertable_spec.rb +91 -4
  710. data/spec/mongoid/persistable_spec.rb +3 -4
  711. data/spec/mongoid/persistence_context_spec.rb +57 -59
  712. data/spec/mongoid/positional_spec.rb +0 -1
  713. data/spec/mongoid/query_cache_middleware_spec.rb +7 -5
  714. data/spec/mongoid/query_cache_spec.rb +424 -68
  715. data/spec/mongoid/relations/proxy_spec.rb +7 -8
  716. data/spec/mongoid/reloadable_spec.rb +355 -27
  717. data/spec/mongoid/scopable_spec.rb +191 -39
  718. data/spec/mongoid/selectable_spec.rb +6 -7
  719. data/spec/mongoid/serializable_spec.rb +35 -39
  720. data/spec/mongoid/shardable_models.rb +15 -1
  721. data/spec/mongoid/shardable_spec.rb +181 -32
  722. data/spec/mongoid/stateful_spec.rb +151 -10
  723. data/spec/mongoid/tasks/database_rake_spec.rb +87 -14
  724. data/spec/mongoid/tasks/database_spec.rb +128 -2
  725. data/spec/mongoid/threaded_spec.rb +2 -3
  726. data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
  727. data/spec/mongoid/timestamps/created_spec.rb +1 -2
  728. data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
  729. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
  730. data/spec/mongoid/timestamps/updated_spec.rb +3 -4
  731. data/spec/mongoid/timestamps_spec.rb +398 -11
  732. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  733. data/spec/mongoid/touchable_spec.rb +525 -36
  734. data/spec/mongoid/touchable_spec_models.rb +59 -0
  735. data/spec/mongoid/traversable_spec.rb +1143 -2
  736. data/spec/mongoid/validatable/associated_spec.rb +0 -1
  737. data/spec/mongoid/validatable/format_spec.rb +0 -1
  738. data/spec/mongoid/validatable/length_spec.rb +0 -1
  739. data/spec/mongoid/validatable/numericality_spec.rb +0 -1
  740. data/spec/mongoid/validatable/presence_spec.rb +26 -23
  741. data/spec/mongoid/validatable/uniqueness_spec.rb +125 -99
  742. data/spec/mongoid/validatable_spec.rb +3 -4
  743. data/spec/mongoid/warnings_spec.rb +35 -0
  744. data/spec/mongoid_spec.rb +35 -10
  745. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -3
  746. data/spec/rails/mongoid_spec.rb +4 -17
  747. data/spec/shared/LICENSE +20 -0
  748. data/spec/shared/bin/get-mongodb-download-url +17 -0
  749. data/spec/shared/bin/s3-copy +45 -0
  750. data/spec/shared/bin/s3-upload +69 -0
  751. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  752. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  753. data/spec/shared/lib/mrss/constraints.rb +378 -0
  754. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  755. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  756. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  757. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  758. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  759. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  760. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  761. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  762. data/spec/shared/lib/mrss/utils.rb +37 -0
  763. data/spec/shared/share/Dockerfile.erb +321 -0
  764. data/spec/shared/share/haproxy-1.conf +16 -0
  765. data/spec/shared/share/haproxy-2.conf +17 -0
  766. data/spec/shared/shlib/config.sh +27 -0
  767. data/spec/shared/shlib/distro.sh +74 -0
  768. data/spec/shared/shlib/server.sh +416 -0
  769. data/spec/shared/shlib/set_env.sh +169 -0
  770. data/spec/spec_helper.rb +24 -54
  771. data/spec/support/authorization.rb +0 -1
  772. data/spec/support/client_registry.rb +9 -0
  773. data/spec/support/constraints.rb +34 -197
  774. data/spec/support/expectations.rb +0 -1
  775. data/spec/support/helpers.rb +1 -1
  776. data/spec/support/immutable_ids.rb +118 -0
  777. data/spec/support/macros.rb +109 -1
  778. data/spec/{app → support}/models/account.rb +1 -2
  779. data/spec/{app → support}/models/acolyte.rb +0 -1
  780. data/spec/{app → support}/models/actor.rb +1 -2
  781. data/spec/{app → support}/models/actress.rb +0 -1
  782. data/spec/{app → support}/models/address.rb +4 -1
  783. data/spec/{app → support}/models/address_component.rb +0 -1
  784. data/spec/{app → support}/models/address_number.rb +0 -1
  785. data/spec/{app → support}/models/agency.rb +0 -1
  786. data/spec/{app → support}/models/agent.rb +0 -1
  787. data/spec/{app → support}/models/album.rb +0 -1
  788. data/spec/{app → support}/models/alert.rb +0 -1
  789. data/spec/{app → support}/models/animal.rb +0 -1
  790. data/spec/{app → support}/models/answer.rb +0 -1
  791. data/spec/{app → support}/models/appointment.rb +0 -1
  792. data/spec/support/models/armrest.rb +9 -0
  793. data/spec/{app → support}/models/array_field.rb +0 -1
  794. data/spec/{app → support}/models/article.rb +0 -1
  795. data/spec/{app → support}/models/artist.rb +2 -2
  796. data/spec/{app → support}/models/artwork.rb +0 -1
  797. data/spec/support/models/audible_sound.rb +3 -0
  798. data/spec/{app → support}/models/audio.rb +0 -1
  799. data/spec/support/models/augmentation.rb +25 -0
  800. data/spec/{app → support}/models/author.rb +0 -1
  801. data/spec/{app → support}/models/baby.rb +0 -1
  802. data/spec/{app → support}/models/band.rb +8 -1
  803. data/spec/{app → support}/models/bar.rb +0 -1
  804. data/spec/{app → support}/models/basic.rb +0 -1
  805. data/spec/{app → support}/models/bed.rb +0 -1
  806. data/spec/{app → support}/models/big_palette.rb +0 -1
  807. data/spec/{app → support}/models/birthday.rb +0 -1
  808. data/spec/support/models/bolt.rb +7 -0
  809. data/spec/{app → support}/models/bomb.rb +0 -1
  810. data/spec/{app → support}/models/book.rb +1 -1
  811. data/spec/{app → support}/models/breed.rb +0 -1
  812. data/spec/{app → support}/models/browser.rb +1 -2
  813. data/spec/{app → support}/models/building.rb +2 -1
  814. data/spec/{app → support}/models/building_address.rb +0 -1
  815. data/spec/{app → support}/models/bus.rb +0 -1
  816. data/spec/{app → support}/models/business.rb +0 -1
  817. data/spec/{app → support}/models/callback_test.rb +0 -1
  818. data/spec/{app → support}/models/canvas.rb +1 -2
  819. data/spec/{app → support}/models/car.rb +0 -1
  820. data/spec/{app → support}/models/cat.rb +0 -1
  821. data/spec/support/models/catalog.rb +24 -0
  822. data/spec/{app → support}/models/category.rb +0 -1
  823. data/spec/{app → support}/models/child.rb +0 -1
  824. data/spec/{app → support}/models/child_doc.rb +3 -4
  825. data/spec/{app → support}/models/church.rb +0 -1
  826. data/spec/{app → support}/models/circle.rb +0 -1
  827. data/spec/{app → support}/models/circuit.rb +0 -1
  828. data/spec/{app → support}/models/circus.rb +3 -1
  829. data/spec/{app → support}/models/code.rb +2 -1
  830. data/spec/{app → support}/models/coding/pull_request.rb +0 -1
  831. data/spec/support/models/coding.rb +3 -0
  832. data/spec/{app → support}/models/comment.rb +0 -1
  833. data/spec/{app → support}/models/company.rb +0 -1
  834. data/spec/{app → support}/models/consumption_period.rb +0 -1
  835. data/spec/{app → support}/models/contextable_item.rb +0 -1
  836. data/spec/{app → support}/models/contractor.rb +0 -1
  837. data/spec/{app → support}/models/cookie.rb +0 -1
  838. data/spec/{app → support}/models/country_code.rb +2 -1
  839. data/spec/{app → support}/models/courier_job.rb +0 -1
  840. data/spec/support/models/cover.rb +10 -0
  841. data/spec/support/models/crate.rb +12 -0
  842. data/spec/support/models/customer.rb +10 -0
  843. data/spec/support/models/customer_address.rb +11 -0
  844. data/spec/support/models/deed.rb +7 -0
  845. data/spec/{app → support}/models/definition.rb +0 -1
  846. data/spec/{app → support}/models/delegating_patient.rb +0 -1
  847. data/spec/{app → support}/models/description.rb +0 -1
  848. data/spec/{app → support}/models/dictionary.rb +6 -1
  849. data/spec/{app → support}/models/division.rb +0 -1
  850. data/spec/{app → support}/models/doctor.rb +0 -1
  851. data/spec/{app → support}/models/dog.rb +0 -1
  852. data/spec/{app → support}/models/dokument.rb +0 -1
  853. data/spec/{app → support}/models/draft.rb +0 -1
  854. data/spec/{app → support}/models/dragon.rb +0 -1
  855. data/spec/{app → support}/models/driver.rb +1 -2
  856. data/spec/{app → support}/models/drug.rb +0 -1
  857. data/spec/{app → support}/models/dungeon.rb +0 -1
  858. data/spec/{app → support}/models/edit.rb +0 -1
  859. data/spec/{app → support}/models/email.rb +0 -1
  860. data/spec/{app → support}/models/employer.rb +0 -1
  861. data/spec/{app → support}/models/entry.rb +0 -1
  862. data/spec/{app → support}/models/eraser.rb +0 -1
  863. data/spec/{app → support}/models/even.rb +0 -1
  864. data/spec/{app → support}/models/event.rb +0 -1
  865. data/spec/{app → support}/models/exhibition.rb +0 -1
  866. data/spec/{app → support}/models/exhibitor.rb +0 -1
  867. data/spec/{app → support}/models/explosion.rb +0 -1
  868. data/spec/{app → support}/models/eye.rb +0 -1
  869. data/spec/{app → support}/models/eye_bowl.rb +0 -1
  870. data/spec/{app → support}/models/face.rb +0 -1
  871. data/spec/support/models/fanatic.rb +8 -0
  872. data/spec/{app → support}/models/favorite.rb +0 -1
  873. data/spec/{app → support}/models/filesystem.rb +0 -1
  874. data/spec/{app → support}/models/fire_hydrant.rb +0 -1
  875. data/spec/{app → support}/models/firefox.rb +0 -1
  876. data/spec/{app → support}/models/fish.rb +0 -1
  877. data/spec/{app → support}/models/folder.rb +0 -1
  878. data/spec/{app → support}/models/folder_item.rb +0 -1
  879. data/spec/{app → support}/models/fruits.rb +0 -1
  880. data/spec/{app → support}/models/game.rb +0 -1
  881. data/spec/{app → support}/models/ghost.rb +0 -1
  882. data/spec/support/models/guitar.rb +4 -0
  883. data/spec/support/models/hole.rb +12 -0
  884. data/spec/{app → support}/models/home.rb +0 -1
  885. data/spec/{app → support}/models/house.rb +0 -1
  886. data/spec/{app → support}/models/html_writer.rb +0 -1
  887. data/spec/{app → support}/models/id_key.rb +0 -1
  888. data/spec/support/models/idnodef.rb +7 -0
  889. data/spec/{app → support}/models/image.rb +0 -1
  890. data/spec/{app → support}/models/implant.rb +9 -1
  891. data/spec/support/models/instrument.rb +8 -0
  892. data/spec/{app → support}/models/item.rb +1 -2
  893. data/spec/{app → support}/models/jar.rb +0 -1
  894. data/spec/{app → support}/models/kaleidoscope.rb +0 -1
  895. data/spec/{app → support}/models/kangaroo.rb +0 -1
  896. data/spec/{app → support}/models/label.rb +4 -2
  897. data/spec/{app → support}/models/language.rb +0 -1
  898. data/spec/{app → support}/models/lat_lng.rb +0 -1
  899. data/spec/{app → support}/models/league.rb +0 -1
  900. data/spec/{app → support}/models/learner.rb +0 -1
  901. data/spec/{app → support}/models/line_item.rb +0 -1
  902. data/spec/{app → support}/models/location.rb +0 -1
  903. data/spec/{app → support}/models/login.rb +0 -1
  904. data/spec/{app → support}/models/manufacturer.rb +0 -1
  905. data/spec/{app → support}/models/meat.rb +0 -1
  906. data/spec/{app → support}/models/membership.rb +1 -1
  907. data/spec/{app → support}/models/message.rb +0 -1
  908. data/spec/{app → support}/models/minim.rb +0 -1
  909. data/spec/{app → support}/models/mixed_drink.rb +0 -1
  910. data/spec/support/models/mop.rb +24 -0
  911. data/spec/{app → support}/models/movie.rb +0 -1
  912. data/spec/{app → support}/models/my_hash.rb +0 -1
  913. data/spec/{app → support}/models/name.rb +0 -1
  914. data/spec/{app → support}/models/name_only.rb +0 -1
  915. data/spec/{app → support}/models/node.rb +0 -1
  916. data/spec/{app → support}/models/note.rb +0 -1
  917. data/spec/support/models/nut.rb +7 -0
  918. data/spec/{app → support}/models/odd.rb +0 -1
  919. data/spec/support/models/order.rb +12 -0
  920. data/spec/{app → support}/models/ordered_post.rb +1 -2
  921. data/spec/{app → support}/models/ordered_preference.rb +0 -1
  922. data/spec/{app → support}/models/oscar.rb +0 -1
  923. data/spec/{app → support}/models/other_owner_object.rb +0 -1
  924. data/spec/{app → support}/models/override.rb +0 -1
  925. data/spec/{app → support}/models/ownable.rb +0 -1
  926. data/spec/{app → support}/models/owner.rb +2 -1
  927. data/spec/{app → support}/models/pack.rb +0 -1
  928. data/spec/{app → support}/models/page.rb +0 -1
  929. data/spec/{app → support}/models/page_question.rb +0 -1
  930. data/spec/{app → support}/models/palette.rb +1 -2
  931. data/spec/{app → support}/models/parent.rb +0 -1
  932. data/spec/{app → support}/models/parent_doc.rb +0 -1
  933. data/spec/support/models/passport.rb +22 -0
  934. data/spec/{app → support}/models/patient.rb +0 -1
  935. data/spec/{app → support}/models/pdf_writer.rb +0 -1
  936. data/spec/{app → support}/models/pencil.rb +0 -1
  937. data/spec/{app → support}/models/person.rb +20 -2
  938. data/spec/{app → support}/models/pet.rb +0 -1
  939. data/spec/{app → support}/models/pet_owner.rb +0 -1
  940. data/spec/{app → support}/models/phone.rb +3 -2
  941. data/spec/support/models/piano.rb +4 -0
  942. data/spec/{app → support}/models/pizza.rb +0 -1
  943. data/spec/{app → support}/models/player.rb +2 -1
  944. data/spec/{app → support}/models/post.rb +0 -1
  945. data/spec/{app → support}/models/post_genre.rb +0 -1
  946. data/spec/support/models/powerup.rb +25 -0
  947. data/spec/{app → support}/models/preference.rb +0 -1
  948. data/spec/{app → support}/models/princess.rb +0 -1
  949. data/spec/{app → support}/models/product.rb +1 -1
  950. data/spec/support/models/profile.rb +17 -0
  951. data/spec/{app → support}/models/pronunciation.rb +0 -1
  952. data/spec/{app → support}/models/pub.rb +0 -1
  953. data/spec/{app → support}/models/publication/encyclopedia.rb +0 -1
  954. data/spec/{app → support}/models/publication/review.rb +0 -1
  955. data/spec/support/models/publication.rb +4 -0
  956. data/spec/{app → support}/models/purchase.rb +0 -1
  957. data/spec/support/models/purchased_item.rb +10 -0
  958. data/spec/{app → support}/models/question.rb +0 -1
  959. data/spec/{app → support}/models/quiz.rb +0 -1
  960. data/spec/{app → support}/models/rating.rb +0 -1
  961. data/spec/{app → support}/models/record.rb +0 -1
  962. data/spec/{app → support}/models/registry.rb +1 -1
  963. data/spec/{app → support}/models/role.rb +0 -1
  964. data/spec/{app → support}/models/root_category.rb +0 -1
  965. data/spec/{app → support}/models/sandwich.rb +0 -1
  966. data/spec/{app → support}/models/scheduler.rb +0 -1
  967. data/spec/support/models/school.rb +14 -0
  968. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -3
  969. data/spec/support/models/sealer.rb +7 -0
  970. data/spec/support/models/seat.rb +24 -0
  971. data/spec/{app → support}/models/seo.rb +0 -1
  972. data/spec/{app → support}/models/series.rb +1 -1
  973. data/spec/{app → support}/models/server.rb +0 -1
  974. data/spec/{app → support}/models/service.rb +0 -1
  975. data/spec/{app → support}/models/shape.rb +2 -3
  976. data/spec/{app → support}/models/shelf.rb +0 -1
  977. data/spec/support/models/shield.rb +18 -0
  978. data/spec/{app → support}/models/shipment_address.rb +0 -1
  979. data/spec/{app → support}/models/shipping_container.rb +0 -1
  980. data/spec/{app → support}/models/shipping_pack.rb +0 -1
  981. data/spec/support/models/shirt.rb +11 -0
  982. data/spec/{app → support}/models/shop.rb +0 -1
  983. data/spec/{app → support}/models/short_agent.rb +0 -1
  984. data/spec/{app → support}/models/short_quiz.rb +0 -1
  985. data/spec/{app → support}/models/simple.rb +0 -1
  986. data/spec/{app → support}/models/slave.rb +0 -1
  987. data/spec/{app → support}/models/song.rb +0 -1
  988. data/spec/{app → support}/models/sound.rb +0 -1
  989. data/spec/support/models/spacer.rb +7 -0
  990. data/spec/{app → support}/models/square.rb +0 -1
  991. data/spec/{app → support}/models/staff.rb +0 -1
  992. data/spec/{app → support}/models/store_as_dup_test1.rb +0 -1
  993. data/spec/{app → support}/models/store_as_dup_test2.rb +0 -1
  994. data/spec/{app → support}/models/store_as_dup_test3.rb +0 -1
  995. data/spec/{app → support}/models/store_as_dup_test4.rb +0 -1
  996. data/spec/{app → support}/models/strategy.rb +0 -1
  997. data/spec/support/models/student.rb +14 -0
  998. data/spec/{app → support}/models/sub_item.rb +0 -1
  999. data/spec/{app → support}/models/subscription.rb +0 -1
  1000. data/spec/{app → support}/models/survey.rb +0 -1
  1001. data/spec/{app → support}/models/symptom.rb +0 -1
  1002. data/spec/support/models/system_role.rb +7 -0
  1003. data/spec/{app → support}/models/tag.rb +0 -1
  1004. data/spec/{app → support}/models/target.rb +0 -1
  1005. data/spec/{app → support}/models/template.rb +0 -1
  1006. data/spec/{app → support}/models/thing.rb +0 -1
  1007. data/spec/support/models/threadlocker.rb +7 -0
  1008. data/spec/{app → support}/models/title.rb +0 -1
  1009. data/spec/{app → support}/models/tool.rb +2 -3
  1010. data/spec/{app → support}/models/topping.rb +0 -1
  1011. data/spec/support/models/toy.rb +9 -0
  1012. data/spec/{app → support}/models/track.rb +0 -1
  1013. data/spec/{app → support}/models/translation.rb +0 -1
  1014. data/spec/{app → support}/models/tree.rb +0 -1
  1015. data/spec/{app → support}/models/truck.rb +2 -1
  1016. data/spec/{app → support}/models/updatable.rb +0 -1
  1017. data/spec/{app → support}/models/user.rb +0 -1
  1018. data/spec/{app → support}/models/user_account.rb +0 -1
  1019. data/spec/{app → support}/models/validation_callback.rb +0 -1
  1020. data/spec/{app → support}/models/vehicle.rb +7 -3
  1021. data/spec/{app → support}/models/version.rb +0 -1
  1022. data/spec/{app → support}/models/vertex.rb +0 -1
  1023. data/spec/{app → support}/models/vet_visit.rb +0 -1
  1024. data/spec/{app → support}/models/video.rb +0 -1
  1025. data/spec/{app → support}/models/video_game.rb +0 -1
  1026. data/spec/support/models/washer.rb +7 -0
  1027. data/spec/support/models/weapon.rb +25 -0
  1028. data/spec/{app → support}/models/wiki_page.rb +1 -1
  1029. data/spec/{app → support}/models/word.rb +0 -1
  1030. data/spec/{app → support}/models/word_origin.rb +0 -1
  1031. data/spec/{app → support}/models/writer.rb +2 -3
  1032. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  1033. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  1034. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  1035. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1036. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  1037. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1038. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  1039. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1040. data/spec/support/schema_maps/schema_map_local.json +18 -0
  1041. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  1042. data/spec/support/shared/time.rb +0 -1
  1043. data/spec/support/spec_config.rb +28 -6
  1044. data.tar.gz.sig +0 -0
  1045. metadata +1216 -799
  1046. metadata.gz.sig +0 -0
  1047. data/lib/mongoid/errors/eager_load.rb +0 -26
  1048. data/lib/mongoid/errors/invalid_value.rb +0 -18
  1049. data/lib/mongoid/matchable/all.rb +0 -30
  1050. data/lib/mongoid/matchable/and.rb +0 -32
  1051. data/lib/mongoid/matchable/default.rb +0 -121
  1052. data/lib/mongoid/matchable/elem_match.rb +0 -36
  1053. data/lib/mongoid/matchable/eq.rb +0 -23
  1054. data/lib/mongoid/matchable/exists.rb +0 -25
  1055. data/lib/mongoid/matchable/gt.rb +0 -25
  1056. data/lib/mongoid/matchable/gte.rb +0 -25
  1057. data/lib/mongoid/matchable/in.rb +0 -26
  1058. data/lib/mongoid/matchable/lt.rb +0 -25
  1059. data/lib/mongoid/matchable/lte.rb +0 -25
  1060. data/lib/mongoid/matchable/ne.rb +0 -23
  1061. data/lib/mongoid/matchable/nin.rb +0 -24
  1062. data/lib/mongoid/matchable/nor.rb +0 -38
  1063. data/lib/mongoid/matchable/or.rb +0 -35
  1064. data/lib/mongoid/matchable/regexp.rb +0 -30
  1065. data/lib/mongoid/matchable/size.rb +0 -23
  1066. data/lib/support/ruby_version.rb +0 -29
  1067. data/spec/app/models/augmentation.rb +0 -14
  1068. data/spec/app/models/coding.rb +0 -4
  1069. data/spec/app/models/passport.rb +0 -8
  1070. data/spec/app/models/powerup.rb +0 -14
  1071. data/spec/app/models/publication.rb +0 -5
  1072. data/spec/app/models/weapon.rb +0 -14
  1073. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
  1074. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
  1075. data/spec/mongoid/matchable/all_spec.rb +0 -34
  1076. data/spec/mongoid/matchable/and_spec.rb +0 -190
  1077. data/spec/mongoid/matchable/default_spec.rb +0 -140
  1078. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  1079. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  1080. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  1081. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  1082. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  1083. data/spec/mongoid/matchable/in_spec.rb +0 -52
  1084. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  1085. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  1086. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  1087. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  1088. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  1089. data/spec/mongoid/matchable/or_spec.rb +0 -134
  1090. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  1091. data/spec/mongoid/matchable/size_spec.rb +0 -28
  1092. data/spec/mongoid/matchable_spec.rb +0 -856
  1093. data/spec/support/cluster_config.rb +0 -158
  1094. data/spec/support/lite_constraints.rb +0 -22
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -23,7 +22,7 @@ describe Mongoid::Validatable::UniquenessValidator do
23
22
 
24
23
  before do
25
24
  Dictionary.with(collection: "dicts") do |klass|
26
- klass.create(name: "websters")
25
+ klass.create!(name: "websters")
27
26
  end
28
27
  end
29
28
 
@@ -81,7 +80,7 @@ describe Mongoid::Validatable::UniquenessValidator do
81
80
  context "when the attribute id is unique" do
82
81
 
83
82
  let(:dictionary) do
84
- Dictionary.create
83
+ Dictionary.create!
85
84
  end
86
85
 
87
86
  let(:word) do
@@ -121,7 +120,7 @@ describe Mongoid::Validatable::UniquenessValidator do
121
120
  it "adds the uniqueness error to the aliased field name" do
122
121
  dictionary.valid?
123
122
  expect(dictionary.errors).to have_key(:language)
124
- expect(dictionary.errors[:language]).to eq([ "is already taken" ])
123
+ expect(dictionary.errors[:language]).to eq([ "has already been taken" ])
125
124
  end
126
125
  end
127
126
 
@@ -138,7 +137,7 @@ describe Mongoid::Validatable::UniquenessValidator do
138
137
  it "adds the uniqueness error to the underlying field name" do
139
138
  dictionary.valid?
140
139
  expect(dictionary.errors).to have_key(:l)
141
- expect(dictionary.errors[:l]).to eq([ "is already taken" ])
140
+ expect(dictionary.errors[:l]).to eq([ "has already been taken" ])
142
141
  end
143
142
  end
144
143
  end
@@ -173,7 +172,7 @@ describe Mongoid::Validatable::UniquenessValidator do
173
172
  context "when a document with no value exists in the database" do
174
173
 
175
174
  before do
176
- Dictionary.create
175
+ Dictionary.create!
177
176
  end
178
177
 
179
178
  let(:dictionary) do
@@ -191,7 +190,7 @@ describe Mongoid::Validatable::UniquenessValidator do
191
190
  context "when single localization" do
192
191
 
193
192
  before do
194
- Dictionary.create(description: "english")
193
+ Dictionary.create!(description: "english")
195
194
  end
196
195
 
197
196
  let(:dictionary) do
@@ -227,7 +226,7 @@ describe Mongoid::Validatable::UniquenessValidator do
227
226
  context "when single localization" do
228
227
 
229
228
  before do
230
- Dictionary.create(description: "english")
229
+ Dictionary.create!(description: "english")
231
230
  end
232
231
 
233
232
  let(:dictionary) do
@@ -240,7 +239,7 @@ describe Mongoid::Validatable::UniquenessValidator do
240
239
 
241
240
  it "adds the uniqueness error" do
242
241
  dictionary.valid?
243
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
242
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
244
243
  end
245
244
  end
246
245
 
@@ -261,7 +260,7 @@ describe Mongoid::Validatable::UniquenessValidator do
261
260
 
262
261
  it "adds the uniqueness error" do
263
262
  dictionary.valid?
264
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
263
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
265
264
  end
266
265
  end
267
266
  end
@@ -283,7 +282,7 @@ describe Mongoid::Validatable::UniquenessValidator do
283
282
  context "when there are no special characters" do
284
283
 
285
284
  before do
286
- Dictionary.create(description: "english")
285
+ Dictionary.create!(description: "english")
287
286
  end
288
287
 
289
288
  let(:dictionary) do
@@ -298,7 +297,7 @@ describe Mongoid::Validatable::UniquenessValidator do
298
297
  context "when special characters exist" do
299
298
 
300
299
  before do
301
- Dictionary.create(description: "english")
300
+ Dictionary.create!(description: "english")
302
301
  end
303
302
 
304
303
  let(:dictionary) do
@@ -318,7 +317,7 @@ describe Mongoid::Validatable::UniquenessValidator do
318
317
  context "when signle localization" do
319
318
 
320
319
  before do
321
- Dictionary.create(description: "english")
320
+ Dictionary.create!(description: "english")
322
321
  end
323
322
 
324
323
  let(:dictionary) do
@@ -331,7 +330,7 @@ describe Mongoid::Validatable::UniquenessValidator do
331
330
 
332
331
  it "adds the uniqueness error" do
333
332
  dictionary.valid?
334
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
333
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
335
334
  end
336
335
  end
337
336
 
@@ -352,7 +351,7 @@ describe Mongoid::Validatable::UniquenessValidator do
352
351
 
353
352
  it "adds the uniqueness error" do
354
353
  dictionary.valid?
355
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
354
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
356
355
  end
357
356
  end
358
357
  end
@@ -360,7 +359,7 @@ describe Mongoid::Validatable::UniquenessValidator do
360
359
  context "when the document is the match in the database" do
361
360
 
362
361
  let!(:dictionary) do
363
- Dictionary.create(description: "english")
362
+ Dictionary.create!(description: "english")
364
363
  end
365
364
 
366
365
  it "returns true" do
@@ -400,7 +399,7 @@ describe Mongoid::Validatable::UniquenessValidator do
400
399
 
401
400
  it "adds the uniqueness error" do
402
401
  dictionary.valid?
403
- expect(dictionary.errors[:description]).to eq([ "is already taken" ])
402
+ expect(dictionary.errors[:description]).to eq([ "has already been taken" ])
404
403
  end
405
404
  end
406
405
  end
@@ -420,7 +419,7 @@ describe Mongoid::Validatable::UniquenessValidator do
420
419
  context "when the attribute is unique" do
421
420
 
422
421
  let!(:oxford) do
423
- Dictionary.create(name: "Oxford")
422
+ Dictionary.create!(name: "Oxford")
424
423
  end
425
424
 
426
425
  let(:dictionary) do
@@ -448,7 +447,7 @@ describe Mongoid::Validatable::UniquenessValidator do
448
447
  context "when the document is not the match" do
449
448
 
450
449
  before do
451
- Dictionary.create(name: "Oxford")
450
+ Dictionary.create!(name: "Oxford")
452
451
  end
453
452
 
454
453
  let!(:dictionary) do
@@ -461,7 +460,7 @@ describe Mongoid::Validatable::UniquenessValidator do
461
460
 
462
461
  it "adds the uniqueness error" do
463
462
  dictionary.valid?
464
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
463
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
465
464
  end
466
465
  end
467
466
 
@@ -470,7 +469,7 @@ describe Mongoid::Validatable::UniquenessValidator do
470
469
  context "when the field has changed" do
471
470
 
472
471
  let!(:dictionary) do
473
- Dictionary.create(name: "Oxford")
472
+ Dictionary.create!(name: "Oxford")
474
473
  end
475
474
 
476
475
  it "returns true" do
@@ -522,7 +521,7 @@ describe Mongoid::Validatable::UniquenessValidator do
522
521
  context "when the attribute is not unique" do
523
522
 
524
523
  before do
525
- Dictionary.create(name: "Oxford")
524
+ Dictionary.create!(name: "Oxford")
526
525
  end
527
526
 
528
527
  let(:dictionary) do
@@ -549,7 +548,7 @@ describe Mongoid::Validatable::UniquenessValidator do
549
548
  context "when the attribute is unique" do
550
549
 
551
550
  before do
552
- Dictionary.create(name: "Oxford", language: "English")
551
+ Dictionary.create!(name: "Oxford", language: "English")
553
552
  end
554
553
 
555
554
  let(:dictionary) do
@@ -564,7 +563,7 @@ describe Mongoid::Validatable::UniquenessValidator do
564
563
  context "when the attribute is unique in the scope" do
565
564
 
566
565
  before do
567
- Dictionary.create(name: "Oxford", language: "English")
566
+ Dictionary.create!(name: "Oxford", language: "English")
568
567
  end
569
568
 
570
569
  let(:dictionary) do
@@ -579,7 +578,7 @@ describe Mongoid::Validatable::UniquenessValidator do
579
578
  context "when the attribute is not unique with no scope" do
580
579
 
581
580
  before do
582
- Dictionary.create(name: "Oxford", language: "English")
581
+ Dictionary.create!(name: "Oxford", language: "English")
583
582
  end
584
583
 
585
584
  let(:dictionary) do
@@ -594,7 +593,7 @@ describe Mongoid::Validatable::UniquenessValidator do
594
593
  context "when the attribute is not unique in another scope" do
595
594
 
596
595
  before do
597
- Dictionary.create(name: "Oxford", language: "English")
596
+ Dictionary.create!(name: "Oxford", language: "English")
598
597
  end
599
598
 
600
599
  let(:dictionary) do
@@ -611,7 +610,7 @@ describe Mongoid::Validatable::UniquenessValidator do
611
610
  context "when the document is not the match" do
612
611
 
613
612
  before do
614
- Dictionary.create(name: "Oxford", language: "English")
613
+ Dictionary.create!(name: "Oxford", language: "English")
615
614
  end
616
615
 
617
616
  let(:dictionary) do
@@ -624,14 +623,14 @@ describe Mongoid::Validatable::UniquenessValidator do
624
623
 
625
624
  it "adds the uniqueness errors" do
626
625
  dictionary.valid?
627
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
626
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
628
627
  end
629
628
  end
630
629
 
631
630
  context "when the document is the match in the database" do
632
631
 
633
632
  let!(:dictionary) do
634
- Dictionary.create(name: "Oxford", language: "English")
633
+ Dictionary.create!(name: "Oxford", language: "English")
635
634
  end
636
635
 
637
636
  it "returns true" do
@@ -654,7 +653,7 @@ describe Mongoid::Validatable::UniquenessValidator do
654
653
  context "when the attribute is unique" do
655
654
 
656
655
  before do
657
- Dictionary.create(name: "Oxford", publisher: "Amazon")
656
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
658
657
  end
659
658
 
660
659
  let(:dictionary) do
@@ -669,7 +668,7 @@ describe Mongoid::Validatable::UniquenessValidator do
669
668
  context "when the attribute is unique in the scope" do
670
669
 
671
670
  before do
672
- Dictionary.create(name: "Oxford", publisher: "Amazon")
671
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
673
672
  end
674
673
 
675
674
  let(:dictionary) do
@@ -702,14 +701,14 @@ describe Mongoid::Validatable::UniquenessValidator do
702
701
 
703
702
  it "should set an error for associated object not being unique" do
704
703
  item.update_attributes(folder_id: personal_folder.id)
705
- expect(item.errors.messages[:name].first).to eq("is already taken")
704
+ expect(item.errors.messages[:name].first).to eq("has already been taken")
706
705
  end
707
706
  end
708
707
 
709
708
  context "when the attribute is not unique with no scope" do
710
709
 
711
710
  before do
712
- Dictionary.create(name: "Oxford", publisher: "Amazon")
711
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
713
712
  end
714
713
 
715
714
  let(:dictionary) do
@@ -724,7 +723,7 @@ describe Mongoid::Validatable::UniquenessValidator do
724
723
  context "when the attribute is not unique in another scope" do
725
724
 
726
725
  before do
727
- Dictionary.create(name: "Oxford", publisher: "Amazon")
726
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
728
727
  end
729
728
 
730
729
  let(:dictionary) do
@@ -741,7 +740,7 @@ describe Mongoid::Validatable::UniquenessValidator do
741
740
  context "when the document is not the match" do
742
741
 
743
742
  before do
744
- Dictionary.create(name: "Oxford", publisher: "Amazon")
743
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
745
744
  end
746
745
 
747
746
  let(:dictionary) do
@@ -754,14 +753,14 @@ describe Mongoid::Validatable::UniquenessValidator do
754
753
 
755
754
  it "adds the uniqueness errors" do
756
755
  dictionary.valid?
757
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
756
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
758
757
  end
759
758
  end
760
759
 
761
760
  context "when the document is the match in the database" do
762
761
 
763
762
  let!(:dictionary) do
764
- Dictionary.create(name: "Oxford", publisher: "Amazon")
763
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
765
764
  end
766
765
 
767
766
  it "returns true" do
@@ -772,7 +771,7 @@ describe Mongoid::Validatable::UniquenessValidator do
772
771
  context "when one of the scopes is a time" do
773
772
 
774
773
  before do
775
- Dictionary.create(
774
+ Dictionary.create!(
776
775
  name: "Oxford",
777
776
  publisher: "Amazon",
778
777
  published: 10.days.ago.to_time
@@ -793,7 +792,7 @@ describe Mongoid::Validatable::UniquenessValidator do
793
792
 
794
793
  it "adds the uniqueness errors" do
795
794
  dictionary.valid?
796
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
795
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
797
796
  end
798
797
  end
799
798
  end
@@ -816,7 +815,7 @@ describe Mongoid::Validatable::UniquenessValidator do
816
815
 
817
816
  expect do
818
817
  Dictionary.create!(name: "French-English", year: 1960)
819
- end.to raise_error(Mongoid::Errors::Validations, /Name is already taken/)
818
+ end.to raise_error(Mongoid::Errors::Validations, /Name has already been taken/)
820
819
 
821
820
  expect(Dictionary.all.size).to eq(1)
822
821
  end
@@ -856,7 +855,7 @@ describe Mongoid::Validatable::UniquenessValidator do
856
855
  context "when the attribute is unique" do
857
856
 
858
857
  before do
859
- Dictionary.create(name: "Oxford", publisher: "Amazon")
858
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
860
859
  end
861
860
 
862
861
  let(:dictionary) do
@@ -871,7 +870,7 @@ describe Mongoid::Validatable::UniquenessValidator do
871
870
  context "when the attribute is unique in the scope" do
872
871
 
873
872
  before do
874
- Dictionary.create(
873
+ Dictionary.create!(
875
874
  name: "Oxford",
876
875
  publisher: "Amazon",
877
876
  year: 2011
@@ -894,7 +893,7 @@ describe Mongoid::Validatable::UniquenessValidator do
894
893
  context "when the attribute is not unique with no scope" do
895
894
 
896
895
  before do
897
- Dictionary.create(name: "Oxford", publisher: "Amazon")
896
+ Dictionary.create!(name: "Oxford", publisher: "Amazon")
898
897
  end
899
898
 
900
899
  let(:dictionary) do
@@ -909,7 +908,7 @@ describe Mongoid::Validatable::UniquenessValidator do
909
908
  context "when the attribute is not unique in another scope" do
910
909
 
911
910
  before do
912
- Dictionary.create(
911
+ Dictionary.create!(
913
912
  name: "Oxford",
914
913
  publisher: "Amazon",
915
914
  year: 1995
@@ -934,7 +933,7 @@ describe Mongoid::Validatable::UniquenessValidator do
934
933
  context "when the document is not the match" do
935
934
 
936
935
  before do
937
- Dictionary.create(
936
+ Dictionary.create!(
938
937
  name: "Oxford",
939
938
  publisher: "Amazon",
940
939
  year: 1960
@@ -955,14 +954,14 @@ describe Mongoid::Validatable::UniquenessValidator do
955
954
 
956
955
  it "adds the uniqueness errors" do
957
956
  dictionary.valid?
958
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
957
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
959
958
  end
960
959
  end
961
960
 
962
961
  context "when the document is the match in the database" do
963
962
 
964
963
  let!(:dictionary) do
965
- Dictionary.create(
964
+ Dictionary.create!(
966
965
  name: "Oxford",
967
966
  publisher: "Amazon",
968
967
  year: 1960
@@ -989,7 +988,7 @@ describe Mongoid::Validatable::UniquenessValidator do
989
988
  context "when the attribute is unique" do
990
989
 
991
990
  before do
992
- Dictionary.create(name: "Oxford")
991
+ Dictionary.create!(name: "Oxford")
993
992
  end
994
993
 
995
994
  let(:dictionary) do
@@ -1006,7 +1005,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1006
1005
  context "when the document is not the match" do
1007
1006
 
1008
1007
  before do
1009
- Dictionary.create(name: "Oxford")
1008
+ Dictionary.create!(name: "Oxford")
1010
1009
  end
1011
1010
 
1012
1011
  let(:dictionary) do
@@ -1019,14 +1018,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1019
1018
 
1020
1019
  it "adds the uniqueness error" do
1021
1020
  dictionary.valid?
1022
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1021
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1023
1022
  end
1024
1023
  end
1025
1024
 
1026
1025
  context "when the document is the match in the database" do
1027
1026
 
1028
1027
  let!(:dictionary) do
1029
- Dictionary.create(name: "Oxford")
1028
+ Dictionary.create!(name: "Oxford")
1030
1029
  end
1031
1030
 
1032
1031
  it "returns true" do
@@ -1051,7 +1050,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1051
1050
  context "when there are no special characters" do
1052
1051
 
1053
1052
  before do
1054
- Dictionary.create(name: "Oxford")
1053
+ Dictionary.create!(name: "Oxford")
1055
1054
  end
1056
1055
 
1057
1056
  let(:dictionary) do
@@ -1066,7 +1065,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1066
1065
  context "when special characters exist" do
1067
1066
 
1068
1067
  before do
1069
- Dictionary.create(name: "Oxford")
1068
+ Dictionary.create!(name: "Oxford")
1070
1069
  end
1071
1070
 
1072
1071
  let(:dictionary) do
@@ -1084,7 +1083,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1084
1083
  context "when the document is not the match" do
1085
1084
 
1086
1085
  before do
1087
- Dictionary.create(name: "Oxford")
1086
+ Dictionary.create!(name: "Oxford")
1088
1087
  end
1089
1088
 
1090
1089
  let(:dictionary) do
@@ -1097,14 +1096,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1097
1096
 
1098
1097
  it "adds the uniqueness error" do
1099
1098
  dictionary.valid?
1100
- expect(dictionary.errors[:name]).to eq([ "is already taken" ])
1099
+ expect(dictionary.errors[:name]).to eq([ "has already been taken" ])
1101
1100
  end
1102
1101
  end
1103
1102
 
1104
1103
  context "when the document is the match in the database" do
1105
1104
 
1106
1105
  let!(:dictionary) do
1107
- Dictionary.create(name: "Oxford")
1106
+ Dictionary.create!(name: "Oxford")
1108
1107
  end
1109
1108
 
1110
1109
  it "returns true" do
@@ -1134,7 +1133,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1134
1133
  context "when the attribute is nil" do
1135
1134
 
1136
1135
  before do
1137
- Dictionary.create
1136
+ Dictionary.create!
1138
1137
  end
1139
1138
 
1140
1139
  let(:dictionary) do
@@ -1160,7 +1159,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1160
1159
  context "when the attribute is blank" do
1161
1160
 
1162
1161
  before do
1163
- Dictionary.create(name: "")
1162
+ Dictionary.create!(name: "")
1164
1163
  end
1165
1164
 
1166
1165
  let(:dictionary) do
@@ -1189,7 +1188,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1189
1188
  context "when the attribute is unique" do
1190
1189
 
1191
1190
  before do
1192
- Login.create(username: "Oxford")
1191
+ Login.create!(username: "Oxford")
1193
1192
  end
1194
1193
 
1195
1194
  let(:login) do
@@ -1206,7 +1205,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1206
1205
  context "when the document is not the match" do
1207
1206
 
1208
1207
  before do
1209
- Login.create(username: "Oxford")
1208
+ Login.create!(username: "Oxford")
1210
1209
  end
1211
1210
 
1212
1211
  let(:login) do
@@ -1219,14 +1218,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1219
1218
 
1220
1219
  it "adds the uniqueness error" do
1221
1220
  login.valid?
1222
- expect(login.errors[:username]).to eq([ "is already taken" ])
1221
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1223
1222
  end
1224
1223
  end
1225
1224
 
1226
1225
  context "when the document is the match in the database" do
1227
1226
 
1228
1227
  let!(:login) do
1229
- Login.create(username: "Oxford")
1228
+ Login.create!(username: "Oxford")
1230
1229
  end
1231
1230
 
1232
1231
  it "returns true" do
@@ -1249,7 +1248,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1249
1248
  context "when the attribute is unique" do
1250
1249
 
1251
1250
  before do
1252
- Login.create(username: "Oxford", application_id: 1)
1251
+ Login.create!(username: "Oxford", application_id: 1)
1253
1252
  end
1254
1253
 
1255
1254
  let(:login) do
@@ -1264,7 +1263,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1264
1263
  context "when the attribute is unique in the scope" do
1265
1264
 
1266
1265
  before do
1267
- Login.create(username: "Oxford", application_id: 1)
1266
+ Login.create!(username: "Oxford", application_id: 1)
1268
1267
  end
1269
1268
 
1270
1269
  let(:login) do
@@ -1279,7 +1278,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1279
1278
  context "when the attribute is not unique with no scope" do
1280
1279
 
1281
1280
  before do
1282
- Login.create(username: "Oxford", application_id: 1)
1281
+ Login.create!(username: "Oxford", application_id: 1)
1283
1282
  end
1284
1283
 
1285
1284
  let(:login) do
@@ -1294,7 +1293,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1294
1293
  context "when the attribute is not unique in another scope" do
1295
1294
 
1296
1295
  before do
1297
- Login.create(username: "Oxford", application_id: 1)
1296
+ Login.create!(username: "Oxford", application_id: 1)
1298
1297
  end
1299
1298
 
1300
1299
  let(:login) do
@@ -1311,7 +1310,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1311
1310
  context "when the document is not the match" do
1312
1311
 
1313
1312
  before do
1314
- Login.create(username: "Oxford", application_id: 1)
1313
+ Login.create!(username: "Oxford", application_id: 1)
1315
1314
  end
1316
1315
 
1317
1316
  let(:login) do
@@ -1324,14 +1323,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1324
1323
 
1325
1324
  it "adds the uniqueness errors" do
1326
1325
  login.valid?
1327
- expect(login.errors[:username]).to eq([ "is already taken" ])
1326
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1328
1327
  end
1329
1328
  end
1330
1329
 
1331
1330
  context "when the document is the match in the database" do
1332
1331
 
1333
1332
  let!(:login) do
1334
- Login.create(username: "Oxford", application_id: 1)
1333
+ Login.create!(username: "Oxford", application_id: 1)
1335
1334
  end
1336
1335
 
1337
1336
  it "returns true" do
@@ -1354,7 +1353,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1354
1353
  context "when the attribute is unique" do
1355
1354
 
1356
1355
  before do
1357
- Login.create(username: "Oxford")
1356
+ Login.create!(username: "Oxford")
1358
1357
  end
1359
1358
 
1360
1359
  let(:login) do
@@ -1371,7 +1370,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1371
1370
  context "when the document is not the match" do
1372
1371
 
1373
1372
  before do
1374
- Login.create(username: "Oxford")
1373
+ Login.create!(username: "Oxford")
1375
1374
  end
1376
1375
 
1377
1376
  let(:login) do
@@ -1384,14 +1383,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1384
1383
 
1385
1384
  it "adds the uniqueness error" do
1386
1385
  login.valid?
1387
- expect(login.errors[:username]).to eq([ "is already taken" ])
1386
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1388
1387
  end
1389
1388
  end
1390
1389
 
1391
1390
  context "when the document is the match in the database" do
1392
1391
 
1393
1392
  let!(:login) do
1394
- Login.create(username: "Oxford")
1393
+ Login.create!(username: "Oxford")
1395
1394
  end
1396
1395
 
1397
1396
  it "returns true" do
@@ -1416,7 +1415,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1416
1415
  context "when there are no special characters" do
1417
1416
 
1418
1417
  before do
1419
- Login.create(username: "Oxford")
1418
+ Login.create!(username: "Oxford")
1420
1419
  end
1421
1420
 
1422
1421
  let(:login) do
@@ -1431,7 +1430,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1431
1430
  context "when special characters exist" do
1432
1431
 
1433
1432
  before do
1434
- Login.create(username: "Oxford")
1433
+ Login.create!(username: "Oxford")
1435
1434
  end
1436
1435
 
1437
1436
  let(:login) do
@@ -1449,7 +1448,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1449
1448
  context "when the document is not the match" do
1450
1449
 
1451
1450
  before do
1452
- Login.create(username: "Oxford")
1451
+ Login.create!(username: "Oxford")
1453
1452
  end
1454
1453
 
1455
1454
  let(:login) do
@@ -1462,14 +1461,14 @@ describe Mongoid::Validatable::UniquenessValidator do
1462
1461
 
1463
1462
  it "adds the uniqueness error" do
1464
1463
  login.valid?
1465
- expect(login.errors[:username]).to eq([ "is already taken" ])
1464
+ expect(login.errors[:username]).to eq([ "has already been taken" ])
1466
1465
  end
1467
1466
  end
1468
1467
 
1469
1468
  context "when the document is the match in the database" do
1470
1469
 
1471
1470
  let!(:login) do
1472
- Login.create(username: "Oxford")
1471
+ Login.create!(username: "Oxford")
1473
1472
  end
1474
1473
 
1475
1474
  it "returns true" do
@@ -1492,7 +1491,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1492
1491
  context "when the attribute is nil" do
1493
1492
 
1494
1493
  before do
1495
- Login.create
1494
+ Login.create!
1496
1495
  end
1497
1496
 
1498
1497
  let(:login) do
@@ -1518,7 +1517,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1518
1517
  context "when the attribute is blank" do
1519
1518
 
1520
1519
  before do
1521
- Login.create(username: "")
1520
+ Login.create!(username: "")
1522
1521
  end
1523
1522
 
1524
1523
  let(:login) do
@@ -1545,7 +1544,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1545
1544
  context "when the attribute is unique" do
1546
1545
 
1547
1546
  before do
1548
- Bar.create(lat_lng: LatLng.new(52.30, 13.25))
1547
+ Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
1549
1548
  end
1550
1549
 
1551
1550
  let(:unique_bar) do
@@ -1561,7 +1560,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1561
1560
  context "when the attribute is not unique" do
1562
1561
 
1563
1562
  before do
1564
- Bar.create(lat_lng: LatLng.new(52.30, 13.25))
1563
+ Bar.create!(lat_lng: LatLng.new(52.30, 13.25))
1565
1564
  end
1566
1565
 
1567
1566
  let(:non_unique_bar) do
@@ -1588,7 +1587,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1588
1587
  context "when the attribute is unique" do
1589
1588
 
1590
1589
  before do
1591
- Band.create(name: 'Foo', active: false)
1590
+ Band.create!(name: 'Foo', active: false)
1592
1591
  end
1593
1592
 
1594
1593
  let(:unique_band) do
@@ -1604,7 +1603,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1604
1603
  context "when the attribute is not unique" do
1605
1604
 
1606
1605
  before do
1607
- Band.create(name: 'Foo')
1606
+ Band.create!(name: 'Foo')
1608
1607
  end
1609
1608
 
1610
1609
  let(:non_unique_band) do
@@ -1622,17 +1621,17 @@ describe Mongoid::Validatable::UniquenessValidator do
1622
1621
  context "when the document is embedded" do
1623
1622
 
1624
1623
  let(:word) do
1625
- Word.create(name: "Schadenfreude")
1624
+ Word.create!(name: "Schadenfreude")
1626
1625
  end
1627
1626
 
1628
1627
  context "when in an embeds_many" do
1629
1628
 
1630
1629
  let!(:def_one) do
1631
- word.definitions.create(description: "1")
1630
+ word.definitions.create!(description: "1")
1632
1631
  end
1633
1632
 
1634
1633
  let!(:def_two) do
1635
- word.definitions.create(description: "2")
1634
+ word.definitions.create!(description: "2")
1636
1635
  end
1637
1636
 
1638
1637
  context "when a document is being destroyed" do
@@ -1711,7 +1710,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1711
1710
 
1712
1711
  it "adds the uniqueness error" do
1713
1712
  definition.valid?
1714
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1713
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1715
1714
  end
1716
1715
  end
1717
1716
 
@@ -1839,7 +1838,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1839
1838
 
1840
1839
  it "adds the uniqueness errors" do
1841
1840
  definition.valid?
1842
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1841
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1843
1842
  end
1844
1843
  end
1845
1844
 
@@ -1977,7 +1976,7 @@ describe Mongoid::Validatable::UniquenessValidator do
1977
1976
 
1978
1977
  it "adds the uniqueness errors" do
1979
1978
  definition.valid?
1980
- expect(definition.errors[:description]).to eq([ "is already taken" ])
1979
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
1981
1980
  end
1982
1981
  end
1983
1982
 
@@ -2041,7 +2040,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2041
2040
 
2042
2041
  it "adds the uniqueness error" do
2043
2042
  definition.valid?
2044
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2043
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2045
2044
  end
2046
2045
  end
2047
2046
 
@@ -2119,7 +2118,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2119
2118
 
2120
2119
  it "adds the uniqueness error" do
2121
2120
  definition.valid?
2122
- expect(definition.errors[:description]).to eq([ "is already taken" ])
2121
+ expect(definition.errors[:description]).to eq([ "has already been taken" ])
2123
2122
  end
2124
2123
  end
2125
2124
 
@@ -2215,7 +2214,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2215
2214
  it "adds the uniqueness error to the aliased field name" do
2216
2215
  definition.valid?
2217
2216
  expect(definition.errors).to have_key(:part)
2218
- expect(definition.errors[:part]).to eq([ "is already taken" ])
2217
+ expect(definition.errors[:part]).to eq([ "has already been taken" ])
2219
2218
  end
2220
2219
  end
2221
2220
 
@@ -2232,7 +2231,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2232
2231
  it "adds the uniqueness error to the underlying field name" do
2233
2232
  definition.valid?
2234
2233
  expect(definition.errors).to have_key(:p)
2235
- expect(definition.errors[:p]).to eq([ "is already taken" ])
2234
+ expect(definition.errors[:p]).to eq([ "has already been taken" ])
2236
2235
  end
2237
2236
  end
2238
2237
 
@@ -2251,7 +2250,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2251
2250
  it "adds the uniqueness error to the aliased field name" do
2252
2251
  definition.valid?
2253
2252
  expect(definition.errors).to have_key(:synonyms)
2254
- expect(definition.errors[:synonyms]).to eq([ "is already taken" ])
2253
+ expect(definition.errors[:synonyms]).to eq([ "has already been taken" ])
2255
2254
  end
2256
2255
  end
2257
2256
 
@@ -2268,7 +2267,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2268
2267
  it "adds the uniqueness error to the aliased field name" do
2269
2268
  definition.valid?
2270
2269
  expect(definition.errors).to have_key(:syn)
2271
- expect(definition.errors[:syn]).to eq([ "is already taken" ])
2270
+ expect(definition.errors[:syn]).to eq([ "has already been taken" ])
2272
2271
  end
2273
2272
  end
2274
2273
  end
@@ -2320,7 +2319,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2320
2319
 
2321
2320
  it "adds the uniqueness error" do
2322
2321
  word_origin.valid?
2323
- expect(word_origin.errors[:origin_id]).to eq([ "is already taken" ])
2322
+ expect(word_origin.errors[:origin_id]).to eq([ "has already been taken" ])
2324
2323
  end
2325
2324
  end
2326
2325
 
@@ -2445,7 +2444,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2445
2444
  it "should be invalid" do
2446
2445
  subclass_document_with_duplicated_name.tap do |d|
2447
2446
  expect(d).to be_invalid
2448
- expect(d.errors[:name]).to eq([ "is already taken" ])
2447
+ expect(d.errors[:name]).to eq([ "has already been taken" ])
2449
2448
  end
2450
2449
  end
2451
2450
  end
@@ -2459,7 +2458,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2459
2458
  end
2460
2459
 
2461
2460
  let!(:person) do
2462
- Person.create(ssn: "132-11-1111", username: "aaasdaffff")
2461
+ Person.create!(ssn: "132-11-1111", username: "aaasdaffff")
2463
2462
  end
2464
2463
 
2465
2464
  after do
@@ -2473,4 +2472,31 @@ describe Mongoid::Validatable::UniquenessValidator do
2473
2472
  }.to raise_error(Mongo::Error::OperationFailure)
2474
2473
  end
2475
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
2476
2502
  end