mongoid 9.0.11 → 9.1.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 (997) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -8
  3. data/README.md +5 -11
  4. data/Rakefile +35 -38
  5. data/lib/config/locales/en.yml +11 -0
  6. data/lib/mongoid/association/accessors.rb +19 -26
  7. data/lib/mongoid/association/bindable.rb +43 -45
  8. data/lib/mongoid/association/builders.rb +18 -15
  9. data/lib/mongoid/association/constrainable.rb +3 -5
  10. data/lib/mongoid/association/depending.rb +34 -38
  11. data/lib/mongoid/association/eager.rb +47 -13
  12. data/lib/mongoid/association/eager_loadable.rb +152 -24
  13. data/lib/mongoid/association/embedded/batchable.rb +28 -30
  14. data/lib/mongoid/association/embedded/cyclic.rb +8 -11
  15. data/lib/mongoid/association/embedded/eager.rb +1 -6
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  23. data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
  26. data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
  27. data/lib/mongoid/association/embedded.rb +0 -1
  28. data/lib/mongoid/association/macros.rb +3 -7
  29. data/lib/mongoid/association/many.rb +75 -3
  30. data/lib/mongoid/association/marshalable.rb +0 -3
  31. data/lib/mongoid/association/nested/many.rb +18 -13
  32. data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
  33. data/lib/mongoid/association/nested/one.rb +4 -7
  34. data/lib/mongoid/association/nested.rb +1 -3
  35. data/lib/mongoid/association/one.rb +0 -3
  36. data/lib/mongoid/association/options.rb +8 -7
  37. data/lib/mongoid/association/referenced/auto_save.rb +0 -2
  38. data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
  39. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
  40. data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
  41. data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
  42. data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
  43. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
  47. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
  48. data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
  49. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
  50. data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
  51. data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
  52. data/lib/mongoid/association/referenced/has_many.rb +30 -24
  53. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
  54. data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
  55. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
  56. data/lib/mongoid/association/referenced/has_one.rb +26 -21
  57. data/lib/mongoid/association/referenced/syncable.rb +30 -34
  58. data/lib/mongoid/association/referenced.rb +0 -1
  59. data/lib/mongoid/association/reflections.rb +0 -3
  60. data/lib/mongoid/association/relatable.rb +69 -66
  61. data/lib/mongoid/association.rb +12 -15
  62. data/lib/mongoid/atomic/modifiers.rb +65 -25
  63. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  64. data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
  65. data/lib/mongoid/atomic/paths/embedded.rb +3 -6
  66. data/lib/mongoid/atomic/paths/root.rb +1 -4
  67. data/lib/mongoid/atomic/paths.rb +2 -3
  68. data/lib/mongoid/atomic.rb +0 -3
  69. data/lib/mongoid/attributes/dynamic.rb +6 -7
  70. data/lib/mongoid/attributes/nested.rb +8 -10
  71. data/lib/mongoid/attributes/projector.rb +7 -20
  72. data/lib/mongoid/attributes/readonly.rb +6 -11
  73. data/lib/mongoid/attributes.rb +18 -34
  74. data/lib/mongoid/cacheable.rb +24 -6
  75. data/lib/mongoid/clients/factory.rb +12 -15
  76. data/lib/mongoid/clients/options.rb +2 -5
  77. data/lib/mongoid/clients/sessions.rb +50 -60
  78. data/lib/mongoid/clients/storage_options.rb +1 -4
  79. data/lib/mongoid/clients/validators/storage.rb +2 -3
  80. data/lib/mongoid/clients/validators.rb +1 -2
  81. data/lib/mongoid/clients.rb +8 -11
  82. data/lib/mongoid/collection_configurable.rb +10 -14
  83. data/lib/mongoid/composable.rb +30 -34
  84. data/lib/mongoid/config/defaults.rb +7 -4
  85. data/lib/mongoid/config/encryption.rb +1 -3
  86. data/lib/mongoid/config/environment.rb +7 -16
  87. data/lib/mongoid/config/introspection.rb +14 -16
  88. data/lib/mongoid/config/options.rb +16 -10
  89. data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
  90. data/lib/mongoid/config/validators/client.rb +12 -15
  91. data/lib/mongoid/config/validators/option.rb +3 -5
  92. data/lib/mongoid/config/validators.rb +3 -4
  93. data/lib/mongoid/config.rb +132 -42
  94. data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
  95. data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
  96. data/lib/mongoid/contextual/aggregable/none.rb +2 -4
  97. data/lib/mongoid/contextual/aggregable.rb +5 -7
  98. data/lib/mongoid/contextual/atomic.rb +20 -24
  99. data/lib/mongoid/contextual/command.rb +0 -3
  100. data/lib/mongoid/contextual/map_reduce.rb +12 -16
  101. data/lib/mongoid/contextual/memory.rb +72 -65
  102. data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
  103. data/lib/mongoid/contextual/mongo.rb +169 -85
  104. data/lib/mongoid/contextual/none.rb +9 -9
  105. data/lib/mongoid/contextual/queryable.rb +1 -4
  106. data/lib/mongoid/contextual.rb +18 -7
  107. data/lib/mongoid/copyable.rb +7 -9
  108. data/lib/mongoid/criteria/findable.rb +5 -7
  109. data/lib/mongoid/criteria/includable.rb +37 -8
  110. data/lib/mongoid/criteria/inspectable.rb +2 -5
  111. data/lib/mongoid/criteria/marshalable.rb +4 -8
  112. data/lib/mongoid/criteria/modifiable.rb +3 -11
  113. data/lib/mongoid/criteria/options.rb +0 -3
  114. data/lib/mongoid/criteria/permission.rb +34 -37
  115. data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
  116. data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
  117. data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
  118. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  119. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
  120. data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
  121. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
  122. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
  123. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
  124. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
  125. data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
  126. data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
  127. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
  128. data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
  129. data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
  130. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
  131. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
  132. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
  133. data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
  134. data/lib/mongoid/criteria/queryable/key.rb +12 -18
  135. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  136. data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
  137. data/lib/mongoid/criteria/queryable/optional.rb +17 -18
  138. data/lib/mongoid/criteria/queryable/options.rb +20 -9
  139. data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
  140. data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
  141. data/lib/mongoid/criteria/queryable/selector.rb +20 -29
  142. data/lib/mongoid/criteria/queryable/smash.rb +1 -6
  143. data/lib/mongoid/criteria/queryable/storable.rb +20 -39
  144. data/lib/mongoid/criteria/queryable.rb +25 -15
  145. data/lib/mongoid/criteria/scopable.rb +5 -11
  146. data/lib/mongoid/criteria/translator.rb +5 -8
  147. data/lib/mongoid/criteria.rb +109 -54
  148. data/lib/mongoid/deprecable.rb +1 -4
  149. data/lib/mongoid/deprecation.rb +2 -6
  150. data/lib/mongoid/document.rb +1 -1
  151. data/lib/mongoid/encryptable.rb +1 -2
  152. data/lib/mongoid/equality.rb +4 -5
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  154. data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
  155. data/lib/mongoid/errors/callback.rb +1 -4
  156. data/lib/mongoid/errors/create_collection_failure.rb +8 -11
  157. data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
  158. data/lib/mongoid/errors/delete_restriction.rb +1 -4
  159. data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
  160. data/lib/mongoid/errors/document_not_found.rb +16 -21
  161. data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
  162. data/lib/mongoid/errors/empty_config_file.rb +1 -4
  163. data/lib/mongoid/errors/immutable_attribute.rb +1 -4
  164. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
  165. data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
  166. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
  167. data/lib/mongoid/errors/invalid_collection.rb +1 -3
  168. data/lib/mongoid/errors/invalid_config_file.rb +1 -4
  169. data/lib/mongoid/errors/invalid_config_option.rb +2 -5
  170. data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
  171. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
  172. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
  173. data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
  174. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
  175. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
  176. data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
  177. data/lib/mongoid/errors/invalid_field.rb +2 -5
  178. data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
  179. data/lib/mongoid/errors/invalid_field_option.rb +2 -5
  180. data/lib/mongoid/errors/invalid_field_type.rb +1 -4
  181. data/lib/mongoid/errors/invalid_find.rb +1 -4
  182. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
  183. data/lib/mongoid/errors/invalid_includes.rb +3 -6
  184. data/lib/mongoid/errors/invalid_index.rb +1 -4
  185. data/lib/mongoid/errors/invalid_options.rb +1 -4
  186. data/lib/mongoid/errors/invalid_path.rb +1 -4
  187. data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
  188. data/lib/mongoid/errors/invalid_query.rb +6 -11
  189. data/lib/mongoid/errors/invalid_relation.rb +10 -13
  190. data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
  191. data/lib/mongoid/errors/invalid_scope.rb +1 -4
  192. data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
  193. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
  194. data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
  195. data/lib/mongoid/errors/invalid_time.rb +1 -4
  196. data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
  197. data/lib/mongoid/errors/inverse_not_found.rb +1 -4
  198. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
  199. data/lib/mongoid/errors/mixed_relations.rb +1 -3
  200. data/lib/mongoid/errors/mongoid_error.rb +7 -11
  201. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
  202. data/lib/mongoid/errors/no_client_config.rb +1 -4
  203. data/lib/mongoid/errors/no_client_database.rb +1 -4
  204. data/lib/mongoid/errors/no_client_hosts.rb +1 -4
  205. data/lib/mongoid/errors/no_clients_config.rb +1 -4
  206. data/lib/mongoid/errors/no_default_client.rb +1 -4
  207. data/lib/mongoid/errors/no_environment.rb +1 -4
  208. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
  209. data/lib/mongoid/errors/no_metadata.rb +1 -4
  210. data/lib/mongoid/errors/no_parent.rb +1 -4
  211. data/lib/mongoid/errors/readonly_attribute.rb +1 -4
  212. data/lib/mongoid/errors/readonly_document.rb +1 -4
  213. data/lib/mongoid/errors/rollback.rb +0 -2
  214. data/lib/mongoid/errors/scope_overwrite.rb +2 -4
  215. data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
  216. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
  217. data/lib/mongoid/errors/transaction_error.rb +0 -3
  218. data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
  219. data/lib/mongoid/errors/unknown_attribute.rb +1 -4
  220. data/lib/mongoid/errors/unknown_model.rb +1 -4
  221. data/lib/mongoid/errors/unregistered_class.rb +1 -1
  222. data/lib/mongoid/errors/unsaved_document.rb +1 -3
  223. data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
  224. data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
  225. data/lib/mongoid/errors/validations.rb +3 -5
  226. data/lib/mongoid/errors.rb +72 -72
  227. data/lib/mongoid/evolvable.rb +0 -3
  228. data/lib/mongoid/extensions/array.rb +5 -7
  229. data/lib/mongoid/extensions/big_decimal.rb +6 -7
  230. data/lib/mongoid/extensions/binary.rb +3 -6
  231. data/lib/mongoid/extensions/boolean.rb +4 -7
  232. data/lib/mongoid/extensions/bson_document.rb +28 -0
  233. data/lib/mongoid/extensions/date.rb +10 -14
  234. data/lib/mongoid/extensions/date_time.rb +2 -6
  235. data/lib/mongoid/extensions/decimal128.rb +1 -5
  236. data/lib/mongoid/extensions/false_class.rb +3 -5
  237. data/lib/mongoid/extensions/float.rb +5 -10
  238. data/lib/mongoid/extensions/hash.rb +5 -10
  239. data/lib/mongoid/extensions/integer.rb +5 -10
  240. data/lib/mongoid/extensions/module.rb +1 -4
  241. data/lib/mongoid/extensions/nil_class.rb +0 -1
  242. data/lib/mongoid/extensions/object.rb +9 -14
  243. data/lib/mongoid/extensions/object_id.rb +2 -6
  244. data/lib/mongoid/extensions/range.rb +14 -15
  245. data/lib/mongoid/extensions/raw_value.rb +0 -3
  246. data/lib/mongoid/extensions/regexp.rb +3 -6
  247. data/lib/mongoid/extensions/set.rb +3 -4
  248. data/lib/mongoid/extensions/string.rb +8 -12
  249. data/lib/mongoid/extensions/symbol.rb +3 -7
  250. data/lib/mongoid/extensions/time.rb +24 -26
  251. data/lib/mongoid/extensions/time_with_zone.rb +4 -7
  252. data/lib/mongoid/extensions/true_class.rb +3 -5
  253. data/lib/mongoid/extensions.rb +26 -26
  254. data/lib/mongoid/factory.rb +5 -9
  255. data/lib/mongoid/fields/encrypted.rb +0 -1
  256. data/lib/mongoid/fields/foreign_key.rb +9 -10
  257. data/lib/mongoid/fields/localized.rb +12 -12
  258. data/lib/mongoid/fields/standard.rb +5 -7
  259. data/lib/mongoid/fields/validators/macro.rb +23 -34
  260. data/lib/mongoid/fields/validators.rb +1 -2
  261. data/lib/mongoid/fields.rb +151 -58
  262. data/lib/mongoid/findable.rb +82 -53
  263. data/lib/mongoid/indexable/specification.rb +20 -6
  264. data/lib/mongoid/indexable/validators/options.rb +33 -40
  265. data/lib/mongoid/indexable.rb +26 -25
  266. data/lib/mongoid/inspectable.rb +4 -7
  267. data/lib/mongoid/interceptable.rb +41 -40
  268. data/lib/mongoid/loadable.rb +17 -18
  269. data/lib/mongoid/loggable.rb +4 -8
  270. data/lib/mongoid/matchable.rb +0 -2
  271. data/lib/mongoid/matcher/all.rb +2 -5
  272. data/lib/mongoid/matcher/and.rb +0 -3
  273. data/lib/mongoid/matcher/bits.rb +13 -8
  274. data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
  275. data/lib/mongoid/matcher/bits_all_set.rb +1 -3
  276. data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
  277. data/lib/mongoid/matcher/bits_any_set.rb +1 -3
  278. data/lib/mongoid/matcher/elem_match.rb +13 -15
  279. data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
  280. data/lib/mongoid/matcher/eq.rb +0 -3
  281. data/lib/mongoid/matcher/eq_impl.rb +12 -17
  282. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
  283. data/lib/mongoid/matcher/exists.rb +1 -4
  284. data/lib/mongoid/matcher/expression.rb +5 -10
  285. data/lib/mongoid/matcher/expression_operator.rb +1 -3
  286. data/lib/mongoid/matcher/field_expression.rb +10 -13
  287. data/lib/mongoid/matcher/field_operator.rb +4 -6
  288. data/lib/mongoid/matcher/gt.rb +0 -3
  289. data/lib/mongoid/matcher/gte.rb +0 -3
  290. data/lib/mongoid/matcher/in.rb +9 -12
  291. data/lib/mongoid/matcher/lt.rb +0 -3
  292. data/lib/mongoid/matcher/lte.rb +0 -3
  293. data/lib/mongoid/matcher/mod.rb +4 -8
  294. data/lib/mongoid/matcher/ne.rb +0 -3
  295. data/lib/mongoid/matcher/nin.rb +0 -3
  296. data/lib/mongoid/matcher/nor.rb +1 -6
  297. data/lib/mongoid/matcher/not.rb +0 -3
  298. data/lib/mongoid/matcher/or.rb +0 -3
  299. data/lib/mongoid/matcher/regex.rb +11 -14
  300. data/lib/mongoid/matcher/size.rb +2 -5
  301. data/lib/mongoid/matcher/type.rb +32 -37
  302. data/lib/mongoid/matcher.rb +7 -15
  303. data/lib/mongoid/model_resolver.rb +1 -0
  304. data/lib/mongoid/persistable/creatable.rb +23 -7
  305. data/lib/mongoid/persistable/deletable.rb +6 -7
  306. data/lib/mongoid/persistable/destroyable.rb +2 -6
  307. data/lib/mongoid/persistable/incrementable.rb +1 -3
  308. data/lib/mongoid/persistable/logical.rb +3 -5
  309. data/lib/mongoid/persistable/maxable.rb +2 -4
  310. data/lib/mongoid/persistable/minable.rb +2 -4
  311. data/lib/mongoid/persistable/multipliable.rb +1 -3
  312. data/lib/mongoid/persistable/poppable.rb +2 -4
  313. data/lib/mongoid/persistable/pullable.rb +3 -5
  314. data/lib/mongoid/persistable/pushable.rb +5 -7
  315. data/lib/mongoid/persistable/renamable.rb +1 -3
  316. data/lib/mongoid/persistable/savable.rb +0 -3
  317. data/lib/mongoid/persistable/settable.rb +4 -13
  318. data/lib/mongoid/persistable/unsettable.rb +1 -3
  319. data/lib/mongoid/persistable/updatable.rb +16 -24
  320. data/lib/mongoid/persistable/upsertable.rb +8 -10
  321. data/lib/mongoid/persistable.rb +28 -27
  322. data/lib/mongoid/persistence_context.rb +34 -41
  323. data/lib/mongoid/pluckable.rb +0 -2
  324. data/lib/mongoid/positional.rb +5 -11
  325. data/lib/mongoid/railtie.rb +16 -22
  326. data/lib/mongoid/railties/console_sandbox.rb +6 -8
  327. data/lib/mongoid/railties/controller_runtime.rb +7 -11
  328. data/lib/mongoid/railties/database.rake +42 -44
  329. data/lib/mongoid/scopable.rb +23 -31
  330. data/lib/mongoid/search_indexable.rb +330 -0
  331. data/lib/mongoid/selectable.rb +1 -3
  332. data/lib/mongoid/serializable.rb +6 -8
  333. data/lib/mongoid/shardable.rb +8 -17
  334. data/lib/mongoid/stateful.rb +5 -10
  335. data/lib/mongoid/stringified_symbol.rb +5 -9
  336. data/lib/mongoid/tasks/database.rake +31 -32
  337. data/lib/mongoid/tasks/database.rb +28 -30
  338. data/lib/mongoid/tasks/encryption.rb +10 -15
  339. data/lib/mongoid/threaded/lifecycle.rb +6 -9
  340. data/lib/mongoid/threaded.rb +132 -32
  341. data/lib/mongoid/timestamps/created/short.rb +2 -3
  342. data/lib/mongoid/timestamps/created.rb +1 -2
  343. data/lib/mongoid/timestamps/short.rb +0 -1
  344. data/lib/mongoid/timestamps/timeless.rb +8 -13
  345. data/lib/mongoid/timestamps/updated/short.rb +2 -3
  346. data/lib/mongoid/timestamps/updated.rb +2 -5
  347. data/lib/mongoid/timestamps.rb +4 -6
  348. data/lib/mongoid/touchable.rb +19 -11
  349. data/lib/mongoid/traversable.rb +3 -2
  350. data/lib/mongoid/validatable/associated.rb +1 -5
  351. data/lib/mongoid/validatable/format.rb +0 -2
  352. data/lib/mongoid/validatable/length.rb +0 -2
  353. data/lib/mongoid/validatable/localizable.rb +0 -3
  354. data/lib/mongoid/validatable/macros.rb +0 -2
  355. data/lib/mongoid/validatable/numericality.rb +24 -3
  356. data/lib/mongoid/validatable/presence.rb +8 -10
  357. data/lib/mongoid/validatable/queryable.rb +0 -3
  358. data/lib/mongoid/validatable/uniqueness.rb +12 -14
  359. data/lib/mongoid/validatable.rb +15 -20
  360. data/lib/mongoid/version.rb +1 -1
  361. data/lib/mongoid/warnings.rb +10 -11
  362. data/lib/mongoid.rb +30 -34
  363. data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
  364. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
  365. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
  366. data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
  367. data/lib/rails/generators/mongoid_generator.rb +6 -10
  368. data/lib/rails/mongoid.rb +1 -3
  369. data/spec/integration/active_job_spec.rb +1 -2
  370. data/spec/integration/app_spec.rb +142 -178
  371. data/spec/integration/associations/belongs_to_spec.rb +30 -28
  372. data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
  373. data/spec/integration/associations/embedded_spec.rb +41 -43
  374. data/spec/integration/associations/embeds_many_spec.rb +46 -29
  375. data/spec/integration/associations/embeds_one_spec.rb +2 -1
  376. data/spec/integration/associations/foreign_key_spec.rb +10 -11
  377. data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
  378. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
  379. data/spec/integration/associations/has_many_spec.rb +17 -18
  380. data/spec/integration/associations/has_one_spec.rb +42 -45
  381. data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
  382. data/spec/integration/associations/reverse_population_spec.rb +4 -5
  383. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  384. data/spec/integration/associations/scope_option_spec.rb +18 -20
  385. data/spec/integration/atomic/modifiers_spec.rb +72 -52
  386. data/spec/integration/bson_regexp_raw_spec.rb +2 -3
  387. data/spec/integration/caching_spec.rb +68 -0
  388. data/spec/integration/callbacks_models.rb +11 -9
  389. data/spec/integration/callbacks_spec.rb +78 -80
  390. data/spec/integration/contextual/empty_spec.rb +19 -20
  391. data/spec/integration/criteria/alias_query_spec.rb +12 -19
  392. data/spec/integration/criteria/date_field_spec.rb +1 -2
  393. data/spec/integration/criteria/default_scope_spec.rb +23 -18
  394. data/spec/integration/criteria/logical_spec.rb +18 -19
  395. data/spec/integration/criteria/range_spec.rb +77 -86
  396. data/spec/integration/criteria/raw_value_spec.rb +122 -109
  397. data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
  398. data/spec/integration/discriminator_key_spec.rb +85 -85
  399. data/spec/integration/discriminator_value_spec.rb +70 -73
  400. data/spec/integration/document_spec.rb +9 -10
  401. data/spec/integration/dots_and_dollars_spec.rb +104 -119
  402. data/spec/integration/encryption_spec.rb +8 -11
  403. data/spec/integration/i18n_fallbacks_spec.rb +7 -8
  404. data/spec/integration/isolation_state_spec.rb +241 -0
  405. data/spec/integration/matcher_examples_spec.rb +145 -168
  406. data/spec/integration/matcher_operator_data/in.yml +6 -6
  407. data/spec/integration/matcher_operator_spec.rb +16 -26
  408. data/spec/integration/matcher_spec.rb +31 -32
  409. data/spec/integration/persistence/collection_options_spec.rb +0 -2
  410. data/spec/integration/persistence/range_field_spec.rb +24 -2
  411. data/spec/integration/server_query_spec.rb +43 -37
  412. data/spec/integration/shardable_spec.rb +10 -11
  413. data/spec/integration/stringified_symbol_field_spec.rb +28 -43
  414. data/spec/lite_spec_helper.rb +11 -12
  415. data/spec/mongoid/association/accessors_spec.rb +197 -285
  416. data/spec/mongoid/association/auto_save_spec.rb +62 -93
  417. data/spec/mongoid/association/builders_spec.rb +121 -74
  418. data/spec/mongoid/association/constrainable_spec.rb +9 -22
  419. data/spec/mongoid/association/counter_cache_spec.rb +71 -104
  420. data/spec/mongoid/association/depending_spec.rb +166 -208
  421. data/spec/mongoid/association/eager_spec.rb +416 -80
  422. data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
  423. data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
  424. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
  425. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
  426. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
  427. data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
  428. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
  429. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
  430. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
  431. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
  432. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
  433. data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
  434. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
  435. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
  436. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
  437. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  438. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  439. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
  440. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
  441. data/spec/mongoid/association/macros_spec.rb +213 -300
  442. data/spec/mongoid/association/nested/many_spec.rb +51 -73
  443. data/spec/mongoid/association/nested/one_spec.rb +56 -80
  444. data/spec/mongoid/association/options_spec.rb +187 -310
  445. data/spec/mongoid/association/polymorphic_spec.rb +35 -53
  446. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
  447. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
  448. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
  449. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
  450. data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
  451. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
  452. data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
  453. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
  454. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
  455. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
  456. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
  457. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
  458. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
  459. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
  460. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
  461. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
  462. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
  463. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
  464. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
  465. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
  466. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
  467. data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
  468. data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
  469. data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
  470. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
  471. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
  472. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
  473. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
  474. data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
  475. data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
  476. data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
  477. data/spec/mongoid/association/reflections_spec.rb +14 -24
  478. data/spec/mongoid/association/syncable_spec.rb +102 -125
  479. data/spec/mongoid/association_spec.rb +47 -70
  480. data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
  481. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
  482. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
  483. data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
  484. data/spec/mongoid/atomic/paths_spec.rb +81 -117
  485. data/spec/mongoid/atomic_spec.rb +156 -171
  486. data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
  487. data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
  488. data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
  489. data/spec/mongoid/attributes/projector_spec.rb +2 -6
  490. data/spec/mongoid/attributes/readonly_spec.rb +73 -97
  491. data/spec/mongoid/attributes_spec.rb +669 -826
  492. data/spec/mongoid/cacheable_spec.rb +74 -44
  493. data/spec/mongoid/changeable_spec.rb +591 -733
  494. data/spec/mongoid/clients/factory_spec.rb +122 -154
  495. data/spec/mongoid/clients/options_spec.rb +40 -59
  496. data/spec/mongoid/clients/sessions_spec.rb +25 -44
  497. data/spec/mongoid/clients/transactions_spec.rb +33 -50
  498. data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
  499. data/spec/mongoid/clients_spec.rb +265 -355
  500. data/spec/mongoid/collection_configurable_spec.rb +9 -12
  501. data/spec/mongoid/composable_spec.rb +2 -9
  502. data/spec/mongoid/config/defaults_spec.rb +24 -31
  503. data/spec/mongoid/config/encryption_spec.rb +54 -57
  504. data/spec/mongoid/config/environment_spec.rb +30 -40
  505. data/spec/mongoid/config/introspection_spec.rb +42 -37
  506. data/spec/mongoid/config/options_spec.rb +14 -21
  507. data/spec/mongoid/config_spec.rb +145 -195
  508. data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
  509. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
  510. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
  511. data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
  512. data/spec/mongoid/contextual/atomic_spec.rb +223 -271
  513. data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
  514. data/spec/mongoid/contextual/memory_spec.rb +706 -854
  515. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
  516. data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
  517. data/spec/mongoid/contextual/none_spec.rb +54 -59
  518. data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
  519. data/spec/mongoid/copyable_spec.rb +254 -300
  520. data/spec/mongoid/copyable_spec_models.rb +0 -1
  521. data/spec/mongoid/criteria/findable_spec.rb +322 -387
  522. data/spec/mongoid/criteria/includable_spec.rb +421 -372
  523. data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
  524. data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
  525. data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
  526. data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
  527. data/spec/mongoid/criteria/options_spec.rb +2 -7
  528. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
  529. data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
  530. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
  531. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
  532. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
  533. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
  534. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
  535. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
  536. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
  537. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
  538. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
  539. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
  540. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
  541. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
  542. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
  543. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
  544. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
  545. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
  546. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
  547. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
  548. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
  549. data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
  550. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
  551. data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
  552. data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
  553. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
  554. data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
  555. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
  556. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
  557. data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
  558. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
  559. data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
  560. data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
  561. data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
  562. data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
  563. data/spec/mongoid/criteria/scopable_spec.rb +102 -138
  564. data/spec/mongoid/criteria/translator_spec.rb +59 -60
  565. data/spec/mongoid/criteria_projection_spec.rb +81 -99
  566. data/spec/mongoid/criteria_spec.rb +935 -950
  567. data/spec/mongoid/document_fields_spec.rb +28 -30
  568. data/spec/mongoid/document_persistence_context_spec.rb +13 -15
  569. data/spec/mongoid/document_query_spec.rb +9 -12
  570. data/spec/mongoid/document_spec.rb +317 -409
  571. data/spec/mongoid/equality_spec.rb +69 -102
  572. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
  573. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
  574. data/spec/mongoid/errors/callback_spec.rb +8 -11
  575. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
  576. data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
  577. data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
  578. data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
  579. data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
  580. data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
  581. data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
  582. data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
  583. data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
  584. data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
  585. data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
  586. data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
  587. data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
  588. data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
  589. data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
  590. data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
  591. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
  592. data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
  593. data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
  594. data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
  595. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
  596. data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
  597. data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
  598. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
  599. data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
  600. data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
  601. data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
  602. data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
  603. data/spec/mongoid/errors/no_environment_spec.rb +8 -11
  604. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
  605. data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
  606. data/spec/mongoid/errors/no_parent_spec.rb +7 -10
  607. data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
  608. data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
  609. data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
  610. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
  611. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
  612. data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
  613. data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
  614. data/spec/mongoid/errors/validations_spec.rb +11 -14
  615. data/spec/mongoid/extensions/array_spec.rb +70 -92
  616. data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
  617. data/spec/mongoid/extensions/binary_spec.rb +21 -32
  618. data/spec/mongoid/extensions/boolean_spec.rb +52 -75
  619. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
  620. data/spec/mongoid/extensions/date_spec.rb +26 -38
  621. data/spec/mongoid/extensions/date_time_spec.rb +22 -32
  622. data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
  623. data/spec/mongoid/extensions/false_class_spec.rb +10 -17
  624. data/spec/mongoid/extensions/float_spec.rb +40 -61
  625. data/spec/mongoid/extensions/hash_spec.rb +46 -64
  626. data/spec/mongoid/extensions/integer_spec.rb +40 -61
  627. data/spec/mongoid/extensions/module_spec.rb +13 -18
  628. data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
  629. data/spec/mongoid/extensions/object_id_spec.rb +159 -247
  630. data/spec/mongoid/extensions/object_spec.rb +31 -47
  631. data/spec/mongoid/extensions/range_spec.rb +112 -115
  632. data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
  633. data/spec/mongoid/extensions/regexp_spec.rb +23 -36
  634. data/spec/mongoid/extensions/set_spec.rb +38 -49
  635. data/spec/mongoid/extensions/string_spec.rb +118 -167
  636. data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
  637. data/spec/mongoid/extensions/symbol_spec.rb +12 -20
  638. data/spec/mongoid/extensions/time_spec.rb +160 -202
  639. data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
  640. data/spec/mongoid/extensions/true_class_spec.rb +10 -17
  641. data/spec/mongoid/factory_spec.rb +125 -148
  642. data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
  643. data/spec/mongoid/fields/localized_spec.rb +140 -185
  644. data/spec/mongoid/fields/standard_spec.rb +43 -59
  645. data/spec/mongoid/fields_spec.rb +751 -620
  646. data/spec/mongoid/findable_spec.rb +260 -228
  647. data/spec/mongoid/indexable/specification_spec.rb +42 -58
  648. data/spec/mongoid/indexable_spec.rb +260 -264
  649. data/spec/mongoid/inspectable_spec.rb +45 -55
  650. data/spec/mongoid/interceptable_spec.rb +784 -922
  651. data/spec/mongoid/interceptable_spec_models.rb +35 -35
  652. data/spec/mongoid/loading_spec.rb +47 -43
  653. data/spec/mongoid/loggable_spec.rb +3 -6
  654. data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
  655. data/spec/mongoid/mongoizable_spec.rb +81 -90
  656. data/spec/mongoid/monkey_patches_spec.rb +4 -0
  657. data/spec/mongoid/persistable/creatable_spec.rb +181 -220
  658. data/spec/mongoid/persistable/deletable_spec.rb +139 -179
  659. data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
  660. data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
  661. data/spec/mongoid/persistable/logical_spec.rb +48 -61
  662. data/spec/mongoid/persistable/maxable_spec.rb +45 -44
  663. data/spec/mongoid/persistable/minable_spec.rb +45 -44
  664. data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
  665. data/spec/mongoid/persistable/poppable_spec.rb +47 -60
  666. data/spec/mongoid/persistable/pullable_spec.rb +79 -103
  667. data/spec/mongoid/persistable/pushable_spec.rb +106 -131
  668. data/spec/mongoid/persistable/renamable_spec.rb +52 -65
  669. data/spec/mongoid/persistable/savable_spec.rb +152 -189
  670. data/spec/mongoid/persistable/settable_spec.rb +121 -145
  671. data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
  672. data/spec/mongoid/persistable/updatable_spec.rb +185 -232
  673. data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
  674. data/spec/mongoid/persistable_spec.rb +132 -139
  675. data/spec/mongoid/persistence_context_spec.rb +31 -89
  676. data/spec/mongoid/positional_spec.rb +67 -79
  677. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
  678. data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
  679. data/spec/mongoid/relations/proxy_spec.rb +0 -1
  680. data/spec/mongoid/reloadable_spec.rb +250 -145
  681. data/spec/mongoid/scopable_spec.rb +319 -398
  682. data/spec/mongoid/search_indexable_spec.rb +446 -41
  683. data/spec/mongoid/selectable_spec.rb +36 -51
  684. data/spec/mongoid/serializable_spec.rb +269 -312
  685. data/spec/mongoid/shardable_models.rb +5 -5
  686. data/spec/mongoid/shardable_spec.rb +44 -46
  687. data/spec/mongoid/stateful_spec.rb +55 -75
  688. data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
  689. data/spec/mongoid/tasks/database_spec.rb +80 -80
  690. data/spec/mongoid/tasks/encryption_spec.rb +22 -20
  691. data/spec/mongoid/threaded_spec.rb +57 -83
  692. data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
  693. data/spec/mongoid/timestamps/created_spec.rb +16 -20
  694. data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
  695. data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
  696. data/spec/mongoid/timestamps/updated_spec.rb +18 -25
  697. data/spec/mongoid/timestamps_spec.rb +171 -188
  698. data/spec/mongoid/timestamps_spec_models.rb +12 -13
  699. data/spec/mongoid/touchable_spec.rb +330 -294
  700. data/spec/mongoid/touchable_spec_models.rb +35 -37
  701. data/spec/mongoid/traversable_spec.rb +435 -471
  702. data/spec/mongoid/validatable/associated_spec.rb +42 -60
  703. data/spec/mongoid/validatable/format_spec.rb +24 -34
  704. data/spec/mongoid/validatable/length_spec.rb +62 -86
  705. data/spec/mongoid/validatable/numericality_spec.rb +114 -23
  706. data/spec/mongoid/validatable/presence_spec.rb +149 -203
  707. data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
  708. data/spec/mongoid/validatable_spec.rb +71 -103
  709. data/spec/mongoid/warnings_spec.rb +5 -9
  710. data/spec/mongoid_spec.rb +25 -41
  711. data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
  712. data/spec/rails/mongoid_spec.rb +15 -15
  713. data/spec/shared/lib/mrss/cluster_config.rb +5 -40
  714. data/spec/shared/lib/mrss/constraints.rb +7 -46
  715. data/spec/shared/lib/mrss/docker_runner.rb +10 -21
  716. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
  717. data/spec/shared/lib/mrss/release/candidate.rb +18 -12
  718. data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
  719. data/spec/shared/share/Dockerfile.erb +6 -8
  720. data/spec/shared/shlib/server.sh +0 -50
  721. data/spec/shared/shlib/set_env.sh +4 -10
  722. data/spec/spec_helper.rb +54 -31
  723. data/spec/support/authorization.rb +0 -1
  724. data/spec/support/client_registry.rb +1 -2
  725. data/spec/support/constraints.rb +8 -25
  726. data/spec/support/crypt/models.rb +7 -8
  727. data/spec/support/crypt.rb +6 -9
  728. data/spec/support/expectations.rb +21 -7
  729. data/spec/support/feature_sandbox.rb +1 -4
  730. data/spec/support/helpers.rb +0 -1
  731. data/spec/support/immutable_ids.rb +20 -21
  732. data/spec/support/macros.rb +1 -3
  733. data/spec/support/models/account.rb +4 -5
  734. data/spec/support/models/acolyte.rb +5 -5
  735. data/spec/support/models/actor.rb +3 -3
  736. data/spec/support/models/actress.rb +0 -1
  737. data/spec/support/models/address.rb +11 -11
  738. data/spec/support/models/address_component.rb +1 -1
  739. data/spec/support/models/address_number.rb +1 -1
  740. data/spec/support/models/agency.rb +1 -1
  741. data/spec/support/models/agent.rb +1 -1
  742. data/spec/support/models/album.rb +1 -2
  743. data/spec/support/models/alert.rb +1 -1
  744. data/spec/support/models/animal.rb +4 -5
  745. data/spec/support/models/answer.rb +1 -1
  746. data/spec/support/models/appointment.rb +2 -2
  747. data/spec/support/models/armrest.rb +0 -1
  748. data/spec/support/models/array_field.rb +0 -1
  749. data/spec/support/models/article.rb +0 -1
  750. data/spec/support/models/artist.rb +16 -12
  751. data/spec/support/models/artwork.rb +1 -1
  752. data/spec/support/models/audible_sound.rb +0 -1
  753. data/spec/support/models/audio.rb +2 -2
  754. data/spec/support/models/augmentation.rb +1 -2
  755. data/spec/support/models/author.rb +1 -1
  756. data/spec/support/models/baby.rb +1 -1
  757. data/spec/support/models/band.rb +0 -1
  758. data/spec/support/models/bar.rb +2 -2
  759. data/spec/support/models/basic.rb +0 -1
  760. data/spec/support/models/bed.rb +0 -1
  761. data/spec/support/models/big_palette.rb +0 -1
  762. data/spec/support/models/birthday.rb +3 -5
  763. data/spec/support/models/bolt.rb +0 -1
  764. data/spec/support/models/bomb.rb +1 -1
  765. data/spec/support/models/book.rb +1 -1
  766. data/spec/support/models/breed.rb +1 -1
  767. data/spec/support/models/browser.rb +1 -2
  768. data/spec/support/models/building.rb +0 -1
  769. data/spec/support/models/building_address.rb +1 -1
  770. data/spec/support/models/bus.rb +1 -1
  771. data/spec/support/models/business.rb +2 -2
  772. data/spec/support/models/callback_test.rb +1 -1
  773. data/spec/support/models/canvas.rb +5 -6
  774. data/spec/support/models/car.rb +0 -1
  775. data/spec/support/models/cat.rb +0 -2
  776. data/spec/support/models/catalog.rb +0 -1
  777. data/spec/support/models/category.rb +1 -1
  778. data/spec/support/models/child.rb +1 -1
  779. data/spec/support/models/child_doc.rb +5 -6
  780. data/spec/support/models/church.rb +1 -1
  781. data/spec/support/models/circle.rb +0 -1
  782. data/spec/support/models/circuit.rb +2 -2
  783. data/spec/support/models/circus.rb +0 -1
  784. data/spec/support/models/code.rb +2 -1
  785. data/spec/support/models/coding/pull_request.rb +0 -1
  786. data/spec/support/models/coding.rb +0 -1
  787. data/spec/support/models/comment.rb +0 -1
  788. data/spec/support/models/company.rb +0 -1
  789. data/spec/support/models/consumption_period.rb +0 -1
  790. data/spec/support/models/contextable_item.rb +1 -1
  791. data/spec/support/models/contractor.rb +1 -1
  792. data/spec/support/models/cookie.rb +0 -1
  793. data/spec/support/models/country_code.rb +2 -3
  794. data/spec/support/models/courier_job.rb +2 -2
  795. data/spec/support/models/cover.rb +0 -1
  796. data/spec/support/models/crate.rb +0 -1
  797. data/spec/support/models/customer.rb +0 -1
  798. data/spec/support/models/customer_address.rb +0 -1
  799. data/spec/support/models/deed.rb +1 -1
  800. data/spec/support/models/definition.rb +1 -1
  801. data/spec/support/models/delegating_patient.rb +0 -1
  802. data/spec/support/models/description.rb +0 -1
  803. data/spec/support/models/dictionary.rb +1 -1
  804. data/spec/support/models/division.rb +2 -2
  805. data/spec/support/models/doctor.rb +0 -1
  806. data/spec/support/models/dog.rb +2 -2
  807. data/spec/support/models/dokument.rb +1 -1
  808. data/spec/support/models/draft.rb +0 -1
  809. data/spec/support/models/dragon.rb +1 -1
  810. data/spec/support/models/driver.rb +2 -2
  811. data/spec/support/models/drug.rb +1 -1
  812. data/spec/support/models/dungeon.rb +1 -1
  813. data/spec/support/models/edit.rb +1 -1
  814. data/spec/support/models/email.rb +1 -1
  815. data/spec/support/models/employer.rb +1 -2
  816. data/spec/support/models/entry.rb +1 -1
  817. data/spec/support/models/eraser.rb +0 -1
  818. data/spec/support/models/even.rb +1 -1
  819. data/spec/support/models/event.rb +3 -4
  820. data/spec/support/models/exhibition.rb +1 -1
  821. data/spec/support/models/exhibitor.rb +1 -1
  822. data/spec/support/models/explosion.rb +1 -1
  823. data/spec/support/models/eye.rb +0 -1
  824. data/spec/support/models/eye_bowl.rb +2 -3
  825. data/spec/support/models/face.rb +2 -3
  826. data/spec/support/models/fanatic.rb +1 -1
  827. data/spec/support/models/favorite.rb +1 -1
  828. data/spec/support/models/filesystem.rb +1 -1
  829. data/spec/support/models/fire_hydrant.rb +1 -1
  830. data/spec/support/models/firefox.rb +0 -1
  831. data/spec/support/models/fish.rb +0 -1
  832. data/spec/support/models/folder.rb +0 -2
  833. data/spec/support/models/folder_item.rb +1 -3
  834. data/spec/support/models/fruits.rb +9 -5
  835. data/spec/support/models/game.rb +3 -4
  836. data/spec/support/models/ghost.rb +0 -1
  837. data/spec/support/models/guitar.rb +0 -1
  838. data/spec/support/models/hole.rb +0 -1
  839. data/spec/support/models/home.rb +1 -1
  840. data/spec/support/models/house.rb +2 -2
  841. data/spec/support/models/html_writer.rb +0 -1
  842. data/spec/support/models/id_key.rb +3 -3
  843. data/spec/support/models/idnodef.rb +0 -1
  844. data/spec/support/models/image.rb +0 -1
  845. data/spec/support/models/implant.rb +1 -2
  846. data/spec/support/models/instrument.rb +2 -3
  847. data/spec/support/models/item.rb +2 -2
  848. data/spec/support/models/jar.rb +1 -2
  849. data/spec/support/models/kaleidoscope.rb +1 -1
  850. data/spec/support/models/kangaroo.rb +1 -1
  851. data/spec/support/models/label.rb +2 -2
  852. data/spec/support/models/language.rb +1 -1
  853. data/spec/support/models/lat_lng.rb +0 -1
  854. data/spec/support/models/league.rb +1 -1
  855. data/spec/support/models/learner.rb +0 -1
  856. data/spec/support/models/line_item.rb +1 -1
  857. data/spec/support/models/location.rb +1 -1
  858. data/spec/support/models/login.rb +1 -2
  859. data/spec/support/models/manufacturer.rb +0 -1
  860. data/spec/support/models/meat.rb +1 -1
  861. data/spec/support/models/membership.rb +1 -1
  862. data/spec/support/models/message.rb +1 -2
  863. data/spec/support/models/minim.rb +0 -1
  864. data/spec/support/models/mixed_drink.rb +1 -1
  865. data/spec/support/models/modifier_models.rb +25 -0
  866. data/spec/support/models/mop.rb +0 -1
  867. data/spec/support/models/movie.rb +1 -1
  868. data/spec/support/models/my_hash.rb +1 -2
  869. data/spec/support/models/name.rb +4 -5
  870. data/spec/support/models/name_only.rb +0 -1
  871. data/spec/support/models/node.rb +1 -1
  872. data/spec/support/models/note.rb +3 -3
  873. data/spec/support/models/nut.rb +0 -1
  874. data/spec/support/models/odd.rb +1 -1
  875. data/spec/support/models/order.rb +1 -1
  876. data/spec/support/models/ordered_post.rb +1 -1
  877. data/spec/support/models/ordered_preference.rb +1 -1
  878. data/spec/support/models/oscar.rb +1 -1
  879. data/spec/support/models/other_owner_object.rb +0 -1
  880. data/spec/support/models/override.rb +3 -11
  881. data/spec/support/models/ownable.rb +1 -1
  882. data/spec/support/models/owner.rb +1 -1
  883. data/spec/support/models/pack.rb +0 -1
  884. data/spec/support/models/page.rb +3 -3
  885. data/spec/support/models/page_question.rb +1 -1
  886. data/spec/support/models/palette.rb +2 -2
  887. data/spec/support/models/parent.rb +2 -2
  888. data/spec/support/models/parent_doc.rb +1 -1
  889. data/spec/support/models/passport.rb +0 -1
  890. data/spec/support/models/patient.rb +2 -2
  891. data/spec/support/models/pdf_writer.rb +0 -1
  892. data/spec/support/models/pencil.rb +0 -1
  893. data/spec/support/models/person.rb +32 -28
  894. data/spec/support/models/pet.rb +1 -1
  895. data/spec/support/models/pet_owner.rb +1 -1
  896. data/spec/support/models/phone.rb +1 -2
  897. data/spec/support/models/piano.rb +0 -1
  898. data/spec/support/models/pizza.rb +1 -1
  899. data/spec/support/models/player.rb +5 -5
  900. data/spec/support/models/post.rb +12 -12
  901. data/spec/support/models/post_genre.rb +1 -1
  902. data/spec/support/models/powerup.rb +1 -2
  903. data/spec/support/models/preference.rb +2 -2
  904. data/spec/support/models/princess.rb +1 -1
  905. data/spec/support/models/product.rb +3 -3
  906. data/spec/support/models/profile.rb +2 -1
  907. data/spec/support/models/pronunciation.rb +1 -1
  908. data/spec/support/models/pub.rb +2 -2
  909. data/spec/support/models/publication/encyclopedia.rb +0 -1
  910. data/spec/support/models/publication/review.rb +0 -1
  911. data/spec/support/models/publication.rb +0 -1
  912. data/spec/support/models/purchase.rb +1 -1
  913. data/spec/support/models/purchased_item.rb +1 -1
  914. data/spec/support/models/question.rb +2 -2
  915. data/spec/support/models/quiz.rb +1 -1
  916. data/spec/support/models/rating.rb +1 -1
  917. data/spec/support/models/record.rb +2 -3
  918. data/spec/support/models/registry.rb +1 -1
  919. data/spec/support/models/role.rb +1 -1
  920. data/spec/support/models/root_category.rb +1 -1
  921. data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
  922. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
  923. data/spec/support/models/sandbox/sandbox_message.rb +0 -1
  924. data/spec/support/models/sandbox/sandbox_user.rb +0 -1
  925. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
  926. data/spec/support/models/sandwich.rb +1 -1
  927. data/spec/support/models/scheduler.rb +0 -1
  928. data/spec/support/models/school.rb +0 -1
  929. data/spec/support/models/scribe.rb +1 -1
  930. data/spec/support/models/sealer.rb +0 -1
  931. data/spec/support/models/seat.rb +0 -1
  932. data/spec/support/models/seo.rb +1 -1
  933. data/spec/support/models/series.rb +1 -1
  934. data/spec/support/models/server.rb +1 -1
  935. data/spec/support/models/service.rb +2 -2
  936. data/spec/support/models/shape.rb +3 -3
  937. data/spec/support/models/shelf.rb +1 -1
  938. data/spec/support/models/shield.rb +2 -2
  939. data/spec/support/models/shipment_address.rb +0 -1
  940. data/spec/support/models/shipping_container.rb +1 -1
  941. data/spec/support/models/shipping_pack.rb +0 -1
  942. data/spec/support/models/shirt.rb +0 -1
  943. data/spec/support/models/shop.rb +2 -2
  944. data/spec/support/models/short_agent.rb +0 -1
  945. data/spec/support/models/short_quiz.rb +1 -1
  946. data/spec/support/models/simple.rb +1 -1
  947. data/spec/support/models/slave.rb +1 -1
  948. data/spec/support/models/song.rb +1 -2
  949. data/spec/support/models/sound.rb +2 -2
  950. data/spec/support/models/spacer.rb +0 -1
  951. data/spec/support/models/square.rb +0 -1
  952. data/spec/support/models/staff.rb +0 -1
  953. data/spec/support/models/store_as_dup_test1.rb +2 -2
  954. data/spec/support/models/store_as_dup_test2.rb +1 -1
  955. data/spec/support/models/store_as_dup_test3.rb +2 -2
  956. data/spec/support/models/store_as_dup_test4.rb +1 -1
  957. data/spec/support/models/strategy.rb +0 -1
  958. data/spec/support/models/student.rb +1 -2
  959. data/spec/support/models/sub_item.rb +0 -1
  960. data/spec/support/models/subscription.rb +2 -2
  961. data/spec/support/models/survey.rb +2 -2
  962. data/spec/support/models/symptom.rb +2 -2
  963. data/spec/support/models/system_role.rb +2 -3
  964. data/spec/support/models/tag.rb +2 -2
  965. data/spec/support/models/target.rb +1 -1
  966. data/spec/support/models/template.rb +1 -1
  967. data/spec/support/models/thing.rb +1 -1
  968. data/spec/support/models/threadlocker.rb +0 -1
  969. data/spec/support/models/title.rb +0 -1
  970. data/spec/support/models/tool.rb +3 -3
  971. data/spec/support/models/topping.rb +1 -1
  972. data/spec/support/models/toy.rb +0 -1
  973. data/spec/support/models/track.rb +1 -1
  974. data/spec/support/models/translation.rb +1 -1
  975. data/spec/support/models/tree.rb +2 -3
  976. data/spec/support/models/truck.rb +0 -1
  977. data/spec/support/models/updatable.rb +0 -1
  978. data/spec/support/models/user.rb +3 -4
  979. data/spec/support/models/user_account.rb +3 -3
  980. data/spec/support/models/validation_callback.rb +4 -4
  981. data/spec/support/models/vehicle.rb +2 -3
  982. data/spec/support/models/version.rb +1 -1
  983. data/spec/support/models/vertex.rb +0 -1
  984. data/spec/support/models/vet_visit.rb +1 -1
  985. data/spec/support/models/video.rb +2 -2
  986. data/spec/support/models/video_game.rb +0 -1
  987. data/spec/support/models/washer.rb +0 -1
  988. data/spec/support/models/weapon.rb +1 -2
  989. data/spec/support/models/wiki_page.rb +2 -3
  990. data/spec/support/models/word.rb +2 -2
  991. data/spec/support/models/word_origin.rb +1 -2
  992. data/spec/support/models/writer.rb +3 -3
  993. data/spec/support/rails_mock.rb +7 -12
  994. data/spec/support/shared/time.rb +0 -1
  995. data/spec/support/sinatra_mock.rb +4 -2
  996. data/spec/support/spec_config.rb +19 -18
  997. metadata +14 -2
