mongoid 7.2.1 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1082) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +20 -20
  4. data/LICENSE +1 -1
  5. data/README.md +7 -12
  6. data/Rakefile +58 -1
  7. data/lib/config/locales/en.yml +191 -60
  8. data/lib/mongoid/association/accessors.rb +67 -53
  9. data/lib/mongoid/association/bindable.rb +77 -31
  10. data/lib/mongoid/association/builders.rb +8 -14
  11. data/lib/mongoid/association/constrainable.rb +2 -5
  12. data/lib/mongoid/association/depending.rb +20 -12
  13. data/lib/mongoid/association/eager.rb +160 -0
  14. data/lib/mongoid/association/eager_loadable.rb +41 -11
  15. data/lib/mongoid/association/embedded/batchable.rb +63 -52
  16. data/lib/mongoid/association/embedded/cyclic.rb +4 -12
  17. data/lib/mongoid/association/embedded/eager.rb +23 -0
  18. data/lib/mongoid/association/embedded/embedded_in/binding.rb +29 -13
  19. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +3 -5
  20. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +25 -23
  21. data/lib/mongoid/association/embedded/embedded_in.rb +11 -26
  22. data/lib/mongoid/association/embedded/embeds_many/binding.rb +4 -9
  23. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +5 -6
  24. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +226 -203
  25. data/lib/mongoid/association/embedded/embeds_many.rb +3 -33
  26. data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -9
  27. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +20 -8
  28. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +131 -42
  29. data/lib/mongoid/association/embedded/embeds_one.rb +4 -30
  30. data/lib/mongoid/association/embedded.rb +2 -1
  31. data/lib/mongoid/association/macros.rb +47 -16
  32. data/lib/mongoid/association/many.rb +12 -24
  33. data/lib/mongoid/association/marshalable.rb +4 -5
  34. data/lib/mongoid/association/nested/many.rb +14 -19
  35. data/lib/mongoid/association/nested/nested_buildable.rb +36 -13
  36. data/lib/mongoid/association/nested/one.rb +54 -26
  37. data/lib/mongoid/association/nested.rb +1 -3
  38. data/lib/mongoid/association/one.rb +3 -11
  39. data/lib/mongoid/association/options.rb +18 -44
  40. data/lib/mongoid/association/proxy.rb +49 -42
  41. data/lib/mongoid/association/referenced/auto_save.rb +11 -15
  42. data/lib/mongoid/association/referenced/belongs_to/binding.rb +2 -7
  43. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +6 -6
  44. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -2
  45. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +23 -32
  46. data/lib/mongoid/association/referenced/belongs_to.rb +13 -37
  47. data/lib/mongoid/association/referenced/counter_cache.rb +18 -26
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -8
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -3
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -2
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +191 -123
  52. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +23 -42
  53. data/lib/mongoid/association/referenced/has_many/binding.rb +1 -5
  54. data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -3
  55. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -2
  56. data/lib/mongoid/association/referenced/has_many/enumerable.rb +471 -496
  57. data/lib/mongoid/association/referenced/has_many/proxy.rb +182 -179
  58. data/lib/mongoid/association/referenced/has_many.rb +17 -43
  59. data/lib/mongoid/association/referenced/has_one/binding.rb +1 -7
  60. data/lib/mongoid/association/referenced/has_one/buildable.rb +5 -5
  61. data/lib/mongoid/association/referenced/has_one/eager.rb +3 -4
  62. data/lib/mongoid/association/referenced/has_one/proxy.rb +38 -41
  63. data/lib/mongoid/association/referenced/has_one.rb +17 -36
  64. data/lib/mongoid/association/referenced/syncable.rb +11 -27
  65. data/lib/mongoid/association/referenced.rb +1 -1
  66. data/lib/mongoid/association/reflections.rb +9 -9
  67. data/lib/mongoid/association/relatable.rb +55 -74
  68. data/lib/mongoid/association.rb +10 -22
  69. data/lib/mongoid/atomic/modifiers.rb +7 -53
  70. data/lib/mongoid/atomic/paths/embedded/many.rb +20 -5
  71. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -5
  72. data/lib/mongoid/atomic/paths/embedded.rb +1 -3
  73. data/lib/mongoid/atomic/paths/root.rb +1 -5
  74. data/lib/mongoid/atomic/paths.rb +1 -1
  75. data/lib/mongoid/atomic.rb +39 -86
  76. data/lib/mongoid/atomic_update_preparer.rb +88 -0
  77. data/lib/mongoid/attributes/dynamic.rb +5 -21
  78. data/lib/mongoid/attributes/embedded.rb +34 -0
  79. data/lib/mongoid/attributes/nested.rb +9 -13
  80. data/lib/mongoid/attributes/processing.rb +43 -28
  81. data/lib/mongoid/attributes/projector.rb +120 -0
  82. data/lib/mongoid/attributes/readonly.rb +4 -8
  83. data/lib/mongoid/attributes.rb +85 -89
  84. data/lib/mongoid/cacheable.rb +5 -9
  85. data/lib/mongoid/changeable.rb +183 -97
  86. data/lib/mongoid/clients/factory.rb +58 -15
  87. data/lib/mongoid/clients/options.rb +117 -8
  88. data/lib/mongoid/clients/sessions.rb +246 -84
  89. data/lib/mongoid/clients/storage_options.rb +37 -11
  90. data/lib/mongoid/clients/validators/storage.rb +4 -24
  91. data/lib/mongoid/clients/validators.rb +1 -1
  92. data/lib/mongoid/clients.rb +37 -14
  93. data/lib/mongoid/collection_configurable.rb +59 -0
  94. data/lib/mongoid/composable.rb +7 -7
  95. data/lib/mongoid/config/defaults.rb +40 -0
  96. data/lib/mongoid/config/encryption.rb +213 -0
  97. data/lib/mongoid/config/environment.rb +25 -5
  98. data/lib/mongoid/config/introspection.rb +152 -0
  99. data/lib/mongoid/config/options.rb +11 -14
  100. data/lib/mongoid/config/validators/async_query_executor.rb +34 -0
  101. data/lib/mongoid/config/validators/client.rb +7 -23
  102. data/lib/mongoid/config/validators/option.rb +1 -3
  103. data/lib/mongoid/config/validators.rb +2 -1
  104. data/lib/mongoid/config.rb +183 -46
  105. data/lib/mongoid/contextual/aggregable/memory.rb +38 -26
  106. data/lib/mongoid/contextual/aggregable/mongo.rb +26 -32
  107. data/lib/mongoid/contextual/aggregable/none.rb +66 -0
  108. data/lib/mongoid/contextual/aggregable.rb +18 -0
  109. data/lib/mongoid/contextual/atomic.rb +97 -30
  110. data/lib/mongoid/contextual/command.rb +3 -5
  111. data/lib/mongoid/contextual/map_reduce.rb +8 -33
  112. data/lib/mongoid/contextual/memory.rb +396 -89
  113. data/lib/mongoid/contextual/mongo/documents_loader.rb +178 -0
  114. data/lib/mongoid/contextual/mongo.rb +640 -311
  115. data/lib/mongoid/contextual/none.rb +244 -30
  116. data/lib/mongoid/contextual/queryable.rb +5 -4
  117. data/lib/mongoid/contextual.rb +18 -7
  118. data/lib/mongoid/copyable.rb +34 -14
  119. data/lib/mongoid/criteria/findable.rb +52 -22
  120. data/lib/mongoid/criteria/includable.rb +31 -34
  121. data/lib/mongoid/criteria/inspectable.rb +4 -3
  122. data/lib/mongoid/criteria/marshalable.rb +14 -7
  123. data/lib/mongoid/criteria/modifiable.rb +5 -19
  124. data/lib/mongoid/criteria/options.rb +1 -3
  125. data/lib/mongoid/criteria/permission.rb +6 -2
  126. data/lib/mongoid/criteria/queryable/aggregable.rb +3 -15
  127. data/lib/mongoid/criteria/queryable/expandable.rb +1 -25
  128. data/lib/mongoid/criteria/queryable/extensions/array.rb +6 -41
  129. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -9
  130. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +5 -7
  131. data/lib/mongoid/criteria/queryable/extensions/date.rb +10 -11
  132. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +8 -7
  133. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -41
  134. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -14
  135. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -21
  136. data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -30
  137. data/lib/mongoid/criteria/queryable/extensions/range.rb +48 -17
  138. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -13
  139. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -5
  140. data/lib/mongoid/criteria/queryable/extensions/string.rb +19 -34
  141. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +6 -22
  142. data/lib/mongoid/criteria/queryable/extensions/time.rb +8 -9
  143. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +9 -9
  144. data/lib/mongoid/criteria/queryable/extensions.rb +1 -5
  145. data/lib/mongoid/criteria/queryable/key.rb +15 -18
  146. data/lib/mongoid/criteria/queryable/macroable.rb +1 -3
  147. data/lib/mongoid/criteria/queryable/mergeable.rb +69 -50
  148. data/lib/mongoid/criteria/queryable/optional.rb +12 -62
  149. data/lib/mongoid/criteria/queryable/options.rb +3 -21
  150. data/lib/mongoid/criteria/queryable/pipeline.rb +2 -14
  151. data/lib/mongoid/criteria/queryable/selectable.rb +87 -124
  152. data/lib/mongoid/criteria/queryable/selector.rb +96 -25
  153. data/lib/mongoid/criteria/queryable/smash.rb +41 -18
  154. data/lib/mongoid/criteria/queryable/storable.rb +14 -9
  155. data/lib/mongoid/criteria/queryable.rb +12 -13
  156. data/lib/mongoid/criteria/scopable.rb +32 -21
  157. data/lib/mongoid/criteria/translator.rb +46 -0
  158. data/lib/mongoid/criteria.rb +60 -109
  159. data/lib/mongoid/deprecable.rb +38 -0
  160. data/lib/mongoid/deprecation.rb +29 -0
  161. data/lib/mongoid/document.rb +263 -173
  162. data/lib/mongoid/encryptable.rb +53 -0
  163. data/lib/mongoid/equality.rb +22 -25
  164. data/lib/mongoid/errors/ambiguous_relationship.rb +3 -5
  165. data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
  166. data/lib/mongoid/errors/callback.rb +1 -3
  167. data/lib/mongoid/errors/create_collection_failure.rb +34 -0
  168. data/lib/mongoid/errors/criteria_argument_required.rb +1 -1
  169. data/lib/mongoid/errors/delete_restriction.rb +9 -12
  170. data/lib/mongoid/errors/document_not_destroyed.rb +3 -7
  171. data/lib/mongoid/errors/document_not_found.rb +34 -21
  172. data/lib/mongoid/errors/drop_collection_failure.rb +28 -0
  173. data/lib/mongoid/errors/empty_config_file.rb +26 -0
  174. data/lib/mongoid/errors/immutable_attribute.rb +27 -0
  175. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -3
  176. data/lib/mongoid/errors/invalid_async_query_executor.rb +26 -0
  177. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
  178. data/lib/mongoid/errors/invalid_collection.rb +1 -1
  179. data/lib/mongoid/errors/invalid_config_file.rb +26 -0
  180. data/lib/mongoid/errors/invalid_config_option.rb +2 -4
  181. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -4
  182. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -1
  183. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +24 -0
  184. data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -1
  185. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -5
  186. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
  187. data/lib/mongoid/errors/invalid_expression_operator.rb +1 -1
  188. data/lib/mongoid/errors/invalid_field.rb +7 -7
  189. data/lib/mongoid/errors/invalid_field_operator.rb +1 -1
  190. data/lib/mongoid/errors/invalid_field_option.rb +1 -3
  191. data/lib/mongoid/errors/invalid_field_type.rb +27 -0
  192. data/lib/mongoid/errors/invalid_find.rb +1 -3
  193. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +23 -0
  194. data/lib/mongoid/errors/invalid_includes.rb +1 -3
  195. data/lib/mongoid/errors/invalid_index.rb +1 -3
  196. data/lib/mongoid/errors/invalid_options.rb +1 -3
  197. data/lib/mongoid/errors/invalid_path.rb +1 -3
  198. data/lib/mongoid/errors/invalid_persistence_option.rb +1 -5
  199. data/lib/mongoid/errors/invalid_query.rb +1 -1
  200. data/lib/mongoid/errors/invalid_relation.rb +2 -8
  201. data/lib/mongoid/errors/invalid_relation_option.rb +2 -4
  202. data/lib/mongoid/errors/invalid_scope.rb +1 -3
  203. data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
  204. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -2
  205. data/lib/mongoid/errors/invalid_storage_options.rb +2 -4
  206. data/lib/mongoid/errors/invalid_time.rb +1 -3
  207. data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
  208. data/lib/mongoid/errors/inverse_not_found.rb +1 -3
  209. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -3
  210. data/lib/mongoid/errors/mixed_relations.rb +1 -3
  211. data/lib/mongoid/errors/mongoid_error.rb +8 -16
  212. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +2 -4
  213. data/lib/mongoid/errors/no_client_config.rb +1 -3
  214. data/lib/mongoid/errors/no_client_database.rb +2 -4
  215. data/lib/mongoid/errors/no_client_hosts.rb +2 -4
  216. data/lib/mongoid/errors/no_clients_config.rb +1 -3
  217. data/lib/mongoid/errors/no_default_client.rb +1 -3
  218. data/lib/mongoid/errors/no_environment.rb +1 -3
  219. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -3
  220. data/lib/mongoid/errors/no_metadata.rb +1 -3
  221. data/lib/mongoid/errors/no_parent.rb +1 -3
  222. data/lib/mongoid/errors/readonly_attribute.rb +2 -4
  223. data/lib/mongoid/errors/readonly_document.rb +2 -6
  224. data/lib/mongoid/errors/rollback.rb +15 -0
  225. data/lib/mongoid/errors/scope_overwrite.rb +1 -1
  226. data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
  227. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +2 -2
  228. data/lib/mongoid/errors/transaction_error.rb +25 -0
  229. data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
  230. data/lib/mongoid/errors/unknown_attribute.rb +2 -4
  231. data/lib/mongoid/errors/unknown_model.rb +1 -3
  232. data/lib/mongoid/errors/unsaved_document.rb +2 -2
  233. data/lib/mongoid/errors/unsupported_javascript.rb +1 -3
  234. data/lib/mongoid/errors/validations.rb +1 -1
  235. data/lib/mongoid/errors.rb +18 -5
  236. data/lib/mongoid/evolvable.rb +2 -4
  237. data/lib/mongoid/extensions/array.rb +20 -58
  238. data/lib/mongoid/extensions/big_decimal.rb +44 -24
  239. data/lib/mongoid/extensions/binary.rb +45 -0
  240. data/lib/mongoid/extensions/boolean.rb +11 -6
  241. data/lib/mongoid/extensions/date.rb +31 -29
  242. data/lib/mongoid/extensions/date_time.rb +5 -16
  243. data/lib/mongoid/extensions/decimal128.rb +3 -5
  244. data/lib/mongoid/extensions/false_class.rb +8 -10
  245. data/lib/mongoid/extensions/float.rb +11 -12
  246. data/lib/mongoid/extensions/hash.rb +28 -148
  247. data/lib/mongoid/extensions/integer.rb +13 -14
  248. data/lib/mongoid/extensions/module.rb +5 -5
  249. data/lib/mongoid/extensions/nil_class.rb +5 -7
  250. data/lib/mongoid/extensions/object.rb +32 -81
  251. data/lib/mongoid/extensions/object_id.rb +3 -7
  252. data/lib/mongoid/extensions/range.rb +47 -24
  253. data/lib/mongoid/extensions/raw_value.rb +34 -0
  254. data/lib/mongoid/extensions/regexp.rb +14 -7
  255. data/lib/mongoid/extensions/set.rb +24 -13
  256. data/lib/mongoid/extensions/string.rb +30 -62
  257. data/lib/mongoid/extensions/symbol.rb +9 -22
  258. data/lib/mongoid/extensions/time.rb +30 -40
  259. data/lib/mongoid/extensions/time_with_zone.rb +18 -11
  260. data/lib/mongoid/extensions/true_class.rb +8 -10
  261. data/lib/mongoid/extensions.rb +3 -20
  262. data/lib/mongoid/factory.rb +178 -37
  263. data/lib/mongoid/fields/encrypted.rb +48 -0
  264. data/lib/mongoid/fields/foreign_key.rb +39 -27
  265. data/lib/mongoid/fields/localized.rb +25 -15
  266. data/lib/mongoid/fields/standard.rb +22 -40
  267. data/lib/mongoid/fields/validators/macro.rb +6 -19
  268. data/lib/mongoid/fields/validators.rb +1 -1
  269. data/lib/mongoid/fields.rb +354 -76
  270. data/lib/mongoid/findable.rb +62 -22
  271. data/lib/mongoid/indexable/specification.rb +55 -34
  272. data/lib/mongoid/indexable/validators/options.rb +7 -9
  273. data/lib/mongoid/indexable.rb +2 -18
  274. data/lib/mongoid/inspectable.rb +34 -11
  275. data/lib/mongoid/interceptable.rb +197 -41
  276. data/lib/mongoid/loadable.rb +83 -0
  277. data/lib/mongoid/loggable.rb +1 -9
  278. data/lib/mongoid/matchable.rb +2 -6
  279. data/lib/mongoid/matcher/all.rb +15 -0
  280. data/lib/mongoid/matcher/and.rb +14 -0
  281. data/lib/mongoid/matcher/bits.rb +60 -0
  282. data/lib/mongoid/matcher/bits_all_clear.rb +41 -0
  283. data/lib/mongoid/matcher/bits_all_set.rb +41 -0
  284. data/lib/mongoid/matcher/bits_any_clear.rb +41 -0
  285. data/lib/mongoid/matcher/bits_any_set.rb +41 -0
  286. data/lib/mongoid/matcher/elem_match.rb +17 -1
  287. data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
  288. data/lib/mongoid/matcher/eq.rb +15 -0
  289. data/lib/mongoid/matcher/eq_impl.rb +54 -2
  290. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +18 -1
  291. data/lib/mongoid/matcher/exists.rb +15 -0
  292. data/lib/mongoid/matcher/expression.rb +22 -14
  293. data/lib/mongoid/matcher/expression_operator.rb +14 -0
  294. data/lib/mongoid/matcher/field_expression.rb +19 -5
  295. data/lib/mongoid/matcher/field_operator.rb +30 -0
  296. data/lib/mongoid/matcher/gt.rb +15 -0
  297. data/lib/mongoid/matcher/gte.rb +15 -0
  298. data/lib/mongoid/matcher/in.rb +15 -0
  299. data/lib/mongoid/matcher/lt.rb +15 -0
  300. data/lib/mongoid/matcher/lte.rb +15 -0
  301. data/lib/mongoid/matcher/mod.rb +33 -0
  302. data/lib/mongoid/matcher/ne.rb +15 -0
  303. data/lib/mongoid/matcher/nin.rb +15 -0
  304. data/lib/mongoid/matcher/nor.rb +14 -0
  305. data/lib/mongoid/matcher/not.rb +16 -0
  306. data/lib/mongoid/matcher/or.rb +14 -0
  307. data/lib/mongoid/matcher/regex.rb +24 -0
  308. data/lib/mongoid/matcher/size.rb +16 -0
  309. data/lib/mongoid/matcher/type.rb +124 -0
  310. data/lib/mongoid/matcher.rb +59 -52
  311. data/lib/mongoid/persistable/creatable.rb +25 -29
  312. data/lib/mongoid/persistable/deletable.rb +10 -23
  313. data/lib/mongoid/persistable/destroyable.rb +37 -11
  314. data/lib/mongoid/persistable/incrementable.rb +2 -6
  315. data/lib/mongoid/persistable/logical.rb +1 -5
  316. data/lib/mongoid/persistable/maxable.rb +37 -0
  317. data/lib/mongoid/persistable/minable.rb +37 -0
  318. data/lib/mongoid/persistable/multipliable.rb +36 -0
  319. data/lib/mongoid/persistable/poppable.rb +1 -5
  320. data/lib/mongoid/persistable/pullable.rb +1 -7
  321. data/lib/mongoid/persistable/pushable.rb +1 -7
  322. data/lib/mongoid/persistable/renamable.rb +1 -5
  323. data/lib/mongoid/persistable/savable.rb +14 -8
  324. data/lib/mongoid/persistable/settable.rb +1 -5
  325. data/lib/mongoid/persistable/unsettable.rb +3 -7
  326. data/lib/mongoid/persistable/updatable.rb +114 -28
  327. data/lib/mongoid/persistable/upsertable.rb +33 -8
  328. data/lib/mongoid/persistable.rb +17 -27
  329. data/lib/mongoid/persistence_context.rb +111 -43
  330. data/lib/mongoid/positional.rb +1 -5
  331. data/lib/mongoid/railtie.rb +23 -15
  332. data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
  333. data/lib/mongoid/railties/console_sandbox.rb +42 -0
  334. data/lib/mongoid/railties/controller_runtime.rb +21 -6
  335. data/lib/mongoid/railties/database.rake +19 -2
  336. data/lib/mongoid/reloadable.rb +45 -42
  337. data/lib/mongoid/scopable.rb +25 -53
  338. data/lib/mongoid/search_indexable.rb +167 -0
  339. data/lib/mongoid/selectable.rb +6 -17
  340. data/lib/mongoid/serializable.rb +11 -21
  341. data/lib/mongoid/shardable.rb +50 -16
  342. data/lib/mongoid/stateful.rb +66 -22
  343. data/lib/mongoid/stringified_symbol.rb +19 -7
  344. data/lib/mongoid/tasks/database.rake +25 -0
  345. data/lib/mongoid/tasks/database.rb +84 -8
  346. data/lib/mongoid/tasks/encryption.rake +59 -0
  347. data/lib/mongoid/tasks/encryption.rb +108 -0
  348. data/lib/mongoid/threaded/lifecycle.rb +6 -26
  349. data/lib/mongoid/threaded.rb +131 -92
  350. data/lib/mongoid/timestamps/created/short.rb +1 -1
  351. data/lib/mongoid/timestamps/created.rb +4 -4
  352. data/lib/mongoid/timestamps/short.rb +1 -1
  353. data/lib/mongoid/timestamps/timeless.rb +29 -7
  354. data/lib/mongoid/timestamps/updated/short.rb +1 -1
  355. data/lib/mongoid/timestamps/updated.rb +3 -5
  356. data/lib/mongoid/timestamps.rb +1 -1
  357. data/lib/mongoid/touchable.rb +155 -29
  358. data/lib/mongoid/traversable.rb +180 -125
  359. data/lib/mongoid/utils.rb +52 -0
  360. data/lib/mongoid/validatable/associated.rb +97 -21
  361. data/lib/mongoid/validatable/format.rb +1 -1
  362. data/lib/mongoid/validatable/length.rb +1 -1
  363. data/lib/mongoid/validatable/localizable.rb +2 -4
  364. data/lib/mongoid/validatable/macros.rb +10 -14
  365. data/lib/mongoid/validatable/presence.rb +7 -13
  366. data/lib/mongoid/validatable/queryable.rb +9 -3
  367. data/lib/mongoid/validatable/uniqueness.rb +26 -39
  368. data/lib/mongoid/validatable.rb +20 -29
  369. data/lib/mongoid/version.rb +2 -2
  370. data/lib/mongoid/warnings.rb +37 -0
  371. data/lib/mongoid.rb +56 -22
  372. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -5
  373. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
  374. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -64
  375. data/lib/rails/generators/mongoid/model/model_generator.rb +4 -1
  376. data/lib/rails/generators/mongoid_generator.rb +13 -1
  377. data/lib/rails/mongoid.rb +4 -32
  378. data/spec/config/mongoid.yml +16 -1
  379. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  380. data/spec/integration/active_job_spec.rb +32 -0
  381. data/spec/integration/app_spec.rb +180 -89
  382. data/spec/integration/associations/belongs_to_spec.rb +19 -1
  383. data/spec/integration/associations/embedded_dirty_spec.rb +58 -0
  384. data/spec/integration/associations/embedded_spec.rb +90 -7
  385. data/spec/integration/associations/embeds_many_spec.rb +197 -1
  386. data/spec/integration/associations/embeds_one_spec.rb +19 -1
  387. data/spec/integration/associations/foreign_key_spec.rb +10 -1
  388. data/spec/integration/associations/foreign_key_spec_models.rb +1 -1
  389. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +62 -0
  390. data/spec/integration/associations/has_many_spec.rb +1 -1
  391. data/spec/integration/associations/has_one_spec.rb +145 -1
  392. data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -1
  393. data/spec/integration/associations/reverse_population_spec.rb +1 -1
  394. data/spec/integration/associations/reverse_population_spec_models.rb +1 -1
  395. data/spec/integration/associations/scope_option_spec.rb +102 -0
  396. data/spec/integration/atomic/modifiers_spec.rb +1 -1
  397. data/spec/integration/bson_regexp_raw_spec.rb +1 -1
  398. data/spec/integration/callbacks_models.rb +147 -3
  399. data/spec/integration/callbacks_spec.rb +398 -8
  400. data/spec/integration/contextual/empty_spec.rb +142 -0
  401. data/spec/integration/criteria/alias_query_spec.rb +98 -0
  402. data/spec/integration/criteria/date_field_spec.rb +2 -2
  403. data/spec/integration/criteria/default_scope_spec.rb +52 -0
  404. data/spec/integration/criteria/logical_spec.rb +12 -0
  405. data/spec/integration/criteria/range_spec.rb +358 -0
  406. data/spec/integration/criteria/raw_value_spec.rb +525 -0
  407. data/spec/integration/criteria/time_with_zone_spec.rb +126 -15
  408. data/spec/integration/discriminator_key_spec.rb +119 -81
  409. data/spec/integration/discriminator_value_spec.rb +1 -1
  410. data/spec/integration/document_spec.rb +31 -1
  411. data/spec/integration/dots_and_dollars_spec.rb +278 -0
  412. data/spec/integration/encryption_spec.rb +100 -0
  413. data/spec/integration/i18n_fallbacks_spec.rb +10 -52
  414. data/spec/integration/matcher_examples_spec.rb +21 -14
  415. data/spec/integration/matcher_operator_data/bits_all_clear.yml +144 -0
  416. data/spec/integration/matcher_operator_data/bits_all_set.yml +144 -0
  417. data/spec/integration/matcher_operator_data/bits_any_clear.yml +144 -0
  418. data/spec/integration/matcher_operator_data/bits_any_set.yml +144 -0
  419. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  420. data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
  421. data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
  422. data/spec/integration/matcher_operator_data/in.yml +16 -0
  423. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  424. data/spec/integration/matcher_operator_data/size.yml +0 -3
  425. data/spec/integration/matcher_operator_data/type.yml +64 -0
  426. data/spec/integration/matcher_operator_data/type_array.yml +15 -0
  427. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  428. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  429. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  430. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  431. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  432. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  433. data/spec/integration/matcher_operator_data/type_decimal.yml +37 -0
  434. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  435. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  436. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  437. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  438. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  439. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  440. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  441. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  442. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  443. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  444. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  445. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  446. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  447. data/spec/integration/matcher_operator_spec.rb +26 -3
  448. data/spec/integration/matcher_spec.rb +50 -1
  449. data/spec/integration/persistence/range_field_spec.rb +351 -0
  450. data/spec/integration/server_query_spec.rb +1 -1
  451. data/spec/integration/shardable_spec.rb +1 -1
  452. data/spec/integration/stringified_symbol_field_spec.rb +17 -3
  453. data/spec/lite_spec_helper.rb +47 -14
  454. data/spec/mongoid/association/accessors_spec.rb +31 -19
  455. data/spec/mongoid/association/auto_save_spec.rb +73 -34
  456. data/spec/mongoid/association/builders_spec.rb +2 -2
  457. data/spec/mongoid/association/constrainable_spec.rb +1 -1
  458. data/spec/mongoid/association/counter_cache_spec.rb +34 -34
  459. data/spec/mongoid/association/depending_spec.rb +397 -358
  460. data/spec/mongoid/association/eager_spec.rb +56 -6
  461. data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -3
  462. data/spec/mongoid/association/embedded/dirty_spec.rb +3 -3
  463. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -2
  464. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +55 -1
  465. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +110 -23
  466. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -8
  467. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -1
  468. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +113 -1
  469. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +712 -203
  470. data/spec/mongoid/association/embedded/embeds_many_models.rb +189 -1
  471. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +14 -2
  472. data/spec/mongoid/association/embedded/embeds_many_spec.rb +69 -1
  473. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -1
  474. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +26 -1
  475. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +37 -24
  476. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -1
  477. data/spec/mongoid/association/embedded/embeds_one_models.rb +25 -2
  478. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -2
  479. data/spec/mongoid/association/embedded/embeds_one_spec.rb +29 -1
  480. data/spec/mongoid/association/macros_spec.rb +10 -10
  481. data/spec/mongoid/association/nested/many_spec.rb +1 -1
  482. data/spec/mongoid/association/nested/one_spec.rb +17 -13
  483. data/spec/mongoid/association/options_spec.rb +1 -1
  484. data/spec/mongoid/association/polymorphic_spec.rb +1 -1
  485. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -2
  486. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +110 -17
  487. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +51 -15
  488. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +113 -59
  489. data/spec/mongoid/association/referenced/belongs_to_models.rb +12 -0
  490. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +22 -2
  491. data/spec/mongoid/association/referenced/belongs_to_spec.rb +27 -22
  492. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +2 -2
  493. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +28 -3
  494. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +32 -3
  495. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -1
  496. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +386 -376
  497. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +44 -1
  498. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -2
  499. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +57 -3
  500. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +2 -2
  501. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +131 -1
  502. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +24 -7
  503. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +313 -134
  504. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -1
  505. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1313 -2109
  506. data/spec/mongoid/association/referenced/has_many_models.rb +39 -2
  507. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -2
  508. data/spec/mongoid/association/referenced/has_many_spec.rb +47 -1
  509. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -1
  510. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +54 -10
  511. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -2
  512. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +134 -28
  513. data/spec/mongoid/association/referenced/has_one_models.rb +43 -1
  514. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -2
  515. data/spec/mongoid/association/referenced/has_one_spec.rb +22 -1
  516. data/spec/mongoid/association/reflections_spec.rb +1 -1
  517. data/spec/mongoid/association/syncable_spec.rb +47 -33
  518. data/spec/mongoid/association_spec.rb +1 -1
  519. data/spec/mongoid/atomic/modifiers_spec.rb +1 -1
  520. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -1
  521. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -1
  522. data/spec/mongoid/atomic/paths/root_spec.rb +1 -1
  523. data/spec/mongoid/atomic/paths_spec.rb +65 -27
  524. data/spec/mongoid/atomic_spec.rb +29 -7
  525. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  526. data/spec/mongoid/attributes/dynamic_spec.rb +1 -1
  527. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  528. data/spec/mongoid/attributes/nested_spec.rb +147 -78
  529. data/spec/mongoid/attributes/nested_spec_models.rb +49 -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 +41 -0
  533. data/spec/mongoid/attributes/readonly_spec.rb +23 -23
  534. data/spec/mongoid/attributes_spec.rb +921 -69
  535. data/spec/mongoid/cacheable_spec.rb +5 -5
  536. data/spec/mongoid/changeable_spec.rb +468 -76
  537. data/spec/mongoid/clients/factory_spec.rb +152 -30
  538. data/spec/mongoid/clients/options_spec.rb +24 -12
  539. data/spec/mongoid/clients/sessions_spec.rb +49 -71
  540. data/spec/mongoid/clients/transactions_spec.rb +971 -176
  541. data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
  542. data/spec/mongoid/clients_spec.rb +230 -22
  543. data/spec/mongoid/collection_configurable_spec.rb +159 -0
  544. data/spec/mongoid/composable_spec.rb +1 -1
  545. data/spec/mongoid/config/defaults_spec.rb +99 -0
  546. data/spec/mongoid/config/encryption_spec.rb +152 -0
  547. data/spec/mongoid/config/environment_spec.rb +126 -39
  548. data/spec/mongoid/config/introspection_spec.rb +114 -0
  549. data/spec/mongoid/config/options_spec.rb +1 -1
  550. data/spec/mongoid/config_spec.rb +375 -43
  551. data/spec/mongoid/contextual/aggregable/memory_spec.rb +432 -154
  552. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  553. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +63 -0
  554. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +95 -20
  555. data/spec/mongoid/contextual/aggregable/none_spec.rb +49 -0
  556. data/spec/mongoid/contextual/atomic_spec.rb +329 -87
  557. data/spec/mongoid/contextual/map_reduce_spec.rb +5 -19
  558. data/spec/mongoid/contextual/memory_spec.rb +1479 -127
  559. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +194 -0
  560. data/spec/mongoid/contextual/mongo_spec.rb +3374 -1254
  561. data/spec/mongoid/contextual/none_spec.rb +79 -68
  562. data/spec/mongoid/copyable_spec.rb +465 -23
  563. data/spec/mongoid/copyable_spec_models.rb +1 -1
  564. data/spec/mongoid/criteria/findable_spec.rb +295 -229
  565. data/spec/mongoid/criteria/includable_spec.rb +1493 -0
  566. data/spec/mongoid/criteria/includable_spec_models.rb +55 -0
  567. data/spec/mongoid/criteria/inspectable_spec.rb +1 -1
  568. data/spec/mongoid/criteria/marshalable_spec.rb +19 -2
  569. data/spec/mongoid/criteria/modifiable_spec.rb +38 -38
  570. data/spec/mongoid/criteria/options_spec.rb +1 -1
  571. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +2 -2
  572. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -74
  573. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +8 -20
  574. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +135 -27
  575. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +2 -2
  576. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +32 -12
  577. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +12 -1
  578. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -1
  579. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -16
  580. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -1
  581. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -1
  582. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +74 -8
  583. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -1
  584. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +238 -179
  585. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -12
  586. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -12
  587. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -1
  588. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -132
  589. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -60
  590. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +12 -1
  591. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +12 -1
  592. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -1
  593. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +106 -8
  594. data/spec/mongoid/criteria/queryable/optional_spec.rb +17 -486
  595. data/spec/mongoid/criteria/queryable/options_spec.rb +2 -2
  596. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -1
  597. data/spec/mongoid/criteria/queryable/queryable_spec.rb +2 -2
  598. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +700 -26
  599. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  600. data/spec/mongoid/criteria/queryable/selectable_spec.rb +149 -683
  601. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  602. data/spec/mongoid/criteria/queryable/selector_spec.rb +186 -6
  603. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -1
  604. data/spec/mongoid/criteria/queryable/storable_spec.rb +87 -1
  605. data/spec/mongoid/criteria/scopable_spec.rb +128 -1
  606. data/spec/mongoid/criteria/translator_spec.rb +133 -0
  607. data/spec/mongoid/criteria_projection_spec.rb +407 -0
  608. data/spec/mongoid/criteria_spec.rb +1029 -1806
  609. data/spec/mongoid/document_fields_spec.rb +180 -5
  610. data/spec/mongoid/document_persistence_context_spec.rb +77 -1
  611. data/spec/mongoid/document_query_spec.rb +55 -4
  612. data/spec/mongoid/document_spec.rb +43 -172
  613. data/spec/mongoid/equality_spec.rb +7 -8
  614. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -1
  615. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  616. data/spec/mongoid/errors/callback_spec.rb +1 -1
  617. data/spec/mongoid/errors/delete_restriction_spec.rb +2 -2
  618. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -1
  619. data/spec/mongoid/errors/document_not_found_spec.rb +77 -1
  620. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -1
  621. data/spec/mongoid/errors/{eager_load_spec.rb → invalid_config_file_spec.rb} +6 -6
  622. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -1
  623. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -1
  624. data/spec/mongoid/errors/invalid_field_spec.rb +2 -2
  625. data/spec/mongoid/errors/invalid_field_type_spec.rb +56 -0
  626. data/spec/mongoid/errors/invalid_find_spec.rb +1 -1
  627. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -1
  628. data/spec/mongoid/errors/invalid_index_spec.rb +1 -1
  629. data/spec/mongoid/errors/invalid_options_spec.rb +1 -1
  630. data/spec/mongoid/errors/invalid_path_spec.rb +1 -1
  631. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -1
  632. data/spec/mongoid/errors/invalid_scope_spec.rb +2 -2
  633. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -1
  634. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -1
  635. data/spec/mongoid/errors/invalid_time_spec.rb +1 -1
  636. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -1
  637. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -1
  638. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -1
  639. data/spec/mongoid/errors/mongoid_error_spec.rb +4 -4
  640. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -1
  641. data/spec/mongoid/errors/no_client_config_spec.rb +1 -1
  642. data/spec/mongoid/errors/no_client_database_spec.rb +1 -1
  643. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -1
  644. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -1
  645. data/spec/mongoid/errors/no_environment_spec.rb +4 -4
  646. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -1
  647. data/spec/mongoid/errors/no_metadata_spec.rb +1 -1
  648. data/spec/mongoid/errors/no_parent_spec.rb +1 -1
  649. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -1
  650. data/spec/mongoid/errors/readonly_document_spec.rb +3 -3
  651. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -1
  652. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +2 -2
  653. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -3
  654. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -1
  655. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -1
  656. data/spec/mongoid/errors/validations_spec.rb +1 -1
  657. data/spec/mongoid/extensions/array_spec.rb +19 -265
  658. data/spec/mongoid/extensions/big_decimal_spec.rb +713 -213
  659. data/spec/mongoid/extensions/binary_spec.rb +45 -10
  660. data/spec/mongoid/extensions/boolean_spec.rb +69 -83
  661. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +15 -11
  662. data/spec/mongoid/extensions/date_spec.rb +74 -22
  663. data/spec/mongoid/extensions/date_time_spec.rb +18 -19
  664. data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
  665. data/spec/mongoid/extensions/false_class_spec.rb +2 -9
  666. data/spec/mongoid/extensions/float_spec.rb +56 -84
  667. data/spec/mongoid/extensions/hash_spec.rb +45 -219
  668. data/spec/mongoid/extensions/integer_spec.rb +53 -73
  669. data/spec/mongoid/extensions/module_spec.rb +1 -1
  670. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  671. data/spec/mongoid/extensions/object_id_spec.rb +1 -1
  672. data/spec/mongoid/extensions/object_spec.rb +1 -177
  673. data/spec/mongoid/extensions/range_spec.rb +254 -64
  674. data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
  675. data/spec/mongoid/extensions/regexp_spec.rb +59 -34
  676. data/spec/mongoid/extensions/set_spec.rb +105 -1
  677. data/spec/mongoid/extensions/string_spec.rb +21 -104
  678. data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -1
  679. data/spec/mongoid/extensions/symbol_spec.rb +15 -53
  680. data/spec/mongoid/extensions/time_spec.rb +345 -131
  681. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -107
  682. data/spec/mongoid/extensions/true_class_spec.rb +2 -9
  683. data/spec/mongoid/factory_spec.rb +63 -2
  684. data/spec/mongoid/fields/foreign_key_spec.rb +282 -120
  685. data/spec/mongoid/fields/localized_spec.rb +85 -42
  686. data/spec/mongoid/fields/standard_spec.rb +1 -1
  687. data/spec/mongoid/fields_spec.rb +826 -121
  688. data/spec/mongoid/findable_spec.rb +442 -80
  689. data/spec/mongoid/indexable/specification_spec.rb +132 -14
  690. data/spec/mongoid/indexable_spec.rb +361 -23
  691. data/spec/mongoid/inspectable_spec.rb +93 -5
  692. data/spec/mongoid/interceptable_spec.rb +926 -116
  693. data/spec/mongoid/interceptable_spec_models.rb +236 -4
  694. data/spec/mongoid/loading_spec.rb +110 -0
  695. data/spec/mongoid/loggable_spec.rb +1 -1
  696. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  697. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
  698. data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -15
  699. data/spec/mongoid/mongoizable_spec.rb +286 -0
  700. data/spec/mongoid/monkey_patches_spec.rb +211 -0
  701. data/spec/mongoid/persistable/creatable_spec.rb +5 -5
  702. data/spec/mongoid/persistable/deletable_spec.rb +267 -27
  703. data/spec/mongoid/persistable/destroyable_spec.rb +409 -24
  704. data/spec/mongoid/persistable/incrementable_spec.rb +46 -9
  705. data/spec/mongoid/persistable/logical_spec.rb +42 -5
  706. data/spec/mongoid/persistable/maxable_spec.rb +147 -0
  707. data/spec/mongoid/persistable/minable_spec.rb +147 -0
  708. data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
  709. data/spec/mongoid/persistable/poppable_spec.rb +41 -5
  710. data/spec/mongoid/persistable/pullable_spec.rb +81 -9
  711. data/spec/mongoid/persistable/pushable_spec.rb +81 -9
  712. data/spec/mongoid/persistable/renamable_spec.rb +40 -4
  713. data/spec/mongoid/persistable/savable_spec.rb +114 -20
  714. data/spec/mongoid/persistable/settable_spec.rb +77 -10
  715. data/spec/mongoid/persistable/unsettable_spec.rb +41 -5
  716. data/spec/mongoid/persistable/updatable_spec.rb +64 -52
  717. data/spec/mongoid/persistable/upsertable_spec.rb +124 -4
  718. data/spec/mongoid/persistable_spec.rb +4 -4
  719. data/spec/mongoid/persistence_context_spec.rb +58 -59
  720. data/spec/mongoid/positional_spec.rb +1 -1
  721. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
  722. data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
  723. data/spec/mongoid/relations/proxy_spec.rb +7 -7
  724. data/spec/mongoid/reloadable_spec.rb +255 -30
  725. data/spec/mongoid/scopable_spec.rb +198 -58
  726. data/spec/mongoid/search_indexable_spec.rb +147 -0
  727. data/spec/mongoid/selectable_spec.rb +7 -7
  728. data/spec/mongoid/serializable_spec.rb +19 -40
  729. data/spec/mongoid/shardable_models.rb +15 -0
  730. data/spec/mongoid/shardable_spec.rb +181 -31
  731. data/spec/mongoid/stateful_spec.rb +152 -10
  732. data/spec/mongoid/tasks/database_rake_spec.rb +193 -42
  733. data/spec/mongoid/tasks/database_spec.rb +175 -2
  734. data/spec/mongoid/tasks/encryption_spec.rb +187 -0
  735. data/spec/mongoid/threaded_spec.rb +40 -3
  736. data/spec/mongoid/timestamps/created/short_spec.rb +2 -2
  737. data/spec/mongoid/timestamps/created_spec.rb +2 -2
  738. data/spec/mongoid/timestamps/timeless_spec.rb +3 -3
  739. data/spec/mongoid/timestamps/updated/short_spec.rb +4 -4
  740. data/spec/mongoid/timestamps/updated_spec.rb +4 -4
  741. data/spec/mongoid/timestamps_spec.rb +399 -11
  742. data/spec/mongoid/timestamps_spec_models.rb +68 -0
  743. data/spec/mongoid/touchable_spec.rb +971 -54
  744. data/spec/mongoid/touchable_spec_models.rb +154 -0
  745. data/spec/mongoid/traversable_spec.rb +79 -37
  746. data/spec/mongoid/validatable/associated_spec.rb +14 -31
  747. data/spec/mongoid/validatable/format_spec.rb +1 -1
  748. data/spec/mongoid/validatable/length_spec.rb +1 -1
  749. data/spec/mongoid/validatable/numericality_spec.rb +1 -1
  750. data/spec/mongoid/validatable/presence_spec.rb +27 -23
  751. data/spec/mongoid/validatable/uniqueness_spec.rb +170 -99
  752. data/spec/mongoid/validatable_spec.rb +4 -4
  753. data/spec/mongoid/warnings_spec.rb +36 -0
  754. data/spec/mongoid_spec.rb +61 -11
  755. data/spec/rails/controller_extension/controller_runtime_spec.rb +3 -3
  756. data/spec/rails/mongoid_spec.rb +28 -132
  757. data/spec/shared/bin/get-mongodb-download-url +17 -0
  758. data/spec/shared/bin/s3-copy +45 -0
  759. data/spec/shared/bin/s3-upload +69 -0
  760. data/spec/shared/lib/mrss/cluster_config.rb +24 -4
  761. data/spec/shared/lib/mrss/constraints.rb +77 -29
  762. data/spec/shared/lib/mrss/docker_runner.rb +40 -4
  763. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  764. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  765. data/spec/shared/lib/mrss/lite_constraints.rb +64 -1
  766. data/spec/shared/lib/mrss/server_version_registry.rb +78 -34
  767. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  768. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  769. data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
  770. data/spec/shared/lib/mrss/utils.rb +37 -0
  771. data/spec/shared/share/Dockerfile.erb +123 -71
  772. data/spec/shared/share/haproxy-1.conf +16 -0
  773. data/spec/shared/share/haproxy-2.conf +17 -0
  774. data/spec/shared/shlib/config.sh +27 -0
  775. data/spec/shared/shlib/distro.sh +2 -1
  776. data/spec/shared/shlib/server.sh +187 -40
  777. data/spec/shared/shlib/set_env.sh +49 -31
  778. data/spec/spec_helper.rb +46 -49
  779. data/spec/support/authorization.rb +1 -1
  780. data/spec/support/client_registry.rb +10 -0
  781. data/spec/support/constraints.rb +25 -1
  782. data/spec/support/crypt/models.rb +50 -0
  783. data/spec/support/crypt.rb +80 -0
  784. data/spec/support/expectations.rb +1 -1
  785. data/spec/support/feature_sandbox.rb +72 -0
  786. data/spec/support/helpers.rb +1 -0
  787. data/spec/support/immutable_ids.rb +119 -0
  788. data/spec/support/macros.rb +107 -1
  789. data/spec/support/models/account.rb +2 -2
  790. data/spec/support/models/acolyte.rb +1 -1
  791. data/spec/support/models/actor.rb +1 -1
  792. data/spec/support/models/actress.rb +1 -1
  793. data/spec/support/models/address.rb +7 -1
  794. data/spec/support/models/address_component.rb +1 -1
  795. data/spec/support/models/address_number.rb +1 -1
  796. data/spec/support/models/agency.rb +1 -1
  797. data/spec/support/models/agent.rb +1 -1
  798. data/spec/support/models/album.rb +1 -1
  799. data/spec/support/models/alert.rb +1 -1
  800. data/spec/support/models/animal.rb +1 -1
  801. data/spec/support/models/answer.rb +1 -1
  802. data/spec/support/models/appointment.rb +1 -1
  803. data/spec/support/models/armrest.rb +1 -1
  804. data/spec/support/models/array_field.rb +1 -1
  805. data/spec/support/models/article.rb +1 -1
  806. data/spec/support/models/artist.rb +3 -2
  807. data/spec/support/models/artwork.rb +1 -1
  808. data/spec/support/models/audible_sound.rb +4 -0
  809. data/spec/support/models/audio.rb +1 -1
  810. data/spec/support/models/augmentation.rb +13 -1
  811. data/spec/support/models/author.rb +1 -1
  812. data/spec/support/models/baby.rb +1 -1
  813. data/spec/support/models/band.rb +13 -1
  814. data/spec/support/models/bar.rb +1 -1
  815. data/spec/support/models/basic.rb +1 -1
  816. data/spec/support/models/bed.rb +1 -1
  817. data/spec/support/models/big_palette.rb +1 -1
  818. data/spec/support/models/birthday.rb +1 -1
  819. data/spec/support/models/bolt.rb +8 -0
  820. data/spec/support/models/bomb.rb +1 -1
  821. data/spec/support/models/book.rb +2 -1
  822. data/spec/support/models/breed.rb +1 -1
  823. data/spec/support/models/browser.rb +1 -1
  824. data/spec/support/models/building.rb +3 -1
  825. data/spec/support/models/building_address.rb +1 -1
  826. data/spec/support/models/bus.rb +1 -1
  827. data/spec/support/models/business.rb +1 -1
  828. data/spec/support/models/callback_test.rb +1 -1
  829. data/spec/support/models/canvas.rb +1 -1
  830. data/spec/support/models/car.rb +1 -1
  831. data/spec/support/models/cat.rb +1 -1
  832. data/spec/support/models/catalog.rb +25 -0
  833. data/spec/support/models/category.rb +1 -1
  834. data/spec/support/models/child.rb +1 -1
  835. data/spec/support/models/child_doc.rb +4 -4
  836. data/spec/support/models/church.rb +1 -1
  837. data/spec/support/models/circle.rb +1 -1
  838. data/spec/support/models/circuit.rb +1 -1
  839. data/spec/support/models/circus.rb +4 -1
  840. data/spec/support/models/code.rb +3 -1
  841. data/spec/support/models/coding/pull_request.rb +1 -1
  842. data/spec/support/models/coding.rb +1 -1
  843. data/spec/support/models/comment.rb +1 -1
  844. data/spec/support/models/company.rb +1 -1
  845. data/spec/support/models/consumption_period.rb +1 -1
  846. data/spec/support/models/contextable_item.rb +1 -1
  847. data/spec/support/models/contractor.rb +1 -1
  848. data/spec/support/models/cookie.rb +1 -1
  849. data/spec/support/models/country_code.rb +3 -1
  850. data/spec/support/models/courier_job.rb +1 -1
  851. data/spec/support/models/cover.rb +11 -0
  852. data/spec/support/models/crate.rb +1 -1
  853. data/spec/support/models/customer.rb +1 -1
  854. data/spec/support/models/customer_address.rb +1 -1
  855. data/spec/support/models/deed.rb +1 -1
  856. data/spec/support/models/definition.rb +1 -1
  857. data/spec/support/models/delegating_patient.rb +1 -1
  858. data/spec/support/models/description.rb +1 -1
  859. data/spec/support/models/dictionary.rb +1 -1
  860. data/spec/support/models/division.rb +1 -1
  861. data/spec/support/models/doctor.rb +1 -1
  862. data/spec/support/models/dog.rb +1 -1
  863. data/spec/support/models/dokument.rb +1 -1
  864. data/spec/support/models/draft.rb +1 -1
  865. data/spec/support/models/dragon.rb +1 -1
  866. data/spec/support/models/driver.rb +1 -1
  867. data/spec/support/models/drug.rb +1 -1
  868. data/spec/support/models/dungeon.rb +1 -1
  869. data/spec/support/models/edit.rb +1 -1
  870. data/spec/support/models/email.rb +1 -1
  871. data/spec/support/models/employer.rb +1 -1
  872. data/spec/support/models/entry.rb +1 -1
  873. data/spec/support/models/eraser.rb +1 -1
  874. data/spec/support/models/even.rb +1 -1
  875. data/spec/support/models/event.rb +1 -1
  876. data/spec/support/models/exhibition.rb +1 -1
  877. data/spec/support/models/exhibitor.rb +1 -1
  878. data/spec/support/models/explosion.rb +1 -1
  879. data/spec/support/models/eye.rb +1 -1
  880. data/spec/support/models/eye_bowl.rb +1 -1
  881. data/spec/support/models/face.rb +1 -1
  882. data/spec/support/models/fanatic.rb +9 -0
  883. data/spec/support/models/favorite.rb +8 -2
  884. data/spec/support/models/filesystem.rb +1 -1
  885. data/spec/support/models/fire_hydrant.rb +1 -1
  886. data/spec/support/models/firefox.rb +1 -1
  887. data/spec/support/models/fish.rb +1 -1
  888. data/spec/support/models/folder.rb +1 -1
  889. data/spec/support/models/folder_item.rb +1 -1
  890. data/spec/support/models/fruits.rb +1 -1
  891. data/spec/support/models/game.rb +1 -1
  892. data/spec/support/models/ghost.rb +1 -1
  893. data/spec/support/models/guitar.rb +1 -1
  894. data/spec/support/models/hole.rb +13 -0
  895. data/spec/support/models/home.rb +1 -1
  896. data/spec/support/models/house.rb +1 -1
  897. data/spec/support/models/html_writer.rb +1 -1
  898. data/spec/support/models/id_key.rb +1 -1
  899. data/spec/support/models/idnodef.rb +1 -1
  900. data/spec/support/models/image.rb +1 -1
  901. data/spec/support/models/implant.rb +10 -1
  902. data/spec/support/models/instrument.rb +1 -1
  903. data/spec/support/models/item.rb +1 -1
  904. data/spec/support/models/jar.rb +1 -1
  905. data/spec/support/models/kaleidoscope.rb +1 -1
  906. data/spec/support/models/kangaroo.rb +1 -1
  907. data/spec/support/models/label.rb +5 -2
  908. data/spec/support/models/language.rb +1 -1
  909. data/spec/support/models/lat_lng.rb +1 -1
  910. data/spec/support/models/league.rb +1 -1
  911. data/spec/support/models/learner.rb +1 -1
  912. data/spec/support/models/line_item.rb +1 -1
  913. data/spec/support/models/location.rb +1 -1
  914. data/spec/support/models/login.rb +1 -1
  915. data/spec/support/models/manufacturer.rb +1 -1
  916. data/spec/support/models/meat.rb +1 -1
  917. data/spec/support/models/membership.rb +2 -1
  918. data/spec/support/models/message.rb +1 -1
  919. data/spec/support/models/minim.rb +1 -1
  920. data/spec/support/models/mixed_drink.rb +1 -1
  921. data/spec/support/models/mop.rb +10 -1
  922. data/spec/support/models/movie.rb +1 -1
  923. data/spec/support/models/my_hash.rb +1 -1
  924. data/spec/support/models/name.rb +11 -1
  925. data/spec/support/models/name_only.rb +1 -1
  926. data/spec/support/models/node.rb +1 -1
  927. data/spec/support/models/note.rb +1 -1
  928. data/spec/support/models/nut.rb +8 -0
  929. data/spec/support/models/odd.rb +1 -1
  930. data/spec/support/models/order.rb +3 -1
  931. data/spec/support/models/ordered_post.rb +2 -2
  932. data/spec/support/models/ordered_preference.rb +1 -1
  933. data/spec/support/models/oscar.rb +1 -1
  934. data/spec/support/models/other_owner_object.rb +1 -1
  935. data/spec/support/models/override.rb +1 -1
  936. data/spec/support/models/ownable.rb +1 -1
  937. data/spec/support/models/owner.rb +1 -1
  938. data/spec/support/models/pack.rb +1 -1
  939. data/spec/support/models/page.rb +1 -1
  940. data/spec/support/models/page_question.rb +1 -1
  941. data/spec/support/models/palette.rb +1 -1
  942. data/spec/support/models/parent.rb +1 -1
  943. data/spec/support/models/parent_doc.rb +1 -1
  944. data/spec/support/models/passport.rb +15 -1
  945. data/spec/support/models/patient.rb +1 -1
  946. data/spec/support/models/pdf_writer.rb +1 -1
  947. data/spec/support/models/pencil.rb +1 -1
  948. data/spec/support/models/person.rb +19 -1
  949. data/spec/support/models/pet.rb +1 -1
  950. data/spec/support/models/pet_owner.rb +1 -1
  951. data/spec/support/models/phone.rb +3 -2
  952. data/spec/support/models/piano.rb +1 -1
  953. data/spec/support/models/pizza.rb +1 -1
  954. data/spec/support/models/player.rb +3 -1
  955. data/spec/support/models/post.rb +1 -1
  956. data/spec/support/models/post_genre.rb +1 -1
  957. data/spec/support/models/powerup.rb +13 -1
  958. data/spec/support/models/preference.rb +1 -1
  959. data/spec/support/models/princess.rb +1 -1
  960. data/spec/support/models/product.rb +2 -1
  961. data/spec/support/models/profile.rb +1 -1
  962. data/spec/support/models/pronunciation.rb +1 -1
  963. data/spec/support/models/pub.rb +1 -1
  964. data/spec/support/models/publication/encyclopedia.rb +1 -1
  965. data/spec/support/models/publication/review.rb +1 -1
  966. data/spec/support/models/publication.rb +1 -1
  967. data/spec/support/models/purchase.rb +1 -1
  968. data/spec/support/models/purchased_item.rb +11 -0
  969. data/spec/support/models/purse.rb +9 -0
  970. data/spec/support/models/question.rb +1 -1
  971. data/spec/support/models/quiz.rb +1 -1
  972. data/spec/support/models/rating.rb +1 -1
  973. data/spec/support/models/record.rb +1 -1
  974. data/spec/support/models/registry.rb +2 -1
  975. data/spec/support/models/role.rb +1 -1
  976. data/spec/support/models/root_category.rb +1 -1
  977. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  978. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  979. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  980. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  981. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  982. data/spec/support/models/sandwich.rb +1 -1
  983. data/spec/support/models/scheduler.rb +1 -1
  984. data/spec/support/models/school.rb +15 -0
  985. data/spec/support/models/scribe.rb +1 -1
  986. data/spec/support/models/sealer.rb +8 -0
  987. data/spec/support/models/seat.rb +1 -1
  988. data/spec/support/models/seo.rb +1 -1
  989. data/spec/support/models/series.rb +1 -1
  990. data/spec/support/models/server.rb +1 -1
  991. data/spec/support/models/service.rb +1 -1
  992. data/spec/support/models/shape.rb +1 -1
  993. data/spec/support/models/shelf.rb +1 -1
  994. data/spec/support/models/shield.rb +19 -0
  995. data/spec/support/models/shipment_address.rb +1 -1
  996. data/spec/support/models/shipping_container.rb +1 -1
  997. data/spec/support/models/shipping_pack.rb +1 -1
  998. data/spec/support/models/shirt.rb +12 -0
  999. data/spec/support/models/shop.rb +1 -1
  1000. data/spec/support/models/short_agent.rb +1 -1
  1001. data/spec/support/models/short_quiz.rb +1 -1
  1002. data/spec/support/models/simple.rb +1 -1
  1003. data/spec/support/models/slave.rb +1 -1
  1004. data/spec/support/models/song.rb +1 -1
  1005. data/spec/support/models/sound.rb +1 -1
  1006. data/spec/support/models/spacer.rb +8 -0
  1007. data/spec/support/models/square.rb +1 -1
  1008. data/spec/support/models/staff.rb +1 -1
  1009. data/spec/support/models/store_as_dup_test1.rb +1 -1
  1010. data/spec/support/models/store_as_dup_test2.rb +1 -1
  1011. data/spec/support/models/store_as_dup_test3.rb +1 -1
  1012. data/spec/support/models/store_as_dup_test4.rb +1 -1
  1013. data/spec/support/models/strategy.rb +1 -1
  1014. data/spec/support/models/student.rb +15 -0
  1015. data/spec/support/models/sub_item.rb +1 -1
  1016. data/spec/support/models/subscription.rb +1 -1
  1017. data/spec/support/models/survey.rb +1 -1
  1018. data/spec/support/models/symptom.rb +1 -1
  1019. data/spec/support/models/system_role.rb +1 -0
  1020. data/spec/support/models/tag.rb +1 -1
  1021. data/spec/support/models/target.rb +1 -1
  1022. data/spec/support/models/template.rb +1 -1
  1023. data/spec/support/models/thing.rb +1 -1
  1024. data/spec/support/models/threadlocker.rb +8 -0
  1025. data/spec/support/models/title.rb +1 -1
  1026. data/spec/support/models/tool.rb +1 -1
  1027. data/spec/support/models/topping.rb +1 -1
  1028. data/spec/support/models/toy.rb +1 -1
  1029. data/spec/support/models/track.rb +1 -1
  1030. data/spec/support/models/translation.rb +1 -1
  1031. data/spec/support/models/tree.rb +1 -1
  1032. data/spec/support/models/truck.rb +1 -1
  1033. data/spec/support/models/updatable.rb +1 -1
  1034. data/spec/support/models/user.rb +1 -1
  1035. data/spec/support/models/user_account.rb +1 -1
  1036. data/spec/support/models/validation_callback.rb +1 -1
  1037. data/spec/support/models/vehicle.rb +1 -1
  1038. data/spec/support/models/version.rb +1 -1
  1039. data/spec/support/models/vertex.rb +1 -1
  1040. data/spec/support/models/vet_visit.rb +1 -1
  1041. data/spec/support/models/video.rb +1 -1
  1042. data/spec/support/models/video_game.rb +1 -1
  1043. data/spec/support/models/washer.rb +8 -0
  1044. data/spec/support/models/weapon.rb +13 -1
  1045. data/spec/support/models/wiki_page.rb +1 -1
  1046. data/spec/support/models/word.rb +1 -1
  1047. data/spec/support/models/word_origin.rb +1 -1
  1048. data/spec/support/models/writer.rb +1 -1
  1049. data/spec/support/rails_mock.rb +32 -0
  1050. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  1051. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  1052. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  1053. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  1054. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  1055. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  1056. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  1057. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  1058. data/spec/support/schema_maps/schema_map_local.json +18 -0
  1059. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  1060. data/spec/support/shared/time.rb +3 -22
  1061. data/spec/support/sinatra_mock.rb +7 -0
  1062. data/spec/support/spec_config.rb +42 -7
  1063. data.tar.gz.sig +0 -0
  1064. metadata +883 -562
  1065. metadata.gz.sig +0 -0
  1066. data/lib/mongoid/association/referenced/eager.rb +0 -184
  1067. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -128
  1068. data/lib/mongoid/contextual/geo_near.rb +0 -269
  1069. data/lib/mongoid/errors/eager_load.rb +0 -26
  1070. data/lib/mongoid/errors/invalid_session_use.rb +0 -26
  1071. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -28
  1072. data/lib/mongoid/errors/invalid_value.rb +0 -18
  1073. data/lib/mongoid/query_cache.rb +0 -333
  1074. data/lib/support/ruby_version.rb +0 -29
  1075. data/spec/mongoid/contextual/geo_near_spec.rb +0 -472
  1076. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -61
  1077. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -61
  1078. data/spec/mongoid/extensions_spec.rb +0 -32
  1079. data/spec/mongoid/query_cache_middleware_spec.rb +0 -61
  1080. data/spec/mongoid/query_cache_spec.rb +0 -978
  1081. data/spec/support/cluster_config.rb +0 -158
  1082. data/spec/support/session_registry.rb +0 -50
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
2
+ # rubocop:todo all
3
3
 
