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,55 +1,48 @@
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::Clients do
7
-
8
- describe "#collection" do
9
-
10
- shared_examples_for "an overridden collection at the class level" do
11
-
12
- it "returns the collection for the model" do
6
+ describe '#collection' do
7
+ shared_examples_for 'an overridden collection at the class level' do
8
+ it 'returns the collection for the model' do
13
9
  expect(instance_collection).to be_a(Mongo::Collection)
14
10
  end
15
11
 
16
- it "sets the correct collection name" do
17
- expect(instance_collection.name).to eq("artists")
12
+ it 'sets the correct collection name' do
13
+ expect(instance_collection.name).to eq('artists')
18
14
  end
19
15
 
20
- context "when accessing from the class level" do
21
-
22
- it "returns the collection for the model" do
16
+ context 'when accessing from the class level' do
17
+ it 'returns the collection for the model' do
23
18
  expect(class_collection).to be_a(Mongo::Collection)
24
19
  end
25
20
 
26
- it "sets the correct collection name" do
27
- expect(class_collection.name).to eq("artists")
21
+ it 'sets the correct collection name' do
22
+ expect(class_collection.name).to eq('artists')
28
23
  end
29
24
  end
30
25
  end
31
26
 
32
- context "when overriding the persistence options" do
33
-
27
+ context 'when overriding the persistence options' do
34
28
  let(:instance_collection) do
35
- Band.with(collection: "artists") do |klass|
29
+ Band.with(collection: 'artists') do |klass|
36
30
  klass.new.collection
37
31
  end
38
32
  end
39
33
 
40
34
  let(:class_collection) do
41
- Band.with(collection: "artists") do |klass|
35
+ Band.with(collection: 'artists') do |klass|
42
36
  klass.collection
43
37
  end
44
38
  end
45
39
 
46
- it_behaves_like "an overridden collection at the class level"
40
+ it_behaves_like 'an overridden collection at the class level'
47
41
  end
48
42
 
49
- context "when overriding store_in and persistence options" do
50
-
43
+ context 'when overriding store_in and persistence options' do
51
44
  before do
52
- Band.store_in collection: "foo"
45
+ Band.store_in collection: 'foo'
53
46
  end
54
47
 
55
48
  after do
@@ -57,43 +50,40 @@ describe Mongoid::Clients do
57
50
  end
58
51
 
59
52
  let(:instance_collection) do
60
- Band.with(collection: "artists") do |klass|
53
+ Band.with(collection: 'artists') do |klass|
61
54
  klass.new.collection
62
55
  end
63
56
  end
64
57
 
65
58
  let(:class_collection) do
66
- Band.with(collection: "artists") do |klass|
59
+ Band.with(collection: 'artists') do |klass|
67
60
  klass.collection
68
61
  end
69
62
  end
70
63
 
71
- it_behaves_like "an overridden collection at the class level"
64
+ it_behaves_like 'an overridden collection at the class level'
72
65
  end
73
66
 
74
- context "when overriding the default with store_in" do
75
-
67
+ context 'when overriding the default with store_in' do
76
68
  after do
77
69
  Band.reset_storage_options!
78
70
  end
79
71
 
80
- context "when called multiple times with different options" do
81
-
72
+ context 'when called multiple times with different options' do
82
73
  before do
83
- Band.store_in collection: "artists"
84
- Band.store_in client: "another"
74
+ Band.store_in collection: 'artists'
75
+ Band.store_in client: 'another'
85
76
  end
86
77
 
87
- it "should merge the options together" do
88
- expect(Band.storage_options[:collection]).to eq("artists")
89
- expect(Band.storage_options[:client]).to eq("another")
78
+ it 'merges the options together' do
79
+ expect(Band.storage_options[:collection]).to eq('artists')
80
+ expect(Band.storage_options[:client]).to eq('another')
90
81
  end
91
82
  end
92
83
 
93
- context "when overriding with a proc" do
94
-
84
+ context 'when overriding with a proc' do
95
85
  before do
96
- Band.store_in(collection: ->{ "artists" })
86
+ Band.store_in(collection: -> { 'artists' })
97
87
  end
98
88
 
99
89
  let(:instance_collection) do
@@ -104,13 +94,12 @@ describe Mongoid::Clients do
104
94
  Band.collection
105
95
  end
106
96
 
107
- it_behaves_like "an overridden collection at the class level"
97
+ it_behaves_like 'an overridden collection at the class level'
108
98
  end
109
99
 
110
- context "when overriding with a string" do
111
-
100
+ context 'when overriding with a string' do
112
101
  before do
113
- Band.store_in(collection: "artists")
102
+ Band.store_in(collection: 'artists')
114
103
  end
115
104
 
116
105
  after do
@@ -125,11 +114,10 @@ describe Mongoid::Clients do
125
114
  Band.collection
126
115
  end
127
116
 
128
- it_behaves_like "an overridden collection at the class level"
117
+ it_behaves_like 'an overridden collection at the class level'
129
118
  end
130
119
 
131
- context "when overriding with a symbol" do
132
-
120
+ context 'when overriding with a symbol' do
133
121
  before do
134
122
  Band.store_in(collection: :artists)
135
123
  end
@@ -146,97 +134,90 @@ describe Mongoid::Clients do
146
134
  Band.collection
147
135
  end
148
136
 
149
- it_behaves_like "an overridden collection at the class level"
137
+ it_behaves_like 'an overridden collection at the class level'
150
138
  end
151
139
  end
152
140
 
153
- context "when not overriding the default" do
154
-
141
+ context 'when not overriding the default' do
155
142
  let(:band) do
156
143
  Band.new
157
144
  end
158
145
 
159
- it "returns the collection for the model" do
146
+ it 'returns the collection for the model' do
160
147
  expect(band.collection).to be_a(Mongo::Collection)
161
148
  end
162
149
 