@@ -1,158 +1,141 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
5
  describe Mongoid::Findable do
7
-
8
- describe ".distinct" do
9
-
6
+ describe '.distinct' do
10
7
  before do
11
- Band.create!(name: "Tool")
12
- Band.create!(name: "Photek")
8
+ Band.create!(name: 'Tool')
9
+ Band.create!(name: 'Photek')
13
10
  end
14
11
 
15
- it "returns the distinct values for the field" do
16
- expect(Band.distinct(:name).sort).to eq([ "Photek", "Tool" ])
12
+ it 'returns the distinct values for the field' do
13
+ expect(Band.distinct(:name).sort).to eq(%w[Photek Tool])
17
14
  end
18
15
  end
19
16
 
20
- describe ".each" do
21
-
17
+ describe '.each' do
22
18
  let!(:band) do
23
19
  Band.create!
24
20
  end
25
21
 
26
- it "iterates through all documents" do
27
- Band.each do |band|
28
- expect(band).to be_a(Band)
29
- end
22
+ it 'iterates through all documents' do
23
+ expect(Band).to all(be_a(Band))
30
24
  end
31
25
  end
32
26
 
33
- describe ".each_with_index" do
34
-
27
+ describe '.each_with_index' do
35
28
  let!(:band) do
36
29
  Band.create!