4
4
  require "spec_helper"
5
5
 
6
- describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
6
+ describe Mongoid::Association::Referenced::HasMany::Enumerable do
7
7
 
8
8
  describe "#==" do
9
9
 
10
10
  context "when comparing with an enumerable" do
11
11
 
12
12
  let(:person) do
13
- Person.create
13
+ Person.create!
14
14
  end
15
15
 
16
16
  let!(:post) do
17
- Post.create(person_id: person.id)
17
+ Post.create!(person_id: person.id)
18
18
  end
19
19
 
20
20
  context "when only a criteria target exists" do
@@ -88,7 +88,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
88
88
  context "when the loaded has no docs and added is persisted" do
89
89
 
90
90
  before do
91
- post.save
91
+ post.save!
92
92
  enumerable._added[post.id] = post
93
93
  end
94
94
 
@@ -114,72 +114,103 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
114
114
 
115
115
  describe "#===" do
116
116
 
117
- let(:enumerable) do
118
- described_class.new([])
119
- end
117
+ let(:data) { [] }
120
118
 
121
- context "when compared to an array class" do
119
+ shared_examples 'standard library-compatible enumerable' do
120
+ context "when compared to an array class" do
122
121
 
123
- it "returns true" do
124
- expect(enumerable === Array).to be true
122
+ it "returns false" do
123
+ expect(enumerable === Array).to be false
124
+ end
125
125
  end
