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,10 +1,8 @@
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::Document do
7
-
8
6
  let(:klass) do
9
7
  Person
10
8
  end
@@ -13,19 +11,17 @@ describe Mongoid::Document do
13
11
  Person.new
14
12
  end
15
13
 
16
- it "defines a _destroy method" do
14
+ it 'defines a _destroy method' do
17
15
  expect(Person.new).to respond_to(:_destroy)
18
16
  end
19
17
 
20
- describe "#_destroy" do
21
-
22
- it "default to false" do
18
+ describe '#_destroy' do
19
+ it 'default to false' do
23
20
  expect(Person.new._destroy).to be false
24
21
  end
25
22
  end
26
23
 
27
- describe ".included" do
28
-
24
+ describe '.included' do
29
25
  let(:models) do
30
26
  Mongoid.models
31
27
  end
@@ -37,75 +33,72 @@ describe Mongoid::Document do
37
33
  let(:new_klass) do
38
34
  Class.new do
39
35
  class << self; attr_accessor :name; end
40
- end.tap{|new_klass| new_klass.name = new_klass_name}
36
+ end.tap { |new_klass| new_klass.name = new_klass_name }
41
37
  end
42
38
 
43
39
  let(:new_model) do
44
40
  new_klass.tap do
45
- new_klass.send(:include, ::Mongoid::Document)
41
+ new_klass.send(:include, Mongoid::Document)
46
42
  end
47
43
  end
48
44
 
49
45
  let(:twice_a_new_model) do
50
46
  new_klass.tap do
51
- 2.times{ new_klass.send(:include, ::Mongoid::Document) }
47
+ 2.times { new_klass.send(:include, Mongoid::Document) }
52
48
  end
53
49
  end
54
50
 
55
- context "when Document has been included in a model" do
56
- it ".models should include that model" do
51
+ context 'when Document has been included in a model' do
52
+ it '.models should include that model' do
57
53
  expect(models).to include(klass)
58
54
  end
59
55
  end
60
56
 
61
- context "before Document has been included" do
62
- it ".models should *not* include that model" do
63
- expect(models).to_not include(new_klass)
57
+ context 'before Document has been included' do
58
+ it '.models should *not* include that model' do
59
+ expect(models).not_to include(new_klass)
64
60
  end
65
61
  end
66
62
 
67
- context "after Document has been included" do
68
- it ".models should include that model" do
63
+ context 'after Document has been included' do
64
+ it '.models should include that model' do
69
65
  expect(models).to include(new_model)
70
66
  end
71
67
  end
72
68
 
73
- context "after Document has been included multiple times" do
74
- it ".models should include that model just once" do
75
- expect(models.count(twice_a_new_model)).to be_eql(1)
69
+ context 'after Document has been included multiple times' do
70
+ it '.models should include that model just once' do
71
+ expect(models.count(twice_a_new_model)).to eql(1)
76
72
  end
77
73
  end
78
74
  end
79
75
 
80
- describe "._types" do
81
-
82
- context "when the document is subclassed" do
83
-
76
+ describe '._types' do
77
+ context 'when the document is subclassed' do
84
78
  let(:types) do
85
79
  Person._types
86
80
  end
87
81
 
88
- it "includes the root" do
89
- expect(types).to include("Person")
82
+ it 'includes the root' do
83
+ expect(types).to include('Person')
90
84
  end
91
85
 
92
- it "includes the subclasses" do
93
- expect(types).to include("Doctor")
86
+ it 'includes the subclasses' do
87
+ expect(types).to include('Doctor')
94
88
  end
95
89
  end
96
90
 
97
- context "when the document is not subclassed" do
98
-
91
+ context 'when the document is not subclassed' do
99
92
  let(:types) do
100
93
  Kangaroo._types
101
94
  end
102
95
 
103
- it "returns the document" do
104
- expect(types).to eq([ "Kangaroo" ])
96
+ it 'returns the document' do
97
+ expect(types).to eq([ 'Kangaroo' ])
105
98
  end
106
99
  end
107
100
 
108
- context "when ._types had been called before class declaration" do
101
+ context 'when ._types had been called before class declaration' do
109
102
  let(:descendant) do
110
103
  Class.new(Person)
111
104
  end
@@ -115,168 +108,154 @@ describe Mongoid::Document do
115
108
  descendant
116
109
  end
117
110
 
118
- it "should clear descendants' cache" do
111
+ it "clears descendants' cache" do
119
112
  expect(Person._types).to include(descendant.discriminator_value)
120
113
  end
121
114
  end
122
115
  end
123
116
 
124
- describe "._mongoid_clear_types" do
125
-
126
- context "when changing the discriminator_value" do
127
-
117
+ describe '._mongoid_clear_types' do
118
+ context 'when changing the discriminator_value' do
128
119
  before do
129
120
  Kangaroo._types
130
- Kangaroo.discriminator_value = "dvalue"
121
+ Kangaroo.discriminator_value = 'dvalue'
131
122
  end
132
123
 
133
124
  after do
134
125
  Kangaroo.discriminator_value = nil
135
126
  end
136
127
 
137
- it "has the correct _types" do
138
- expect(Kangaroo._types).to eq(["dvalue"])
128
+ it 'has the correct _types' do
129
+ expect(Kangaroo._types).to eq([ 'dvalue' ])
139
130
  end
140
131
  end
141
132
 
142
- context "when changing the discriminator_value in child" do
143
-
133
+ context 'when changing the discriminator_value in child' do
144
134
  before do
145
135
  Shape._types
146
- Circle.discriminator_value = "dvalue"
136
+ Circle.discriminator_value = 'dvalue'
147
137
  end
148
138
 
149
139
  after do
150
140
  Circle.discriminator_value = nil
151
141
  end
152
142
 
153
- it "has the correct _types" do
154
- expect(Circle._types).to eq(["dvalue"])
143
+ it 'has the correct _types' do
144
+ expect(Circle._types).to eq([ 'dvalue' ])
155
145
  end
156
146
 
157
- it "has the new Circle discriminator value" do
158
- expect(Shape._types).to include("dvalue")
147
+ it 'has the new Circle discriminator value' do
148
+ expect(Shape._types).to include('dvalue')
159
149
  end
160
150
 
161
151
  it "doesn't have the old Circle discriminator value" do
162
- expect(Shape._types).to_not include("Cirlce")
152
+ expect(Shape._types).not_to include('Cirlce')
163
153
  end