37
30
  end
38
31
 
39
- it "iterates through all documents" do
40
- Band.each_with_index do |band, index|
32
+ it 'iterates through all documents' do
33
+ Band.each_with_index do |_band, index|
41
34
  expect(index).to eq(0)
42
35
  end
43
36
  end
44
37
  end
45
38
 
46
- describe ".find_one_and_update" do
47
-
39
+ describe '.find_one_and_update' do
48
40
  let!(:person) do
49
- Person.create!(title: "Senior")
41
+ Person.create!(title: 'Senior')
50
42
  end
51
43
 
52
- it "returns the document" do
53
- expect(Person.find_one_and_update(title: "Junior")).to eq(person)
44
+ it 'returns the document' do
45
+ expect(Person.find_one_and_update(title: 'Junior')).to eq(person)
54
46
  end
55
47
  end
56
48
 
57
- describe ".find_by" do
58
-
59
- context "when collection is a embeds_many" do
60
-
49
+ describe '.find_by' do
50
+ context 'when collection is a embeds_many' do
61
51
  let(:person) do
62
- Person.create!(title: "sir")
52
+ Person.create!(title: 'sir')
63
53
  end
64
54
 
65
55
  let!(:message) do
66
56
  person.messages.create!(body: 'foo')
67
57
  end
