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,14 +1,10 @@
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::Association::Referenced::HasOne::Proxy do
7
-
8
- describe "#=" do
9
-
10
- context "when the relationship is an illegal embedded reference" do
11
-
6
+ describe '#=' do
7
+ context 'when the relationship is an illegal embedded reference' do
12
8
  let(:game) do
13
9
  Game.new
14
10
  end
@@ -17,15 +13,14 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
17
13
  Video.new
18
14
  end
19
15
 
20
- it "raises a mixed relation error" do
21
- expect {
16
+ it 'raises a mixed relation error' do
17
+ expect do
22
18
  game.video = video
23
- }.to raise_error(Mongoid::Errors::MixedRelations)
19
+ end.to raise_error(Mongoid::Errors::MixedRelations)
24
20
  end
25
21
  end
26
22
 
27
- context "when the relation is cyclic" do
28
-
23
+ context 'when the relation is cyclic' do
29
24
  let(:user) do
30
25
  User.new
31
26
  end
@@ -38,15 +33,13 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
38
33
  user.role = role
39
34
  end
40
35
 
41
- it "does not raise an error" do
36
+ it 'does not raise an error' do
42
37
  expect(user.role).to eq(role)
43
38
  end
44
39
  end
45
40
 
46
- context "when the relation is not polymorphic" do
47
-
48
- context "when the parent is a new record" do
49
-
41
+ context 'when the relation is not polymorphic' do
42
+ context 'when the parent is a new record' do
50
43
  let(:person) do
51
44
  Person.new
52
45
  end
@@ -56,37 +49,36 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
56
49
  end
57
50
 
58
51
  let(:association) do
59
- Game.relations["person"]
52
+ Game.relations['person']
60
53
  end
61
54
 
62
55
  before do
63
- expect(association).to receive(:criteria).never
56
+ expect(association).not_to receive(:criteria)
64
57
  person.game = game
65
58
  end
66
59
 
67
- it "sets the target of the relation" do
60
+ it 'sets the target of the relation' do
68
61
  expect(person.game._target).to eq(game)
69
62
  end
70
63
 
71
- it "sets the foreign key on the relation" do
64
+ it 'sets the foreign key on the relation' do
72
65
  expect(game.person_id).to eq(person.id)
73
66
  end
74
67
 
75
- it "sets the base on the inverse relation" do
68
+ it 'sets the base on the inverse relation' do
76
69
  expect(game.person).to eq(person)
77
70
  end
78
71
 
79
- it "sets the same instance on the inverse relation" do
72
+ it 'sets the same instance on the inverse relation' do
80
73
  expect(game.person).to eql(person)
81
74
  end
82
75
 
83
- it "does not save the target" do
84
- expect(game).to_not be_persisted
76
+ it 'does not save the target' do
77
+ expect(game).not_to be_persisted
85
78
  end
86
79
  end
87
80
 
88
- context "when the parent is not a new record" do
89
-
81
+ context 'when the parent is not a new record' do
90
82
  let(:person) do
91
83
  Person.create!
92
84
  end
@@ -99,49 +91,47 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
99
91
  person.game = game
100
92
  end
101
93
 
102
- it "sets the target of the relation" do
94
+ it 'sets the target of the relation' do
103
95
  expect(person.game._target).to eq(game)
104
96
  end
105
97
 
106
- it "sets the foreign key of the relation" do
98
+ it 'sets the foreign key of the relation' do
107
99
  expect(game.person_id).to eq(person.id)
108
100
  end
109
101
 
110
- it "sets the base on the inverse relation" do
102
+ it 'sets the base on the inverse relation' do
111
103
  expect(game.person).to eq(person)
112
104
  end
113
105
 
114
- it "sets the same instance on the inverse relation" do
106
+ it 'sets the same instance on the inverse relation' do
115
107
  expect(game.person).to eql(person)
116
108
  end
117
109
 
118
- it "saves the target" do
110
+ it 'saves the target' do
119
111
  expect(game).to be_persisted
120
112
  end
121
113
 
122
- context "when reloading the parent" do
123
-
114
+ context 'when reloading the parent' do
124
115
  before do
125
116
  person.reload
126
117
  end
127
118
 
128
- context "when setting a new document on the relation" do
129
-
119
+ context 'when setting a new document on the relation' do
130
120
  before do
131
121
  person.game = Game.new
132
122
  end
133
123
 
134
- it "detaches the previous relation" do
135
- expect {
124
+ it 'detaches the previous relation' do
125
+ expect do
136
126
  game.reload
137
- }.to raise_error(Mongoid::Errors::DocumentNotFound, /Document\(s\) not found for class Game with id\(s\)/)
127
+ end.to raise_error(Mongoid::Errors::DocumentNotFound,
128
+ /Document\(s\) not found for class Game with id\(s\)/)
138
129
  end
139
130
  end
140
131
  end
141
132
  end
142
133
 
143
- context "when relation have a different primary_key" do
144
-
134
+ context 'when relation have a different primary_key' do
145
135
  let(:person) do
146
136
  Person.create!
147
137
  end
@@ -154,32 +144,30 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
154
144
  person.cat = cat
155
145
  end
156
146
 
157
- it "sets the target of the relation" do
147
+ it 'sets the target of the relation' do
158
148
  expect(person.cat._target).to eq(cat)
159
149
  end
160
150
 
161
- it "sets the foreign key of the relation" do
151
+ it 'sets the foreign key of the relation' do
162
152
  expect(cat.person_id).to eq(person.username)
163
153
  end
164
154
 
165
- it "sets the base on the inverse relation" do
155
+ it 'sets the base on the inverse relation' do
166
156
  expect(cat.person).to eq(person)
167
157
  end
168
158
 
169
- it "sets the same instance on the inverse relation" do
159
+ it 'sets the same instance on the inverse relation' do
170
160
  expect(cat.person).to eql(person)
171
161
  end
172
162
 