126
- end
127
126
 
128
- context "when compared to an enumerable class" do
127
+ context "when compared to an enumerable class" do
129
128
 
130
- it "returns true" do
131
- expect(enumerable === described_class).to be true
129
+ it "returns false" do
130
+ expect(enumerable === described_class).to be false
131
+ end
132
132
  end
133
- end
134
133
 
135
- context "when compared to a different class" do
134
+ context "when compared to a different class" do
136
135
 
137
- it "returns false" do
138
- expect(enumerable === Mongoid::Document).to be false
136
+ it "returns false" do
137
+ expect(enumerable === Mongoid::Document).to be false
138
+ end
139
139
  end
140
- end
141
140
 
142
- context "when compared to an array instance" do
141
+ context "when compared to an array instance" do
143
142
 
144
- context "when the entries are equal" do
143
+ context "when the entries are equal" do
145
144
 
146
- let(:other) do
147
- described_class.new([])
148
- end
145
+ let(:data) do
146
+ [Post.new(id: 2)]
147
+ end
149
148
 
150
- it "returns true" do
151
- expect(enumerable === other).to be true
149
+ let(:other) do
150
+ described_class.new([Post.new(id: 2)])
151
+ end
152
+
153
+ it "returns true" do
154
+ expect(enumerable === other).to be true
155
+ end
152
156
  end
