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,24 +1,20 @@
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::Traversable do
7
-
8
- describe "#_children" do
9
-
6
+ describe '#_children' do
10
7
  let(:person) do
11
- Person.new(title: "King")
8
+ Person.new(title: 'King')
12
9
  end
13
10
 
14
- context "with one level of embedding" do
15
-
11
+ context 'with one level of embedding' do
16
12
  let(:name) do
17
- Name.new(first_name: "Titus")
13
+ Name.new(first_name: 'Titus')
18
14
  end
19
15
 
20
16
  let(:address) do
21
- Address.new(street: "Queen St")
17
+ Address.new(street: 'Queen St')
22
18
  end
23
19
 
24
20
  before do
@@ -26,27 +22,26 @@ describe Mongoid::Traversable do
26
22
  person.addresses << address
27
23
  end
28
24
 
29
- it "includes embeds_one documents" do
25
+ it 'includes embeds_one documents' do
30
26
  expect(person._children).to include(name)
31
27
  end
32
28
 
33
- it "includes embeds_many documents" do
29
+ it 'includes embeds_many documents' do
34
30
  expect(person._children).to include(address)
35
31
  end
36
32
  end
37
33
 
38
- context "with multiple levels of embedding" do
39
-
34
+ context 'with multiple levels of embedding' do
40
35
  let(:name) do
41
- Name.new(first_name: "Titus")
36
+ Name.new(first_name: 'Titus')
42
37
  end
43
38
 
44
39
  let(:address) do
45
- Address.new(street: "Queen St")
40
+ Address.new(street: 'Queen St')
46
41
  end
47
42
 
48
43
  let(:location) do
49
- Location.new(name: "Work")
44
+ Location.new(name: 'Work')
50
45
  end
51
46
 
52
47
  before do
@@ -55,34 +50,32 @@ describe Mongoid::Traversable do
55
50
  person.addresses << address
56
51
  end
57
52
 
58
- it "includes embeds_one documents" do
53
+ it 'includes embeds_one documents' do
59
54
  expect(person._children).to include(name)
60
55
  end
61
56
 
62
- it "includes embeds_many documents" do
57
+ it 'includes embeds_many documents' do
63
58
  expect(person._children).to include(address)
64
59
  end
65
60
 
66
- it "does not include embedded documents multiple levels deep" do
61
+ it 'does not include embedded documents multiple levels deep' do
67
62
  expect(person._children).not_to include(location)
68
63
  end
69
64
  end
70
65
  end
71
66
 
72
- describe "#_descendants" do
73
-
67
+ describe '#_descendants' do
74
68
  let(:person) do
75
- Person.new(title: "King")
69
+ Person.new(title: 'King')
76
70
  end
77
71
 
78
- context "with one level of embedding" do
79
-
72
+ context 'with one level of embedding' do
80
73
  let(:name) do
81
- Name.new(first_name: "Titus")
74
+ Name.new(first_name: 'Titus')
82
75
  end
83
76
 
84
77
  let(:address) do
85
- Address.new(street: "Queen St")
78
+ Address.new(street: 'Queen St')
86
79
  end
87
80
 
88
81
  before do
@@ -90,27 +83,26 @@ describe Mongoid::Traversable do
90
83
  person.addresses << address
91
84
  end
92
85
 
93
- it "includes embeds_one documents" do
86
+ it 'includes embeds_one documents' do
94
87
  expect(person._descendants).to include(name)
95
88
  end
96
89
 
97
- it "includes embeds_many documents" do
90
+ it 'includes embeds_many documents' do
98
91
  expect(person._descendants).to include(address)
99
92
  end
100
93
  end
101
94
 
102
- context "with multiple levels of embedding" do
103
-
95
+ context 'with multiple levels of embedding' do
104
96
  let(:name) do
105
- Name.new(first_name: "Titus")
97
+ Name.new(first_name: 'Titus')
106
98
  end
107
99
 
108
100
  let(:address) do
109
- Address.new(street: "Queen St")
101
+ Address.new(street: 'Queen St')
110
102
  end
111
103
 
112
104
  let(:location) do
113
- Location.new(name: "Work")
105
+ Location.new(name: 'Work')
114
106
  end
115
107
 
116
108
  before do
@@ -119,63 +111,55 @@ describe Mongoid::Traversable do
119
111
  person.addresses << address
120
112
  end
121
113
 
122
- it "includes embeds_one documents" do
114
+ it 'includes embeds_one documents' do
123
115
  expect(person._descendants).to include(name)
124
116
  end
125
117
 
126
- it "includes embeds_many documents" do
118
+ it 'includes embeds_many documents' do
127
119
  expect(person._descendants).to include(address)
128
120
  end
129
121
 
130
- it "includes embedded documents multiple levels deep" do
122
+ it 'includes embedded documents multiple levels deep' do
131
123
  expect(person._descendants).to include(location)
132
124
  end
133
125
  end
134
126
  end
135
127
 
136
- describe ".hereditary?" do
137
-
138
- context "when the document is a subclass" do
139
-
140
- it "returns true" do
128
+ describe '.hereditary?' do
129
+ context 'when the document is a subclass' do
130
+ it 'returns true' do
141
131
  expect(Circle.hereditary?).to be true
142
132
  end
143
133
  end
144
134
 
145
- context "when the document is not a subclass" do
146
-
147
- it "returns false" do
135
+ context 'when the document is not a subclass' do
136
+ it 'returns false' do
148
137
  expect(Shape.hereditary?).to be false
149
138
  end
150
139
  end
151
140
  end
152
141
 
153
- describe "#hereditary?" do
154
-
155
- context "when the document is a subclass" do
156
-
157
- it "returns true" do
142
+ describe '#hereditary?' do
143
+ context 'when the document is a subclass' do
144
+ it 'returns true' do
158
145
  expect(Circle.new).to be_hereditary
159
146
  end
160
147
  end
161
148
 
162
- context "when the document is not a subclass" do
163
-
164
- it "returns false" do
165
- expect(Shape.new).to_not be_hereditary
149
+ context 'when the document is not a subclass' do
150
+ it 'returns false' do
151
+ expect(Shape.new).not_to be_hereditary
166
152
  end
167
153
  end
168
154
  end
169
155
 
170
- describe "#inherited" do
171
-
172
- it "duplicates the localized fields" do
173
- expect(Actress.localized_fields).to_not equal(Actor.localized_fields)
156
+ describe '#inherited' do
157
+ it 'duplicates the localized fields' do
158
+ expect(Actress.localized_fields).not_to equal(Actor.localized_fields)
174
159
  end
175
160
  end
176
161
 
177
- describe "#parentize" do
178
-
162
+ describe '#parentize' do
179
163
  let(:address) do
180
164
  Address.new
181
165
  end
@@ -188,50 +172,46 @@ describe Mongoid::Traversable do
188
172
  address.parentize(person)
189
173
  end
190
174
 
191
- it "sets the parent document" do
175
+ it 'sets the parent document' do
192
176
  expect(address._parent).to eq(person)
193
177
  end
194
178
  end
195
179
 
196
- describe "#remove_child" do
197
-
180
+ describe '#remove_child' do
198
181
  let(:person) do
199
182
  Person.new
200
183
  end
201
184
 
202
- context "when child is an embeds one" do
203
-
185
+ context 'when child is an embeds one' do
204
186
  let!(:name) do
205
- person.build_name(first_name: "James")
187
+ person.build_name(first_name: 'James')
206
188
  end
207
189
 
208
190
  before do
209
191
  person.remove_child(name)
210
192
  end
211
193
 
212
- it "removes the relation instance" do
194
+ it 'removes the relation instance' do
213
195
  expect(person.name).to be_nil
214
196
  end
215
197
  end
216
198
 
217
- context "when child is an embeds many" do
218
-
199
+ context 'when child is an embeds many' do
219
200
  let!(:address) do
220
- person.addresses.build(street: "Upper St")
201
+ person.addresses.build(street: 'Upper St')
221
202
  end
222
203
 
223
204
  before do
224
205
  person.remove_child(address)
225
206
  end
226
207
 
227
- it "removes the document from the relation target" do
208
+ it 'removes the document from the relation target' do
228
209
  expect(person.addresses).to be_empty
229
210
  end
230
211
  end
231
212
  end
232
213
 
233
- describe "#_root" do
234
-
214
+ describe '#_root' do
235
215
  let(:address) do
236
216
  Address.new
237
217
  end
@@ -244,64 +224,55 @@ describe Mongoid::Traversable do
244
224
  address.parentize(person)
245
225
  end
246
226
 