173
- it "saves the target" do
163
+ it 'saves the target' do
174
164
  expect(cat).to be_persisted
175
165
  end
176
166
  end
177
167
  end
178
168
 
179
- context "when the relation is polymorphic" do
180
-
181
- context "when the parent is a new record" do
182
-
169
+ context 'when the relation is polymorphic' do
170
+ context 'when the parent is a new record' do
183
171
  let(:bar) do
184
172
  Bar.new
185
173
  end
@@ -192,29 +180,28 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
192
180
  bar.rating = rating
193
181
  end
194
182
 
195
- it "sets the target of the relation" do
183
+ it 'sets the target of the relation' do
196
184
  expect(bar.rating._target).to eq(rating)
197
185
  end
198
186
 
199
- it "sets the foreign key on the relation" do
187
+ it 'sets the foreign key on the relation' do
200
188
  expect(rating.ratable_id).to eq(bar.id)
201
189
  end
202
190
 
203
- it "sets the base on the inverse relation" do
191
+ it 'sets the base on the inverse relation' do
204
192
  expect(rating.ratable).to eq(bar)
205
193
  end
206
194
 
207
- it "sets the same instance on the inverse relation" do
195
+ it 'sets the same instance on the inverse relation' do
208
196
  expect(rating.ratable).to eql(bar)
209
197
  end
210
198
 
211
- it "does not save the target" do
212
- expect(rating).to_not be_persisted
199
+ it 'does not save the target' do
200
+ expect(rating).not_to be_persisted
213
201
  end
214
202
  end
215
203
 
216
- context "when the parent is not a new record" do
217
-
204
+ context 'when the parent is not a new record' do
218
205
  let(:bar) do
219
206
  Bar.create!
220
207
  end
@@ -227,396 +214,378 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
227
214
  bar.rating = rating
228
215
  end
229
216
 
230
- it "sets the target of the relation" do
217
+ it 'sets the target of the relation' do
231
218
  expect(bar.rating._target).to eq(rating)
232
219
  end
233
220
 
234
- it "sets the foreign key of the relation" do
221
+ it 'sets the foreign key of the relation' do
235
222
  expect(rating.ratable_id).to eq(bar.id)
236
223
  end
237
224
 
238
- it "sets the base on the inverse relation" do
225
+ it 'sets the base on the inverse relation' do
239
226
  expect(rating.ratable).to eq(bar)
240
227
  end
241
228
 
242
- it "sets the same instance on the inverse relation" do
229
+ it 'sets the same instance on the inverse relation' do
243
230
  expect(rating.ratable).to eql(bar)
244
231
  end
245
232
 
246
- it "saves the target" do
233
+ it 'saves the target' do
247
234
  expect(rating).to be_persisted
248
235
  end
249
236
  end
250
237
 
251
- context "when replacing an existing persisted (dependent: :destroy) relation" do
252
-
238
+ context 'when replacing an existing persisted (dependent: :destroy) relation' do
253
239
  let!(:person) do
254
240
  Person.create!
255
241
  end
256
242
 
257
243
  let!(:game) do
258
- person.create_game(name: "Starcraft")
244
+ person.create_game(name: 'Starcraft')
259
245
  end
260
246
 
261
- context "with a new one created via the parent" do
262
-
247
+ context 'with a new one created via the parent' do
263
248
  let!(:new_game) do
264
- person.create_game(name: "Starcraft 2")
249
+ person.create_game(name: 'Starcraft 2')
265
250
  end
266
251
 
267
- it "sets the new relation on the parent" do
252
+ it 'sets the new relation on the parent' do
268
253
  expect(person.game).to eq(new_game)
269
254
  end
270
255
 
271
- it "removes the old foreign key reference" do
256
+ it 'removes the old foreign key reference' do
272
257
  expect(game.person_id).to be_nil
273
258
  end
274
259
 
275
- it "removes the reference to the parent" do
260
+ it 'removes the reference to the parent' do
276
261
  expect(game.person).to be_nil
277
262
  end
278
263
 
279
- it "destroys the old child" do
264
+ it 'destroys the old child' do
280
265
  expect(game).to be_destroyed
281
266
  end
282
267
 
283
- it "leaves the old child unpersisted" do
268
+ it 'leaves the old child unpersisted' do
284
269
  expect(game.persisted?).to be false
285
270
  end
286
271
 
287
- it "leaves the new child persisted" do
272
+ it 'leaves the new child persisted' do
288
273
  expect(new_game.persisted?).to be true
289
274
  end
290
275
  end
291
276
 
292
- context "with a new one built via the parent" do
293
-
277
+ context 'with a new one built via the parent' do
294
278
  let!(:new_game) do
295
- person.build_game(name: "Starcraft 2")
279
+ person.build_game(name: 'Starcraft 2')
296
280
  end
297
281
 
298
- it "sets the new relation on the parent" do
282
+ it 'sets the new relation on the parent' do
299
283
  expect(person.game).to eq(new_game)
300
284
  end
301
285
 
302
- it "removes the old foreign key reference" do
286
+ it 'removes the old foreign key reference' do
303
287
  expect(game.person_id).to be_nil
304
288
  end
305
289
 
306
- it "removes the reference to the parent" do
290
+ it 'removes the reference to the parent' do
307
291
  expect(game.person).to be_nil
308
292
  end
309
293
 
310
- it "does not destroy the old child" do
311
- expect(game).to_not be_destroyed
294
+ it 'does not destroy the old child' do
295
+ expect(game).not_to be_destroyed
312
296
  end
313
297
 
314
- it "leaves the old child persisted" do
298
+ it 'leaves the old child persisted' do
315
299
  expect(game.persisted?).to be true
316
300
  end
317
301
 
318
- it "leaves the new child unpersisted" do
302
+ it 'leaves the new child unpersisted' do
319
303
  expect(new_game.persisted?).to be false
320
304
  end
321
305
  end
322
306
  end
323
307
 