153
- end
154
157
 
155
- context "when the entries are not equal" do
158
+ context "when the entries are both empty" do
156
159
 
157
- let(:other) do
158
- described_class.new([ Band.new ])
160
+ let(:other) do
161
+ described_class.new([])
162
+ end
163
+
164
+ it "returns true" do
165
+ expect(enumerable === other).to be true
166
+ end
159
167
  end
160
168
 
161
- it "returns false" do
162
- expect(enumerable === other).to be false
169
+ context "when the entries are not equal" do
170
+
171
+ let(:other) do
172
+ described_class.new([ Band.new ])
173
+ end
174
+
175
+ it "returns false" do
176
+ expect(enumerable === other).to be false
177
+ end
163
178
  end
164
179
  end
165
180
  end
181
+
182
+ context 'enumerable' do
183
+ let(:enumerable) do
184
+ described_class.new(data)
185
+ end
186
+
187
+ include_examples 'standard library-compatible enumerable'
188
+ end
189
+
190
+ context 'Array instance' do
191
+ let(:enumerable) do
192
+ data
193
+ end
194
+
195
+ include_examples 'standard library-compatible enumerable'
196
+ end
166
197
  end
167
198
 
168
199
  describe "#<<" do
169
200
 
170
201
  let(:person) do
171
- Person.create
202
+ Person.create!
172
203
  end