164
154
  end
165
155
  end
166
156
 
167
- describe "#attributes" do
168
-
157
+ describe '#attributes' do
169
158
  let!(:person) do
170
- Person.create!(title: "Sir")
159
+ Person.create!(title: 'Sir')
171
160
  end
172
161
 
173
- it "returns the attributes with indifferent access" do
174
- expect(person[:title]).to eq("Sir")
162
+ it 'returns the attributes with indifferent access' do
163
+ expect(person[:title]).to eq('Sir')
175
164
  end
176
165
 
177
- context "when instantiating a new document" do
178
- it "returns a Hash" do
166
+ context 'when instantiating a new document' do
167
+ it 'returns a Hash' do
179
168
  expect(person.attributes.class).to eq(Hash)
180
169
  end
181
170
  end
182
171
 
183
- context "when retrieving a document from the database" do
184
-
172
+ context 'when retrieving a document from the database' do
185
173
  let(:from_db) { Person.first }
186
174
 
187
- it "returns a Hash" do
175
+ it 'returns a Hash' do
188
176
  expect(from_db.attributes.class).to eq(Hash)
189
177
  end
190
178
  end
191
179
  end
192
180
 
193
- describe "#identity" do
194
-
181
+ describe '#identity' do
195
182
  let(:person) do
196
183
  Person.new
197
184
  end
198
185
 
199
- it "returns a [doc.class, doc.id] array" do
200
- expect(person.identity).to eq([person.class, person.id])
186
+ it 'returns a [doc.class, doc.id] array' do
187
+ expect(person.identity).to eq([ person.class, person.id ])
201
188
  end
202
189
  end
203
190
 
204
- describe "#hash" do
205
-
191
+ describe '#hash' do
206
192
  let(:person) do
207
193
  Person.new
208
194
  end
209
195
 
210
- it "returns the identity hash" do
196
+ it 'returns the identity hash' do
211
197
  expect(person.hash).to eq(person.identity.hash)
212
198
  end
213
199
  end
214
200
 
215
- describe "#initialize" do
216
-
201
+ describe '#initialize' do
217
202
  let(:person) do
218
- Person.new(title: "Sir")
203
+ Person.new(title: 'Sir')
219
204
  end
220
205
 
221
- it "sets persisted to false" do
222
- expect(person).to_not be_persisted
206
+ it 'sets persisted to false' do
207
+ expect(person).not_to be_persisted
223
208
  end
224
209
 
225
- it "creates an id for the document" do
210
+ it 'creates an id for the document' do
226
211
  expect(person.id).to be_a(BSON::ObjectId)
227
212
  end
228
213
 
229
- it "sets the attributes" do
230
- expect(person.title).to eq("Sir")
214
+ it 'sets the attributes' do
215
+ expect(person.title).to eq('Sir')
231
216
  end
232
217
 
233
- context "when the model has a default scope" do
234
-
235
- context "when the default scope is settable" do
236
-
218
+ context 'when the model has a default scope' do
219
+ context 'when the default scope is settable' do
237
220
  let(:sound) do
238
221
  Sound.new
239
222
  end
240
223
 
241
- it "sets the default scoping on the model" do
224
+ it 'sets the default scoping on the model' do
242
225
  expect(sound).to be_active
243
226
  end
244
227
  end
245
228
 
246
- context "when the default scope is not settable" do
247
-
229
+ context 'when the default scope is not settable' do
248
230
  let(:audio) do
249
231
  Audio.new
250
232
  end
251
233
 
252
- it "does not set the default scoping" do
234
+ it 'does not set the default scoping' do
253
235
  expect(audio.attributes.except('_id')).to be_empty
254
236
  end
255
237
  end
256
238
  end
257
239
 
258
- context "when accessing a relation from an overridden setter" do
259
-
240
+ context 'when accessing a relation from an overridden setter' do
260
241
  let(:doctor) do
261
- Doctor.new(specialty: "surgery")
242
+ Doctor.new(specialty: 'surgery')
262
243
  end
263
244
 
264
- it "allows access to the relation" do
245
+ it 'allows access to the relation' do
265
246
  expect(doctor.users.first).to be_a(User)
266
247
  end
267
248
 
268
- it "properly allows super calls" do
269
- expect(doctor.specialty).to eq("surgery")
249
+ it 'properly allows super calls' do
250
+ expect(doctor.specialty).to eq('surgery')
270
251
  end
271
252
  end
272
253
 
273
- context "when initialize callbacks are defined" do
274
-
275
- context "when accessing attributes" do
276
-
254
+ context 'when initialize callbacks are defined' do
255
+ context 'when accessing attributes' do
277
256
  before do
278
257
  Person.set_callback :initialize, :after do |doc|
279
- doc.title = "Madam"
258
+ doc.title = 'Madam'
280
259
  end
281
260
  end
282
261
 
@@ -284,20 +263,19 @@ describe Mongoid::Document do
284
263
  Person.reset_callbacks(:initialize)
285
264
  end
286
265
 
287
- it "runs the callbacks" do
288
- expect(person.title).to eq("Madam")
266
+ it 'runs the callbacks' do
267
+ expect(person.title).to eq('Madam')
289
268
  end
290
269
  end
291
270
 
292
- context "when accessing relations" do
293
-
271
+ context 'when accessing relations' do
294
272
  let(:person) do
295
273
  Person.new(game: Game.new)
296
274
  end
297
275
 
298
276
  before do
299
277
  Person.after_initialize do
300
- self.game.name = "Ms. Pacman"
278
+ game.name = 'Ms. Pacman'
301
279
  end
302
280
  end
303
281
 
@@ -305,207 +283,192 @@ describe Mongoid::Document do
305
283
  Person.reset_callbacks(:initialize)
306
284
  end
307
285
 
308
- it "runs the callbacks" do
309
- expect(person.game.name).to eq("Ms. Pacman")
286
+ it 'runs the callbacks' do
287
+ expect(person.game.name).to eq('Ms. Pacman')
310
288
  end
311
289
  end
312
290
  end
313
291
 
314
- context "when defaults are defined" do
315
-
316
- it "sets the default values" do
292
+ context 'when defaults are defined' do
293
+ it 'sets the default values' do
317
294
  expect(person.age).to eq(100)
318
295
  end
319
296
  end
320
297
 
321
- context "when a block is provided" do
322
-
298
+ context 'when a block is provided' do
323
299
  let(:person) do