324
- context "when replacing an existing unpersisted (dependent: :destroy) relation" do
325
-
308
+ context 'when replacing an existing unpersisted (dependent: :destroy) relation' do
326
309
  let!(:person) do
327
310
  Person.create!
328
311
  end
329
312
 
330
313
  let!(:game) do
331
- person.build_game(name: "Starcraft")
314
+ person.build_game(name: 'Starcraft')
332
315
  end
333
316
 
334
- context "with a new one created via the parent" do
335
-
317
+ context 'with a new one created via the parent' do
336
318
  let!(:new_game) do
337
- person.create_game(name: "Starcraft 2")
319
+ person.create_game(name: 'Starcraft 2')
338
320
  end
339
321
 
340
- it "sets the new relation on the parent" do
322
+ it 'sets the new relation on the parent' do
341
323
  expect(person.game).to eq(new_game)
342
324
  end
343
325
 
344
- it "removes the old foreign key reference" do
326
+ it 'removes the old foreign key reference' do
345
327
  expect(game.person_id).to be_nil
346
328
  end
347
329
 
348
- it "removes the reference to the parent" do
330
+ it 'removes the reference to the parent' do
349
331
  expect(game.person).to be_nil
350
332
  end
351
333
 
352
- it "destroys the old child" do
334
+ it 'destroys the old child' do
353
335
  expect(game).to be_destroyed
354
336
  end
355
337
 
356
- it "leaves the old child unpersisted" do
338
+ it 'leaves the old child unpersisted' do
357
339
  expect(game.persisted?).to be false
358
340
  end
359
341
 
360
- it "leaves the new child persisted" do
342
+ it 'leaves the new child persisted' do
361
343
  expect(new_game.persisted?).to be true
362
344
  end
363
345
  end
364
346
 
365
- context "with a new one built via the parent" do
366
-
347
+ context 'with a new one built via the parent' do
367
348
  let!(:new_game) do
368
- person.build_game(name: "Starcraft 2")
349
+ person.build_game(name: 'Starcraft 2')
369
350
  end
370
351
 
371
- it "sets the new relation on the parent" do
352
+ it 'sets the new relation on the parent' do
372
353
  expect(person.game).to eq(new_game)
373
354
  end
374
355
 
375
- it "removes the old foreign key reference" do
356
+ it 'removes the old foreign key reference' do
376
357
  expect(game.person_id).to be_nil
377
358
  end
378
359
 
379
- it "removes the reference to the parent" do
360
+ it 'removes the reference to the parent' do
380
361
  expect(game.person).to be_nil
381
362
  end
382
363
 
383
- it "does not destroy the old child" do
384
- expect(game).to_not be_destroyed
364
+ it 'does not destroy the old child' do
365
+ expect(game).not_to be_destroyed
385
366
  end
386
367
 
387
- it "leaves the old child unpersisted" do
368
+ it 'leaves the old child unpersisted' do
388
369
  expect(game.persisted?).to be false
389
370
  end
390
371
 
391
- it "leaves the new child unpersisted" do
372
+ it 'leaves the new child unpersisted' do
392
373
  expect(new_game.persisted?).to be false
393
374
  end
394
375
  end
395
376
  end
396
377
 
397
- context "when replacing an existing persisted (dependent: :nullify) relation" do
398
-
378
+ context 'when replacing an existing persisted (dependent: :nullify) relation' do
399
379
  let!(:person) do
400
380
  Person.create!
401
381
  end
402
382
 
403
383
  let!(:cat) do
404
- person.create_cat(name: "Cuddles")
384
+ person.create_cat(name: 'Cuddles')
405
385
  end
406
386
 
407
- context "with a new one created via the parent" do
408
-
387
+ context 'with a new one created via the parent' do
409
388
  let!(:new_cat) do
410
- person.create_cat(name: "Brutus")
389
+ person.create_cat(name: 'Brutus')
411
390
  end
412
391
 
413
- it "sets the new relation on the parent" do
392
+ it 'sets the new relation on the parent' do
414
393
  expect(person.cat).to eq(new_cat)
415
394
  end
416
395
 
417
- it "removes the old foreign key reference" do
396
+ it 'removes the old foreign key reference' do
418
397
  expect(cat.person_id).to be_nil
419
398
  end
420
399
 
421
- it "removes the reference to the parent" do
400
+ it 'removes the reference to the parent' do
422
401
  expect(cat.person).to be_nil
423
402
  end
424
403
 
425
- it "does not destroy the old child" do
426
- expect(cat).to_not be_destroyed
404
+ it 'does not destroy the old child' do
405
+ expect(cat).not_to be_destroyed
427
406
  end
428
407
 
429
- it "leaves the old child persisted" do
408
+ it 'leaves the old child persisted' do
430
409
  expect(cat.persisted?).to be true
431
410
  end
432
411
 
433
- it "leaves the new child persisted" do
412
+ it 'leaves the new child persisted' do
434
413
  expect(new_cat.persisted?).to be true
435
414
  end
436
415
  end
437
416
 
438
- context "with a new one built via the parent" do
439
-
417
+ context 'with a new one built via the parent' do
440
418
  let!(:new_cat) do
441
- person.build_cat(name: "Brutus")
419
+ person.build_cat(name: 'Brutus')
442
420
  end
443
421
 
444
- it "sets the new relation on the parent" do
422
+ it 'sets the new relation on the parent' do
445
423
  expect(person.cat).to eq(new_cat)
446
424
  end
447
425
 
448
- it "removes the old foreign key reference" do
426
+ it 'removes the old foreign key reference' do
449
427
  expect(cat.person_id).to be_nil
450
428
  end
451
429
 
452
- it "removes the reference to the parent" do
430
+ it 'removes the reference to the parent' do
453
431
  expect(cat.person).to be_nil
454
432
  end
455
433
 
456
- it "does not destroy the old child" do
457
- expect(cat).to_not be_destroyed
434
+ it 'does not destroy the old child' do
435
+ expect(cat).not_to be_destroyed
458
436
  end