247
- context "when the document is not the root" do
248
-
249
- it "returns the root" do
227
+ context 'when the document is not the root' do
228
+ it 'returns the root' do
250
229
  expect(address._root).to eq(person)
251
230
  end
252
231
  end
253
232
 
254
- context "when the document is the root" do
255
-
256
- it "returns self" do
233
+ context 'when the document is the root' do
234
+ it 'returns self' do
257
235
  expect(person._root).to eq(person)
258
236
  end
259
237
  end
260
238
  end
261
239
 
262
- describe "#_root?" do
263
-
264
- context "when the document can be the root" do
265
-
266
- context "when the document is not embedded" do
267
-
240
+ describe '#_root?' do
241
+ context 'when the document can be the root' do
242
+ context 'when the document is not embedded' do
268
243
  let(:band) do
269
244
  Band.new
270
245
  end
271
246
 
272
- it "returns true" do
247
+ it 'returns true' do
273
248
  expect(band).to be__root
274
249
  end
275
250
  end
276
251
 
277
- context "when the document is embedded" do
278
-
252
+ context 'when the document is embedded' do
279
253
  let(:root_role) do
280
254
  Role.new
281
255
  end
282
256
 
283
- context "when the document is root in a cyclic relation" do
284
-
285
- it "returns true" do
257
+ context 'when the document is root in a cyclic relation' do
258
+ it 'returns true' do
286
259
  expect(root_role).to be__root
287
260
  end
288
261
  end
289
262
 
290
- context "when document is embedded in a cyclic relation" do
291
-
263
+ context 'when document is embedded in a cyclic relation' do
292
264
  let(:child_role) do
293
265
  root_role.child_roles.build
294
266
  end
295
267
 
296
- it "returns false" do
297
- expect(child_role).to_not be__root
268
+ it 'returns false' do
269
+ expect(child_role).not_to be__root
298
270
  end
299
271
  end
300
272
  end
301
273
  end
302
274
 
303
- context "when the document is embedded and not cyclic" do
304
-
275
+ context 'when the document is embedded and not cyclic' do
305
276
  let(:person) do
306
277
  Person.new
307
278
  end
@@ -310,55 +281,54 @@ describe Mongoid::Traversable do
310
281
  person.addresses.build
311
282
  end
312
283
 
313
- it "returns false" do
314
- expect(address).to_not be__root
284
+ it 'returns false' do
285
+ expect(address).not_to be__root
315
286
  end
316
287
  end
317
288
  end
318
289
 
319
- describe "#discriminator_key" do
320
-
321
- context "when the discriminator key is not set on a class" do
322
- it "sets the global discriminator key to _type" do
323
- expect(Mongoid.discriminator_key).to eq("_type")
290
+ describe '#discriminator_key' do
291
+ context 'when the discriminator key is not set on a class' do
292
+ it 'sets the global discriminator key to _type' do
293
+ expect(Mongoid.discriminator_key).to eq('_type')
324
294
  end
325
295
 
326
- it "sets the parent discriminator key to _type" do
327
- expect(Instrument.discriminator_key).to eq("_type")
296
+ it 'sets the parent discriminator key to _type' do
297
+ expect(Instrument.discriminator_key).to eq('_type')
328
298
  end
329
299
 
330
- it "sets the child discriminator key to _type: Piano" do
331
- expect(Piano.discriminator_key).to eq("_type")
300
+ it 'sets the child discriminator key to _type: Piano' do
301
+ expect(Piano.discriminator_key).to eq('_type')
332
302
  end
333
303
 
334
- it "sets the child discriminator key to _type: Guitar" do
335
- expect(Guitar.discriminator_key).to eq("_type")
304
+ it 'sets the child discriminator key to _type: Guitar' do
305
+ expect(Guitar.discriminator_key).to eq('_type')
336
306
  end
337
307
  end
338
308
 
339
- context "when the discriminator key is changed at the global level" do
309
+ context 'when the discriminator key is changed at the global level' do
340
310
  config_override :discriminator_key, 'hello'
341
311
 
342
- it "sets the correct value globally" do
343
- expect(Mongoid.discriminator_key).to eq("hello")
312
+ it 'sets the correct value globally' do
313
+ expect(Mongoid.discriminator_key).to eq('hello')
344
314
  end
345
315
 
346
- it "is changed in the parent" do
347
- expect(Instrument.discriminator_key).to eq("hello")
316
+ it 'is changed in the parent' do
317
+ expect(Instrument.discriminator_key).to eq('hello')
348
318
  end
349
319
 
350
- it "is changed in the child: Piano" do
351
- expect(Piano.discriminator_key).to eq("hello")
320
+ it 'is changed in the child: Piano' do
321
+ expect(Piano.discriminator_key).to eq('hello')
352
322
  end
353
323
 
354
- it "is changed in the child: Guitar" do
355
- expect(Guitar.discriminator_key).to eq("hello")
324
+ it 'is changed in the child: Guitar' do
325
+ expect(Guitar.discriminator_key).to eq('hello')
356
326
  end
357
327
  end
358
328
 
359
- context "when the discriminator key is changed in the parent" do
329
+ context 'when the discriminator key is changed in the parent' do
360
330
  before do
361
- Instrument.discriminator_key = "hello2"
331
+ Instrument.discriminator_key = 'hello2'
362
332
  end
363
333
 
364
334
  after do
@@ -366,19 +336,19 @@ describe Mongoid::Traversable do
366
336
  end
367
337
 
368
338
  it "doesn't change the global setting" do
369
- expect(Mongoid.discriminator_key).to eq("_type")
339
+ expect(Mongoid.discriminator_key).to eq('_type')
370
340
  end
371
341
 
372
- it "changes in the parent" do
373
- expect(Instrument.discriminator_key).to eq("hello2")
342
+ it 'changes in the parent' do
343
+ expect(Instrument.discriminator_key).to eq('hello2')
374
344
  end
375
345
 
376
- it "changes in the child class: Piano" do
377
- expect(Piano.discriminator_key).to eq("hello2")
346
+ it 'changes in the child class: Piano' do
347
+ expect(Piano.discriminator_key).to eq('hello2')
378
348
  end
379
349
 
380
- it "changes in the child class: Guitar" do
381
- expect(Guitar.discriminator_key).to eq("hello2")
350
+ it 'changes in the child class: Guitar' do
351
+ expect(Guitar.discriminator_key).to eq('hello2')
382
352
  end
383
353
 
384
354
  context 'when discriminator key is set to nil in parent' do
@@ -387,117 +357,114 @@ describe Mongoid::Traversable do
387
357
  end
388
358
 
389
359
  it "doesn't change the global setting" do
390
- expect(Mongoid.discriminator_key).to eq("_type")
360
+ expect(Mongoid.discriminator_key).to eq('_type')
391
361
  end
392
362
 
393
363
  it 'uses global setting' do
394
- expect(Instrument.discriminator_key).to eq("_type")
364
+ expect(Instrument.discriminator_key).to eq('_type')
395
365
  end
396
366
 
397
- it "changes in the child class: Piano" do
398
- expect(Piano.discriminator_key).to eq("_type")
367
+ it 'changes in the child class: Piano' do
368
+ expect(Piano.discriminator_key).to eq('_type')
399
369
  end
400
370
 
401
- it "changes in the child class: Guitar" do
402
- expect(Guitar.discriminator_key).to eq("_type")
371
+ it 'changes in the child class: Guitar' do
372
+ expect(Guitar.discriminator_key).to eq('_type')
403
373
  end
404
374
  end
405
375
 
406
- context "when resetting the discriminator key after nil" do
376
+ context 'when resetting the discriminator key after nil' do
407
377
  before do
408
378
  Instrument.discriminator_key = nil
409
- Instrument.discriminator_key = "hello4"
379
+ Instrument.discriminator_key = 'hello4'
410
380
  end
411
381
 
412
382
  it "doesn't change the global setting" do
413
- expect(Mongoid.discriminator_key).to eq("_type")
383
+ expect(Mongoid.discriminator_key).to eq('_type')
414
384
  end
415
385
 
416
386
  it 'has the correct value' do
417
- expect(Instrument.discriminator_key).to eq("hello4")
387
+ expect(Instrument.discriminator_key).to eq('hello4')
418
388
  end
419
389
 
420
- it "changes in the child class: Piano" do
421
- expect(Piano.discriminator_key).to eq("hello4")
390
+ it 'changes in the child class: Piano' do
391
+ expect(Piano.discriminator_key).to eq('hello4')
422
392
  end
423
393
 
424
- it "changes in the child class: Guitar" do
425
- expect(Guitar.discriminator_key).to eq("hello4")
394
+ it 'changes in the child class: Guitar' do
395
+ expect(Guitar.discriminator_key).to eq('hello4')
426
396
  end