324
300
  Person.new do |doc|
325
- doc.title = "King"
301
+ doc.title = 'King'
326
302
  end
327
303
  end
328
304
 
329
- it "yields to the block" do
330
- expect(person.title).to eq("King")
305
+ it 'yields to the block' do
306
+ expect(person.title).to eq('King')
331
307
  end
332
308
  end
333
309
  end
334
310
 
335
- describe ".instantiate" do
336
-
337
- context "when passing a block" do
338
-
311
+ describe '.instantiate' do
312
+ context 'when passing a block' do
339
313
  let(:id) do
340
314
  BSON::ObjectId.new
341
315
  end
342
316
 
343
317
  let(:document) do
344
- Band.instantiate("_id" => id, "name" => "Depeche Mode") do |band|
318
+ Band.instantiate('_id' => id, 'name' => 'Depeche Mode') do |band|
345
319
  band.likes = 1000
346
320
  end
347
321
  end
348
322
 
349
- it "yields to the block" do
323
+ it 'yields to the block' do
350
324
  expect(document.likes).to eq(1000)
351
325
  end
352
326
  end
353
327
 
354
- context "when an id exists" do
355
-
328
+ context 'when an id exists' do
356
329
  let(:id) do
357
330
  BSON::ObjectId.new
358
331
  end
359
332
 
360
333
  let!(:person) do
361
- Person.instantiate("_id" => id, "title" => "Sir")
334
+ Person.instantiate('_id' => id, 'title' => 'Sir')
362
335
  end
363
336
 
364
- it "sets the attributes" do
365
- expect(person.title).to eq("Sir")
337
+ it 'sets the attributes' do
338
+ expect(person.title).to eq('Sir')
366
339
  end
367
340
 
368
- it "sets persisted to true" do
341
+ it 'sets persisted to true' do
369
342
  expect(person).to be_persisted
370
343
  end
371
344
  end
372
345
 
373
- context "when attributes are nil" do
374
-
346
+ context 'when attributes are nil' do
375
347
  let(:person) do
376
348
  Person.instantiate
377
349
  end
378
350
 
379
- it "creates a new document" do
351
+ it 'creates a new document' do
380
352
  expect(person).to be_a(Person)
381
353
  end
382
354
  end
383
355
  end
384
356
 
385
- describe "#model_name" do
386
-
357
+ describe '#model_name' do
387
358
  let(:person) do
388
359
  Person.new
389
360
  end
390
361
 
391
- it "returns the class model name" do
392
- expect(person.model_name).to eq("Person")
362
+ it 'returns the class model name' do
363
+ expect(person.model_name).to eq('Person')
393
364
  end
394
365
  end
395
366
 
396
- describe "#raw_attributes" do
397
-
367
+ describe '#raw_attributes' do
398
368
  let(:person) do
399
- Person.new(title: "Sir")
369
+ Person.new(title: 'Sir')
400
370
  end
401
371
 
402
- it "returns the internal attributes" do
403
- expect(person.raw_attributes["title"]).to eq("Sir")
372
+ it 'returns the internal attributes' do
373
+ expect(person.raw_attributes['title']).to eq('Sir')
404
374
  end
405
375
  end
406
376
 
407
- describe "#as_json" do
408
-
377
+ describe '#as_json' do
409
378
  let!(:person) do
410
- Person.new(title: "Sir")
379
+ Person.new(title: 'Sir')
411
380
  end
412
381
 
413
- context "when no options are provided" do
414
-
415
- it "does not apply any options" do
416
- expect(person.as_json["title"]).to eq("Sir")
417
- expect(person.as_json["age"]).to eq(100)
382
+ context 'when no options are provided' do
383
+ it 'does not apply any options' do
384
+ expect(person.as_json['title']).to eq('Sir')
385
+ expect(person.as_json['age']).to eq(100)
418
386
  end
419
387
 
420
- context "when options for the super method are provided" do
421
-
388
+ context 'when options for the super method are provided' do
422
389
  let(:options) do
423
390
  { only: :title }
424
391
  end
425
392
 
426
- it "passes the options through to the super method" do
427
- expect(person.as_json(options)["title"]).to eq("Sir")
428
- expect(person.as_json(options).keys).not_to include("age")
393
+ it 'passes the options through to the super method' do
394
+ expect(person.as_json(options)['title']).to eq('Sir')
395
+ expect(person.as_json(options).keys).not_to include('age')
429
396
  end
430
397
  end
431
398
  end
432
399
  end
433
400
 
434
- describe "#as_document" do
435
-
401
+ describe '#as_document' do
436
402
  let!(:person) do
437
- Person.new(title: "Sir")
403
+ Person.new(title: 'Sir')
438
404
  end
439
405
 
440
406
  let!(:address) do
441
- person.addresses.build(street: "Upper")
407
+ person.addresses.build(street: 'Upper')
442
408
  end
443
409
 
444
410
  let!(:name) do
445
- person.build_name(first_name: "James")
411
+ person.build_name(first_name: 'James')
446
412
  end
447
413
 
448
414
  let!(:location) do
449
- address.locations.build(name: "Home")
415
+ address.locations.build(name: 'Home')
450
416
  end
451
417
 
452
- it "includes embeds one attributes" do
453
- expect(person.as_document).to have_key("name")
418
+ it 'includes embeds one attributes' do
419
+ expect(person.as_document).to have_key('name')
454
420
  end
455
421
 
456
- it "includes embeds one attributes as a symbol" do
422
+ it 'includes embeds one attributes as a symbol' do
457
423
  expect(person.as_document).to have_key(:name)
458
424
  end
459
425
 
460
- it "includes embeds many attributes" do
461
- expect(person.as_document).to have_key("addresses")
426
+ it 'includes embeds many attributes' do
427
+ expect(person.as_document).to have_key('addresses')
462
428
  end
463
429
 
464
- it "includes embeds many attributes as a symbol" do
430
+ it 'includes embeds many attributes as a symbol' do
465
431
  expect(person.as_document).to have_key(:addresses)
466
432
  end
467
433
 
468
- it "includes second level embeds many attributes" do
469
- expect(person.as_document["addresses"].first).to have_key("locations")
434
+ it 'includes second level embeds many attributes' do
435
+ expect(person.as_document['addresses'].first).to have_key('locations')
470
436
  end
471
437
 