459
437
 
460
- it "leaves the old child persisted" do
438
+ it 'leaves the old child persisted' do
461
439
  expect(cat.persisted?).to be true
462
440
  end
463
441
 
464
- it "leaves the new child unpersisted" do
442
+ it 'leaves the new child unpersisted' do
465
443
  expect(new_cat.persisted?).to be false
466
444
  end
467
445
  end
468
446
  end
469
447
 
470
- context "when replacing an existing unpersisted (dependent: :nullify) relation" do
471
-
448
+ context 'when replacing an existing unpersisted (dependent: :nullify) relation' do
472
449
  let!(:person) do
473
450
  Person.create!
474
451
  end
475
452
 
476
453
  let!(:cat) do
477
- person.build_cat(name: "Cuddles")
454
+ person.build_cat(name: 'Cuddles')
478
455
  end
479
456
 
480
- context "with a new one created via the parent" do
481
-
457
+ context 'with a new one created via the parent' do
482
458
  let!(:new_cat) do
483
- person.create_cat(name: "Brutus")
459
+ person.create_cat(name: 'Brutus')
484
460
  end
485
461
 
486
- it "sets the new relation on the parent" do
462
+ it 'sets the new relation on the parent' do
487
463
  expect(person.cat).to eq(new_cat)
488
464
  end
489
465
 
490
- it "removes the old foreign key reference" do
466
+ it 'removes the old foreign key reference' do
491
467
  expect(cat.person_id).to be_nil
492
468
  end
493
469
 
494
- it "removes the reference to the parent" do
470
+ it 'removes the reference to the parent' do
495
471
  expect(cat.person).to be_nil
496
472
  end
497
473
 
498
- it "does not destroy the old child" do
499
- expect(cat).to_not be_destroyed
474
+ it 'does not destroy the old child' do
475
+ expect(cat).not_to be_destroyed
500
476
  end
501
477
 
502
- it "leaves the old child unpersisted" do
478
+ it 'leaves the old child unpersisted' do
503
479
  expect(cat.persisted?).to be false
504
480
  end
505
481
 
506
- it "leaves the new child persisted" do
482
+ it 'leaves the new child persisted' do
507
483
  expect(new_cat.persisted?).to be true
508
484
  end
509
485
  end
510
486
 
511
- context "with a new one built via the parent" do
512
-
487
+ context 'with a new one built via the parent' do
513
488
  let!(:new_cat) do
514
- person.build_cat(name: "Brutus")
489
+ person.build_cat(name: 'Brutus')
515
490
  end
516
491
 
517
- it "sets the new relation on the parent" do
492
+ it 'sets the new relation on the parent' do
518
493
  expect(person.cat).to eq(new_cat)
519
494
  end
520
495
 
521
- it "removes the old foreign key reference" do
496
+ it 'removes the old foreign key reference' do
522
497
  expect(cat.person_id).to be_nil
523
498
  end
524
499
 
525
- it "removes the reference to the parent" do
500
+ it 'removes the reference to the parent' do
526
501
  expect(cat.person).to be_nil
527
502
  end
528
503
 
529
- it "does not destroy the old child" do
530
- expect(cat).to_not be_destroyed
504
+ it 'does not destroy the old child' do
505
+ expect(cat).not_to be_destroyed
531
506
  end
532
507
 
533
- it "leaves the old child unpersisted" do
508
+ it 'leaves the old child unpersisted' do
534
509
  expect(cat.persisted?).to be false
535
510
  end
536
511
 
537
- it "leaves the new child unpersisted" do
512
+ it 'leaves the new child unpersisted' do
538
513
  expect(new_cat.persisted?).to be false
539
514
  end
540
515
  end
541
516
  end
542
517
 
543
- context "when replacing an existing relation with a new one" do
544
-
518
+ context 'when replacing an existing relation with a new one' do
545
519
  let!(:person) do
546
520
  Person.create!
547
521
  end
548
522
 
549
- context "when dependent is destroy" do
550
-
523
+ context 'when dependent is destroy' do
551
524
  let!(:game) do
552
- person.create_game(name: "Starcraft")
525
+ person.create_game(name: 'Starcraft')
553
526
  end
554
527
 
555
528
  let!(:new_game) do
556
- Game.create!(name: "Starcraft 2")
529
+ Game.create!(name: 'Starcraft 2')
557
530
  end
558
531
 
559
532
  before do
560
533
  person.game = new_game
561
534
  end
562
535
 
563
- it "sets the new relation on the parent" do
536
+ it 'sets the new relation on the parent' do
564
537
  expect(person.game).to eq(new_game)
565
538
  end
566
539
 
567
- it "removes the old foreign key reference" do
540
+ it 'removes the old foreign key reference' do
568
541
  expect(game.person_id).to be_nil
569
542
  end
570
543
 
571
- it "removes the reference to the parent" do
544
+ it 'removes the reference to the parent' do
572
545
  expect(game.person).to be_nil
573
546
  end
574
547
 
575
- it "destroys the old child" do
548
+ it 'destroys the old child' do
576
549
  expect(game).to be_destroyed
577
550
  end
578
551
  end
579
552
 
580
- context "when dependent is not set" do
581
-
553
+ context 'when dependent is not set' do
582
554
  let!(:account) do
583
- person.create_account(name: "savings")
555
+ person.create_account(name: 'savings')
584
556
  end
585
557
 
586
558
  let!(:new_account) do
587
- Account.create!(name: "checking")
559
+ Account.create!(name: 'checking')
588
560
  end
589
561
 
590
562
  before do
591
563
  person.account = new_account
592
564
  end
593
565
 
594
- it "sets the new relation on the parent" do
566
+ it 'sets the new relation on the parent' do
595
567
  expect(person.account).to eq(new_account)
596
568
  end
597
569
 
598
- it "removes the old foreign key reference" do
570
+ it 'removes the old foreign key reference' do
599
571
  expect(account.person_id).to be_nil