427
397
  end
428
398
  end
429
399
 
430
- context "when the discriminator key is changed in the child" do
400
+ context 'when the discriminator key is changed in the child' do
431
401
  let(:set_discriminator_key) do
432
- Guitar.discriminator_key = "hello3"
402
+ Guitar.discriminator_key = 'hello3'
433
403
  end
434
404
 
435
- before :each do
436
- begin
437
- set_discriminator_key
438
- rescue
439
- end
405
+ before do
406
+ set_discriminator_key
407
+ rescue StandardError
440
408
  end
441
409
 
442
- it "raises an error" do
410
+ it 'raises an error' do
443
411
  expect do
444
412
  set_discriminator_key
445
413
  end.to raise_error(Mongoid::Errors::InvalidDiscriminatorKeyTarget)
446
414
  end
447
415
 
448
416
  it "doesn't change in that class" do
449
- expect(Guitar.discriminator_key).to eq("_type")
417
+ expect(Guitar.discriminator_key).to eq('_type')
450
418
  end
451
419
 
452
420
  it "doesn't change the global setting" do
453
- expect(Mongoid.discriminator_key).to eq("_type")
421
+ expect(Mongoid.discriminator_key).to eq('_type')
454
422
  end
455
423
 
456
424
  it "doesn't change in the sibling" do
457
- expect(Piano.discriminator_key).to eq("_type")
425
+ expect(Piano.discriminator_key).to eq('_type')
458
426
  end
459
427
 
460
428
  it "doesn't change in the parent" do
461
- expect(Instrument.discriminator_key).to eq("_type")
429
+ expect(Instrument.discriminator_key).to eq('_type')
462
430
  end
463
431
  end
464
432
 
465
- context "when discriminator key is called on an instance" do
466
-
433
+ context 'when discriminator key is called on an instance' do
467
434
  let(:guitar) do
468
435
  Guitar.new
469
436
  end
470
437
 
471
- it "raises an error on setter" do
438
+ it 'raises an error on setter' do
472
439
  expect do
473
- guitar.discriminator_key = "hello3"
440
+ guitar.discriminator_key = 'hello3'
474
441
  end.to raise_error(NoMethodError)
475
442
  end
476
443
 
477
- it "raises an error on getter" do
444
+ it 'raises an error on getter' do
478
445
  expect do
479
446
  guitar.discriminator_key
480
447
  end.to raise_error(NoMethodError)
481
448
  end
482
449
  end
483
450
 
484
- context ".fields" do
485
- context "when the discriminator key is not changed" do
486
- it "creates a _type field in the parent" do
487
- expect(Instrument.fields.keys).to include("_type")
451
+ describe '.fields' do
452
+ context 'when the discriminator key is not changed' do
453
+ it 'creates a _type field in the parent' do
454
+ expect(Instrument.fields.keys).to include('_type')
488
455
  end
489
456
 
490
- it "creates a _type field in the child: Guitar" do
491
- expect(Guitar.fields.keys).to include("_type")
457
+ it 'creates a _type field in the child: Guitar' do
458
+ expect(Guitar.fields.keys).to include('_type')
492
459
  end
493
460
 
494
- it "creates a _type field in the child: Piano" do
495
- expect(Piano.fields.keys).to include("_type")
461
+ it 'creates a _type field in the child: Piano' do
462
+ expect(Piano.fields.keys).to include('_type')
496
463
  end
497
464
  end
498
465
 
499
- context "when the discriminator key is changed at the base level" do
500
- context "after class creation" do
466
+ context 'when the discriminator key is changed at the base level' do
467
+ context 'after class creation' do
501
468
  before do
502
469
  class GlobalDiscriminatorParent
503
470
  include Mongoid::Document
@@ -506,33 +473,32 @@ describe Mongoid::Traversable do
506
473
  class GlobalDiscriminatorChild < GlobalDiscriminatorParent
507
474
  end
508
475
 
509
- Mongoid.discriminator_key = "test"
476
+ Mongoid.discriminator_key = 'test'
510
477
  end
511
478
 
512
479
  after do
513
- Mongoid.discriminator_key = "_type"
480
+ Mongoid.discriminator_key = '_type'
514
481
  end
515
482
 
516
- it "creates a field with the old global value in the parent" do
517
- expect(GlobalDiscriminatorParent.fields.keys).to include("_type")
483
+ it 'creates a field with the old global value in the parent' do
484
+ expect(GlobalDiscriminatorParent.fields.keys).to include('_type')
518
485
  end
519
486
 
520
- it "creates a field with the old global value in the child" do
521
- expect(GlobalDiscriminatorChild.fields.keys).to include("_type")
487
+ it 'creates a field with the old global value in the child' do
488
+ expect(GlobalDiscriminatorChild.fields.keys).to include('_type')
522
489
  end
523
490
 
524
- it "does not have the new global value in the parent" do
525
- expect(GlobalDiscriminatorParent.fields.keys).to_not include("test")
491
+ it 'does not have the new global value in the parent' do
492
+ expect(GlobalDiscriminatorParent.fields.keys).not_to include('test')
526
493
  end
527
494
 
528
- it "does not have the new global value in the child" do
529
- expect(GlobalDiscriminatorChild.fields.keys).to_not include("test")
495
+ it 'does not have the new global value in the child' do
496
+ expect(GlobalDiscriminatorChild.fields.keys).not_to include('test')
530
497
  end
531
-
532
498
  end
533
499
 
534
- context "before class creation" do
535
- config_override :discriminator_key, "test"
500
+ context 'before class creation' do
501
+ config_override :discriminator_key, 'test'
536
502
 
537
503
  before do
538
504
  class PreGlobalDiscriminatorParent
@@ -543,26 +509,26 @@ describe Mongoid::Traversable do
543
509
  end
544
510
  end
545
511
 
546
- it "creates a field with new discriminator key in the parent" do
547
- expect(PreGlobalDiscriminatorParent.fields.keys).to include("test")
512
+ it 'creates a field with new discriminator key in the parent' do
513
+ expect(PreGlobalDiscriminatorParent.fields.keys).to include('test')
548
514
  end
549
515
 
550
- it "creates a field with new discriminator key in the child" do
551
- expect(PreGlobalDiscriminatorChild.fields.keys).to include("test")
516
+ it 'creates a field with new discriminator key in the child' do
517
+ expect(PreGlobalDiscriminatorChild.fields.keys).to include('test')
552
518
  end
553
519
 
554
- it "does not have the original discriminator key in the parent" do
555
- expect(PreGlobalDiscriminatorParent.fields.keys).to_not include("_type")
520
+ it 'does not have the original discriminator key in the parent' do
521
+ expect(PreGlobalDiscriminatorParent.fields.keys).not_to include('_type')
556
522
  end
557
523
 
558
- it "does not have the original discriminator key in the child" do
559
- expect(PreGlobalDiscriminatorChild.fields.keys).to_not include("_type")
524
+ it 'does not have the original discriminator key in the child' do
525
+ expect(PreGlobalDiscriminatorChild.fields.keys).not_to include('_type')
560
526
  end
561
527
  end
562
528
  end
563
529
 
564
- context "when the discriminator key is changed in the parent" do
565
- context "after child class creation" do
530
+ context 'when the discriminator key is changed in the parent' do
531
+ context 'after child class creation' do
566
532
  before do
567
533
  class LocalDiscriminatorParent
568
534
  include Mongoid::Document
@@ -571,47 +537,48 @@ describe Mongoid::Traversable do
571
537
  class LocalDiscriminatorChild < LocalDiscriminatorParent
572
538
  end
573
539
 
574
- LocalDiscriminatorParent.discriminator_key = "test2"
540
+ LocalDiscriminatorParent.discriminator_key = 'test2'
575
541
  end
576
542
 
577
- it "creates a new field in the parent" do
578
- expect(LocalDiscriminatorParent.fields.keys).to include("test2")
543
+ it 'creates a new field in the parent' do
544
+ expect(LocalDiscriminatorParent.fields.keys).to include('test2')
579
545
  end
580
546
 
581
- it "does not remove the original field in the parent" do
582
- expect(LocalDiscriminatorParent.fields.keys).to include("_type")
547
+ it 'does not remove the original field in the parent' do
548
+ expect(LocalDiscriminatorParent.fields.keys).to include('_type')
583
549
  end
584
550
 
585
- it "still has _type field in the child" do
586
- expect(LocalDiscriminatorChild.fields.keys).to include("_type")
551
+ it 'still has _type field in the child' do
552
+ expect(LocalDiscriminatorChild.fields.keys).to include('_type')
587
553
  end