173
204
 
174
205
  let!(:post) do
175
- Post.create(person_id: person.id)
206
+ Post.create!(person_id: person.id)
176
207
  end
177
208
 
178
209
  let!(:enumerable) do
179
210
  described_class.new([])
180
211
  end
181
212
 
182
- context "when the relation is empty" do
213
+ context "when the association is empty" do
183
214
 
184
215
  let!(:added) do
185
216
  enumerable << post
@@ -201,18 +232,18 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
201
232
  end
202
233
  end
203
234
 
204
- describe "#any?" do
235
+ describe "#empty?" do
205
236
 
206
237
  let(:person) do
207
- Person.create
238
+ Person.create!
208
239
  end
209
240
 
210
241
  let!(:post_one) do
211
- Post.create(person_id: person.id)
242
+ Post.create!(person_id: person.id)
212
243
  end
213
244
 
214
245
  let!(:post_two) do
215
- Post.create(person_id: person.id)
246
+ Post.create!(person_id: person.id)
216
247
  end
217
248
 
218
249
  context "when only a criteria target exists" do
@@ -225,27 +256,138 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
225
256
  described_class.new(criteria)
226
257
  end
227
258
 
228
- let!(:any) do
229
- enumerable.any?
259
+ let(:empty) do
260
+ enumerable.empty?
230
261
  end