163
- it "sets the correct collection name" do
164
- expect(band.collection.name.to_s).to eq("bands")
150
+ it 'sets the correct collection name' do
151
+ expect(band.collection.name.to_s).to eq('bands')
165
152
  end
166
153
 
167
- context "when accessing from the class level" do
168
-
169
- it "returns the collection for the model" do
154
+ context 'when accessing from the class level' do
155
+ it 'returns the collection for the model' do
170
156
  expect(Band.collection).to be_a(Mongo::Collection)
171
157
  end
172
158
 
173
- it "sets the correct collection name" do
174
- expect(Band.collection.name.to_s).to eq("bands")
159
+ it 'sets the correct collection name' do
160
+ expect(Band.collection.name.to_s).to eq('bands')
175
161
  end
176
162
  end
177
163
  end
178
164
  end
179
165
 
180
- describe "#collection_name" do
181
-
182
- shared_examples_for "an overridden collection name at the class level" do
183
-
184
- context "when accessing from the instance" do
185
-
186
- it "returns the overridden value" do
166
+ describe '#collection_name' do
167
+ shared_examples_for 'an overridden collection name at the class level' do
168
+ context 'when accessing from the instance' do
169
+ it 'returns the overridden value' do
187
170
  expect(instance_collection_name).to eq(:artists)
188
171
  end
189
172
  end
190
173
 
191
- context "when accessing from the class level" do
192
-
193
- it "returns the overridden value" do
174
+ context 'when accessing from the class level' do
175
+ it 'returns the overridden value' do
194
176
  expect(class_collection_name).to eq(:artists)
195
177
  end
196
178
  end
197
179
  end
198
180
 
199
- context "when overriding the persistence options" do
200
-
181
+ context 'when overriding the persistence options' do
201
182
  let(:instance_collection_name) do
202
- Band.with(collection: "artists") do |klass|
183
+ Band.with(collection: 'artists') do |klass|
203
184
  klass.new.collection_name
204
185
  end
205
186
  end
206
187
 
207
188
  let(:class_collection_name) do
208
- Band.with(collection: "artists") do |klass|
189
+ Band.with(collection: 'artists') do |klass|
209
190
  klass.collection_name
210
191
  end
211
192
  end
212
193
 
213
- it_behaves_like "an overridden collection name at the class level"
194
+ it_behaves_like 'an overridden collection name at the class level'
214
195
 
215
196
  context 'when nesting #with calls' do
216
197
  let(:instance_collection_name) do
217
- Band.with(collection: "ignore") do |klass|
218
- Band.with(collection: "artists") do |klass|
198
+ Band.with(collection: 'ignore') do |_klass|
199
+ Band.with(collection: 'artists') do |klass|
219
200
  klass.new.collection_name
220
201
  end
221
202
  end
222
203
  end
223
204
 
224
205
  let(:class_collection_name) do
225
- Band.with(collection: "ignore") do |klass|
226
- Band.with(collection: "artists") do |klass|
206
+ Band.with(collection: 'ignore') do |_klass|
207
+ Band.with(collection: 'artists') do |klass|
227
208
  klass.collection_name
228
209
  end
229
210
  end
230
211
  end
231
212
 
232
- it_behaves_like "an overridden collection name at the class level"
213
+ it_behaves_like 'an overridden collection name at the class level'
233
214
  end
234
215
 
235
216
  context 'when outer #with call specifies the collection' do
236
217
  use_spec_mongoid_config
237
218
 
238
219
  let(:instance_collection_name) do
239
- Band.with(collection: "artists") do |klass|
220
+ Band.with(collection: 'artists') do |_klass|
240
221
  Band.with(client: :reports) do |klass|
241
222
  klass.new.collection_name
242
223
  end
@@ -244,22 +225,22 @@ describe Mongoid::Clients do
244
225
  end
245
226
 
246
227
  let(:class_collection_name) do
247
- Band.with(collection: "artists") do |klass|
228
+ Band.with(collection: 'artists') do |_klass|
248
229
  Band.with(client: :reports) do |klass|
249
230
  klass.collection_name
250
231
  end
251
232
  end
252
233
  end
253
234
 
254
- it_behaves_like "an overridden collection name at the class level"
235
+ it_behaves_like 'an overridden collection name at the class level'
255
236
  end
256
237
 
257
238
  context 'restores outer context in outer block' do
258
239
  use_spec_mongoid_config
259
240
 
260
241
  let(:instance_collection_name) do
261
- Band.with(collection: "artists") do |klass|
262
- Band.with(collection: "scratch") do |klass|
242
+ Band.with(collection: 'artists') do |klass|
243
+ Band.with(collection: 'scratch') do |klass|
263
244
  # nothing
264
245
  end
265
246
  klass.new.collection_name
@@ -267,45 +248,43 @@ describe Mongoid::Clients do
267
248
  end
268
249
 
269
250
  let(:class_collection_name) do
270
- Band.with(collection: "artists") do |klass|
271
- Band.with(collection: "scratch") do |klass|
251
+ Band.with(collection: 'artists') do |klass|
252
+ Band.with(collection: 'scratch') do |klass|
272
253
  # nothing
273
254
  end
274
255
  klass.collection_name
275
256
  end
276
257
  end
277
258
 
278
- it_behaves_like "an overridden collection name at the class level"
259
+ it_behaves_like 'an overridden collection name at the class level'
279
260
  end
280
261
  end
281
262
 
282
- context "when overriding store_in and persistence options" do
283
-
263
+ context 'when overriding store_in and persistence options' do
284
264
  let(:instance_collection_name) do
285
- Band.with(collection: "artists") do |klass|
265
+ Band.with(collection: 'artists') do |klass|
286
266
  klass.new.collection_name
287
267
  end
288
268
  end
289
269
 
290
270
  let(:class_collection_name) do
291
- Band.with(collection: "artists") do |klass|
271
+ Band.with(collection: 'artists') do |klass|
292
272
  klass.collection_name