588
554
 
589
- it "has the new field in the child" do
590
- expect(LocalDiscriminatorChild.fields.keys).to include("test2")
555
+ it 'has the new field in the child' do
556
+ expect(LocalDiscriminatorChild.fields.keys).to include('test2')
591
557
  end
592
558
  end
593
559
 
594
- context "before child class creation" do
560
+ context 'before child class creation' do
595
561
  before do
596
562
  class PreLocalDiscriminatorParent
597
563
  include Mongoid::Document
598
- self.discriminator_key = "test2"
564
+
565
+ self.discriminator_key = 'test2'
599
566
  end
600
567
 
601
568
  class PreLocalDiscriminatorChild < PreLocalDiscriminatorParent
602
569
  end
603
570
  end
604
571
 
605
- it "creates a new field in the parent" do
606
- expect(PreLocalDiscriminatorParent.fields.keys).to include("test2")
572
+ it 'creates a new field in the parent' do
573
+ expect(PreLocalDiscriminatorParent.fields.keys).to include('test2')
607
574
  end
608
575
 
609
- it "does not create the _type field in the parent" do
610
- expect(PreLocalDiscriminatorParent.fields.keys).to_not include("_type")
576
+ it 'does not create the _type field in the parent' do
577
+ expect(PreLocalDiscriminatorParent.fields.keys).not_to include('_type')
611
578
  end
612
579
 
613
- it "creates a new field in the child" do
614
- expect(PreLocalDiscriminatorChild.fields.keys).to include("test2")
580
+ it 'creates a new field in the child' do
581
+ expect(PreLocalDiscriminatorChild.fields.keys).to include('test2')
615
582
  end
616
583
  end
617
584
 
@@ -619,24 +586,25 @@ describe Mongoid::Traversable do
619
586
  before do
620
587
  class LocalDiscriminatorNonParent
621
588
  include Mongoid::Document
622
- self.discriminator_key = "test2"
589
+
590
+ self.discriminator_key = 'test2'
623
591
  end
624
592
  end
625
593
 
626
- it "does not create a _type field" do
627
- expect(LocalDiscriminatorNonParent.fields.keys).to_not include("_type")
594
+ it 'does not create a _type field' do
595
+ expect(LocalDiscriminatorNonParent.fields.keys).not_to include('_type')
628
596
  end
629
597
 
630
- it "does not create a new field" do
631
- expect(LocalDiscriminatorNonParent.fields.keys).to_not include("test2")
598
+ it 'does not create a new field' do
599
+ expect(LocalDiscriminatorNonParent.fields.keys).not_to include('test2')
632
600
  end
633
601
  end
634
602
  end
635
603
  end
636
604
 
637
- context "when setting the discriminator key as a symbol" do
638
- context "when the discriminator key is changed at the base level" do
639
- context "after class creation" do
605
+ context 'when setting the discriminator key as a symbol' do
606
+ context 'when the discriminator key is changed at the base level' do
607
+ context 'after class creation' do
640
608
  before do
641
609
  class GlobalSymDiscriminatorParent
642
610
  include Mongoid::Document
@@ -649,31 +617,31 @@ describe Mongoid::Traversable do
649
617
  end
650
618
 
651
619
  after do
652
- Mongoid.discriminator_key = "_type"
620
+ Mongoid.discriminator_key = '_type'
653
621
  end
654
622
 
655
- it "gets converted to a string in the parent" do
656
- expect(GlobalSymDiscriminatorParent.fields.keys).to_not include("test")
623
+ it 'gets converted to a string in the parent' do
624
+ expect(GlobalSymDiscriminatorParent.fields.keys).not_to include('test')
657
625
  end
658
626
 
659
- it "gets converted to a string in the child" do
660
- expect(GlobalSymDiscriminatorChild.fields.keys).to_not include("test")
627
+ it 'gets converted to a string in the child' do
628
+ expect(GlobalSymDiscriminatorChild.fields.keys).not_to include('test')
661
629
  end
662
630
 
663
- it "is a string globally" do
664
- expect(Mongoid.discriminator_key).to eq("test")
631
+ it 'is a string globally' do
632
+ expect(Mongoid.discriminator_key).to eq('test')
665
633
  end
666
634
 
667
- it "is a string in the parent" do
668
- expect(GlobalSymDiscriminatorParent.discriminator_key).to eq("test")
635
+ it 'is a string in the parent' do
636
+ expect(GlobalSymDiscriminatorParent.discriminator_key).to eq('test')
669
637
  end
670
638
 
671
- it "is a string in the child" do
672
- expect(GlobalSymDiscriminatorChild.discriminator_key).to eq("test")
639
+ it 'is a string in the child' do
640
+ expect(GlobalSymDiscriminatorChild.discriminator_key).to eq('test')
673
641
  end
674
642
  end
675
643
 
676
- context "before class creation" do
644
+ context 'before class creation' do
677
645
  config_override :discriminator_key, :test
678
646
 
679
647
  before do
@@ -685,30 +653,30 @@ describe Mongoid::Traversable do
685
653
  end
686
654
  end
687
655
 
688
- it "creates a field with new discriminator key as a string in the parent" do
689
- expect(PreGlobalSymDiscriminatorParent.fields.keys).to include("test")
656
+ it 'creates a field with new discriminator key as a string in the parent' do
657
+ expect(PreGlobalSymDiscriminatorParent.fields.keys).to include('test')
690
658
  end
691
659
 
692
- it "creates a field with new discriminator key as a string in the child" do
693
- expect(PreGlobalSymDiscriminatorChild.fields.keys).to include("test")
660
+ it 'creates a field with new discriminator key as a string in the child' do
661
+ expect(PreGlobalSymDiscriminatorChild.fields.keys).to include('test')
694
662
  end
695
663
 
696
- it "is a string globally" do
697
- expect(Mongoid.discriminator_key).to eq("test")
664
+ it 'is a string globally' do
665
+ expect(Mongoid.discriminator_key).to eq('test')
698
666
  end
699
667
 
700
- it "is a string in the parent" do
701
- expect(PreGlobalSymDiscriminatorParent.discriminator_key).to eq("test")
668
+ it 'is a string in the parent' do
669
+ expect(PreGlobalSymDiscriminatorParent.discriminator_key).to eq('test')
702
670
  end
703
671
 
704
- it "is a string in the child" do
705
- expect(PreGlobalSymDiscriminatorChild.discriminator_key).to eq("test")
672
+ it 'is a string in the child' do
673
+ expect(PreGlobalSymDiscriminatorChild.discriminator_key).to eq('test')
706
674
  end
707
675
  end
708
676
  end
709
677
 
710
- context "when the discriminator key is changed in the parent" do
711
- context "after child class creation" do
678
+ context 'when the discriminator key is changed in the parent' do
679
+ context 'after child class creation' do
712
680
  before do
713
681
  class LocalSymDiscriminatorParent
714
682
  include Mongoid::Document
@@ -720,27 +688,28 @@ describe Mongoid::Traversable do
720
688
  LocalSymDiscriminatorParent.discriminator_key = :test2
721
689
  end
722
690
 
723
- it "creates a new field of type string in the parent" do
724
- expect(LocalSymDiscriminatorParent.fields.keys).to include("test2")
691
+ it 'creates a new field of type string in the parent' do
692
+ expect(LocalSymDiscriminatorParent.fields.keys).to include('test2')
725
693
  end
726
694
 
727
- it "creates a new field of type string in the child" do
728
- expect(LocalSymDiscriminatorChild.fields.keys).to include("test2")
695
+ it 'creates a new field of type string in the child' do
696
+ expect(LocalSymDiscriminatorChild.fields.keys).to include('test2')
729
697
  end
730
698
 
731
- it "is a string in the parent" do
732
- expect(LocalSymDiscriminatorParent.discriminator_key).to eq("test2")
699
+ it 'is a string in the parent' do
700
+ expect(LocalSymDiscriminatorParent.discriminator_key).to eq('test2')
733
701
  end
734
702
 
735
- it "is a string in the child" do
736
- expect(LocalSymDiscriminatorChild.discriminator_key).to eq("test2")
703
+ it 'is a string in the child' do
704
+ expect(LocalSymDiscriminatorChild.discriminator_key).to eq('test2')
737
705
  end
738
706
  end
739
707
 
740
- context "before child class creation" do
708
+ context 'before child class creation' do
741
709
  before do
742
710
  class PreLocalSymDiscriminatorParent
743
711
  include Mongoid::Document
712
+
744
713
  self.discriminator_key = :test2
745
714
  end