600
572
  end
601
573
 
602
- it "removes the reference to the parent" do
574
+ it 'removes the reference to the parent' do
603
575
  expect(account.person).to be_nil
604
576
  end
605
577
 
606
- it "nullifies the old child" do
607
- expect(account).to_not be_destroyed
578
+ it 'nullifies the old child' do
579
+ expect(account).not_to be_destroyed
608
580
  end
609
581
  end
610
582
  end
611
583
  end
612
584
  end
613
585
 
614
- describe "#= nil" do
615
-
616
- context "when the relation is not polymorphic" do
617
-
618
- context "when the parent is a new record" do
619
-
586
+ describe '#= nil' do
587
+ context 'when the relation is not polymorphic' do
588
+ context 'when the parent is a new record' do
620
589
  let(:person) do
621
590
  Person.new
622
591
  end
@@ -630,21 +599,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
630
599
  person.game = nil
631
600
  end
632
601
 
633
- it "sets the relation to nil" do
602
+ it 'sets the relation to nil' do
634
603
  expect(person.game).to be_nil
635
604
  end
636
605
 
637
- it "removed the inverse relation" do
606
+ it 'removed the inverse relation' do
638
607
  expect(game.person).to be_nil
639
608
  end
640
609
 
641
- it "removes the foreign key value" do
610
+ it 'removes the foreign key value' do
642
611
  expect(game.person_id).to be_nil
643
612
  end
644
613
  end
645
614
 
646
- context "when the parent is not a new record" do
647
-
615
+ context 'when the parent is not a new record' do
648
616
  let(:person) do
649
617
  Person.create!
650
618
  end
@@ -658,28 +626,26 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
658
626
  person.game = nil
659
627
  end
660
628
 
661
- it "sets the relation to nil" do
629
+ it 'sets the relation to nil' do
662
630
  expect(person.game).to be_nil
663
631
  end
664
632
 
665
- it "removed the inverse relation" do
633
+ it 'removed the inverse relation' do
666
634
  expect(game.person).to be_nil
667
635
  end
668
636
 
669
- it "removes the foreign key value" do
637
+ it 'removes the foreign key value' do
670
638
  expect(game.person_id).to be_nil
671
639
  end
672
640
 
673
- it "deletes the target from the database" do
641
+ it 'deletes the target from the database' do
674
642
  expect(game).to be_destroyed
675
643
  end
676
644
  end
677
645
  end
678
646
 
679
- context "when the relation is polymorphic" do
680
-
681
- context "when the parent is a new record" do
682
-
647
+ context 'when the relation is polymorphic' do
648
+ context 'when the parent is a new record' do
683
649
  let(:bar) do
684
650
  Bar.new
685
651
  end
@@ -693,21 +659,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
693
659
  bar.rating = nil
694
660
  end
695
661
 
696
- it "sets the relation to nil" do
662
+ it 'sets the relation to nil' do
697
663
  expect(bar.rating).to be_nil
698
664
  end
699
665
 
700
- it "removed the inverse relation" do
666
+ it 'removed the inverse relation' do
701
667
  expect(rating.ratable).to be_nil
702
668
  end
703
669
 
704
- it "removes the foreign key value" do
670
+ it 'removes the foreign key value' do
705
671
  expect(rating.ratable_id).to be_nil
706
672
  end
707
673
  end
708
674
 
709
- context "when the parent is not a new record" do
710
-
675
+ context 'when the parent is not a new record' do
711
676
  let(:bar) do
712
677
  Bar.create!
713
678
  end
@@ -721,44 +686,40 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
721
686
  bar.rating = nil
722
687
  end
723
688
 
724
- it "sets the relation to nil" do
689
+ it 'sets the relation to nil' do
725
690
  expect(bar.rating).to be_nil
726
691
  end
727
692
 
728
- it "removed the inverse relation" do
693
+ it 'removed the inverse relation' do
729
694
  expect(rating.ratable).to be_nil
730
695
  end
731
696
 
732
- it "removes the foreign key value" do
697
+ it 'removes the foreign key value' do
733
698
  expect(rating.ratable_id).to be_nil
734
699
  end
735
700
 
736
- it "applies the appropriate dependent option" do
737
- expect(rating).to_not be_destroyed
701
+ it 'applies the appropriate dependent option' do
702
+ expect(rating).not_to be_destroyed
738
703
  end
739
704
  end
740
705
  end
741
706
  end
742
707
 
743
708
  describe "#build_#\{name}" do
744
-
745
- context "when the relationship is an illegal embedded reference" do
746
-
709
+ context 'when the relationship is an illegal embedded reference' do
747
710
  let(:game) do
748
711
  Game.new
749
712
  end
750
713
 
751
- it "raises a mixed relation error" do
752
- expect {
753
- game.build_video(title: "Tron")
754
- }.to raise_error(Mongoid::Errors::MixedRelations)
714
+ it 'raises a mixed relation error' do
715
+ expect do
716
+ game.build_video(title: 'Tron')
717
+ end.to raise_error(Mongoid::Errors::MixedRelations)
755
718
  end
756
719
  end
757
720
 
758
- context "when the relation is not polymorphic" do
759
-
760
- context "when using object ids" do
761
-
721
+ context 'when the relation is not polymorphic' do
722
+ context 'when using object ids' do
762
723
  let(:person) do
763
724
  Person.create!
764
725
  end
@@ -767,25 +728,24 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
767
728
  person.build_game(score: 50)
768
729
  end
769
730
 
770
- it "returns a new document" do
731
+ it 'returns a new document' do
771
732
  expect(game.score).to eq(50)
772
733
  end
773
734
 
774
- it "sets the foreign key on the document" do
735
+ it 'sets the foreign key on the document' do
775
736
  expect(game.person_id).to eq(person.id)
776
737
  end
777
738
 
778
- it "sets the inverse relation" do
739
+ it 'sets the inverse relation' do
779
740
  expect(game.person).to eq(person)