293
273
  end
294
274
  end
295
275
 
296
276
  before do
297
- Band.store_in collection: "foo"
277
+ Band.store_in collection: 'foo'
298
278
  end
299
279
 
300
280
  after do
301
281
  Band.reset_storage_options!
302
282
  end
303
283
 
304
- it_behaves_like "an overridden collection name at the class level"
284
+ it_behaves_like 'an overridden collection name at the class level'
305
285
  end
306
286
 
307
- context "when overriding the default with store_in" do
308
-
287
+ context 'when overriding the default with store_in' do
309
288
  let(:instance_collection_name) do
310
289
  Band.new.collection_name
311
290
  end
@@ -318,100 +297,88 @@ describe Mongoid::Clients do
318
297
  Band.reset_storage_options!
319
298
  end
320
299
 
321
- context "when overriding with a proc" do
322
-
300
+ context 'when overriding with a proc' do
323
301
  before do
324
- Band.store_in(collection: ->{ "artists" })
302
+ Band.store_in(collection: -> { 'artists' })
325
303
  end
326
304
 
327
- it_behaves_like "an overridden collection name at the class level"
305
+ it_behaves_like 'an overridden collection name at the class level'
328
306
  end
329
307
 
330
- context "when overriding with a string" do
331
-
308
+ context 'when overriding with a string' do
332
309
  before do
333
- Band.store_in(collection: "artists")
310
+ Band.store_in(collection: 'artists')
334
311
  end
335
312
 
336
- it_behaves_like "an overridden collection name at the class level"
313
+ it_behaves_like 'an overridden collection name at the class level'
337
314
  end
338
315
 
339
- context "when overriding with a symbol" do
340
-
316
+ context 'when overriding with a symbol' do
341
317
  before do
342
318
  Band.store_in(collection: :artists)
343
319
  end
344
320
 
345
- it_behaves_like "an overridden collection name at the class level"
321
+ it_behaves_like 'an overridden collection name at the class level'
346
322
  end
347
323
  end
348
324
 
349
- context "when not overriding the default" do
350
-
325
+ context 'when not overriding the default' do
351
326
  let(:band) do
352
327
  Band.new
353
328
  end
354
329
 
355
- it "returns the pluralized model name" do
330
+ it 'returns the pluralized model name' do
356
331
  expect(band.collection_name).to eq(:bands)
357
332
  end
358
333
 
359
- context "when accessing from the class level" do
360
-
361
- it "returns the pluralized model name" do
334
+ context 'when accessing from the class level' do
335
+ it 'returns the pluralized model name' do
362
336
  expect(Band.collection_name).to eq(:bands)
363
337
  end
364
338
  end
365
339
  end
366
340
 
367
- context "when the model is a subclass" do
368
-
341
+ context 'when the model is a subclass' do
369
342
  let(:firefox) do
370
343
  Firefox.new
371
344
  end
372
345
 
373
- it "returns the root class pluralized model name" do
346
+ it 'returns the root class pluralized model name' do
374
347
  expect(firefox.collection_name).to eq(:canvases)
375
348
  end
376
349
 
377
- context "when accessing from the class level" do
378
-
379
- it "returns the root class pluralized model name" do
350
+ context 'when accessing from the class level' do
351
+ it 'returns the root class pluralized model name' do
380
352
  expect(Firefox.collection_name).to eq(:canvases)
381
353
  end
382
354
  end
383
355
  end
384
356
  end
385
357
 
386
- describe "#database_name" do
387
-
388
- shared_examples_for "an overridden database name" do
389
-
358
+ describe '#database_name' do
359
+ shared_examples_for 'an overridden database name' do
390
360
  after do
391
361
  class_mongo_client.close
392
362
  end
393
363
 
394
- context "when accessing from the instance" do
395
-
396
- it "returns the overridden value" do
364
+ context 'when accessing from the instance' do
365
+ it 'returns the overridden value' do
397
366
  expect(instance_database.name.to_s).to eq(database_id_alt)
398
367
  end
399
368
  end
400
369
 
401
- context "when accessing from the class level" do
402
-
403
- it "returns the overridden value" do
370
+ context 'when accessing from the class level' do
371
+ it 'returns the overridden value' do
404
372
  expect(class_database.name.to_s).to eq(database_id_alt)
405
373
  end
406
374
 
407
- it "client returns the overridden value" do
375
+ it 'client returns the overridden value' do
408
376
  expect(class_mongo_client.database.name).to eq(database_id_alt)
409
377
  end
410
378
  end
411
379
  end
412
380
 
413
- context "when overriding the persistence options" do
414
-
381
+ context 'when overriding the persistence options' do
415
382
  let(:instance_database) do
416
383
  Band.with(database: database_id_alt) do |klass|
417
384
  klass.new.mongo_client.database
@@ -430,11 +397,10 @@ describe Mongoid::Clients do
430
397
  end
431
398
  end
432
399
 
433
- it_behaves_like "an overridden database name"
400
+ it_behaves_like 'an overridden database name'
434
401
  end
435
402
 
436
- context "when overriding with store_in" do
437
-
403
+ context 'when overriding with store_in' do
438
404
  let(:instance_database) do
439
405
  Band.new.mongo_client.database
440
406
  end
@@ -456,11 +422,10 @@ describe Mongoid::Clients do
456
422
  class_mongo_client.close
457
423
  end
458
424
 
459
- it_behaves_like "an overridden database name"
425
+ it_behaves_like 'an overridden database name'
460
426
  end
461
427
 
462
- context "when overriding store_in and persistence options" do
463
-
428
+ context 'when overriding store_in and persistence options' do
464
429
  let(:instance_database) do
465
430
  Band.with(database: database_id_alt) do |klass|
466
431
  klass.new.mongo_client.database
@@ -480,7 +445,7 @@ describe Mongoid::Clients do
480
445
  end
481
446
 