746
715
 
@@ -748,27 +717,27 @@ describe Mongoid::Traversable do
748
717
  end
749
718
  end
750
719
 
751
- it "creates a new field of type string in the parent" do
752
- expect(PreLocalSymDiscriminatorParent.fields.keys).to include("test2")
720
+ it 'creates a new field of type string in the parent' do
721
+ expect(PreLocalSymDiscriminatorParent.fields.keys).to include('test2')
753
722
  end
754
723
 
755
- it "creates a new field of type string in the child" do
756
- expect(PreLocalSymDiscriminatorChild.fields.keys).to include("test2")
724
+ it 'creates a new field of type string in the child' do
725
+ expect(PreLocalSymDiscriminatorChild.fields.keys).to include('test2')
757
726
  end
758
727
 
759
- it "is a string in the parent" do
760
- expect(PreLocalSymDiscriminatorParent.discriminator_key).to eq("test2")
728
+ it 'is a string in the parent' do
729
+ expect(PreLocalSymDiscriminatorParent.discriminator_key).to eq('test2')
761
730
  end
762
731
 
763
- it "is a string in the child" do
764
- expect(PreLocalSymDiscriminatorChild.discriminator_key).to eq("test2")
732
+ it 'is a string in the child' do
733
+ expect(PreLocalSymDiscriminatorChild.discriminator_key).to eq('test2')
765
734
  end
766
735
  end
767
736
  end
768
737
  end
769
738
 
770
- context "when setting the discriminator key as" do
771
- context "a number" do
739
+ context 'when setting the discriminator key as' do
740
+ context 'a number' do
772
741
  before do
773
742
  Instrument.discriminator_key = 3
774
743
  end
@@ -777,24 +746,24 @@ describe Mongoid::Traversable do
777
746
  Instrument.discriminator_key = nil
778
747
  end
779
748
 
780
- it "gets converted to a string" do
781
- expect(Instrument.fields.keys).to include("3")
749
+ it 'gets converted to a string' do
750
+ expect(Instrument.fields.keys).to include('3')
782
751
  end
783
752
 
784
- it "is a string in the parent" do
785
- expect(Instrument.discriminator_key).to eq("3")
753
+ it 'is a string in the parent' do
754
+ expect(Instrument.discriminator_key).to eq('3')
786
755
  end
787
756
 
788
- it "is a string in the child: Guitar" do
789
- expect(Guitar.discriminator_key).to eq("3")
757
+ it 'is a string in the child: Guitar' do
758
+ expect(Guitar.discriminator_key).to eq('3')
790
759
  end
791
760
 
792
- it "is a string in the child: Piano" do
793
- expect(Piano.discriminator_key).to eq("3")
761
+ it 'is a string in the child: Piano' do
762
+ expect(Piano.discriminator_key).to eq('3')
794
763
  end
795
764
  end
796
765
 
797
- context "a boolean" do
766
+ context 'a boolean' do
798
767
  before do
799
768
  Instrument.discriminator_key = true
800
769
  end
@@ -803,31 +772,31 @@ describe Mongoid::Traversable do
803
772
  Instrument.discriminator_key = nil
804
773
  end
805
774
 
806
- it "gets converted to a string" do
807
- expect(Instrument.fields.keys).to include("true")
775
+ it 'gets converted to a string' do
776
+ expect(Instrument.fields.keys).to include('true')
808
777
  end
809
778
 
810
- it "is a string in the parent" do
811
- expect(Instrument.discriminator_key).to eq("true")
779
+ it 'is a string in the parent' do
780
+ expect(Instrument.discriminator_key).to eq('true')
812
781
  end
813
782
 
814
- it "is a string in the child: Guitar" do
815
- expect(Guitar.discriminator_key).to eq("true")
783
+ it 'is a string in the child: Guitar' do
784
+ expect(Guitar.discriminator_key).to eq('true')
816
785
  end
817
786
 
818
- it "is a string in the child: Piano" do
819
- expect(Piano.discriminator_key).to eq("true")
787
+ it 'is a string in the child: Piano' do
788
+ expect(Piano.discriminator_key).to eq('true')
820
789
  end
821
790
  end
822
791
  end
823
792
 
824
- context "when setting a field equal to discriminator key and duplicate_fields_exception is true" do
793
+ context 'when setting a field equal to discriminator key and duplicate_fields_exception is true' do
825
794
  config_override :duplicate_fields_exception, true
826
795
 
827
796
  before do
828
-
829
797
  class DuplicateDiscriminatorKeyParent
830
798
  include Mongoid::Document
799
+
831
800
  field :dkey, type: String
832
801
  end
833
802
 
@@ -835,37 +804,34 @@ describe Mongoid::Traversable do
835
804
  end
836
805
  end
837
806
 
838
- it "does not raise an error" do
807
+ it 'does not raise an error' do
839
808
  expect do
840
- DuplicateDiscriminatorKeyParent.discriminator_key = "dkey"
841
- end.to_not raise_error
809
+ DuplicateDiscriminatorKeyParent.discriminator_key = 'dkey'
810
+ end.not_to raise_error
842
811
  end
843
812
  end
844
813
 
845
814
  context "when the discriminator key conflicts with mongoid's internals" do
846
-
847
815
  after do
848
816
  Person.discriminator_key = nil
849
817
  end
850
818
 
851
- [:_association, :invalid].each do |meth|
819
+ %i[_association invalid].each do |meth|
852
820
  context "when the field is named #{meth}" do
853
-
854
- it "raises an error" do
855
- expect {
821
+ it 'raises an error' do
822
+ expect do
856
823
  Person.discriminator_key = meth
857
- }.to raise_error(Mongoid::Errors::InvalidField)
824
+ end.to raise_error(Mongoid::Errors::InvalidField)
858
825
  end
859
826
  end
860
827
  end
861
828
  end
862
829
 
863
- context "when setting a field equal to global discriminator key and duplicate_fields_exception is true" do
830
+ context 'when setting a field equal to global discriminator key and duplicate_fields_exception is true' do
864
831
  config_override :duplicate_fields_exception, true
865
- config_override :discriminator_key, "dkey"
832
+ config_override :discriminator_key, 'dkey'
866
833
 
867
834
  before do
868
-
869
835
  class GlobalDuplicateDiscriminatorKeyParent
870
836
  include Mongoid::Document
871
837
  end
@@ -874,10 +840,10 @@ describe Mongoid::Traversable do
874
840
  end
875
841
  end
876
842
 
877
- it "raises an error" do
843
+ it 'raises an error' do
878
844
  expect do
879
845
  GlobalDuplicateDiscriminatorKeyParent.class_eval do
880
- field("dkey")
846
+ field('dkey')
881
847
  end
882
848
  end.to raise_error(Mongoid::Errors::InvalidField)
883
849
  end
@@ -888,10 +854,9 @@ describe Mongoid::Traversable do
888
854
  # after the test only.
889
855
  config_override :discriminator_key, '_type'
890
856
 
891
- [:_association, :invalid].each do |meth|
857
+ %i[_association invalid].each do |meth|
892
858
  context "when the field is named #{meth}" do
893
-
894
- it "raises an error" do
859
+ it 'raises an error' do
895
860
  expect do
896
861
  Mongoid.discriminator_key = meth
897
862
  end.to raise_error(Mongoid::Errors::InvalidField)
@@ -901,99 +866,95 @@ describe Mongoid::Traversable do
901
866
  end
902
867
  end
903
868
 
904
- describe "#discriminator_value" do
905
-
906
- context "when the discriminator value is not set" do
907
-
908
- it "has the correct discriminator_value" do
909
- expect(Guitar.discriminator_value).to eq("Guitar")
869
+ describe '#discriminator_value' do
870
+ context 'when the discriminator value is not set' do
871
+ it 'has the correct discriminator_value' do
872
+ expect(Guitar.discriminator_value).to eq('Guitar')
910
873
  end
911
874
 
912
- it "has the correct discriminator_value" do
913
- expect(Piano.discriminator_value).to eq("Piano")
875
+ it 'has the correct discriminator_value' do
876
+ expect(Piano.discriminator_value).to eq('Piano')
914
877
  end
915
878
 
916
- it "has the correct discriminator_value" do
917
- expect(Instrument.discriminator_value).to eq("Instrument")
879
+ it 'has the correct discriminator_value' do
880
+ expect(Instrument.discriminator_value).to eq('Instrument')
918
881
  end
919
882
  end
920
883
 
921
-
922
- context "when the discriminator value is set on the child class" do
884
+ context 'when the discriminator value is set on the child class' do
923
885
  before do