231
262
 
232
- it "returns true" do
233
- expect(any).to be true
263
+ it "returns false" do
264
+ expect(empty).to be false
234
265
  end
235
266
 
236
- it "retains the correct length" do
237
- expect(enumerable.length).to eq(2)
267
+ context 'when #empty? is called' do
268
+
269
+ before { empty }
270
+
271
+ it "retains the correct length" do
272
+ expect(enumerable.length).to eq(2)
273
+ end
274
+
275
+ it "retains the correct length when calling to_a" do
276
+ expect(enumerable.to_a.length).to eq(2)
277
+ end
278
+
279
+ context "when iterating over the association a second time" do
280
+
281
+ before do
282
+ enumerable.each { |post| post }
283
+ end
284
+
285
+ it "retains the correct length" do
286
+ expect(enumerable.length).to eq(2)
287
+ end
288
+
289
+ it "retains the correct length when calling to_a" do
290
+ expect(enumerable.to_a.length).to eq(2)
291
+ end
292
+ end
238
293
  end
294
+ end
239
295
 
240
- it "retains the correct length when calling to_a" do
241
- expect(enumerable.to_a.length).to eq(2)
296
+ context "when the documents have been loaded" do
297
+ let(:criteria) do
298
+ Post.where(person_id: person.id)
242
299
  end
243
300
 