68
58
 
69
- context "when the document is found" do
70
-
71
- it "returns the document" do
59
+ context 'when the document is found' do
60
+ it 'returns the document' do
72
61
  expect(person.messages.find_by(body: 'foo')).to eq(message)
73
62
  end
74
63
  end
75
64
 
76
- context "when the document is not found" do
77
-
78
- context "when raising a not found error" do
65
+ context 'when the document is not found' do
66
+ context 'when raising a not found error' do
79
67
  config_override :raise_not_found_error, true
80
68
 
81
- it "raises an error" do
82
- expect {
69
+ it 'raises an error' do
70
+ expect do
83
71
  person.messages.find_by(body: 'bar')
84
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Message with attributes/)
72
+ end.to raise_error(Mongoid::Errors::DocumentNotFound,
73
+ /Document not found for class Message with attributes/)
85
74
  end
86
75
  end
87
76
 
88
- context "when raising no error" do
77
+ context 'when raising no error' do
89
78
  config_override :raise_not_found_error, false
90
79
 
91
- it "returns nil" do
80
+ it 'returns nil' do
92
81
  expect(person.messages.find_by(body: 'bar')).to be_nil
93
82
  end
94
83
  end
95
84
  end
96
85
  end
97
86
 
98
- context "when the document is found" do
99
-
87
+ context 'when the document is found' do
100
88
  let!(:person) do