472
- it "includes second level embeds many attributes as a symbol" do
473
- expect(person.as_document["addresses"].first).to have_key(:locations)
438
+ it 'includes second level embeds many attributes as a symbol' do
439
+ expect(person.as_document['addresses'].first).to have_key(:locations)
474
440
  end
475
441
 
476
- context "with relation define store_as option in embeded_many" do
477
-
442
+ context 'with relation define store_as option in embeded_many' do
478
443
  let!(:phone) do
479
444
  person.phones.build(number: '+33123456789')
480
445
  end
481
446
 
482
447
  it 'includes the store_as key association' do
483
- expect(person.as_document).to have_key("mobile_phones")
448
+ expect(person.as_document).to have_key('mobile_phones')
484
449
  end
485
450
 
486
451
  it 'includes the store_as key association as a symbol' do
487
452
  expect(person.as_document).to have_key(:mobile_phones)
488
453
  end
489
454
 
490
- it 'should not include the key of association' do
491
- expect(person.as_document).to_not have_key("phones")
455
+ it 'does not include the key of association' do
456
+ expect(person.as_document).not_to have_key('phones')
492
457
  end
493
458
  end
494
459
 
495
- context "when removing an embedded document" do
496
-
460
+ context 'when removing an embedded document' do
497
461
  before do
498
462
  person.save!
499
463
  person.addresses.delete(address)
500
464
  end
501
465
 
502
- it "does not include the document in the hash" do
503
- expect(person.as_document).to_not have_key("addresses")
466
+ it 'does not include the document in the hash' do
467
+ expect(person.as_document).not_to have_key('addresses')
504
468
  end
505
469
  end
506
470
 
507
- context "when an embedded relation has been set to nil" do
508
-
471
+ context 'when an embedded relation has been set to nil' do
509
472
  before do
510
473
  # Save the doc, then set an embeds_one relation to nil
511
474
  person.save!
@@ -513,203 +476,182 @@ describe Mongoid::Document do
513
476
  person.save!
514
477
  end
515
478
 
516
- it "does not include the document in the hash" do
517
- expect(person.as_document).to_not have_key("name")
479
+ it 'does not include the document in the hash' do
480
+ expect(person.as_document).not_to have_key('name')
518
481
  end
519
482
  end
520
483
  end
521
484
 
522
- describe "#to_key" do
523
-
524
- context "when the document is new" do
525
-
485
+ describe '#to_key' do
486
+ context 'when the document is new' do
526
487
  let(:person) do
527
488
  Person.new
528
489
  end
529
490
 
530
- it "returns nil" do
491
+ it 'returns nil' do
531
492
  expect(person.to_key).to be_nil
532
493
  end
533
494
  end
534
495
 
535
- context "when the document is not new" do
536
-
496
+ context 'when the document is not new' do
537
497
  let(:person) do
538
498
  Person.create!
539
499
  end
540
500
 
541
- it "returns the id in an array" do
501
+ it 'returns the id in an array' do
542
502
  expect(person.to_key).to eq([ person.id.to_s ])
543
503
  end
544
504
 
545
- it "can query using the key" do
505
+ it 'can query using the key' do
546
506
  expect(person.id).to eq Person.find(person.to_key).first.id
547
507
  end
548
508
  end
549
509
 
550
- context "when the document is destroyed" do
551
-
510
+ context 'when the document is destroyed' do
552
511
  let(:person) do
553
- Person.instantiate("_id" => BSON::ObjectId.new).tap do |peep|
512
+ Person.instantiate('_id' => BSON::ObjectId.new).tap do |peep|
554
513
  peep.destroyed = true
555
514
  end
556
515
  end
557
516
 
558
- it "returns the id in an array" do
517
+ it 'returns the id in an array' do
559
518
  expect(person.to_key).to eq([ person.id.to_s ])
560
519
  end
561
520
  end
562
521
  end
563
522
 
564
- describe "#to_param" do
565
-
566
- context "when the document is new" do
567
-
523
+ describe '#to_param' do
524
+ context 'when the document is new' do
568
525
  let(:person) do
569
526
  Person.new
570
527
  end
571
528
 
572
- it "returns nil" do
529
+ it 'returns nil' do
573
530
  expect(person.to_param).to be_nil
574
531
  end
575
532
  end
576
533
 
577
- context "when the document is not new" do
578
-
534
+ context 'when the document is not new' do
579
535
  let(:person) do
580
- Person.instantiate("_id" => BSON::ObjectId.new)
536
+ Person.instantiate('_id' => BSON::ObjectId.new)
581
537
  end
582
538
 
583
- it "returns the id as a string" do
539
+ it 'returns the id as a string' do
584
540
  expect(person.to_param).to eq(person.id.to_s)
585
541
  end
586
542
  end
587
543
  end
588
544
 
589
- describe "#frozen?" do
590
-
545
+ describe '#frozen?' do
591
546
  let(:person) do
592
547
  Person.new
593
548
  end
594
549
 
595
- context "when attributes are not frozen" do
596
-
597
- it "return false" do
598
- expect(person).to_not be_frozen
599
- expect {
600
- person.title = "something"
601
- }.to_not raise_error
550
+ context 'when attributes are not frozen' do
551
+ it 'return false' do
552
+ expect(person).not_to be_frozen
553
+ expect do
554
+ person.title = 'something'
555
+ end.not_to raise_error
602
556
  end
603
557
  end
604
558
 
605
- context "when attributes are frozen" do
559
+ context 'when attributes are frozen' do
606
560
  before do
607
561
  person.raw_attributes.freeze
608
562
  end
609
563
 
610
- it "return true" do
564
+ it 'return true' do
611
565
  expect(person).to be_frozen
612
566
  end
613
567
  end
614
568
  end
615
569
 
616
- describe "#freeze" do
617
-
570
+ describe '#freeze' do
618
571
  let(:person) do
619
572
  Person.new
620
573
  end
621
574
 
622
- context "when freezing the model" do
623
-
624
- context "when not frozen" do
625
-
626
- it "freezes attributes" do
575
+ context 'when freezing the model' do
576
+ context 'when not frozen' do
577
+ it 'freezes attributes' do
627
578
  expect(person.freeze).to eq(person)
628
- expect { person.title = "something" }.to raise_error(RuntimeError)
579
+ expect { person.title = 'something' }.to raise_error(RuntimeError)
629
580
  end
630
581
  end
631
582
 
632
- context "when frozen" do
633
-
583
+ context 'when frozen' do
634
584
  before do