244
- context "when iterating over the relation a second time" do
301
+ let!(:enumerable) do
302
+ described_class.new(criteria)
303
+ end
304
+
305
+ before do
306
+ enumerable.load_all!
307
+ end
308
+
309
+ it "is _loaded" do
310
+ expect(enumerable._loaded?).to be true
311
+ end
312
+
313
+ it "it does not call #exists? on the unloaded scope" do
314
+ expect(enumerable._unloaded).to_not receive(:exists?)
315
+ expect(enumerable.empty?).to be false
316
+ end
317
+ end
318
+
319
+ context "when the documents are not loaded" do
320
+
321
+ let(:criteria) do
322
+ Post.where(person_id: person.id)
323
+ end
324
+
325
+ let!(:enumerable) do
326
+ described_class.new(criteria)
327
+ end
328
+
329
+ it "is not _loaded" do
330
+ expect(enumerable._loaded?).to be false
331
+ end
332
+
333
+ it "it calls #exists? on the unloaded scope" do
334
+ expect(enumerable._unloaded).to receive(:exists?)
335
+ expect(enumerable.empty?).to be true
336
+ end
337
+
338
+ context "when documents are added" do
245
339
 
246
340
  before do
247
- enumerable.each { |post| post }
341
+ enumerable << post_one
342
+ end
343
+
344
+ it "is not _loaded" do
345
+ expect(enumerable._loaded?).to be false
346
+ end
347
+
348
+ it "it does not call #exists? on the unloaded scope" do
349
+ expect(enumerable._unloaded).to_not receive(:exists?)
350
+ expect(enumerable.empty?).to be false
248
351
  end
352
+ end
353
+ end
354
+ end
355
+
356
+ describe "#any?" do
357
+
358
+ let(:person) do
359
+ Person.create!
360
+ end
361
+
362
+ let!(:post_one) do
363
+ Post.create!(person_id: person.id)
364
+ end
365
+
366
+ let!(:post_two) do
367
+ Post.create!(person_id: person.id)
368
+ end
369
+
370
+ context "when only a criteria target exists" do
371
+
372
+ let(:criteria) do
373
+ Post.where(person_id: person.id)
374
+ end
375
+
376
+ let!(:enumerable) do
377
+ described_class.new(criteria)
378
+ end
379
+
380
+ let(:any) do
381
+ enumerable.any?
382
+ end
383
+
384
+ it "returns true" do
385
+ expect(any).to be true
386
+ end
387
+
388
+ context 'when #any? is called' do
389
+
390
+ before { any }
249
391
 
250
392
  it "retains the correct length" do
251
393
  expect(enumerable.length).to eq(2)
@@ -254,6 +396,21 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
254
396
  it "retains the correct length when calling to_a" do
255
397
  expect(enumerable.to_a.length).to eq(2)
256
398
  end
399
+
400
+ context "when iterating over the association a second time" do
401
+
402
+ before do
403
+ enumerable.each { |post| post }
404
+ end
405
+
406
+ it "retains the correct length" do
407
+ expect(enumerable.length).to eq(2)
408
+ end
409
+
410
+ it "retains the correct length when calling to_a" do
411
+ expect(enumerable.to_a.length).to eq(2)
412
+ end
413
+ end
257
414
  end
258
415
  end
259
416
 
@@ -274,6 +431,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
274
431
  expect(enumerable._loaded?).to be true
275
432
  end
276
433
 
434
+ it "it does not call #exists? on the unloaded scope" do
435
+ expect(enumerable._unloaded).to_not receive(:exists?)
436
+ expect(enumerable.any?).to be true
437
+ end
438
+
277
439
  context "when a block is given" do
278
440
  it "returns true when the predicate is true" do