482
447
  before do
483
- Band.store_in database: "foo"
448
+ Band.store_in database: 'foo'
484
449
  end
485
450
 
486
451
  after do
@@ -488,11 +453,10 @@ describe Mongoid::Clients do
488
453
  class_mongo_client.close
489
454
  end
490
455
 
491
- it_behaves_like "an overridden database name"
456
+ it_behaves_like 'an overridden database name'
492
457
  end
493
458
 
494
- context "when overriding using the client" do
495
-
459
+ context 'when overriding using the client' do
496
460
  let(:client_name) { :alternative }
497
461
 
498
462
  before do
@@ -503,8 +467,7 @@ describe Mongoid::Clients do
503
467
  Mongoid.clients.delete(client_name)
504
468
  end
505
469
 
506
- context "when overriding the persistence options" do
507
-
470
+ context 'when overriding the persistence options' do
508
471
  let(:instance_database) do
509
472
  Band.with(client: :alternative) do |klass|
510
473
  klass.new.mongo_client.database
@@ -523,11 +486,10 @@ describe Mongoid::Clients do
523
486
  end
524
487
  end
525
488
 
526
- it_behaves_like "an overridden database name"
489
+ it_behaves_like 'an overridden database name'
527
490
  end
528
491
 
529
- context "when overriding with store_in" do
530
-
492
+ context 'when overriding with store_in' do
531
493
  let(:instance_database) do
532
494
  Band.new.mongo_client.database
533
495
  end
@@ -549,15 +511,14 @@ describe Mongoid::Clients do
549
511
  class_mongo_client.close
550
512
  end
551
513
 
552
- it_behaves_like "an overridden database name"
514
+ it_behaves_like 'an overridden database name'
553
515
  end
554
516
  end
555
517
  end
556
518
 
557
- describe "#mongo_client" do
558
-
519
+ describe '#mongo_client' do
559
520
  let(:file) do
560
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
521
+ File.join(File.dirname(__FILE__), '..', 'config', 'mongoid.yml')
561
522
  end
562
523
 
563
524
  before do
@@ -566,10 +527,15 @@ describe Mongoid::Clients do
566
527
  Mongoid.clients[:default][:database] = database_id
567
528
  end
568
529
 
569
- context "when getting the default" do
570
-
530
+ context 'when getting the default' do
571
531
  let(:file) do
572
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
532
+ File.join(File.dirname(__FILE__), '..', 'config', 'mongoid.yml')
533
+ end
534
+ let!(:band) do
535
+ Band.new
536
+ end
537
+ let!(:mongo_client) do
538
+ band.mongo_client
573
539
  end
574
540
 
575
541
  before do
@@ -582,15 +548,7 @@ describe Mongoid::Clients do
582
548
  mongo_client.close
583
549
  end
584
550
 
585
- let!(:band) do
586
- Band.new
587
- end
588
-
589
- let!(:mongo_client) do
590
- band.mongo_client
591
- end
592
-
593
- it "returns the default client" do
551
+ it 'returns the default client' do
594
552
  expect(mongo_client.options[:database].to_s).to eq(database_id)
595
553
  end
596
554
 
@@ -598,13 +556,12 @@ describe Mongoid::Clients do
598
556
  expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
599
557
  end
600
558
 
601
- it "sets the app_name to the config value" do
559
+ it 'sets the app_name to the config value' do
602
560
  expect(mongo_client.options[:app_name]).to eq('testing')
603
561
  end
604
562
  end
605
563
 
606
- context "when no client exists with the key" do
607
-
564
+ context 'when no client exists with the key' do
608
565
  before(:all) do
609
566
  Band.store_in(client: :nonexistent)
610
567
  end
@@ -613,14 +570,14 @@ describe Mongoid::Clients do
613
570
  Band.new
614
571
  end
615
572
 
616
- it "raises an error" do
617
- expect {
573
+ it 'raises an error' do
574
+ expect do
618
575
  band.mongo_client
619
- }.to raise_error(Mongoid::Errors::NoClientConfig)
576
+ end.to raise_error(Mongoid::Errors::NoClientConfig)
620
577
  end
621
578
  end
622
579
 
623
- context "when getting a client by name" do
580
+ context 'when getting a client by name' do
624
581
  use_spec_mongoid_config
625
582
 
626
583
  before do
@@ -636,7 +593,7 @@ describe Mongoid::Clients do
636
593
  Band.new.mongo_client
637
594
  end
638
595
 
639
- it "uses the reports client" do
596
+ it 'uses the reports client' do
640
597
  expect(mongo_client.options[:database].to_s).to eq('reports')
641
598
  end
642
599
 
@@ -644,13 +601,12 @@ describe Mongoid::Clients do
644
601
  expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
645
602
  end
646
603
 
647
- it "sets the app_name to the config value" do
604
+ it 'sets the app_name to the config value' do
648
605
  expect(mongo_client.options[:app_name]).to eq('testing')
649
606
  end
650
607
  end
651
608
 
652
609
  context 'when the app_name is not set in the config' do
653
-
654
610
  before do
655
611
  Mongoid::Config.reset
656
612
  Mongoid.configure do |config|
@@ -668,10 +624,9 @@ describe Mongoid::Clients do
668
624
  end
669
625
  end
670
626
 
671
- describe ".mongo_client" do
672
-
627
+ describe '.mongo_client' do
673
628
  let(:file) do
674
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
629
+ File.join(File.dirname(__FILE__), '..', 'config', 'mongoid.yml')
675
630
  end
676
631
 
677
632
  before do
@@ -684,10 +639,12 @@ describe Mongoid::Clients do
684
639
  Band.reset_storage_options!
685
640
  end
686
641
 
687
- context "when getting the default" do
688
-
642
+ context 'when getting the default' do
689
643
  let(:file) do