635
585
  person.raw_attributes.freeze
636
586
  end
637
587
 
638
- it "keeps things frozen" do
588
+ it 'keeps things frozen' do
639
589
  person.freeze
640
- expect {
641
- person.title = "something"
642
- }.to raise_error(RuntimeError)
590
+ expect do
591
+ person.title = 'something'
592
+ end.to raise_error(RuntimeError)
643
593
  end
644
594
  end
645
595
  end
646
596
 
647
- context "when freezing attributes of the model" do
648
-
649
- context "when assigning a frozen value" do
650
-
651
- context "when the frozen value is a hash" do
652
-
597
+ context 'when freezing attributes of the model' do
598
+ context 'when assigning a frozen value' do
599
+ context 'when the frozen value is a hash' do
653
600
  let(:hash) do
654
- {"foo" => {"bar" => {"baz" => [1,2,3]}}}
601
+ { 'foo' => { 'bar' => { 'baz' => [ 1, 2, 3 ] } } }
655
602
  end
656
603
 
657
604
  let(:assign_hash) do
658
605
  person.map = hash.freeze
659
606
  end
660
607
 
661
- it "no mutation occurs during assignment" do
662
- expect{ assign_hash }.not_to raise_error
608
+ it 'no mutation occurs during assignment' do
609
+ expect { assign_hash }.not_to raise_error
663
610
  end
664
611
  end
665
612
  end
666
613
  end
667
614
  end
668
615
 
669
- describe ".logger" do
670
-
671
- it "returns the mongoid logger" do
616
+ describe '.logger' do
617
+ it 'returns the mongoid logger' do
672
618
  expect(Person.logger).to eq(Mongoid.logger)
673
619
  end
674
620
  end
675
621
 
676
- describe "#logger" do
677
-
622
+ describe '#logger' do
678
623
  let(:person) do
679
624
  Person.new
680
625
  end
681
626
 
682
- it "returns the mongoid logger" do
627
+ it 'returns the mongoid logger' do
683
628
  expect(person.send(:logger)).to eq(Mongoid.logger)
684
629
  end
685
630
  end
686
631
 
687
- context "after including the document module" do
688
-
632
+ context 'after including the document module' do
689
633
  let(:movie) do
690
634
  Movie.new
691
635
  end
692
636
 
693
- it "resets to the global scope" do
694
- expect(movie.global_set).to be_a(::Set)
637
+ it 'resets to the global scope' do
638
+ expect(movie.global_set).to be_a(Set)
695
639
  end
696
640
  end
697
- context "when a model name conflicts with a mongoid internal" do
698
641
 
642
+ context 'when a model name conflicts with a mongoid internal' do
699
643
  let(:scheduler) do
700
644
  Scheduler.new
701
645
  end
702
646
 
703
- it "allows the model name" do
647
+ it 'allows the model name' do
704
648
  expect(scheduler.strategy).to be_a(Strategy)
705
649
  end
706
650
  end
707
651
 
708
- describe "#initialize" do
709
-
710
- context "when providing a block" do
711
-
712
- it "sets the defaults before yielding" do
652
+ describe '#initialize' do
653
+ context 'when providing a block' do
654
+ it 'sets the defaults before yielding' do
713
655
  Person.new do |person|
714
656
  expect(person.age).to eq(100)
715
657
  end
@@ -717,8 +659,7 @@ describe Mongoid::Document do
717
659
  end
718
660
  end
719
661
 
720
- context "defining a BSON::ObjectId as a field" do
721
-
662
+ context 'defining a BSON::ObjectId as a field' do
722
663
  let(:bson_id) do
723
664
  BSON::ObjectId.new
724
665
  end
@@ -731,50 +672,47 @@ describe Mongoid::Document do
731
672
  person.save!
732
673
  end
733
674
 
734
- it "persists the correct type" do
675
+ it 'persists the correct type' do
735
676
  expect(person.reload.bson_id).to be_a(BSON::ObjectId)
736
677
  end
737
678
 
738
- it "has the correct value" do
679
+ it 'has the correct value' do
739
680
  expect(person.bson_id).to eq(bson_id)
740
681
  end
741
682
  end
742
683
 
743
- context "when setting bson id fields to empty strings" do
744
-
684
+ context 'when setting bson id fields to empty strings' do
745
685
  let(:post) do
746
686
  Post.new
747
687
  end
748
688
 
749
689
  before do
750
- post.person_id = ""
690
+ post.person_id = ''
751
691
  end
752
692
 
753
- it "converts them to nil" do
693
+ it 'converts them to nil' do
754
694
  expect(post.person_id).to be_nil
755
695
  end
756
696
  end
757
697
 
758
- context "creating anonymous documents" do
759
-
760
- context "when defining collection" do
761
-
698
+ context 'creating anonymous documents' do
699
+ context 'when defining collection' do
762
700
  let(:model) do
763
701
  Class.new do
764
702
  include Mongoid::Document
765
- store_in collection: "anonymous"
703
+
704
+ store_in collection: 'anonymous'
766
705
  field :gender
767
706
  end
768
707
  end
769
708
 
770
- it "allows the creation" do
771
- Object.const_set "Anonymous", model
709
+ it 'allows the creation' do
710
+ Object.const_set :Anonymous, model
772
711
  end
773
712
  end
774
713
  end
775
714
 
776
- describe "#becomes" do
777
-
715
+ describe '#becomes' do
778
716
  before(:all) do
779
717
  Person.validates_format_of(:ssn, without: /\$\$\$/)
780
718
 
@@ -788,55 +726,54 @@ describe Mongoid::Document do
788
726
  Object.send(:remove_const, :Manager)
789
727
  end
790
728
 
791
- context "when casting to a superclass" do
792
-
729
+ context 'when casting to a superclass' do
793
730
  let(:manager) do
794
- Manager.new(title: "Sir")
731
+ Manager.new(title: 'Sir')
795
732
  end
796
733
 
797
- context "when no embedded documents are present" do
798
- context "when using the default discriminator key" do
734
+ context 'when no embedded documents are present' do
735
+ context 'when using the default discriminator key' do
799
736
  let(:person) do
800
737
  manager.becomes(Person)
801
738
  end
802
739
 
803
- it "copies attributes" do
740
+ it 'copies attributes' do
804
741
  expect(person.title).to eq('Sir')
805
742
  end
806
743
 