101
- Person.create!(title: "sir")
89
+ Person.create!(title: 'sir')
102
90
  end
103
91
 
104
- context "when no block is provided" do
105
-
106
- it "returns the document" do
107
- expect(Person.find_by(title: "sir")).to eq(person)
92
+ context 'when no block is provided' do
93
+ it 'returns the document' do
94
+ expect(Person.find_by(title: 'sir')).to eq(person)
108
95
  end
109
96
  end
110
97
 
111
- context "when a block is provided" do
112
-
98
+ context 'when a block is provided' do
113
99
  let(:result) do
114
- Person.find_by(title: "sir") do |peep|
100
+ Person.find_by(title: 'sir') do |peep|
115
101
  peep.age = 50
116
102
  end
117
103
  end
118
104
 
119
- it "yields the returned document" do
105
+ it 'yields the returned document' do
120
106
  expect(result.age).to eq(50)
121
107
  end
122
108
  end
123
109
  end
124
110
 
125
- context "when the document is not found" do
126
-
127
- context "when raising a not found error" do
111
+ context 'when the document is not found' do
112
+ context 'when raising a not found error' do
128
113
  config_override :raise_not_found_error, true
129
114
 
130
- it "raises an error" do
131
- expect {
132
- Person.find_by(ssn: "333-22-1111")
133
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
115
+ it 'raises an error' do
116
+ expect do
117
+ Person.find_by(ssn: '333-22-1111')
118
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
134
119
  end
135
120
  end
136
121
 
137
- context "when raising no error" do
122
+ context 'when raising no error' do
138
123
  config_override :raise_not_found_error, false
139
124
 
140
- context "when no block is provided" do
141
-
142
- it "returns nil" do
143
- expect(Person.find_by(ssn: "333-22-1111")).to be_nil
125
+ context 'when no block is provided' do
126
+ it 'returns nil' do
127
+ expect(Person.find_by(ssn: '333-22-1111')).to be_nil
144
128
  end
145
129
  end
146
130
 
147
- context "when a block is provided" do
148
-
131
+ context 'when a block is provided' do
149
132
  let(:result) do
150
- Person.find_by(ssn: "333-22-1111") do |peep|
133
+ Person.find_by(ssn: '333-22-1111') do |peep|
151
134
  peep.age = 50
152
135
  end
153
136
  end
154
137
 
155
- it "returns nil" do
138
+ it 'returns nil' do
156
139
  expect(result).to be_nil
157
140
  end
158
141
  end
@@ -160,49 +143,118 @@ describe Mongoid::Findable do
160
143
  end
161
144
  end
162
145
 
163
- describe "find_by!" do
146
+ describe '#any?' do
147
+ context 'when called on collection with documents' do
148
+ before do
149
+ Band.create!(name: 'Tool')
150
+ end
164
151
 
165
- context "when the document is found" do
152
+ it 'returns true' do
153
+ expect(Band.any?).to be true
154
+ end
155
+ end
166
156
 
167
- let!(:person) do
168
- Person.create!(title: "sir")
157
+ context 'when called on collection with no documents' do
158
+ it 'returns false' do
159
+ expect(Band.any?).to be false
169
160
  end
161
+ end
162
+ end
170
163
 
171
- context "when no block is provided" do
164
+ describe '#one?' do
165
+ context 'when called on collection with no documents' do
166
+ it 'returns false' do
167
+ expect(Band.one?).to be false
168
+ end
169
+ end
172
170
 
173
- it "returns the document" do
174
- expect(Person.find_by!(title: "sir")).to eq(person)
175
- end
171
+ context 'when called on collection with one document' do
172
+ before do
173
+ Band.create!(name: 'Radiohead')
174
+ end
175
+
176
+ it 'returns true' do
177
+ expect(Band.one?).to be true
178
+ end
179
+ end
180
+
181
+ context 'when called on collection with multiple documents' do
182
+ before do
183
+ Band.create!(name: 'Tool')
184
+ Band.create!(name: 'Radiohead')
185
+ end
186
+
187
+ it 'returns false' do
188
+ expect(Band.one?).to be false
189
+ end
190
+ end
191
+ end
192
+
193
+ describe '#many?' do
194
+ context 'when called on collection with no documents' do
195
+ it 'returns false' do
196
+ expect(Band.many?).to be false
197
+ end
198
+ end
199
+
200
+ context 'when called on collection with one document' do
201
+ before do
202
+ Band.create!(name: 'Radiohead')
203
+ end
204
+
205
+ it 'returns false' do
206
+ expect(Band.many?).to be false
176
207
  end
208
+ end
177
209
 
178
- context "when a block is provided" do
210
+ context 'when called on collection with multiple documents' do
211
+ before do
212
+ Band.create!(name: 'Radiohead')
213
+ Band.create!(name: 'Tool')
214
+ end
215
+
216
+ it 'returns true' do
217
+ expect(Band.many?).to be true
218
+ end
219
+ end
220
+ end
179
221
 
222
+ describe 'find_by!' do
223
+ context 'when the document is found' do
224
+ let!(:person) do
225
+ Person.create!(title: 'sir')
226
+ end
227
+
228
+ context 'when no block is provided' do
229
+ it 'returns the document' do
230
+ expect(Person.find_by!(title: 'sir')).to eq(person)
231
+ end
232
+ end
233
+
234
+ context 'when a block is provided' do
180
235
  let(:result) do
181
- Person.find_by!(title: "sir") do |peep|
236
+ Person.find_by!(title: 'sir') do |peep|
182
237
  peep.age = 50
183
238
  end
184
239
  end
185
240
 
186
- it "yields the returned document" do
241
+ it 'yields the returned document' do
187
242
  expect(result.age).to eq(50)
188
243
  end
189
244
  end
190
245
  end
191
246
 
192
- context "when the document is not found" do
193
-
194
- it "raises an error" do
195
- expect {
196
- Person.find_by!(ssn: "333-22-1111")
197
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
247
+ context 'when the document is not found' do
248
+ it 'raises an error' do
249
+ expect do
250
+ Person.find_by!(ssn: '333-22-1111')
251
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document not found for class Person with attributes/)
198
252
  end
199
253
  end
200
254
  end
201
255
 
202
- [ :first, :one ].each do |method|
203
-
256
+ %i[first one].each do |method|
204
257
  describe "##{method}" do
205
-
206
258
  let!(:person1) do
207
259
  Person.create!
208
260
  end
@@ -211,21 +263,21 @@ describe Mongoid::Findable do
211
263
  Person.create!
212
264
  end
213
265
 
214
- it "returns the first matching document" do
266
+ it 'returns the first matching document' do
215
267
  expect(Person.send(method)).to eq(person1)
216
268
  end
217
269
 
218
- it "passes the limit through" do
270
+ it 'passes the limit through' do
219
271
  expect(Person.send(method, 1)).to eq([ person1 ])
220
272
  end
221
273
 
222
- it "returns nil when no documents are found" do
274
+ it 'returns nil when no documents are found' do
223
275
  expect(Band.send(method)).to be_nil
224
276
  end
225
277
  end
226
278
  end
227
279
 
228
- describe "#first!" do
280
+ describe '#first!' do
229
281
  let!(:person1) do
230
282
  Person.create!
231
283
  end
@@ -234,18 +286,18 @@ describe Mongoid::Findable do
234
286
  Person.create!
235
287
  end
236
288
 
237
- it "returns the first matching document" do
289
+ it 'returns the first matching document' do
238
290
  expect(Person.first!).to eq(person1)
239
291
  end
240
292
 
241
- it "raises an error when there are no documents" do
293
+ it 'raises an error when there are no documents' do
242
294
  expect do
243
295
  Band.first!
244
296
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
245
297
  end
246
298
  end
247
299
 
248
- describe "#last" do
300
+ describe '#last' do
249
301
  let!(:person1) do
250
302
  Person.create!
251
303
  end
@@ -254,20 +306,20 @@ describe Mongoid::Findable do
254
306
  Person.create!
255
307
  end
256
308
 
257
- it "returns the first matching document" do
309
+ it 'returns the first matching document' do
258
310
  expect(Person.last).to eq(person2)
259
311
  end
260
312
 
261
- it "passes the limit through" do
313
+ it 'passes the limit through' do
262
314
  expect(Person.last(1)).to eq([ person2 ])
263
315
  end
264
316
 
265
- it "returns nil when no documents are found" do
317
+ it 'returns nil when no documents are found' do
266
318
  expect(Band.last).to be_nil
267
319
  end
268
320
  end
269
321
 
270
- describe "#last!" do
322
+ describe '#last!' do
271
323
  let!(:person1) do
272
324
  Person.create!
273
325
  end
@@ -276,18 +328,18 @@ describe Mongoid::Findable do
276
328
  Person.create!
277
329
  end
278
330
 
279
- it "returns the last matching document" do
331
+ it 'returns the last matching document' do
280
332
  expect(Person.last!).to eq(person2)
281
333
  end
282
334
 
283
- it "raises an error when there are no documents" do
335
+ it 'raises an error when there are no documents' do
284
336
  expect do
285
337
  Band.last!
286
338
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
287
339
  end
288
340
  end
289
341
 
290
- describe "#second" do
342
+ describe '#second' do
291
343
  let!(:person1) do
292
344
  Person.create!
293
345
  end
@@ -296,16 +348,16 @@ describe Mongoid::Findable do
296
348
  Person.create!
297
349
  end
298
350
 
299
- it "returns the second matching document" do
351
+ it 'returns the second matching document' do
300
352
  expect(Person.second).to eq(person2)
301
353
  end
302
354
 
303
- it "returns nil when no documents are found" do
355
+ it 'returns nil when no documents are found' do
304
356
  expect(Band.second).to be_nil
305
357
  end
306
358
  end
307
359
 
308
- describe "#second!" do
360
+ describe '#second!' do
309
361
  let!(:person1) do
310
362
  Person.create!
311
363
  end
@@ -314,18 +366,18 @@ describe Mongoid::Findable do
314
366
  Person.create!
315
367
  end
316
368
 
317
- it "returns the second matching document" do
369
+ it 'returns the second matching document' do
318
370
  expect(Person.second!).to eq(person2)
319
371
  end
320
372
 
321
- it "raises an error when there are no documents" do
373
+ it 'raises an error when there are no documents' do
322
374
  expect do
323
375
  Band.second!
324
376
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
325
377
  end
326
378
  end
327
379
 
328
- describe "#third" do
380
+ describe '#third' do
329
381
  let!(:person1) do
330
382
  Person.create!
331
383
  end
@@ -338,16 +390,16 @@ describe Mongoid::Findable do
338
390
  Person.create!
339
391
  end
340
392
 
341
- it "returns the third matching document" do
393
+ it 'returns the third matching document' do
342
394
  expect(Person.third).to eq(person3)
343
395
  end
344
396
 
345
- it "returns nil when no documents are found" do
397
+ it 'returns nil when no documents are found' do
346
398
  expect(Band.third).to be_nil
347
399
  end
348
400
  end
349
401
 
350
- describe "#third!" do
402
+ describe '#third!' do
351
403
  let!(:person1) do
352
404
  Person.create!
353
405
  end
@@ -360,18 +412,18 @@ describe Mongoid::Findable do
360
412
  Person.create!
361
413
  end
362
414
 
363
- it "returns the third matching document" do
415
+ it 'returns the third matching document' do
364
416
  expect(Person.third!).to eq(person3)
365
417
  end
366
418
 
367
- it "raises an error when there are no documents" do
419
+ it 'raises an error when there are no documents' do
368
420
  expect do
369
421
  Band.third!
370
422
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
371
423
  end
372
424
  end
373
425
 
374
- describe "#fourth" do
426
+ describe '#fourth' do
375
427
  let!(:person1) do
376
428
  Person.create!
377
429
  end
@@ -388,16 +440,16 @@ describe Mongoid::Findable do
388
440
  Person.create!
389
441
  end
390
442
 
391
- it "returns the fourth matching document" do
443
+ it 'returns the fourth matching document' do
392
444
  expect(Person.fourth).to eq(person4)
393
445
  end
394
446
 
395
- it "returns nil when no documents are found" do
447
+ it 'returns nil when no documents are found' do
396
448
  expect(Band.fourth).to be_nil
397
449
  end
398
450
  end
399
451
 
400
- describe "#fourth!" do
452
+ describe '#fourth!' do
401
453
  let!(:person1) do
402
454
  Person.create!
403
455
  end
@@ -414,18 +466,18 @@ describe Mongoid::Findable do
414
466
  Person.create!
415
467
  end
416
468
 
417
- it "returns the fourth matching document" do
469
+ it 'returns the fourth matching document' do
418
470
  expect(Person.fourth!).to eq(person4)
419
471
  end
420
472
 
421
- it "raises an error when there are no documents" do
473
+ it 'raises an error when there are no documents' do
422
474
  expect do
423
475
  Band.fourth!
424
476
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
425
477
  end
426
478
  end
427
479
 
428
- describe "#fifth" do
480
+ describe '#fifth' do
429
481
  let!(:person1) do
430
482
  Person.create!
431
483
  end
@@ -446,16 +498,16 @@ describe Mongoid::Findable do
446
498
  Person.create!
447
499
  end
448
500
 
449
- it "returns the fifth matching document" do
501
+ it 'returns the fifth matching document' do
450
502
  expect(Person.fifth).to eq(person5)
451
503
  end
452
504
 
453
- it "returns nil when no documents are found" do
505
+ it 'returns nil when no documents are found' do
454
506
  expect(Band.fifth).to be_nil
455
507
  end
456
508
  end
457
509
 
458
- describe "#fifth!" do
510
+ describe '#fifth!' do
459
511
  let!(:person1) do
460
512
  Person.create!
461
513
  end
@@ -476,18 +528,18 @@ describe Mongoid::Findable do
476
528
  Person.create!
477
529
  end
478
530
 
479
- it "returns the fifth matching document" do
531
+ it 'returns the fifth matching document' do
480
532
  expect(Person.fifth!).to eq(person5)
481
533
  end
482
534
 
483
- it "raises an error when there are no documents" do
535
+ it 'raises an error when there are no documents' do
484
536
  expect do
485
537
  Band.fifth!
486
538
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
487
539
  end
488
540
  end
489
541
 
490
- describe "#second_to_last" do
542
+ describe '#second_to_last' do
491
543
  let!(:person1) do
492
544
  Person.create!
493
545
  end
@@ -508,16 +560,16 @@ describe Mongoid::Findable do
508
560
  Person.create!
509
561
  end
510
562
 
511
- it "returns the second to last matching document" do
563
+ it 'returns the second to last matching document' do
512
564
  expect(Person.second_to_last).to eq(person4)
513
565
  end
514
566
 
515
- it "returns nil when no documents are found" do
567
+ it 'returns nil when no documents are found' do
516
568
  expect(Band.second_to_last).to be_nil
517
569
  end
518
570
  end
519
571
 
520
- describe "#second_to_last!" do
572
+ describe '#second_to_last!' do
521
573
  let!(:person1) do
522
574
  Person.create!
523
575
  end
@@ -538,18 +590,18 @@ describe Mongoid::Findable do
538
590
  Person.create!
539
591
  end
540
592
 
541
- it "returns the second to last matching document" do
593
+ it 'returns the second to last matching document' do
542
594
  expect(Person.second_to_last!).to eq(person4)
543
595
  end
544
596
 
545
- it "raises an error when there are no documents" do
597
+ it 'raises an error when there are no documents' do
546
598
  expect do
547
599
  Band.second_to_last!
548
600
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
549
601
  end
550
602
  end
551
603
 
552
- describe "#third_to_last" do
604
+ describe '#third_to_last' do
553
605
  let!(:person1) do
554
606
  Person.create!
555
607
  end
@@ -570,16 +622,16 @@ describe Mongoid::Findable do
570
622
  Person.create!
571
623
  end
572
624
 
573
- it "returns the third to last matching document" do
625
+ it 'returns the third to last matching document' do
574
626
  expect(Person.third_to_last).to eq(person3)
575
627
  end
576
628
 
577
- it "returns nil when no documents are found" do
629
+ it 'returns nil when no documents are found' do
578
630
  expect(Band.third_to_last).to be_nil
579
631
  end
580
632
  end
581
633
 
582
- describe "#third_to_last!" do
634
+ describe '#third_to_last!' do
583
635
  let!(:person1) do
584
636
  Person.create!
585
637
  end
@@ -600,34 +652,30 @@ describe Mongoid::Findable do
600
652
  Person.create!
601
653
  end
602
654
 
603
- it "returns the third to last matching document" do
655
+ it 'returns the third to last matching document' do
604
656
  expect(Person.third_to_last!).to eq(person3)
605
657
  end
606
658
 
607
- it "raises an error when there are no documents" do
659
+ it 'raises an error when there are no documents' do
608
660
  expect do
609
661
  Band.third_to_last!
610
662
  end.to raise_error(Mongoid::Errors::DocumentNotFound, /Could not find a document of class Band./)
611
663
  end
612
664
  end
613
665
 
614
- describe ".first_or_create" do
615
-
616
- context "when the document is found" do
617
-
666
+ describe '.first_or_create' do
667
+ context 'when the document is found' do
618
668
  let!(:person) do
619
669
  Person.create!
620
670
  end
621
671
 
622
- it "returns the document" do
672
+ it 'returns the document' do
623
673
  expect(Person.first_or_create).to eq(person)
624
674
  end
625
675
  end
626
676
 
627
- context "when the document is not found" do
628
-
629
- context "when providing a document" do
630
-
677
+ context 'when the document is not found' do
678
+ context 'when providing a document' do
631
679
  let!(:person) do
632
680
  Person.create!
633
681
  end
@@ -636,66 +684,60 @@ describe Mongoid::Findable do
636
684
  Game.first_or_create(person: person)
637
685
  end
638
686
 
639
- it "returns the new document" do
687
+ it 'returns the new document' do
640
688
  expect(from_db.person).to eq(person)
641
689
  end
642
690
  end
643
691
 
644
- context "when not providing a block" do
645
-
692
+ context 'when not providing a block' do
646
693
  let!(:person) do
647
- Person.first_or_create(title: "Senorita")
694
+ Person.first_or_create(title: 'Senorita')
648
695
  end
649
696
 
650
- it "creates a persisted document" do
697
+ it 'creates a persisted document' do
651
698
  expect(person).to be_persisted
652
699
  end
653
700
 
654
- it "sets the attributes" do
655
- expect(person.title).to eq("Senorita")
701
+ it 'sets the attributes' do
702
+ expect(person.title).to eq('Senorita')
656
703
  end
657
704
  end
658
705
 
659
- context "when providing a block" do
660
-
706
+ context 'when providing a block' do
661
707
  let!(:person) do
662
- Person.first_or_create(title: "Senorita") do |person|
708
+ Person.first_or_create(title: 'Senorita') do |person|
663
709
  person.pets = true
664
710
  end
665
711
  end
666
712
 
667
- it "creates a persisted document" do
713
+ it 'creates a persisted document' do
668
714
  expect(person).to be_persisted
669
715
  end
670
716
 
671
- it "sets the attributes" do
672
- expect(person.title).to eq("Senorita")
717
+ it 'sets the attributes' do
718
+ expect(person.title).to eq('Senorita')
673
719
  end
674
720
 
675
- it "calls the block" do
721
+ it 'calls the block' do
676
722
  expect(person.pets).to be true
677
723
  end
678
724
  end
679
725
  end
680
726
  end
681
727
 
682
- describe ".first_or_initialize" do
683
-
684
- context "when the document is found" do
685
-
728
+ describe '.first_or_initialize' do
729
+ context 'when the document is found' do
686
730
  let!(:person) do
687
731
  Person.create!
688
732
  end
689
733
 
690
- it "returns the document" do
734
+ it 'returns the document' do
691
735
  expect(Person.first_or_create).to eq(person)
692
736
  end
693
737
  end
694
738
 
695
- context "when the document is not found" do
696
-
697
- context "when providing a document" do
698
-
739
+ context 'when the document is not found' do
740
+ context 'when providing a document' do
699
741
  let!(:person) do
700
742
  Person.create!
701
743
  end
@@ -704,155 +746,147 @@ describe Mongoid::Findable do
704
746
  Game.first_or_initialize(person: person)
705
747
  end
706
748
 
707
- it "returns the new document" do
749
+ it 'returns the new document' do
708
750
  expect(found.person).to eq(person)
709
751
  end
710
752
 
711
- it "does not save the document" do
712
- expect(found).to_not be_persisted
753
+ it 'does not save the document' do
754
+ expect(found).not_to be_persisted
713
755
  end
714
756
  end
715
757
 
716
- context "when not providing a block" do
717
-
758
+ context 'when not providing a block' do
718
759
  before do
719
760
  Person.delete_all
720
761
  end
721
762
 
722
763
  let!(:person) do
723
- Person.first_or_initialize(title: "esquire")
764
+ Person.first_or_initialize(title: 'esquire')
724
765
  end
725
766
 
726
- it "creates a non persisted document" do
727
- expect(person).to_not be_persisted
767
+ it 'creates a non persisted document' do
768
+ expect(person).not_to be_persisted
728
769
  end
729
770
 
730
- it "sets the attributes" do
731
- expect(person.title).to eq("esquire")
771
+ it 'sets the attributes' do
772
+ expect(person.title).to eq('esquire')
732
773
  end
733
774
  end
734
775
 
735
- context "when providing a block" do
736
-
776
+ context 'when providing a block' do
737
777
  let!(:person) do
738
- Person.first_or_initialize(title: "Senorita") do |person|
778
+ Person.first_or_initialize(title: 'Senorita') do |person|
739
779
  person.pets = true
740
780
  end
741
781
  end
742
782
 
743
- it "creates a new document" do
744
- expect(person).to_not be_persisted
783
+ it 'creates a new document' do
784
+ expect(person).not_to be_persisted
745
785
  end
746
786
 
747
- it "sets the attributes" do
748
- expect(person.title).to eq("Senorita")
787
+ it 'sets the attributes' do
788
+ expect(person.title).to eq('Senorita')
749
789
  end
750
790
 
751
- it "calls the block" do
791
+ it 'calls the block' do
752
792
  expect(person.pets).to be true
753
793
  end
754
794
  end
755
795
  end
756
796
  end
757
797
 
758
- describe ".none" do
759
-
798
+ describe '.none' do
760
799
  let!(:depeche) do
761
- Band.create!(name: "Depeche Mode", likes: 3)
800
+ Band.create!(name: 'Depeche Mode', likes: 3)
762
801
  end
763
802
 
764
- context "when not chaining any criteria" do
765
-
766
- it "returns no records" do
803
+ context 'when not chaining any criteria' do
804
+ it 'returns no records' do
767
805
  expect(Band.none).to be_empty
768
806
  end
769
807
 
770
- it "has an empty count" do
808
+ it 'has an empty count' do
771
809
  expect(Band.none.count).to eq(0)
772
810
  end
773
811
 
774
- it "returns nil for first" do
812
+ it 'returns nil for first' do
775
813
  expect(Band.none.first).to be_nil
776
814
  end
777
815
 
778
- it "returns nil for last" do
816
+ it 'returns nil for last' do
779
817
  expect(Band.none.last).to be_nil
780
818
  end
781
819
 
782
- it "returns zero for length" do
820
+ it 'returns zero for length' do
783
821
  expect(Band.none.length).to eq(0)
784
822
  end
785
823
 
786
- it "returns zero for size" do
824
+ it 'returns zero for size' do
787
825
  expect(Band.none.size).to eq(0)
788
826
  end
789
827
  end
790
828
 
791
- context "when chaining criteria after the none" do
792
-
829
+ context 'when chaining criteria after the none' do
793
830
  let(:criteria) do
794
- Band.none.where(name: "Depeche Mode")
831
+ Band.none.where(name: 'Depeche Mode')
795
832
  end
796
833
 
797
- it "returns no records" do
834
+ it 'returns no records' do
798
835
  expect(criteria).to be_empty
799
836
  end
800
837
 
801
- it "has an empty count" do
838
+ it 'has an empty count' do
802
839
  expect(criteria.count).to eq(0)
803
840
  end
804
841
 
805
- it "returns nil for first" do
842
+ it 'returns nil for first' do
806
843
  expect(criteria.first).to be_nil
807
844
  end
808
845
 
809
- it "returns nil for last" do
846
+ it 'returns nil for last' do
810
847
  expect(criteria.last).to be_nil
811
848
  end
812
849
 
813
- it "returns zero for length" do
850
+ it 'returns zero for length' do
814
851
  expect(criteria.length).to eq(0)
815
852
  end
816
853
 
817
- it "returns zero for size" do
854
+ it 'returns zero for size' do
818
855
  expect(criteria.size).to eq(0)
819
856
  end
820
857
  end
821
858
  end
822
859
 
823
- describe ".pluck" do
824
-
860
+ describe '.pluck' do
825
861
  let!(:depeche) do
826
- Band.create!(name: "Depeche Mode", likes: 3)
862
+ Band.create!(name: 'Depeche Mode', likes: 3)
827
863
  end
828
864
 
829
865
  let!(:tool) do
830
- Band.create!(name: "Tool", likes: 3)
866
+ Band.create!(name: 'Tool', likes: 3)
831
867
  end
832
868
 
833
869
  let!(:photek) do
834
- Band.create!(name: "Photek", likes: 1)
870
+ Band.create!(name: 'Photek', likes: 1)
835
871
  end
836
872
 
837
- context "when field values exist" do
838
-
873
+ context 'when field values exist' do
839
874
  let(:plucked) do
840
875
  Band.pluck(:name)
841
876
  end
842
877
 
843
- it "returns the field values" do
844
- expect(plucked).to eq([ "Depeche Mode", "Tool", "Photek" ])
878
+ it 'returns the field values' do
879
+ expect(plucked).to eq([ 'Depeche Mode', 'Tool', 'Photek' ])
845
880
  end
846
881
  end
847
882
 
848
- context "when field values do not exist" do
849
-
883
+ context 'when field values do not exist' do
850
884
  let(:plucked) do
851
885
  Band.pluck(:follows)
852
886
  end
853
887
 
854
- it "returns an array with nil values" do
855
- expect(plucked).to eq([nil, nil, nil])
888
+ it 'returns an array with nil values' do
889
+ expect(plucked).to eq([ nil, nil, nil ])
856
890
  end
857
891
  end
858
892
  end
@@ -860,11 +894,11 @@ describe Mongoid::Findable do
860
894
  describe '.count' do
861
895
  context 'when the collection is not empty' do
862
896
  before do
863
- Band.create!(name: "Tool")
864
- Band.create!(name: "Photek")
897
+ Band.create!(name: 'Tool')
898
+ Band.create!(name: 'Photek')
865
899
  end
866
900
 
867
- it 'returns the currect count' do
901
+ it 'returns the correct count' do
868
902
  expect(Band.count).to eq(2)
869
903
  end
870
904
  end
@@ -873,8 +907,8 @@ describe Mongoid::Findable do
873
907
  describe '.estimated_count' do
874
908
  context 'when the collection is not empty' do
875
909
  before do
876
- Band.create!(name: "Tool")
877
- Band.create!(name: "Photek")
910
+ Band.create!(name: 'Tool')
911
+ Band.create!(name: 'Photek')
878
912
  end
879
913
 
880
914
  it 'returns the correct count' do
@@ -890,9 +924,7 @@ describe Mongoid::Findable do
890
924
  end
891
925
 
892
926
  Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
893
-
894
927
  describe "##{method}" do
895
-
896
928
  it "forwards the #{method} to the criteria" do
897
929
  expect(Band).to respond_to(method)
898
930
  end
@@ -901,7 +933,7 @@ describe Mongoid::Findable do
901
933
 
902
934
  context 'when Mongoid is configured to use activesupport time zone' do
903
935
  config_override :use_utc, false
904
- time_zone_override "Asia/Kolkata"
936
+ time_zone_override 'Asia/Kolkata'
905
937
 
906
938
  let!(:time) do
907
939
  Time.current.tap do |t|
@@ -924,7 +956,7 @@ describe Mongoid::Findable do
924
956
  end
925
957
 
926
958
  it 'loads other fields accurately' do
927
- expect(User.distinct(:name)).to match_array(['Tom'])
959
+ expect(User.distinct(:name)).to contain_exactly('Tom')
928
960
  end
929
961
  end
930
962
  end