690
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
644
+ File.join(File.dirname(__FILE__), '..', 'config', 'mongoid.yml')
645
+ end
646
+ let!(:mongo_client) do
647
+ Band.mongo_client
691
648
  end
692
649
 
693
650
  before do
@@ -697,11 +654,7 @@ describe Mongoid::Clients do
697
654
  Mongoid.clients[:default][:database] = database_id
698
655
  end
699
656
 
700
- let!(:mongo_client) do
701
- Band.mongo_client
702
- end
703
-
704
- it "returns the default client" do
657
+ it 'returns the default client' do
705
658
  expect(mongo_client.options[:database].to_s).to eq(database_id)
706
659
  end
707
660
 
@@ -709,50 +662,44 @@ describe Mongoid::Clients do
709
662
  expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
710
663
  end
711
664
 
712
- it "sets the app_name to the config value" do
665
+ it 'sets the app_name to the config value' do
713
666
  expect(mongo_client.options[:app_name]).to eq('testing')
714
667
  end
715
668
  end
716
669
 
717
- context "when no client exists with the key" do
718
-
670
+ context 'when no client exists with the key' do
719
671
  before(:all) do
720
672
  Band.store_in(client: :nonexistent)
721
673
  end
722
674
 
723
- it "raises an error" do
724
- expect {
675
+ it 'raises an error' do
676
+ expect do
725
677
  Band.mongo_client
726
- }.to raise_error(Mongoid::Errors::NoClientConfig)
678
+ end.to raise_error(Mongoid::Errors::NoClientConfig)
727
679
  end
728
680
  end
729
681
  end
730
682
 
731
- describe ".store_in" do
732
-
733
- context "when provided a non hash" do
734
-
735
- it "raises an error" do
736
- expect {
683
+ describe '.store_in' do
684
+ context 'when provided a non hash' do
685
+ it 'raises an error' do
686
+ expect do
737
687
  Band.store_in :artists
738
- }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
688
+ end.to raise_error(Mongoid::Errors::InvalidStorageOptions)
739
689
  end
740
690
  end
741
691
 
742
- context "when provided a hash" do
743
-
744
- context "when the hash is not valid" do
745
-
746
- it "raises an error" do
747
- expect {
748
- Band.store_in coll: "artists"
749
- }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
692
+ context 'when provided a hash' do
693
+ context 'when the hash is not valid' do
694
+ it 'raises an error' do
695
+ expect do
696
+ Band.store_in coll: 'artists'
697
+ end.to raise_error(Mongoid::Errors::InvalidStorageOptions)
750
698
  end
751
699
  end
752
700
  end
753
701
 
754
- context "when it is called on a subclass" do
755
-
702
+ context 'when it is called on a subclass' do
756
703
  let(:client) { StoreParent.collection.client }
757
704
  let(:parent) { StoreParent.create! }
758
705
  let(:child1) { StoreChild1.create! }
@@ -776,10 +723,8 @@ describe Mongoid::Clients do
776
723
  Object.send(:remove_const, :StoreChild2)
777
724
  end
778
725
 
779
- context "when it is not called on the parent" do
780
-
781
- context "when it is called on all subclasses" do
782
-
726
+ context 'when it is not called on the parent' do
727
+ context 'when it is called on all subclasses' do
783
728
  before do
784
729
  StoreChild1.store_in collection: :store_ones
785
730
  StoreChild2.store_in collection: :store_twos
@@ -790,21 +735,20 @@ describe Mongoid::Clients do
790
735
  let(:db_child1) { client['store_ones'].find.first }
791
736
  let(:db_child2) { client['store_twos'].find.first }
792
737
 
793
- it "stores the documents in the correct collections" do
794
- expect(db_parent).to eq({ "_id" => parent.id, "_type" => "StoreParent" })
795
- expect(db_child1).to eq({ "_id" => child1.id, "_type" => "StoreChild1" })
796
- expect(db_child2).to eq({ "_id" => child2.id, "_type" => "StoreChild2" })
738
+ it 'stores the documents in the correct collections' do
739
+ expect(db_parent).to eq({ '_id' => parent.id, '_type' => 'StoreParent' })
740
+ expect(db_child1).to eq({ '_id' => child1.id, '_type' => 'StoreChild1' })
741
+ expect(db_child2).to eq({ '_id' => child2.id, '_type' => 'StoreChild2' })
797
742
  end
798
743
 
799
- it "only queries from its own collections" do
744
+ it 'only queries from its own collections' do
800
745
  expect(StoreParent.count).to eq(1)
801
746
  expect(StoreChild1.count).to eq(1)
802
747
  expect(StoreChild2.count).to eq(1)
803
748
  end
804
749
  end
805
750
 
806
- context "when it is called on one of the subclasses" do
807
-
751
+ context 'when it is called on one of the subclasses' do
808
752
  before do
809
753
  StoreChild1.store_in collection: :store_ones
810
754
  [ parent, child1, child2 ]
@@ -814,13 +758,13 @@ describe Mongoid::Clients do
814
758
  let(:db_child1) { client['store_ones'].find.first }
815
759
  let(:db_child2) { client['store_parents'].find.to_a.last }
816
760
 
817
- it "stores the documents in the correct collections" do
818
- expect(db_parent).to eq({ "_id" => parent.id, "_type" => "StoreParent" })
819
- expect(db_child1).to eq({ "_id" => child1.id, "_type" => "StoreChild1" })
820
- expect(db_child2).to eq({ "_id" => child2.id, "_type" => "StoreChild2" })
761
+ it 'stores the documents in the correct collections' do
762
+ expect(db_parent).to eq({ '_id' => parent.id, '_type' => 'StoreParent' })
763
+ expect(db_child1).to eq({ '_id' => child1.id, '_type' => 'StoreChild1' })
764
+ expect(db_child2).to eq({ '_id' => child2.id, '_type' => 'StoreChild2' })
821
765
  end
822
766
 