807
- it "keeps the same object id" do
744
+ it 'keeps the same object id' do
808
745
  expect(person.id).to eq(manager.id)
809
746
  end
810
747
 
811
- it "sets the class type" do
812
- expect(person._type).to eq("Person")
748
+ it 'sets the class type' do
749
+ expect(person._type).to eq('Person')
813
750
  end
814
751
 
815
- it "raises an error when inappropriate class is provided" do
816
- expect {
752
+ it 'raises an error when inappropriate class is provided' do
753
+ expect do
817
754
  manager.becomes(String)
818
- }.to raise_error(ArgumentError, /A class which includes Mongoid::Document is expected/)
755
+ end.to raise_error(ArgumentError, /A class which includes Mongoid::Document is expected/)
819
756
  end
820
757
  end
821
758
 
822
- context "when using a custom discriminator key" do
759
+ context 'when using a custom discriminator key' do
823
760
  before do
824
- Person.discriminator_key = "dkey"
761
+ Person.discriminator_key = 'dkey'
825
762
  end
826
763
 
827
764
  after do
828
765
  Person.discriminator_key = nil
829
766
  end
830
767
 
831
- it "sets the class type with new discriminator key" do
832
- expect(person.dkey).to eq("Person")
768
+ it 'sets the class type with new discriminator key' do
769
+ expect(person.dkey).to eq('Person')
833
770
  end
834
771
  end
835
772
 
836
- context "when using a custom discriminator key and discriminator value" do
773
+ context 'when using a custom discriminator key and discriminator value' do
837
774
  before do
838
- Person.discriminator_key = "dkey"
839
- Person.discriminator_value = "dvalue"
775
+ Person.discriminator_key = 'dkey'
776
+ Person.discriminator_value = 'dvalue'
840
777
  end
841
778
 
842
779
  after do
@@ -844,16 +781,14 @@ describe Mongoid::Document do
844
781
  Person.discriminator_value = nil
845
782
  end
846
783
 
847
- it "sets the class type with new discriminator key" do
848
- expect(person.dkey).to eq("dvalue")
784
+ it 'sets the class type with new discriminator key' do
785
+ expect(person.dkey).to eq('dvalue')
849
786
  end
850
787
  end
851
788
  end
852
789
 
853
- context "when the document has embedded documents" do
854
-
855
- context "when the attribtues are protected" do
856
-
790
+ context 'when the document has embedded documents' do
791
+ context 'when the attributes are protected' do
857
792
  let!(:appointment) do
858
793
  manager.appointments.build
859
794
  end
@@ -862,44 +797,41 @@ describe Mongoid::Document do
862
797
  manager.becomes(Person)
863
798
  end
864
799
 
865
- it "copies the embedded documents" do
800
+ it 'copies the embedded documents' do
866
801
  expect(person.appointments.first).to eq(appointment)
867
802
  end
868
803
 
869
- it "returns new instances" do
870
- expect(person.appointments.first).to_not equal(appointment)
804
+ it 'returns new instances' do
805
+ expect(person.appointments.first).not_to equal(appointment)
871
806
  end
872
807
  end
873
808
 
874
- context "when the attributes are not protected" do
875
-
876
- context "when embedded doc is not persisted" do
877
-
809
+ context 'when the attributes are not protected' do
810
+ context 'when embedded doc is not persisted' do
878
811
  let!(:address) do
879
- manager.addresses.build(street: "hobrecht")
812
+ manager.addresses.build(street: 'hobrecht')
880
813
  end
881
814
 
882
815
  let(:person) do
883
816
  manager.becomes(Person)
884
817
  end
885
818
 
886
- it "copies the embedded documents" do
819
+ it 'copies the embedded documents' do
887
820
  expect(person.addresses.first).to eq(address)
888
821
  end
889
822
 
890
- it "returns new instances" do
891
- expect(person.addresses.first).to_not equal(address)
823
+ it 'returns new instances' do
824
+ expect(person.addresses.first).not_to equal(address)
892
825
  end
893
826
  end
894
827
 
895
- context "when embedded doc is persisted" do
896
-
828
+ context 'when embedded doc is persisted' do
897
829
  let(:manager) do
898
- Manager.create!(title: "Sir")
830
+ Manager.create!(title: 'Sir')
899
831
  end
900
832
 
901
833
  let!(:address) do
902
- manager.addresses.create!(street: "hobrecht")
834
+ manager.addresses.create!(street: 'hobrecht')
903
835
  end
904
836
 
905
837
  let(:person) do
@@ -910,45 +842,42 @@ describe Mongoid::Document do
910
842
  person.save!
911
843
  end
912
844
 
913
- it "copies the embedded documents" do
845
+ it 'copies the embedded documents' do
914
846
  expect(person.addresses.first).to eq(address)
915
847
  end
916
848
 
917
- it "copies the embedded documents only once" do
849
+ it 'copies the embedded documents only once' do
918
850
  expect(person.reload.addresses.length).to eq(1)
919
851
  end
920
852
  end
921
853
  end
922
854
  end
923
855
 
924
- context "when the document has a localize field" do
925
-
856
+ context 'when the document has a localize field' do
926
857
  let(:manager) do
927
- Manager.new(title: "Sir", desc: "description")
858
+ Manager.new(title: 'Sir', desc: 'description')
928
859
  end
929
860
 
930
861
  let(:person) do
931
862
  manager.becomes(Person)
932
863
  end
933
864
 
934
- it "copies the localize attribute" do
935
- expect(person.desc).to eq("description")
865
+ it 'copies the localize attribute' do
866
+ expect(person.desc).to eq('description')
936
867
  end
937
868
  end
938
869
 
939
- context "when the document is new" do
940
-
870
+ context 'when the document is new' do
941
871
  let(:person) do
942
872
  manager.becomes(Person)
943
873
  end
944
874
 
945
- it "copies the state" do
875
+ it 'copies the state' do
946
876
  expect(person).to be_a_new_record
947
877
  end
948
878
  end
949
879
 
950
- context "when the document is persisted" do
951
-
880
+ context 'when the document is persisted' do
952
881
  before do
953
882
  manager.save!
954
883
  end
@@ -957,13 +886,12 @@ describe Mongoid::Document do
957
886
  manager.becomes(Person)
958
887
  end
959
888
 
960
- it "copies the state" do
889
+ it 'copies the state' do
961
890
  expect(person).to be_persisted
962
891
  end
963
892
  end
964
893
 