780
741
  end
781
742
 
782
- it "does not save the built document" do
783
- expect(game).to_not be_persisted
743
+ it 'does not save the built document' do
744
+ expect(game).not_to be_persisted
784
745
  end
785
746
  end
786
747
 
787
- context "when providing no attributes" do
788
-
748
+ context 'when providing no attributes' do
789
749
  let(:person) do
790
750
  Person.create!
791
751
  end
@@ -794,21 +754,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
794
754
  person.build_game
795
755
  end
796
756
 
797
- it "sets the foreign key on the document" do
757
+ it 'sets the foreign key on the document' do
798
758
  expect(game.person_id).to eq(person.id)
799
759
  end
800
760
 
801
- it "sets the inverse relation" do
761
+ it 'sets the inverse relation' do
802
762
  expect(game.person).to eq(person)
803
763
  end
804
764
 
805
- it "does not save the built document" do
806
- expect(game).to_not be_persisted
765
+ it 'does not save the built document' do
766
+ expect(game).not_to be_persisted
807
767
  end
808
768
  end
809
769
 
810
- context "when providing nil attributes" do
811
-
770
+ context 'when providing nil attributes' do
812
771
  let(:person) do
813
772
  Person.create!
814
773
  end
@@ -817,24 +776,22 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
817
776
  person.build_game(nil)
818
777
  end
819
778
 
820
- it "sets the foreign key on the document" do
779
+ it 'sets the foreign key on the document' do
821
780
  expect(game.person_id).to eq(person.id)
822
781
  end
823
782
 
824
- it "sets the inverse relation" do
783
+ it 'sets the inverse relation' do
825
784
  expect(game.person).to eq(person)
826
785
  end
827
786
 
828
- it "does not save the built document" do
829
- expect(game).to_not be_persisted
787
+ it 'does not save the built document' do
788
+ expect(game).not_to be_persisted
830
789
  end
831
790
  end
832
791
  end
833
792
 
834
- context "when the relation is polymorphic" do
835
-
836
- context "when using object ids" do
837
-
793
+ context 'when the relation is polymorphic' do
794
+ context 'when using object ids' do
838
795
  let(:bar) do
839
796
  Bar.create!
840
797
  end
@@ -843,42 +800,39 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
843
800
  bar.build_rating(value: 5)
844
801
  end
845
802
 
846
- it "returns a new document" do
803
+ it 'returns a new document' do
847
804
  expect(rating.value).to eq(5)
848
805
  end
849
806
 
850
- it "sets the foreign key on the document" do
807
+ it 'sets the foreign key on the document' do
851
808
  expect(rating.ratable_id).to eq(bar.id)
852
809
  end
853
810
 
854
- it "sets the inverse relation" do
811
+ it 'sets the inverse relation' do
855
812
  expect(rating.ratable).to eq(bar)
856
813
  end
857
814
 
858
- it "does not save the built document" do
859
- expect(rating).to_not be_persisted
815
+ it 'does not save the built document' do
816
+ expect(rating).not_to be_persisted
860
817
  end
861
818
  end
862
819
  end
863
820
  end
864
821
 
865
822
  describe "#create_#\{name}" do
866
-
867
- context "when the relationship is an illegal embedded reference" do
868
-
823
+ context 'when the relationship is an illegal embedded reference' do
869
824
  let(:game) do
870
825
  Game.new
871
826
  end
872
827
 
873
- it "raises a mixed relation error" do
874
- expect {
875
- game.create_video(title: "Tron")
876
- }.to raise_error(Mongoid::Errors::MixedRelations)
828
+ it 'raises a mixed relation error' do
829
+ expect do
830
+ game.create_video(title: 'Tron')
831
+ end.to raise_error(Mongoid::Errors::MixedRelations)
877
832
  end
878
833
  end
879
834
 
880
- context "when the relation is not polymorphic" do
881
-
835
+ context 'when the relation is not polymorphic' do
882
836
  let(:person) do
883
837
  Person.create!
884
838
  end
@@ -887,25 +841,24 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
887
841
  person.create_game(score: 50)
888
842
  end
889
843
 
890
- it "returns a new document" do
844
+ it 'returns a new document' do
891
845
  expect(game.score).to eq(50)
892
846
  end
893
847
 
894
- it "sets the foreign key on the document" do
848
+ it 'sets the foreign key on the document' do
895
849
  expect(game.person_id).to eq(person.id)
896
850
  end
897
851
 
898
- it "sets the inverse relation" do
852
+ it 'sets the inverse relation' do
899
853
  expect(game.person).to eq(person)
900
854
  end
901
855
 
902
- it "saves the document" do
856
+ it 'saves the document' do
903
857
  expect(game).to be_persisted
904
858
  end
905
859
  end
906
860
 
907
- context "when providing no attributes" do
908
-
861
+ context 'when providing no attributes' do
909
862
  let(:person) do
910
863
  Person.create!
911
864
  end
@@ -914,21 +867,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
914
867
  person.create_game
915
868
  end
916
869
 
917
- it "sets the foreign key on the document" do
870
+ it 'sets the foreign key on the document' do
918
871
  expect(game.person_id).to eq(person.id)
919
872
  end
920
873
 
921
- it "sets the inverse relation" do
874
+ it 'sets the inverse relation' do
922
875
  expect(game.person).to eq(person)
923
876
  end
924
877
 
925
- it "saves the document" do
878
+ it 'saves the document' do
926
879
  expect(game).to be_persisted
927
880
  end
928
881
  end
929
882
 
930
- context "when providing nil attributes" do
931
-
883
+ context 'when providing nil attributes' do
932
884
  let(:person) do
933
885
  Person.create!
934
886
  end
@@ -937,21 +889,20 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
937
889
  person.create_game(nil)
938
890
  end
939
891
 
940
- it "sets the foreign key on the document" do
892
+ it 'sets the foreign key on the document' do
941
893
  expect(game.person_id).to eq(person.id)