823
- it "queries from its own collections" do
767
+ it 'queries from its own collections' do
824
768
  expect(StoreParent.count).to eq(2)
825
769
  expect(StoreChild1.count).to eq(1)
826
770
  expect(StoreChild2.count).to eq(1)
@@ -828,14 +772,12 @@ describe Mongoid::Clients do
828
772
  end
829
773
  end
830
774
 
831
- context "when it is called on the parent" do
832
-
775
+ context 'when it is called on the parent' do
833
776
  before do
834
777
  StoreParent.store_in collection: :st_parents
835
778
  end
836
779
 
837
- context "when it is called on all subclasses" do
838
-
780
+ context 'when it is called on all subclasses' do
839
781
  before do
840
782
  StoreChild1.store_in collection: :store_ones
841
783
  StoreChild2.store_in collection: :store_twos
@@ -846,15 +788,14 @@ describe Mongoid::Clients do
846
788
  let(:db_child1) { client['store_ones'].find.first }
847
789
  let(:db_child2) { client['store_twos'].find.first }
848
790
 
849
- it "stores the documents in the correct collections" do
850
- expect(db_parent).to eq({ "_id" => parent.id, "_type" => "StoreParent" })
851
- expect(db_child1).to eq({ "_id" => child1.id, "_type" => "StoreChild1" })
852
- expect(db_child2).to eq({ "_id" => child2.id, "_type" => "StoreChild2" })
791
+ it 'stores the documents in the correct collections' do
792
+ expect(db_parent).to eq({ '_id' => parent.id, '_type' => 'StoreParent' })
793
+ expect(db_child1).to eq({ '_id' => child1.id, '_type' => 'StoreChild1' })
794
+ expect(db_child2).to eq({ '_id' => child2.id, '_type' => 'StoreChild2' })
853
795
  end
854
796
  end
855
797
 
856
- context "when it is called on one of the subclasses" do
857
-
798
+ context 'when it is called on one of the subclasses' do
858
799
  before do
859
800
  StoreChild1.store_in collection: :store_ones
860
801
  [ parent, child1, child2 ]
@@ -864,20 +805,18 @@ describe Mongoid::Clients do
864
805
  let(:db_child1) { client['store_ones'].find.first }
865
806
  let(:db_child2) { client['st_parents'].find.to_a.last }
866
807
 
867
- it "stores the documents in the correct collections" do
868
- expect(db_parent).to eq({ "_id" => parent.id, "_type" => "StoreParent" })
869
- expect(db_child1).to eq({ "_id" => child1.id, "_type" => "StoreChild1" })
870
- expect(db_child2).to eq({ "_id" => child2.id, "_type" => "StoreChild2" })
808
+ it 'stores the documents in the correct collections' do
809
+ expect(db_parent).to eq({ '_id' => parent.id, '_type' => 'StoreParent' })
810
+ expect(db_child1).to eq({ '_id' => child1.id, '_type' => 'StoreChild1' })
811
+ expect(db_child2).to eq({ '_id' => child2.id, '_type' => 'StoreChild2' })
871
812
  end
872
813
  end
873
814
  end
874
815
  end
875
816
  end
876
817
 
877
- describe ".with" do
878
-
879
- context "when changing write concern options" do
880
-
818
+ describe '.with' do
819
+ context 'when changing write concern options' do
881
820
  let(:client_one) do
882
821
  Band.with(write: { w: 2 }) do |klass|
883
822
  klass.mongo_client
@@ -888,143 +827,130 @@ describe Mongoid::Clients do
888
827
  Band.mongo_client
889
828
  end
890
829
 
891
- it "does not carry over the options" do
892
- expect(client_one.write_concern).to_not eq(client_two.write_concern)
830
+ it 'does not carry over the options' do
831
+ expect(client_one.write_concern).not_to eq(client_two.write_concern)
893
832
  end
894
833
  end
895
834
 
896
- context "when sending operations to a different database" do
897
-
835
+ context 'when sending operations to a different database' do
898
836
  after do
899
837
  Band.with(database: database_id_alt) do |klass|
900
838
  klass.delete_all
901
839
  end
902
840
  end
903
841
 
904
- describe ".create!" do
905
-
842
+ describe '.create!' do
906
843
  let!(:band) do
907
844
  Band.with(database: database_id_alt) do |klass|
908
845
  klass.create!
909
846
  end
910
847
  end
911
848
 