924
- Guitar.discriminator_value = "some string instrument"
886
+ Guitar.discriminator_value = 'some string instrument'
925
887
  end
926
888
 
927
889
  after do
928
890
  Guitar.discriminator_value = nil
929
891
  end
930
892
 
931
- it "has the correct discriminator_value" do
932
- expect(Guitar.discriminator_value).to eq("some string instrument")
893
+ it 'has the correct discriminator_value' do
894
+ expect(Guitar.discriminator_value).to eq('some string instrument')
933
895
  end
934
896
 
935
897
  it "does not change the sibling's discriminator value" do
936
- expect(Piano.discriminator_value).to eq("Piano")
898
+ expect(Piano.discriminator_value).to eq('Piano')
937
899
  end
938
900
 
939
901
  it "does not change the parent's discriminator value" do
940
- expect(Instrument.discriminator_value).to eq("Instrument")
902
+ expect(Instrument.discriminator_value).to eq('Instrument')
941
903
  end
942
904
  end
943
905
 
944
- context "when the discriminator value is set on the parent" do
906
+ context 'when the discriminator value is set on the parent' do
945
907
  before do
946
- Instrument.discriminator_value = "musical thingy"
908
+ Instrument.discriminator_value = 'musical thingy'
947
909
  end
948
910
 
949
911
  after do
950
912
  Instrument.discriminator_value = nil
951
913
  end
952
914
 
953
- it "is changed in the parent" do
954
- expect(Instrument.discriminator_value).to eq("musical thingy")
915
+ it 'is changed in the parent' do
916
+ expect(Instrument.discriminator_value).to eq('musical thingy')
955
917
  end
956
918
 
957
- it "is not changed in the child: Guitar" do
958
- expect(Guitar.discriminator_value).to eq("Guitar")
919
+ it 'is not changed in the child: Guitar' do
920
+ expect(Guitar.discriminator_value).to eq('Guitar')
959
921
  end
960
922
 
961
- it "is not changed in the child: Piano" do
962
- expect(Piano.discriminator_value).to eq("Piano")
923
+ it 'is not changed in the child: Piano' do
924
+ expect(Piano.discriminator_value).to eq('Piano')
963
925
  end
964
926
  end
965
927
 
966
- context "when setting the discriminator value to nil" do
928
+ context 'when setting the discriminator value to nil' do
967
929
  before do
968
- Guitar.discriminator_value = "some string instrument"
930
+ Guitar.discriminator_value = 'some string instrument'
969
931
  Guitar.discriminator_value = nil
970
932
  end
971
933
 
972
- it "reverts back to default" do
973
- expect(Guitar.discriminator_value).to eq("Guitar")
934
+ it 'reverts back to default' do
935
+ expect(Guitar.discriminator_value).to eq('Guitar')
974
936
  end
975
937
  end
976
938
 
977
- context "when setting discriminator value on parent that is also a child" do
939
+ context 'when setting discriminator value on parent that is also a child' do
978
940
  before do
979
- Browser.discriminator_value = "something"
941
+ Browser.discriminator_value = 'something'
980
942
  end
981
943
 
982
944
  after do
983
945
  Browser.discriminator_value = nil
984
946
  end
985
947
 
986
- it "has the correct value in the parent" do
987
- expect(Browser.discriminator_value).to eq("something")
948
+ it 'has the correct value in the parent' do
949
+ expect(Browser.discriminator_value).to eq('something')
988
950
  end
989
951
 
990
952
  it "doesn't set the grandchild's discriminator value" do
991
- expect(Firefox.discriminator_value).to eq("Firefox")
953
+ expect(Firefox.discriminator_value).to eq('Firefox')
992
954
  end
993
955
  end
994
956
 
995
- describe ".fields" do
996
-
957
+ describe '.fields' do
997
958
  let(:guitar) do
998
959
  Guitar.new
999
960
  end
@@ -1006,126 +967,126 @@ describe Mongoid::Traversable do
1006
967
  Instrument.new
1007
968
  end
1008
969
 
1009
- context "when the discriminator value is not set" do
1010
- it "has the correct discriminator_value" do
1011
- expect(guitar._type).to eq("Guitar")
970
+ context 'when the discriminator value is not set' do
971
+ it 'has the correct discriminator_value' do
972
+ expect(guitar._type).to eq('Guitar')
1012
973
  end
1013
974
 
1014
- it "has the correct discriminator_value" do
1015
- expect(piano._type).to eq("Piano")
975
+ it 'has the correct discriminator_value' do
976
+ expect(piano._type).to eq('Piano')
1016
977
  end
1017
978
 
1018
- it "has the correct discriminator_value" do
1019
- expect(instrument._type).to eq("Instrument")
979
+ it 'has the correct discriminator_value' do
980
+ expect(instrument._type).to eq('Instrument')
1020
981
  end
1021
982
  end
1022
983
 
1023
- context "when the discriminator value is set on the child class" do
984
+ context 'when the discriminator value is set on the child class' do
1024
985
  before do
1025
- Guitar.discriminator_value = "some string instrument"
986
+ Guitar.discriminator_value = 'some string instrument'
1026
987
  end
1027
988
 
1028
989
  after do
1029
990
  Guitar.discriminator_value = nil
1030
991
  end
1031
992
 
1032
- it "has the correct discriminator_value" do
1033
- expect(guitar._type).to eq("some string instrument")
993
+ it 'has the correct discriminator_value' do
994
+ expect(guitar._type).to eq('some string instrument')
1034
995
  end
1035
996
 
1036
997
  it "does not change the sibling's discriminator value" do
1037
- expect(piano._type).to eq("Piano")
998
+ expect(piano._type).to eq('Piano')
1038
999
  end
1039
1000
 
1040
1001
  it "does not change the parent's discriminator value" do
1041
- expect(instrument._type).to eq("Instrument")
1002
+ expect(instrument._type).to eq('Instrument')
1042
1003
  end
1043
1004
 
1044
- it "retrieves the correct discriminator_mapping from the parent" do
1005
+ it 'retrieves the correct discriminator_mapping from the parent' do
1045
1006
  expect(
1046
- Instrument.get_discriminator_mapping("some string instrument")
1007
+ Instrument.get_discriminator_mapping('some string instrument')
1047
1008
  ).to eq(Guitar)
1048
1009
  end
1049
1010
 
1050
- it "retrieves the correct discriminator_mapping from the child: Guitar" do
1011
+ it 'retrieves the correct discriminator_mapping from the child: Guitar' do
1051
1012
  expect(
1052
- Guitar.get_discriminator_mapping("some string instrument")
1013
+ Guitar.get_discriminator_mapping('some string instrument')
1053
1014
  ).to eq(Guitar)
1054
1015
  end
1055
1016
 
1056
- it "is not retrieved from the sibling" do
1017
+ it 'is not retrieved from the sibling' do
1057
1018
  expect(
1058
- Piano.get_discriminator_mapping("some string instrument")
1059
- ).to be nil
1019
+ Piano.get_discriminator_mapping('some string instrument')
1020
+ ).to be_nil
1060
1021
  end
1061
1022
  end
1062
1023
 
1063
- context "when the discriminator value is set on the parent" do
1024
+ context 'when the discriminator value is set on the parent' do
1064
1025
  before do
1065
- Instrument.discriminator_value = "musical thingy"
1026
+ Instrument.discriminator_value = 'musical thingy'
1066
1027
  end
1067
1028
 
1068
1029
  after do
1069
1030
  Instrument.discriminator_value = nil
1070
1031
  end
1071
1032
 
1072
- it "is changed in the parent" do
1073
- expect(instrument._type).to eq("musical thingy")
1033
+ it 'is changed in the parent' do
1034
+ expect(instrument._type).to eq('musical thingy')
1074
1035
  end
1075
1036
 
1076
- it "is not changed in the child: Guitar" do
1077
- expect(guitar._type).to eq("Guitar")
1037
+ it 'is not changed in the child: Guitar' do
1038
+ expect(guitar._type).to eq('Guitar')
1078
1039
  end
1079
1040
 
1080
- it "is not changed in the child: Piano" do
1081
- expect(piano._type).to eq("Piano")
1041
+ it 'is not changed in the child: Piano' do
1042
+ expect(piano._type).to eq('Piano')
1082
1043
  end
1083
1044
 
1084
- it "retrieves the correct discriminator_mapping from the parent" do
1045
+ it 'retrieves the correct discriminator_mapping from the parent' do
1085
1046
  expect(
1086
- Instrument.get_discriminator_mapping("musical thingy")
1047
+ Instrument.get_discriminator_mapping('musical thingy')
1087
1048
  ).to eq(Instrument)
1088
1049
  end