942
894
  end
943
895
 
944
- it "sets the inverse relation" do
896
+ it 'sets the inverse relation' do
945
897
  expect(game.person).to eq(person)
946
898
  end
947
899
 
948
- it "saves the document" do
900
+ it 'saves the document' do
949
901
  expect(game).to be_persisted
950
902
  end
951
903
  end
952
904
 
953
- context "when the relation is polymorphic" do
954
-
905
+ context 'when the relation is polymorphic' do
955
906
  let(:bar) do
956
907
  Bar.create!
957
908
  end
@@ -960,58 +911,54 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
960
911
  bar.create_rating(value: 5)
961
912
  end
962
913
 
963
- it "returns a new document" do
914
+ it 'returns a new document' do
964
915
  expect(rating.value).to eq(5)
965
916
  end
966
917
 
967
- it "sets the foreign key on the document" do
918
+ it 'sets the foreign key on the document' do
968
919
  expect(rating.ratable_id).to eq(bar.id)
969
920
  end
970
921
 
971
- it "sets the inverse relation" do
922
+ it 'sets the inverse relation' do
972
923
  expect(rating.ratable).to eq(bar)
973
924
  end
974
925
 
975
- it "saves the document" do
926
+ it 'saves the document' do
976
927
  expect(rating).to be_persisted
977
928
  end
978
929
  end
979
930
  end
980
931
 
981
- describe ".embedded?" do
982
-
983
- it "returns false" do
984
- expect(described_class).to_not be_embedded
932
+ describe '.embedded?' do
933
+ it 'returns false' do
934
+ expect(described_class).not_to be_embedded
985
935
  end
986
936
  end
987
937
 
988
- describe "#nullify" do
989
-
938
+ describe '#nullify' do
990
939
  let(:person) do
991
940
  Person.create!
992
941
  end
993
942
 
994
943
  let!(:game) do
995
- person.create_game(name: "Starcraft II")
944
+ person.create_game(name: 'Starcraft II')
996
945
  end
997
946
 
998
- context "when the instance has been set" do
999
-
947
+ context 'when the instance has been set' do
1000
948
  before do
1001
949
  person.game.nullify
1002
950
  end
1003
951
 
1004
- it "removes the foreign key from the target" do
952
+ it 'removes the foreign key from the target' do
1005
953
  expect(game.person_id).to be_nil
1006
954
  end
1007
955
 
1008
- it "removes the reference from the target" do
956
+ it 'removes the reference from the target' do
1009
957
  expect(game.person).to be_nil
1010
958
  end
1011
959
  end
1012
960
 
1013
- context "when the instance has been reloaded" do
1014
-
961
+ context 'when the instance has been reloaded' do
1015
962
  let(:from_db) do
1016
963
  Person.find(person.id)
1017
964
  end
@@ -1024,24 +971,23 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1024
971
  from_db.game.nullify
1025
972
  end
1026
973
 
1027
- it "removes the foreign key from the target" do
974
+ it 'removes the foreign key from the target' do
1028
975
  expect(game_reloaded.person_id).to be_nil
1029
976
  end
1030
977
 
1031
- it "removes the reference from the target" do
978
+ it 'removes the reference from the target' do
1032
979
  expect(game_reloaded.person).to be_nil
1033
980
  end
1034
981
  end
1035
982
  end
1036
983
 
1037
- describe "#respond_to?" do
1038
-
984
+ describe '#respond_to?' do
1039
985
  let(:person) do
1040
986
  Person.new
1041
987
  end
1042
988
 
1043
989
  let!(:game) do
1044
- person.build_game(name: "Tron")
990
+ person.build_game(name: 'Tron')
1045
991
  end
1046
992
 
1047
993
  let(:document) do
@@ -1049,56 +995,51 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1049
995
  end
1050
996
 
1051
997
  Mongoid::Document.public_instance_methods(true).each do |method|
1052
-
1053
998
  context "when checking #{method}" do
1054
-
1055
- it "returns true" do
999
+ it 'returns true' do
1056
1000
  expect(document.respond_to?(method)).to be true
1057
1001
  end
1058
1002
  end
1059
1003
  end
1060
1004
  end
1061
1005
 
1062
- context "when reloading the relation" do
1063
-
1006
+ context 'when reloading the relation' do
1064
1007
  let!(:person) do
1065
1008
  Person.create!
1066
1009
  end
1067
1010
 
1068
1011
  let!(:game_one) do
1069
- Game.create!(name: "Warcraft 3")
1012
+ Game.create!(name: 'Warcraft 3')
1070
1013
  end
1071
1014
 
1072
1015
  let!(:game_two) do
1073
- Game.create!(name: "Starcraft 2")
1016
+ Game.create!(name: 'Starcraft 2')
1074
1017
  end
1075
1018
 
1076
1019
  before do
1077
1020
  person.game = game_one
1078
1021
  end
1079
1022
 
1080
- context "when the relation references the same document" do
1081
-
1023
+ context 'when the relation references the same document' do
1082
1024
  before do
1083
- Game.collection.find({ _id: game_one.id }).
1084
- update_one({ "$set" => { name: "Diablo 2" }})
1025
+ Game.collection.find({ _id: game_one.id })
1026
+ .update_one({ '$set' => { name: 'Diablo 2' } })
1085
1027
  end
1086
1028
 
1087
1029
  let(:reloaded) do
1088
1030
  person.game(true)
1089
1031
  end
1090
1032
 
1091
- it "reloads the document from the database" do
1092
- expect(reloaded.name).to eq("Diablo 2")
1033
+ it 'reloads the document from the database' do
1034
+ expect(reloaded.name).to eq('Diablo 2')
1093
1035
  end
1094
1036
 
1095
- it "sets a new document instance" do
1096
- expect(reloaded).to_not equal(game_one)
1037
+ it 'sets a new document instance' do
1038
+ expect(reloaded).not_to equal(game_one)
1097
1039
  end
1098
1040
  end