965
- context "when the document is destroyed" do
966
-
894
+ context 'when the document is destroyed' do
967
895
  before do
968
896
  manager.destroy
969
897
  end
@@ -972,35 +900,33 @@ describe Mongoid::Document do
972
900
  manager.becomes(Person)
973
901
  end
974
902
 
975
- it "copies the state" do
903
+ it 'copies the state' do
976
904
  expect(person).to be_destroyed
977
905
  end
978
906
  end
979
907
 
980
- context "when the document is dirty" do
981
-
908
+ context 'when the document is dirty' do
982
909
  before do
983
910
  manager.save!
984
- manager.ssn = "123-22-1234"
911
+ manager.ssn = '123-22-1234'
985
912
  end
986
913
 
987
914
  let(:person) do
988
915
  manager.becomes(Person)
989
916
  end
990
917
 
991
- it "copies over the dirty changes" do
992
- expect(person.changes["ssn"]).to eq([ nil, "123-22-1234" ])
918
+ it 'copies over the dirty changes' do
919
+ expect(person.changes['ssn']).to eq([ nil, '123-22-1234' ])
993
920
  end
994
921
 
995
- it "adds the _type change" do
996
- expect(person.changes["_type"]).to eq([ "Manager", "Person" ])
922
+ it 'adds the _type change' do
923
+ expect(person.changes['_type']).to eq(%w[Manager Person])
997
924
  end
998
925
  end
999
926
 
1000
- context "when the document is invalid" do
1001
-
927
+ context 'when the document is invalid' do
1002
928
  before do
1003
- manager.ssn = "$$$"
929
+ manager.ssn = '$$$'
1004
930
  manager.valid?
1005
931
  end
1006
932
 
@@ -1008,75 +934,70 @@ describe Mongoid::Document do
1008
934
  manager.becomes(Person)
1009
935
  end
1010
936
 
1011
- it "copies the errors" do
937
+ it 'copies the errors' do
1012
938
  expect(person.errors).to include(:ssn)
1013
939
  end
1014
940
  end
1015
941
  end
1016
942
 
1017
- context "when casting to a subclass" do
1018
-
943
+ context 'when casting to a subclass' do
1019
944
  let(:person) do
1020
- Person.new(title: "Sir")
945
+ Person.new(title: 'Sir')
1021
946
  end
1022
947
 
1023
- context "when no embedded documents are present" do
1024
-
948
+ context 'when no embedded documents are present' do
1025
949
  let(:manager) do
1026
950
  person.becomes(Manager)
1027
951
  end
1028
952
 
1029
- it "copies attributes" do
953
+ it 'copies attributes' do
1030
954
  expect(manager.title).to eq('Sir')
1031
955
  end
1032
956
 
1033
- it "keeps the same object id" do
957
+ it 'keeps the same object id' do
1034
958
  expect(manager.id).to eq(person.id)
1035
959
  end
1036
960
 
1037
- it "sets the class type" do
1038
- expect(manager._type).to eq("Manager")
961
+ it 'sets the class type' do
962
+ expect(manager._type).to eq('Manager')
1039
963
  end
1040
964
 
1041
- it "raises an error when inappropriate class is provided" do
1042
- expect {
965
+ it 'raises an error when inappropriate class is provided' do
966
+ expect do
1043
967
  person.becomes(String)
1044
- }.to raise_error(ArgumentError)
968
+ end.to raise_error(ArgumentError)
1045
969
  end
1046
970
  end
1047
971
 
1048
- context "when the document has embedded documents" do
1049
-
972
+ context 'when the document has embedded documents' do
1050
973
  let!(:address) do
1051
- person.addresses.build(street: "hobrecht")
974
+ person.addresses.build(street: 'hobrecht')
1052
975
  end
1053
976
 
1054
977
  let(:manager) do
1055
978
  person.becomes(Manager)
1056
979
  end
1057
980
 
1058
- it "copies the embedded documents" do
981
+ it 'copies the embedded documents' do
1059
982
  expect(manager.addresses.first).to eq(address)
1060
983
  end
1061
984
 
1062
- it "returns new instances" do
1063
- expect(manager.addresses.first).to_not equal(address)
985
+ it 'returns new instances' do
986
+ expect(manager.addresses.first).not_to equal(address)
1064
987
  end
1065
988
  end
1066
989
 
1067
- context "when the document is new" do
1068
-
990
+ context 'when the document is new' do
1069
991
  let(:manager) do
1070
992
  person.becomes(Manager)
1071
993
  end
1072
994
 
1073
- it "copies the state" do
995
+ it 'copies the state' do
1074
996
  expect(manager).to be_a_new_record
1075
997
  end
1076
998
  end
1077
999
 
1078
- context "when the document is persisted" do
1079
-
1000
+ context 'when the document is persisted' do
1080
1001
  before do
1081
1002
  person.save!
1082
1003
  end
@@ -1085,36 +1006,34 @@ describe Mongoid::Document do
1085
1006
  person.becomes(Manager)
1086
1007
  end
1087
1008
 
1088
- it "copies the state" do
1009
+ it 'copies the state' do
1089
1010
  expect(manager).to be_persisted
1090
1011
  end
1091
1012
 
1092
- context "when downcasted document is saved" do
1093
-
1013
+ context 'when downcasted document is saved' do
1094
1014
  before do
1095
1015
  manager.save!
1096
1016
  end
1097
1017
 
1098
- it "keeps the type" do
1018
+ it 'keeps the type' do
1099
1019
  expect(manager).to be_an_instance_of(Manager)
1100
1020
  end
1101
1021
 
1102
- it "copies over the dirty changes" do
1103
- expect(manager.changes["ssn"]).to eq(person.changes["ssn"])
1022
+ it 'copies over the dirty changes' do
1023
+ expect(manager.changes['ssn']).to eq(person.changes['ssn'])
1104
1024
  end
1105
1025
 
1106
- it "can by queried by the parent class" do
1026
+ it 'can by queried by the parent class' do
1107
1027
  expect(Person.find(manager.id)).to be_an_instance_of(Manager)
1108
1028
  end
1109
1029
 
1110
- it "can by queried by the main class" do
1030
+ it 'can by queried by the main class' do
1111
1031
  expect(Manager.find(manager.id)).to be_an_instance_of(Manager)
1112
1032
  end
1113
1033
  end
1114
1034
  end
1115
1035
 