1089
1050
 
1090
- it "is not retrieved from the child: Guitar" do
1051
+ it 'is not retrieved from the child: Guitar' do
1091
1052
  expect(
1092
- Guitar.get_discriminator_mapping("musical thingy")
1093
- ).to be nil
1053
+ Guitar.get_discriminator_mapping('musical thingy')
1054
+ ).to be_nil
1094
1055
  end
1095
1056
 
1096
- it "is not retrieved from the child: Piano" do
1057
+ it 'is not retrieved from the child: Piano' do
1097
1058
  expect(
1098
- Piano.get_discriminator_mapping("musical thingy")
1099
- ).to be nil
1059
+ Piano.get_discriminator_mapping('musical thingy')
1060
+ ).to be_nil
1100
1061
  end
1101
1062
  end
1102
1063
 
1103
- context "when setting the discriminator value to nil" do
1064
+ context 'when setting the discriminator value to nil' do
1104
1065
  before do
1105
- Guitar.discriminator_value = "some string instrument"
1066
+ Guitar.discriminator_value = 'some string instrument'
1106
1067
  Guitar.discriminator_value = nil
1107
1068
  end
1108
1069
 
1109
- it "reverts back to default" do
1110
- expect(guitar._type).to eq("Guitar")
1070
+ it 'reverts back to default' do
1071
+ expect(guitar._type).to eq('Guitar')
1111
1072
  end
1112
1073
 
1113
- it "retrieves the correct discriminator_mapping" do
1074
+ it 'retrieves the correct discriminator_mapping' do
1114
1075
  expect(
1115
- Instrument.get_discriminator_mapping("Guitar")
1076
+ Instrument.get_discriminator_mapping('Guitar')
1116
1077
  ).to eq(Guitar)
1117
1078
  end
1118
1079
 
1119
- it "retrieves the old discriminator_mapping" do
1080
+ it 'retrieves the old discriminator_mapping' do
1120
1081
  expect(
1121
- Instrument.get_discriminator_mapping("some string instrument")
1082
+ Instrument.get_discriminator_mapping('some string instrument')
1122
1083
  ).to eq(Guitar)
1123
1084
  end
1124
1085
  end
1125
1086
 
1126
- context "when setting discriminator value on parent that is also a child" do
1087
+ context 'when setting discriminator value on parent that is also a child' do
1127
1088
  before do
1128
- Browser.discriminator_value = "something"
1089
+ Browser.discriminator_value = 'something'
1129
1090
  end
1130
1091
 
1131
1092
  after do
@@ -1140,37 +1101,37 @@ describe Mongoid::Traversable do
1140
1101
  Firefox.new
1141
1102
  end
1142
1103
 
1143
- it "has the correct value in the parent" do
1144
- expect(browser._type).to eq("something")
1104
+ it 'has the correct value in the parent' do
1105
+ expect(browser._type).to eq('something')
1145
1106
  end
1146
1107
 
1147
1108
  it "doesn't set the grandchild's discriminator value" do
1148
- expect(firefox._type).to eq("Firefox")
1109
+ expect(firefox._type).to eq('Firefox')
1149
1110
  end
1150
1111
 
1151
- it "retrieves the correct discriminator_mapping from the grandparent" do
1112
+ it 'retrieves the correct discriminator_mapping from the grandparent' do
1152
1113
  expect(
1153
- Canvas.get_discriminator_mapping("something")
1114
+ Canvas.get_discriminator_mapping('something')
1154
1115
  ).to eq(Browser)
1155
1116
  end
1156
1117
 
1157
- it "retrieves the correct discriminator_mapping from the parent" do
1118
+ it 'retrieves the correct discriminator_mapping from the parent' do
1158
1119
  expect(
1159
- Browser.get_discriminator_mapping("something")
1120
+ Browser.get_discriminator_mapping('something')
1160
1121
  ).to eq(Browser)
1161
1122
  end
1162
1123
 
1163
- it "is not retrieved from the grandchild" do
1124
+ it 'is not retrieved from the grandchild' do
1164
1125
  expect(
1165
- Firefox.get_discriminator_mapping("something")
1166
- ).to be nil
1126
+ Firefox.get_discriminator_mapping('something')
1127
+ ).to be_nil
1167
1128
  end
1168
1129
  end
1169
1130
 
1170
- context "when changing the discriminator key" do
1131
+ context 'when changing the discriminator key' do
1171
1132
  before do
1172
- Instrument.discriminator_key = "dkey"
1173
- Guitar.discriminator_value = "string instrument"
1133
+ Instrument.discriminator_key = 'dkey'
1134
+ Guitar.discriminator_value = 'string instrument'
1174
1135
  end
1175
1136
 
1176
1137
  after do
@@ -1182,83 +1143,86 @@ describe Mongoid::Traversable do
1182
1143
  Guitar.new
1183
1144
  end
1184
1145
 
1185
- it "has the correct discriminator_value for the new discriminator_key" do
1186
- expect(guitar.dkey).to eq("string instrument")
1146
+ it 'has the correct discriminator_value for the new discriminator_key' do
1147
+ expect(guitar.dkey).to eq('string instrument')
1187
1148
  end
1188
1149
 
1189
- it "has the correct discriminator_value for the old discriminator_key" do
1190
- expect(guitar._type).to eq("string instrument")
1150
+ it 'has the correct discriminator_value for the old discriminator_key' do
1151
+ expect(guitar._type).to eq('string instrument')
1191
1152
  end
1192
1153
 
1193
- it "retrieves the correct discriminator_mapping from the parent" do
1154
+ it 'retrieves the correct discriminator_mapping from the parent' do
1194
1155
  expect(
1195
- Instrument.get_discriminator_mapping("string instrument")
1156
+ Instrument.get_discriminator_mapping('string instrument')
1196
1157
  ).to eq(Guitar)
1197
1158
  end
1198
1159
 
1199
- it "retrieves the correct discriminator_mapping from the child: Guitar" do
1160
+ it 'retrieves the correct discriminator_mapping from the child: Guitar' do
1200
1161
  expect(
1201
- Guitar.get_discriminator_mapping("string instrument")
1162
+ Guitar.get_discriminator_mapping('string instrument')
1202
1163
  ).to eq(Guitar)
1203
1164
  end
1204
1165
 
1205
- it "is not retrieved from the sibling" do
1166
+ it 'is not retrieved from the sibling' do
1206
1167
  expect(
1207
- Piano.get_discriminator_mapping("string instrument")
1208
- ).to be nil
1168
+ Piano.get_discriminator_mapping('string instrument')
1169
+ ).to be_nil
1209
1170
  end
1210
1171
  end
1211
1172
 
1212
- context "when the discriminator value is set twice" do
1173
+ context 'when the discriminator value is set twice' do
1213
1174
  before do
1214
- Instrument.discriminator_value = "something"
1215
- Instrument.discriminator_value = "musical thingy"
1175
+ Instrument.discriminator_value = 'something'
1176
+ Instrument.discriminator_value = 'musical thingy'
1216
1177
  end
1217
1178
 
1218
1179
  after do
1219
1180
  Instrument.discriminator_value = nil
1220
1181
  end
1221
1182
 
1222
- it "is changed in the parent" do
1223
- expect(instrument._type).to eq("musical thingy")
1183
+ it 'is changed in the parent' do
1184
+ expect(instrument._type).to eq('musical thingy')
1224
1185
  end
1225
1186
 
1226
- it "is not changed in the child: Guitar" do
1227
- expect(guitar._type).to eq("Guitar")
1187
+ it 'is not changed in the child: Guitar' do
1188
+ expect(guitar._type).to eq('Guitar')
1228
1189
  end
1229
1190
 
1230
- it "is not changed in the child: Piano" do
1231
- expect(piano._type).to eq("Piano")
1191
+ it 'is not changed in the child: Piano' do
1192
+ expect(piano._type).to eq('Piano')
1232
1193
  end
1233
1194
 
1234
- it "retrieves the correct discriminator_mapping from the parent" do
1195
+ it 'retrieves the correct discriminator_mapping from the parent' do
1235
1196
  expect(
1236
- Instrument.get_discriminator_mapping("musical thingy")
1197
+ Instrument.get_discriminator_mapping('musical thingy')
1237
1198
  ).to eq(Instrument)
1238
1199
  end
1239
1200
 
1240
- it "is not retrieved from the child: Guitar" do
1201
+ it 'is not retrieved from the child: Guitar' do
1241
1202
  expect(
1242
- Guitar.get_discriminator_mapping("musical thingy")
1243
- ).to be nil
1203
+ Guitar.get_discriminator_mapping('musical thingy')
1204
+ ).to be_nil
1244
1205
  end