1099
1041
 
1100
- context "when the relation references a different document" do
1101
-
1042
+ context 'when the relation references a different document' do
1102
1043
  before do
1103
1044
  person.game = game_two
1104
1045
  end
@@ -1107,20 +1048,18 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1107
1048
  person.game(true)
1108
1049
  end
1109
1050
 
1110
- it "reloads the new document from the database" do
1111
- expect(reloaded.name).to eq("Starcraft 2")
1051
+ it 'reloads the new document from the database' do
1052
+ expect(reloaded.name).to eq('Starcraft 2')
1112
1053
  end
1113
1054
 
1114
- it "sets a new document instance" do
1115
- expect(reloaded).to_not equal(game_one)
1055
+ it 'sets a new document instance' do
1056
+ expect(reloaded).not_to equal(game_one)
1116
1057
  end
1117
1058
  end
1118
1059
  end
1119
1060
 
1120
- context "when dependent is set to delete for child" do
1121
-
1122
- context "when autobuild is true for child" do
1123
-
1061
+ context 'when dependent is set to delete for child' do
1062
+ context 'when autobuild is true for child' do
1124
1063
  let(:explosion) do
1125
1064
  Explosion.create!
1126
1065
  end
@@ -1135,27 +1074,27 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1135
1074
  bomb.explosion.clear
1136
1075
  end
1137
1076
 
1138
- it "clearing the child raises no error" do
1139
- expect{ clear_child }.not_to raise_error
1077
+ it 'clearing the child raises no error' do
1078
+ expect { clear_child }.not_to raise_error
1140
1079
  end
1141
1080
  end
1142
1081
  end
1143
1082
 
1144
- context "when there is a foreign key in the aliased associations" do
1145
- it "has the correct aliases" do
1083
+ context 'when there is a foreign key in the aliased associations' do
1084
+ it 'has the correct aliases' do
1146
1085
  # Instances of Driver do not respond to vehicle_id.
1147
- expect(Driver.aliased_associations.key?("vehicle_id")).to be false
1148
- expect(Vehicle.aliased_associations.key?("driver_id")).to be false
1149
- expect(Vehicle.aliased_fields["driver"]).to eq("driver_id")
1086
+ expect(Driver.aliased_associations.key?('vehicle_id')).to be false
1087
+ expect(Vehicle.aliased_associations.key?('driver_id')).to be false
1088
+ expect(Vehicle.aliased_fields['driver']).to eq('driver_id')
1150
1089
  end
1151
1090
  end
1152
1091
 
1153
- context "when the document is not persisted and the association is invalid" do
1154
-
1092
+ context 'when the document is not persisted and the association is invalid' do
1155
1093
  before do
1156
1094
  class HomParent
1157
1095
  include Mongoid::Document
1158
- has_one :child, class_name: "HomChild"
1096
+
1097
+ has_one :child, class_name: 'HomChild'
1159
1098
  field :name
1160
1099
  validates :name, presence: true
1161
1100
  end
@@ -1179,20 +1118,19 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1179
1118
  let(:child) { HomChild.new }
1180
1119
  let(:parent) { HomParent.new }
1181
1120
 
1182
-
1183
- context "when belongs_to_required_by_default is true" do
1121
+ context 'when belongs_to_required_by_default is true' do
1184
1122
  config_override :belongs_to_required_by_default, true
1185
1123
 
1186
- context "when optional is true" do
1124
+ context 'when optional is true' do
1187
1125
  let(:optional) { true }
1188
1126
 
1189
- it "persists the child with the parent_id" do
1127
+ it 'persists the child with the parent_id' do
1190
1128
  expect(HomChild.first.parent_id).to eq(parent._id)
1191
1129
  expect(HomParent.count).to eq(0)
1192
1130
  end
1193
1131
  end
1194
1132
 
1195
- context "when optional is false" do
1133
+ context 'when optional is false' do
1196
1134
  let(:optional) { false }
1197
1135
 
1198
1136
  it "doesn't persist the parent or the child" do
@@ -1201,7 +1139,7 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1201
1139
  end
1202
1140
  end
1203
1141
 
1204
- context "when optional is not set" do
1142
+ context 'when optional is not set' do
1205
1143
  let(:belongs_to) do
1206
1144
  HomChild.belongs_to :parent, autosave: true, validate: false
1207
1145
  end
@@ -1213,19 +1151,19 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1213
1151
  end
1214
1152
  end
1215
1153
 
1216
- context "when belongs_to_required_by_default is false" do
1154
+ context 'when belongs_to_required_by_default is false' do
1217
1155
  config_override :belongs_to_required_by_default, false
1218
1156
 
1219
- context "when optional is true" do
1157
+ context 'when optional is true' do
1220
1158
  let(:optional) { true }
1221
1159
 
1222
- it "persists the child with the parent_id" do
1160
+ it 'persists the child with the parent_id' do
1223
1161
  expect(HomChild.first.parent_id).to eq(parent._id)
1224
1162
  expect(HomParent.count).to eq(0)
1225
1163
  end
1226
1164
  end
1227
1165
 
1228
- context "when optional is false" do
1166
+ context 'when optional is false' do
1229
1167
  let(:optional) { false }
1230
1168
 
1231
1169
  it "doesn't persist the parent or the child" do
@@ -1234,12 +1172,12 @@ describe Mongoid::Association::Referenced::HasOne::Proxy do
1234
1172
  end
1235
1173
  end
1236
1174
 
1237
- context "when optional is not set" do
1175
+ context 'when optional is not set' do
1238
1176
  let(:belongs_to) do
1239
1177
  HomChild.belongs_to :parent, autosave: true, validate: false
1240
1178
  end
1241
1179
 
1242
- it "persists the child with the parent_id" do
1180
+ it 'persists the child with the parent_id' do
1243
1181
  expect(HomChild.first.parent_id).to eq(parent._id)
1244
1182
  expect(HomParent.count).to eq(0)
1245
1183
  end