279
441
  expect(
@@ -289,7 +451,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
289
451
  end
290
452
 
291
453
  context "when an argument is given" do
292
- ruby_version_gte '2.5'
293
454
 
294
455
  it "returns true when the argument is true" do
295
456
  expect(enumerable.any?(Post)).to be true
@@ -301,7 +462,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
301
462
  end
302
463
 
303
464
  context "when both an argument and a block are given" do
304
- ruby_version_gte '2.5'
305
465
 
306
466
  it "gives precedence to the pattern" do
307
467
  expect(
@@ -325,6 +485,27 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
325
485
  expect(enumerable._loaded?).to be false
326
486
  end
327
487
 
488
+ it "it calls #exists? on the unloaded scope" do
489
+ expect(enumerable._unloaded).to receive(:exists?)
490
+ expect(enumerable.any?).to be false
491
+ end
492
+
493
+ context "when documents are added" do
494
+
495
+ before do
496
+ enumerable << post_one
497
+ end
498
+
499
+ it "is not _loaded" do
500
+ expect(enumerable._loaded?).to be false
501
+ end
502
+
503
+ it "it does not call #exists? on the unloaded scope" do
504
+ expect(enumerable._unloaded).to_not receive(:exists?)
505
+ expect(enumerable.any?).to be true
506
+ end
507
+ end
508
+
328
509
  context "when a block is given" do
329
510
  it "returns true when the predicate is true" do
330
511
  expect(
@@ -340,7 +521,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
340
521
  end
341
522
 
342
523
  context "when an argument is given" do
343
- ruby_version_gte '2.5'
344
524
 
345
525
  it "returns true when the argument is true" do
346
526
  expect(enumerable.any?(Post)).to be true
@@ -352,7 +532,6 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
352
532
  end
353
533
 
354
534
  context "when both an argument and a block are given" do
355
- ruby_version_gte '2.5'
356
535
 
357
536
  it "gives precedence to the pattern" do
358
537
  expect(
@@ -366,15 +545,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
366
545
  describe "#clear" do
367
546
 
368
547
  let(:person) do
369
- Person.create
548
+ Person.create!
370
549
  end
371
550
 
372
551
  let!(:post) do
373
- Post.create(person_id: person.id)
552
+ Post.create!(person_id: person.id)
374
553
  end
375
554
 
376
555
  let!(:post_two) do
377
- Post.create(person_id: person.id)
556
+ Post.create!(person_id: person.id)
378
557
  end
379
558
 
380
559
  let(:criteria) do
@@ -412,15 +591,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
412
591
  describe "#clone" do
413
592
 
414
593
  let(:person) do
415
- Person.create
594
+ Person.create!
416
595
  end
417
596
 
418
597
  let!(:post) do
419
- Post.create(title: "one", person_id: person.id)
598
+ Post.create!(title: "one", person_id: person.id)
420
599
  end
421
600
 
422
601
  let!(:post_two) do
423
- Post.create(title: "two", person_id: person.id)
602
+ Post.create!(title: "two", person_id: person.id)
424
603
  end
425
604
 
426
605
  let(:criteria) do
@@ -452,13 +631,13 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
452
631
  describe "#delete" do
453
632
 
454
633
  let(:person) do
455
- Person.create
634
+ Person.create!
456
635
  end
457
636
 
458
637
  context "when the document is loaded" do
459
638
 
460
639
  let!(:post) do
461
- Post.create(person_id: person.id)
640
+ Post.create!(person_id: person.id)
462
641
  end
463
642
 
464
643
  let!(:enumerable) do
@@ -512,7 +691,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
512
691
  context "when the document is unloaded" do
513
692
 
514
693
  let!(:post) do
515
- Post.create(person_id: person.id)
694
+ Post.create!(person_id: person.id)
516
695
  end
517
696
 
518
697
  let(:criteria) do
@@ -539,7 +718,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
539
718
  context "when the document is not found" do
540
719
 
541
720
  let!(:post) do
542
- Post.create(person_id: person.id)
721
+ Post.create!(person_id: person.id)
543
722
  end
544
723
 
545
724
  let(:criteria) do
@@ -565,13 +744,13 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
565
744
  describe "#delete_if" do
566
745
 
567
746
  let(:person) do
568
- Person.create
747
+ Person.create!
569
748
  end
570
749
 
571
750
  context "when the document is loaded" do
572
751
 
573
752
  let!(:post) do
574
- Post.create(person_id: person.id)
753
+ Post.create!(person_id: person.id)
575
754
  end
576
755
 
577
756
  let!(:enumerable) do
@@ -625,7 +804,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
625
804
  context "when the document is unloaded" do
626
805
 
627
806
  let!(:post) do
628
- Post.create(person_id: person.id)
807
+ Post.create!(person_id: person.id)
629
808
  end
630
809
 
631
810
  let(:criteria) do
@@ -652,7 +831,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
652
831
  context "when the block doesn't match" do
653
832
 
654
833
  let!(:post) do
655
- Post.create(person_id: person.id)
834
+ Post.create!(person_id: person.id)
656
835
  end
657
836
 
658
837
  let(:criteria) do
@@ -676,11 +855,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
676
855
  describe "#detect" do
677
856
 
678
857
  let(:person) do
679
- Person.create
858
+ Person.create!
680
859
  end
681
860
 
682
861
  let!(:post) do
683
- Post.create(person: person, title: "test")
862
+ Post.create!(person: person, title: "test")
684
863
  end
685
864
 
686
865
  let(:criteria) do
@@ -706,11 +885,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
706
885
  describe "#each" do
707
886
 
708
887
  let(:person) do
709
- Person.create
888
+ Person.create!
710
889
  end
711
890
 
712
891
  let!(:post) do
713
- Post.create(person_id: person.id)
892
+ Post.create!(person_id: person.id)
714
893
  end
715
894
 
716
895
  context "when only a criteria target exists" do
@@ -737,18 +916,18 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
737
916
  expect(enumerable).to be__loaded
738
917
  end
739
918
 
740
- context 'when the base relation is accessed from each document' do
919
+ context 'when the base association is accessed from each document' do
741
920
 
742
921
  let(:persons) do
743
922
  described_class.new(criteria).collect(&:person)
744
923
  end
745
924
 
746
925
  before do
747
- Post.create(person_id: person.id)
748
- Post.create(person_id: person.id)
926
+ Post.create!(person_id: person.id)
927
+ Post.create!(person_id: person.id)
749
928
  end
750
929
 
751
- it 'sets the base relation from the criteria' do
930
+ it 'sets the base association from the criteria' do
752
931
  expect(persons.uniq.size).to eq(1)
753
932
  end
754
933
  end
@@ -856,7 +1035,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
856
1035
  describe "#entries" do
857
1036
 
858
1037
  let(:person) do
859
- Person.create
1038
+ Person.create!
860
1039
  end
861
1040
 
862
1041
  let(:criteria) do
@@ -870,7 +1049,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
870
1049
  context "when the added contains a persisted document" do
871
1050
 
872
1051
  let!(:post) do
873
- Post.create(person_id: person.id)
1052
+ Post.create!(person_id: person.id)
874
1053
  end
875
1054
 
876
1055
  before do
@@ -890,7 +1069,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
890
1069
  describe "#first" do
891
1070
 
892
1071
  let(:person) do
893
- Person.create
1072
+ Person.create!
894
1073
  end
895
1074
 
896
1075
  context "when the enumerable is not loaded" do
@@ -908,7 +1087,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
908
1087
  context "when added is empty" do
909
1088
 
910
1089
  let!(:post) do
911
- Post.create(person_id: person.id)
1090
+ Post.create!(person_id: person.id)
912
1091
  end
913
1092
 
914
1093
  let(:first) do
@@ -932,7 +1111,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
932
1111
  context "when added is not empty" do
933
1112
 
934
1113
  let!(:post) do
935
- Post.create(person_id: person.id)
1114
+ Post.create!(person_id: person.id)
936
1115
  end
937
1116
 
938
1117
  let(:post_two) do
@@ -1004,7 +1183,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1004
1183
  context "when loaded is not empty" do
1005
1184
 
1006
1185
  let!(:post) do
1007
- Post.create(person_id: person.id)
1186
+ Post.create!(person_id: person.id)
1008
1187
  end
1009
1188
 
1010
1189
  let(:enumerable) do
@@ -1023,7 +1202,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1023
1202
  context "when loaded is empty" do
1024
1203
 
1025
1204
  let!(:post) do
1026
- Post.create(person_id: person.id)
1205
+ Post.create!(person_id: person.id)
1027
1206
  end
1028
1207
 
1029
1208
  let(:enumerable) do
@@ -1059,10 +1238,10 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1059
1238
  end
1060
1239
  end
1061
1240
 
1062
- context 'when the id_sort option is none' do
1241
+ context 'when including a limit' do
1063
1242
 
1064
1243
  let(:person) do
1065
- Person.create
1244
+ Person.create!
1066
1245
  end
1067
1246
 
1068
1247
  let(:criteria) do
@@ -1074,22 +1253,22 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1074
1253
  end
1075
1254
 
1076
1255
  let!(:first_post) do
1077
- person.posts.create(title: "One")
1256
+ person.posts.create!(title: "One")
1078
1257
  end
1079
1258
 
1080
1259
  let!(:second_post) do
1081
- person.posts.create(title: "Two")
1260
+ person.posts.create!(title: "Two")
1082
1261
  end
1083
1262
 
1084
- it 'does not use the sort on id' do
1085
- expect(enumerable.first(id_sort: :none)).to eq(first_post)
1263
+ it 'returns the matching document' do
1264
+ expect(enumerable.first(1)).to eq([first_post])
1086
1265
  end
1087
1266
  end
1088
1267
 
1089
- context 'when the id_sort option is not provided' do
1268
+ context 'when no parameters are provided' do
1090
1269
 
1091
1270
  let(:person) do
1092
- Person.create
1271
+ Person.create!
1093
1272
  end
1094
1273
 
1095
1274
  let(:criteria) do
@@ -1101,11 +1280,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1101
1280
  end
1102
1281
 
1103
1282
  let!(:first_post) do
1104
- person.posts.create(title: "One")
1283
+ person.posts.create!(title: "One")
1105
1284
  end
1106
1285
 
1107
1286
  let!(:second_post) do
1108
- person.posts.create(title: "Two")
1287
+ person.posts.create!(title: "Two")
1109
1288
  end
1110
1289
 
1111
1290
  it 'uses the sort on id' do
@@ -1117,15 +1296,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1117
1296
  describe "#include?" do
1118
1297
 
1119
1298
  let(:person) do
1120
- Person.create
1299
+ Person.create!
1121
1300
  end
1122
1301
 
1123
1302
  let!(:post_one) do
1124
- Post.create(person_id: person.id)
1303
+ Post.create!(person_id: person.id)
1125
1304
  end
1126
1305
 
1127
1306
  let!(:post_two) do
1128
- Post.create(person_id: person.id)
1307
+ Post.create!(person_id: person.id)
1129
1308
  end
1130
1309
 
1131
1310
  context "when no criteria exists" do
@@ -1187,7 +1366,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1187
1366
  described_class.new(criteria)
1188
1367
  end
1189
1368
 
1190
- let!(:included) do
1369
+ let(:included) do
1191
1370
  enumerable.include?(post_two)
1192
1371
  end
1193
1372
 
@@ -1203,7 +1382,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1203
1382
  expect(enumerable.to_a.length).to eq(2)
1204
1383
  end
1205
1384
 
1206
- context "when iterating over the relation a second time" do
1385
+ context "when iterating over the association a second time" do
1207
1386
 
1208
1387
  before do
1209
1388
  enumerable.each { |post| post }
@@ -1371,7 +1550,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1371
1550
  describe "#last" do
1372
1551
 
1373
1552
  let(:person) do
1374
- Person.create
1553
+ Person.create!
1375
1554
  end
1376
1555
 
1377
1556
  context "when the enumerable is not loaded" do
@@ -1387,7 +1566,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1387
1566
  context "when unloaded is not empty" do
1388
1567
 
1389
1568
  let!(:post) do
1390
- Post.create(person_id: person.id)
1569
+ Post.create!(person_id: person.id)
1391
1570
  end
1392
1571
 
1393
1572
  let(:last) do
@@ -1449,11 +1628,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1449
1628
  context "when added is not empty" do
1450
1629
 
1451
1630
  let!(:post_one) do
1452
- person.posts.create
1631
+ person.posts.create!
1453
1632
  end
1454
1633
 
1455
1634
  let!(:post_two) do
1456
- person.posts.create
1635
+ person.posts.create!
1457
1636
  end
1458
1637
 
1459
1638
  let(:last) do
@@ -1474,7 +1653,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1474
1653
  context "when loaded is not empty" do
1475
1654
 
1476
1655
  let!(:post) do
1477
- Post.create(person_id: person.id)
1656
+ Post.create!(person_id: person.id)
1478
1657
  end
1479
1658
 
1480
1659
  let(:enumerable) do
@@ -1493,7 +1672,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1493
1672
  context "when loaded is empty" do
1494
1673
 
1495
1674
  let!(:post) do
1496
- Post.create(person_id: person.id)
1675
+ Post.create!(person_id: person.id)
1497
1676
  end
1498
1677
 
1499
1678
  let(:enumerable) do
@@ -1529,10 +1708,10 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1529
1708
  end
1530
1709
  end
1531
1710
 
1532
- context 'when the id_sort option is none' do
1711
+ context 'when including a limit' do
1533
1712
 
1534
1713
  let(:person) do
1535
- Person.create
1714
+ Person.create!
1536
1715
  end
1537
1716
 
1538
1717
  let(:criteria) do
@@ -1544,22 +1723,22 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1544
1723
  end
1545
1724
 
1546
1725
  let!(:first_post) do
1547
- person.posts.create(title: "One")
1726
+ person.posts.create!(title: "One")
1548
1727
  end
1549
1728
 
1550
1729
  let!(:second_post) do
1551
- person.posts.create(title: "Two")
1730
+ person.posts.create!(title: "Two")
1552
1731
  end
1553
1732
 
1554
- it 'does not use the sort on id' do
1555
- expect(enumerable.last(id_sort: :none)).to eq(first_post)
1733
+ it 'returns the matching document' do
1734
+ expect(enumerable.last(1)).to eq([second_post])
1556
1735
  end
1557
1736
  end
1558
1737
 
1559
- context 'when the id_sort option is not provided' do
1738
+ context 'when no parameters are provided' do
1560
1739
 
1561
1740
  let(:person) do
1562
- Person.create
1741
+ Person.create!
1563
1742
  end
1564
1743
 
1565
1744
  let(:criteria) do
@@ -1571,11 +1750,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1571
1750
  end
1572
1751
 
1573
1752
  let!(:first_post) do
1574
- person.posts.create(title: "One")
1753
+ person.posts.create!(title: "One")
1575
1754
  end
1576
1755
 
1577
1756
  let!(:second_post) do
1578
- person.posts.create(title: "Two")
1757
+ person.posts.create!(title: "Two")
1579
1758
  end
1580
1759
 
1581
1760
  it 'uses the sort on id' do
@@ -1608,11 +1787,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1608
1787
  describe "#load_all!" do
1609
1788
 
1610
1789
  let(:person) do
1611
- Person.create
1790
+ Person.create!
1612
1791
  end
1613
1792
 
1614
1793
  let!(:post) do
1615
- Post.create(person_id: person.id)
1794
+ Post.create!(person_id: person.id)
1616
1795
  end
1617
1796
 
1618
1797
  let(:criteria) do
@@ -1643,15 +1822,15 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1643
1822
  describe "#reset" do
1644
1823
 
1645
1824
  let(:person) do
1646
- Person.create
1825
+ Person.create!
1647
1826
  end
1648
1827
 
1649
1828
  let(:post) do
1650
- Post.create(person_id: person.id)
1829
+ Post.create!(person_id: person.id)
1651
1830
  end
1652
1831
 
1653
1832
  let(:post_two) do
1654
- Post.create(person_id: person.id)
1833
+ Post.create!(person_id: person.id)
1655
1834
  end
1656
1835
 
1657
1836
  let(:enumerable) do
@@ -1699,11 +1878,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1699
1878
  describe "#size" do
1700
1879
 
1701
1880
  let(:person) do
1702
- Person.create
1881
+ Person.create!
1703
1882
  end
1704
1883
 
1705
1884
  let!(:post) do
1706
- Post.create(person_id: person.id)
1885
+ Post.create!(person_id: person.id)
1707
1886
  end
1708
1887
 
1709
1888
  context "when the base is new" do
@@ -1715,7 +1894,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1715
1894
  context "when the added contains a persisted document" do
1716
1895
 
1717
1896
  let!(:post) do
1718
- Post.create(person_id: person.id)
1897
+ Post.create!(person_id: person.id)
1719
1898
  end
1720
1899
 
1721
1900
  context "when the enumerable is not loaded" do
@@ -1786,7 +1965,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1786
1965
  context "when the added contains persisted documents" do
1787
1966
 
1788
1967
  let(:post_two) do
1789
- Post.create(person_id: person.id)
1968
+ Post.create!(person_id: person.id)
1790
1969
  end
1791
1970
 
1792
1971
  before do
@@ -1807,11 +1986,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1807
1986
  describe "#to_json" do
1808
1987
 
1809
1988
  let(:person) do
1810
- Person.create
1989
+ Person.create!
1811
1990
  end
1812
1991
 
1813
1992
  let!(:post) do
1814
- Post.create(title: "test", person_id: person.id)
1993
+ Post.create!(title: "test", person_id: person.id)
1815
1994
  end
1816
1995
 
1817
1996
  let(:criteria) do
@@ -1838,11 +2017,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1838
2017
  describe "#to_json(parameters)" do
1839
2018
 
1840
2019
  let(:person) do
1841
- Person.create
2020
+ Person.create!
1842
2021
  end
1843
2022
 
1844
2023
  let!(:post) do
1845
- Post.create(title: "test", person_id: person.id)
2024
+ Post.create!(title: "test", person_id: person.id)
1846
2025
  end
1847
2026
 
1848
2027
  let(:criteria) do
@@ -1861,11 +2040,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1861
2040
  describe "#as_json" do
1862
2041
 
1863
2042
  let(:person) do
1864
- Person.create
2043
+ Person.create!
1865
2044
  end
1866
2045
 
1867
2046
  let!(:post) do
1868
- Post.create(title: "test", person_id: person.id)
2047
+ Post.create!(title: "test", person_id: person.id)
1869
2048
  end
1870
2049
 
1871
2050
  let(:criteria) do
@@ -1893,11 +2072,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1893
2072
  describe "#as_json(parameters)" do
1894
2073
 
1895
2074
  let(:person) do
1896
- Person.create
2075
+ Person.create!
1897
2076
  end
1898
2077
 
1899
2078
  let!(:post) do
1900
- Post.create(title: "test", person_id: person.id)
2079
+ Post.create!(title: "test", person_id: person.id)
1901
2080
  end
1902
2081
 
1903
2082
  let(:criteria) do
@@ -1920,11 +2099,11 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1920
2099
  describe "#uniq" do
1921
2100
 
1922
2101
  let(:person) do
1923
- Person.create
2102
+ Person.create!
1924
2103
  end
1925
2104
 
1926
2105
  let!(:post) do
1927
- Post.create(person_id: person.id)
2106
+ Post.create!(person_id: person.id)
1928
2107
  end
1929
2108
 
1930
2109
  let(:criteria) do
@@ -1956,7 +2135,7 @@ describe Mongoid::Association::Referenced::HasMany::Targets::Enumerable do
1956
2135
  describe 'setting the same parent object on enumerated children objects' do
1957
2136
 
1958
2137
  let(:person) do
1959
- Person.create
2138
+ Person.create!
1960
2139
  end
1961
2140
 
1962
2141
  context 'when a single child is fetched' do