1116
- context "when the document is destroyed" do
1117
-
1036
+ context 'when the document is destroyed' do
1118
1037
  before do
1119
1038
  person.destroy
1120
1039
  end
@@ -1123,35 +1042,33 @@ describe Mongoid::Document do
1123
1042
  person.becomes(Manager)
1124
1043
  end
1125
1044
 
1126
- it "copies the state" do
1045
+ it 'copies the state' do
1127
1046
  expect(manager).to be_destroyed
1128
1047
  end
1129
1048
  end
1130
1049
 
1131
- context "when the document is dirty" do
1132
-
1050
+ context 'when the document is dirty' do
1133
1051
  before do
1134
1052
  person.save!
1135
- person.ssn = "123-22-1234"
1053
+ person.ssn = '123-22-1234'
1136
1054
  end
1137
1055
 
1138
1056
  let(:manager) do
1139
1057
  person.becomes(Manager)
1140
1058
  end
1141
1059
 
1142
- it "copies over the dirty changes" do
1143
- expect(manager.changes["ssn"]).to eq([ nil, "123-22-1234" ])
1060
+ it 'copies over the dirty changes' do
1061
+ expect(manager.changes['ssn']).to eq([ nil, '123-22-1234' ])
1144
1062
  end
1145
1063
 
1146
- it "adds the _type change" do
1147
- expect(manager.changes["_type"]).to eq([ "Person", "Manager" ])
1064
+ it 'adds the _type change' do
1065
+ expect(manager.changes['_type']).to eq(%w[Person Manager])
1148
1066
  end
1149
1067
  end
1150
1068
 
1151
- context "when the document is invalid" do
1152
-
1069
+ context 'when the document is invalid' do
1153
1070
  before do
1154
- person.ssn = "$$$"
1071
+ person.ssn = '$$$'
1155
1072
  person.valid?
1156
1073
  end
1157
1074
 
@@ -1159,99 +1076,90 @@ describe Mongoid::Document do
1159
1076
  person.becomes(Manager)
1160
1077
  end
1161
1078
 
1162
- it "copies the errors" do
1079
+ it 'copies the errors' do
1163
1080
  expect(manager.errors).to include(:ssn)
1164
1081
  end
1165
-
1166
1082
  end
1167
1083
 
1168
- context "when the subclass validates attributes not present on the parent class" do
1169
-
1084
+ context 'when the subclass validates attributes not present on the parent class' do
1170
1085
  before do
1171
- Manager.validates_inclusion_of(:level, in: [1, 2])
1086
+ Manager.validates_inclusion_of(:level, in: [ 1, 2 ])
1172
1087
  end
1173
1088
 
1174
1089
  let(:manager) do
1175
1090
  person.becomes(Manager)
1176
1091
  end
1177
1092
 
1178
- it "validates the instance of the subclass" do
1093
+ it 'validates the instance of the subclass' do
1179
1094
  manager.level = 3
1180
1095
  expect(manager.valid?).to be false
1181
1096
  end
1182
1097
  end
1183
1098
 
1184
- context "when the subclass has defaults" do
1185
-
1099
+ context 'when the subclass has defaults' do
1186
1100
  let(:manager) do
1187
1101
  Person.new(title: 'Sir').becomes(Manager)
1188
1102
  end
1189
1103
 
1190
- it "applies default attributes" do
1104
+ it 'applies default attributes' do
1191
1105
  expect(manager.level).to eq(1)
1192
1106
  end
1193
1107
  end
1194
1108
  end
1195
1109
  end
1196
1110
 
1197
- context "when marshalling the document" do
1198
-
1111
+ context 'when marshalling the document' do
1199
1112
  let(:agency) do
1200
1113
  Agency.new
1201
1114
  end
1202
1115
 
1203
1116
  let!(:agent) do
1204
- agency.agents.build(title: "VIP")
1117
+ agency.agents.build(title: 'VIP')
1205
1118
  end
1206
1119
 
1207
- describe Marshal, ".dump" do
1208
-
1209
- it "successfully dumps the document" do
1210
- expect {
1120
+ describe Marshal, '.dump' do
1121
+ it 'successfully dumps the document' do
1122
+ expect do
1211
1123
  Marshal.dump(agency)
1212
1124
  Marshal.dump(agent)
1213
- }.not_to raise_error
1125
+ end.not_to raise_error
1214
1126
  end
1215
1127
  end
1216
1128
 
1217
- describe Marshal, ".load" do
1218
-
1219
- it "successfully loads the document" do
1129
+ describe Marshal, '.load' do
1130
+ it 'successfully loads the document' do
1220
1131
  expect(Marshal.load(Marshal.dump(agency))).to eq(agency)
1221
1132
  end
1222
1133
  end
1223
1134
  end
1224
1135
 
1225
- context "when putting a document in the cache" do
1226
-
1136
+ context 'when putting a document in the cache' do
1227
1137
  describe ActiveSupport::Cache do
1228
-
1229
1138
  let(:cache) do
1230
1139
  ActiveSupport::Cache::MemoryStore.new
1231
1140
  end
1232
1141
 
1233
- describe "#fetch" do
1234
-
1142
+ describe '#fetch' do
1235
1143
  let(:agency) do
1236
1144
  Agency.new
1237
1145
  end
1238
1146
 
1239
1147
  let(:agent) do
1240
- agency.agents.build(title: "VIP", address: address)
1148
+ agency.agents.build(title: 'VIP', address: address)
1241
1149
  end
1242
1150
 
1243
1151
  let(:address) do
1244
1152
  Address.new(city: 'Berlin')
1245
1153
  end
1246
1154
 
1247
- it "stores the parent object" do
1248
- expect(cache.fetch("key") { agency }).to eq(agency)
1249
- expect(cache.fetch("key")).to eq(agency)
1155
+ it 'stores the parent object' do
1156
+ expect(cache.fetch('key') { agency }).to eq(agency)
1157
+ expect(cache.fetch('key')).to eq(agency)
1250
1158
  end
1251
1159
 
1252
- it "stores the embedded object" do
1253
- expect(cache.fetch("key") { agent }).to eq(agent)
1254
- expect(cache.fetch("key").address).to eq(agent.address)
1160
+ it 'stores the embedded object' do
1161
+ expect(cache.fetch('key') { agent }).to eq(agent)
1162
+ expect(cache.fetch('key').address).to eq(agent.address)
1255
1163
  end
1256
1164
  end
1257
1165
  end