912
- it "does not persist to the default database" do
913
- expect {
914
- Band.find(band.id)
915
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
849
+ let(:count) do
850
+ Band.with(database: database_id_alt) do |klass|
851
+ klass.count
852
+ end
916
853
  end
917
-
918
854
  let(:from_db) do
919
855
  Band.with(database: database_id_alt) do |klass|
920
856
  klass.find(band.id)
921
857
  end
922
858
  end
923
859
 
924
- it "persists to the specified database" do
925
- expect(from_db).to eq(band)
860
+ it 'does not persist to the default database' do
861
+ expect do
862
+ Band.find(band.id)
863
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
926
864
  end
927
865
 
928
- let(:count) do
929
- Band.with(database: database_id_alt) do |klass|
930
- klass.count
931
- end
866
+ it 'persists to the specified database' do
867
+ expect(from_db).to eq(band)
932
868
  end
933
869
 
934
- it "persists the correct number of documents" do
870
+ it 'persists the correct number of documents' do
935
871
  expect(count).to eq(1)
936
872
  end
937
873
  end
938
874
  end
939
875
 
940
- context "when sending operations to a different collection" do
941
-
942
- describe ".create!" do
943
-
876
+ context 'when sending operations to a different collection' do
877
+ describe '.create!' do
944
878
  let!(:band) do
945
- Band.with(collection: "artists") do |klass|
879
+ Band.with(collection: 'artists') do |klass|
946
880
  klass.create!
947
881
  end
948
882
  end
949
883
 
950
- it "does not persist to the default database" do
951
- expect {
952
- Band.find(band.id)
953
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
884
+ let(:count) do
885
+ Band.with(collection: 'artists') do |klass|
886
+ klass.count
887
+ end
954
888
  end
955
-
956
889
  let(:from_db) do
957
- Band.with(collection: "artists") do |klass|
890
+ Band.with(collection: 'artists') do |klass|
958
891
  klass.find(band.id)
959
892
  end
960
893
  end
961
894
 
962
- it "persists to the specified database" do
963
- expect(from_db).to eq(band)
895
+ it 'does not persist to the default database' do
896
+ expect do
897
+ Band.find(band.id)
898
+ end.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Band with id\(s\)/)
964
899
  end
965
900
 
966
- let(:count) do
967
- Band.with(collection: "artists") do |klass|
968
- klass.count
969
- end
901
+ it 'persists to the specified database' do
902
+ expect(from_db).to eq(band)
970
903
  end
971
904
 
972
- it "persists the correct number of documents" do
905
+ it 'persists the correct number of documents' do
973
906
  expect(count).to eq(1)
974
907
  end
975
908
  end
976
909
  end
977
910
 
978
- context "when sending operations with safe mode" do
979
-
980
- describe ".create" do
981
-
911
+ context 'when sending operations with safe mode' do
912
+ describe '.create' do
982
913
  before do
983
914
  Person.index({ ssn: 1 }, { unique: true })
984
915
  Person.create_indexes
985
- Person.create(ssn: "432-97-1111")
916
+ Person.create(ssn: '432-97-1111')
986
917
  end
987
918
 
988
919
  after do
989
920
  Person.collection.drop
990
921
  end
991
922
 
992
- context "when no error occurs" do
993
-
994
- it "inserts the document" do
923
+ context 'when no error occurs' do
924
+ it 'inserts the document' do
995
925
  expect(Person.count).to eq(1)
996
926
  end
997
927
  end
998
928
 
999
- context "when a mongodb error occurs" do
1000
-
1001
- it "bubbles up to the caller" do
1002
- expect {
1003
- Person.create(ssn: "432-97-1111")
1004
- }.to raise_error(Mongo::Error::OperationFailure)
929
+ context 'when a mongodb error occurs' do
930
+ it 'bubbles up to the caller' do
931
+ expect do
932
+ Person.create(ssn: '432-97-1111')
933
+ end.to raise_error(Mongo::Error::OperationFailure)
1005
934
  end
1006
935
  end
1007
936
  end
1008
937
 
1009
- describe ".create!" do
1010
-
938
+ describe '.create!' do
1011
939
  before do
1012
- Person.create!(ssn: "432-97-1112")
940
+ Person.create!(ssn: '432-97-1112')
1013
941
  end
1014
942
 
1015
943
  after do
1016
944
  Person.collection.drop
1017
945
  end
1018
946
 
1019
- context "when no error occurs" do
1020
-
1021
- it "inserts the document" do
947
+ context 'when no error occurs' do
948
+ it 'inserts the document' do
1022
949
  expect(Person.count).to eq(1)
1023
950
  end
1024
951
  end
1025
952
 
1026
- context "when a mongodb error occurs" do
1027
-
953
+ context 'when a mongodb error occurs' do
1028
954
  before do
1029
955
  Person.index({ ssn: 1 }, { unique: true })
1030
956
  Person.create_indexes
@@ -1034,33 +960,30 @@ describe Mongoid::Clients do
1034
960
  Person.collection.drop
1035
961
  end
1036
962
 
1037
- it "bubbles up to the caller" do
1038
- expect {
1039
- Person.create!(ssn: "432-97-1112")
1040
- }.to raise_error(Mongo::Error::OperationFailure)
963
+ it 'bubbles up to the caller' do
964
+ expect do
965
+ Person.create!(ssn: '432-97-1112')
966
+ end.to raise_error(Mongo::Error::OperationFailure)
1041
967
  end
1042
968
  end
1043
969
 
1044
- context "when a validation error occurs" do
1045
-
1046
- it "raises the validation error" do
1047
- expect {
1048
- Account.create!(name: "this name is way too long")
1049
- }.to raise_error(Mongoid::Errors::Validations)
970
+ context 'when a validation error occurs' do
971
+ it 'raises the validation error' do
972
+ expect do
973
+ Account.create!(name: 'this name is way too long')
974
+ end.to raise_error(Mongoid::Errors::Validations)
1050
975
  end
1051
976
  end
1052
977
  end
1053
978
 
1054
- describe ".save" do
1055
-
979
+ describe '.save' do
1056
980
  before do
1057
- Person.create!(ssn: "432-97-1113")
981
+ Person.create!(ssn: '432-97-1113')
1058
982
  end
1059
983
 
1060
- context "when a mongodb error occurs" do
1061
-
984
+ context 'when a mongodb error occurs' do
1062
985
  let(:person) do
1063
- Person.new(ssn: "432-97-1113")
986
+ Person.new(ssn: '432-97-1113')
1064
987
  end
1065
988
 
1066
989
  before do
@@ -1072,24 +995,22 @@ describe Mongoid::Clients do
1072
995
  Person.collection.drop
1073
996
  end
1074
997
 
1075
- it "bubbles up to the caller" do
1076
- expect {
998
+ it 'bubbles up to the caller' do
999
+ expect do
1077
1000
  person.save
1078
- }.to raise_error(Mongo::Error::OperationFailure)
1001
+ end.to raise_error(Mongo::Error::OperationFailure)
1079
1002
  end
1080
1003
  end
1081
1004
  end
1082
1005
 
1083
- describe ".save!" do
1084
-
1006
+ describe '.save!' do
1085
1007
  before do
1086
- Person.create!(ssn: "432-97-1114")
1008
+ Person.create!(ssn: '432-97-1114')
1087
1009
  end
1088
1010
 
1089
- context "when a mongodb error occurs" do
1090
-
1011
+ context 'when a mongodb error occurs' do
1091
1012
  let(:person) do
1092
- Person.new(ssn: "432-97-1114")
1013
+ Person.new(ssn: '432-97-1114')
1093
1014
  end
1094
1015
 
1095
1016
  before do
@@ -1101,23 +1022,22 @@ describe Mongoid::Clients do
1101
1022
  Person.collection.drop
1102
1023
  end
1103
1024
 
1104
- it "bubbles up to the caller" do
1105
- expect {
1025
+ it 'bubbles up to the caller' do
1026
+ expect do
1106
1027
  person.save!
1107
- }.to raise_error(Mongo::Error::OperationFailure)
1028
+ end.to raise_error(Mongo::Error::OperationFailure)
1108
1029
  end
1109
1030
  end
1110
1031
 
1111
- context "when a validation error occurs" do
1112
-
1032
+ context 'when a validation error occurs' do
1113
1033
  let(:account) do
1114
- Account.new(name: "this name is way too long")
1034
+ Account.new(name: 'this name is way too long')
1115
1035
  end
1116
1036
 
1117
- it "raises the validation error" do
1118
- expect {
1037
+ it 'raises the validation error' do
1038
+ expect do
1119
1039
  account.save!
1120
- }.to raise_error(Mongoid::Errors::Validations)
1040
+ end.to raise_error(Mongoid::Errors::Validations)
1121
1041
  end
1122
1042
  end
1123
1043
  end
@@ -1126,7 +1046,7 @@ describe Mongoid::Clients do
1126
1046
  context 'when requesting named client' do
1127
1047
  let(:secondary_client) do
1128
1048
  double(Mongo::Client).tap do |client|
1129
- allow(client).to receive(:cluster).and_return(double("cluster"))
1049
+ allow(client).to receive(:cluster).and_return(double('cluster'))
1130
1050
  end
1131
1051
  end
1132
1052
 
@@ -1157,7 +1077,7 @@ describe Mongoid::Clients do
1157
1077
  require_mri
1158
1078
 
1159
1079
  let(:first_band) do
1160
- Band.create!(name: "The Beatles")
1080
+ Band.create!(name: 'The Beatles')
1161
1081
  end
1162
1082
 
1163
1083
  let(:second_band) do
@@ -1174,23 +1094,19 @@ describe Mongoid::Clients do
1174
1094
  end
1175
1095
  expect(Symbol.all_symbols.size).to be <= initial_symbols_count
1176
1096
  end
1177
-
1178
1097
  end
1179
-
1180
1098
  end
1181
1099
 
1182
- context "when overriding the default database" do
1183
-
1100
+ context 'when overriding the default database' do
1184
1101
  let(:file) do
1185
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
1102
+ File.join(File.dirname(__FILE__), '..', 'config', 'mongoid.yml')
1186
1103
  end
1187
1104
 
1188
1105
  before do
1189
1106
  Mongoid::Config.load!(file, :test)
1190
1107
  end
1191
1108
 
1192
- context "when the override is global" do
1193
-
1109
+ context 'when the override is global' do
1194
1110
  before do
1195
1111
  Mongoid.override_database(:mongoid_optional)
1196
1112
  end
@@ -1202,12 +1118,12 @@ describe Mongoid::Clients do
1202
1118
  end
1203
1119
 
1204
1120
  let!(:band) do
1205
- Band.create!(name: "Tool")
1121
+ Band.create!(name: 'Tool')
1206
1122
  end
1207
1123
 
1208
- it "persists to the overridden database" do
1124
+ it 'persists to the overridden database' do
1209
1125
  Band.mongo_client.with(database: :mongoid_optional) do |sess|
1210
- expect(sess[:bands].find(name: "Tool")).to_not be_nil
1126
+ expect(sess[:bands].find(name: 'Tool')).not_to be_nil
1211
1127
  end
1212
1128
  end
1213
1129
 
@@ -1217,8 +1133,7 @@ describe Mongoid::Clients do
1217
1133
  end
1218
1134
  end
1219
1135
 
1220
- context "#disconnect" do
1221
-
1136
+ describe '#disconnect' do
1222
1137
  let(:clients) do
1223
1138
  Mongoid::Clients.clients.values
1224
1139
  end
@@ -1227,20 +1142,17 @@ describe Mongoid::Clients do
1227
1142
  Band.all.entries
1228
1143
  end
1229
1144
 
1230
- it "disconnects from all active clients" do
1231
- clients.each do |client|
1232
- expect(client).to receive(:close).and_call_original
1233
- end
1145
+ it 'disconnects from all active clients' do
1146
+ expect(clients).to all(receive(:close).and_call_original)
1234
1147
  Mongoid::Clients.disconnect
1235
1148
  end
1236
1149
 
1237
- it "returns true" do
1150
+ it 'returns true' do
1238
1151
  expect(Mongoid::Clients.disconnect).to eq(true)
1239
1152
  end
1240
1153
  end
1241
1154
 
1242
- context "#reconnect" do
1243
-
1155
+ describe '#reconnect' do
1244
1156
  let(:clients) do
1245
1157
  Mongoid::Clients.clients.values
1246
1158
  end
@@ -1249,14 +1161,12 @@ describe Mongoid::Clients do
1249
1161
  Band.all.entries
1250
1162
  end
1251
1163
 
1252
- it "reconnects all active clients" do
1253
- clients.each do |client|
1254
- expect(client).to receive(:reconnect).and_call_original
1255
- end
1164
+ it 'reconnects all active clients' do
1165
+ expect(clients).to all(receive(:reconnect).and_call_original)
1256
1166
  Mongoid::Clients.reconnect
1257
1167
  end
1258
1168
 
1259
- it "returns true" do
1169
+ it 'returns true' do
1260
1170
  expect(Mongoid::Clients.reconnect).to eq(true)
1261
1171
  end
1262
1172
  end