1245
1206
 
1246
- it "ris not retrieved from the child: Piano" do
1207
+ it 'ris not retrieved from the child: Piano' do
1247
1208
  expect(
1248
- Piano.get_discriminator_mapping("musical thingy")
1249
- ).to be nil
1209
+ Piano.get_discriminator_mapping('musical thingy')
1210
+ ).to be_nil
1250
1211
  end
1251
1212
  end
1252
1213
  end
1253
1214
 
1254
- context "when using the Class.new syntax" do
1255
- context "when assigning to a constant" do
1215
+ context 'when using the Class.new syntax' do
1216
+ context 'when assigning to a constant' do
1256
1217
  before :all do
1257
- NewClassPerson = Class.new(Person)
1258
- NewClassPerson2 = Class.new(NewClassPerson)
1218
+ class NewClassPerson < Person
1219
+ end
1220
+
1221
+ class NewClassPerson2 < NewClassPerson
1222
+ end
1259
1223
  end
1260
1224
 
1261
- it "has the correct discriminator_value when doing one Class.new" do
1225
+ it 'has the correct discriminator_value when doing one Class.new' do
1262
1226
  expect(NewClassPerson.discriminator_value).to eq('NewClassPerson')
1263
1227
  end
1264
1228
 
@@ -1269,127 +1233,127 @@ describe Mongoid::Traversable do
1269
1233
  end
1270
1234
  end
1271
1235
 
1272
- describe "#discriminator_mapping" do
1273
- context "when not changing discriminator_mappings" do
1274
- it "has the class name as the value: Instrument" do
1236
+ describe '#discriminator_mapping' do
1237
+ context 'when not changing discriminator_mappings' do
1238
+ it 'has the class name as the value: Instrument' do
1275
1239
  expect(
1276
- Instrument.get_discriminator_mapping("Instrument")
1240
+ Instrument.get_discriminator_mapping('Instrument')
1277
1241
  ).to eq(Instrument)
1278
1242
  end
1279
1243
 
1280
- it "has the class name as the value: Guitar" do
1244
+ it 'has the class name as the value: Guitar' do
1281
1245
  expect(
1282
- Guitar.get_discriminator_mapping("Guitar")
1246
+ Guitar.get_discriminator_mapping('Guitar')
1283
1247
  ).to eq(Guitar)
1284
1248
  end
1285
1249
 
1286
- it "has the class name as the value: Piano" do
1250
+ it 'has the class name as the value: Piano' do
1287
1251
  expect(
1288
- Piano.get_discriminator_mapping("Piano")
1252
+ Piano.get_discriminator_mapping('Piano')
1289
1253
  ).to eq(Piano)
1290
1254
  end
1291
1255
  end
1292
1256
 
1293
- context "when adding to the parent" do
1257
+ context 'when adding to the parent' do
1294
1258
  before do
1295
- Instrument.add_discriminator_mapping("some_dmap")
1259
+ Instrument.add_discriminator_mapping('some_dmap')
1296
1260
  end
1297
1261
 
1298
1262
  after do
1299
- Instrument.add_discriminator_mapping("Instrument")
1263
+ Instrument.add_discriminator_mapping('Instrument')
1300
1264
  end
1301
1265
 
1302
- it "can be retrieved from the parent" do
1266
+ it 'can be retrieved from the parent' do
1303
1267
  expect(
1304
- Instrument.get_discriminator_mapping("some_dmap")
1268
+ Instrument.get_discriminator_mapping('some_dmap')
1305
1269
  ).to eq(Instrument)
1306
1270
  end
1307
1271
 
1308
- it "can be retrieved from the child: Guitar" do
1272
+ it 'can be retrieved from the child: Guitar' do
1309
1273
  expect(
1310
- Guitar.get_discriminator_mapping("some_dmap")
1311
- ).to be nil
1274
+ Guitar.get_discriminator_mapping('some_dmap')
1275
+ ).to be_nil
1312
1276
  end
1313
1277
 
1314
- it "can be retrieved from the child: Piano" do
1278
+ it 'can be retrieved from the child: Piano' do
1315
1279
  expect(
1316
- Piano.get_discriminator_mapping("some_dmap")
1317
- ).to be nil
1280
+ Piano.get_discriminator_mapping('some_dmap')
1281
+ ).to be_nil
1318
1282
  end
1319
1283
  end
1320
1284
 
1321
- context "when adding to the child" do
1285
+ context 'when adding to the child' do
1322
1286
  before do
1323
- Guitar.add_discriminator_mapping("something")
1287
+ Guitar.add_discriminator_mapping('something')
1324
1288
  end
1325
1289
 
1326
1290
  after do
1327
- Guitar.add_discriminator_mapping("Guitar")
1291
+ Guitar.add_discriminator_mapping('Guitar')
1328
1292
  end
1329
1293
 
1330
- it "can be retrieved from the parent" do
1294
+ it 'can be retrieved from the parent' do
1331
1295
  expect(
1332
- Instrument.get_discriminator_mapping("something")
1296
+ Instrument.get_discriminator_mapping('something')
1333
1297
  ).to eq(Guitar)
1334
1298
  end
1335
1299
 
1336
- it "can be retrieved from the child: Guitar" do
1300
+ it 'can be retrieved from the child: Guitar' do
1337
1301
  expect(
1338
- Guitar.get_discriminator_mapping("something")
1302
+ Guitar.get_discriminator_mapping('something')
1339
1303
  ).to eq(Guitar)
1340
1304
  end
1341
1305
 
1342
- it "is not retrieved from the sibling" do
1306
+ it 'is not retrieved from the sibling' do
1343
1307
  expect(
1344
- Piano.get_discriminator_mapping("something")
1345
- ).to be nil
1308
+ Piano.get_discriminator_mapping('something')
1309
+ ).to be_nil
1346
1310
  end
1347
1311
  end
1348
1312
 
1349
- context "when adding to the same class twice" do
1313
+ context 'when adding to the same class twice' do
1350
1314
  before do
1351
- Guitar.add_discriminator_mapping("something")
1352
- Guitar.add_discriminator_mapping("something else")
1315
+ Guitar.add_discriminator_mapping('something')
1316
+ Guitar.add_discriminator_mapping('something else')
1353
1317
  end
1354
1318
 
1355
1319
  after do
1356
- Guitar.add_discriminator_mapping("Guitar")
1320
+ Guitar.add_discriminator_mapping('Guitar')
1357
1321
  end
1358
1322
 
1359
- it "retrieves the new value from the parent" do
1323
+ it 'retrieves the new value from the parent' do
1360
1324
  expect(
1361
- Instrument.get_discriminator_mapping("something else")
1325
+ Instrument.get_discriminator_mapping('something else')
1362
1326
  ).to eq(Guitar)
1363
1327
  end
1364
1328
 
1365
- it "retrieves the new value from the child: Guitar" do
1329
+ it 'retrieves the new value from the child: Guitar' do
1366
1330
  expect(
1367
- Guitar.get_discriminator_mapping("something else")
1331
+ Guitar.get_discriminator_mapping('something else')
1368
1332
  ).to eq(Guitar)
1369
1333
  end
1370
1334
 
1371
- it "is not retrieved from the sibling" do
1335
+ it 'is not retrieved from the sibling' do
1372
1336
  expect(
1373
- Piano.get_discriminator_mapping("something else")
1374
- ).to be nil
1337
+ Piano.get_discriminator_mapping('something else')
1338
+ ).to be_nil
1375
1339
  end
1376
1340
 
1377
- it "retrieves the old value from the parent" do
1341
+ it 'retrieves the old value from the parent' do
1378
1342
  expect(
1379
- Instrument.get_discriminator_mapping("something")
1343
+ Instrument.get_discriminator_mapping('something')
1380
1344
  ).to eq(Guitar)
1381
1345
  end
1382
1346
 
1383
- it "retrieves the old value from the child: Guitar" do
1347
+ it 'retrieves the old value from the child: Guitar' do
1384
1348
  expect(
1385
- Guitar.get_discriminator_mapping("something")
1349
+ Guitar.get_discriminator_mapping('something')
1386
1350
  ).to eq(Guitar)
1387
1351
  end
1388
1352
 
1389
- it "does not retrieves the old value from the sibling" do
1353
+ it 'does not retrieves the old value from the sibling' do
1390
1354
  expect(
1391
- Piano.get_discriminator_mapping("something")
1392
- ).to be nil
1355
+ Piano.get_discriminator_mapping('something')
1356
+ ).to be_nil
1393
1357
  end
1394
1358
  end
1395
1359
  end