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,179 +1,154 @@
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::Accessors do
7
-
8
6
  describe "\#{getter}?" do
9
-
10
7
  let(:person) do
11
8
  Person.create!
12
9
  end
13
10
 
14
- context "when the association is a has one" do
15
-
16
- context "when the association exists" do
17
-
11
+ context 'when the association is a has one' do
12
+ context 'when the association exists' do
18
13
  let!(:game) do
19
14
  person.build_game
20
15
  end
21
16
 
22
- it "returns true" do
17
+ it 'returns true' do
23
18
  expect(person).to have_game
24
19
  end
25
20
  end
26
21
 
27
- context "when the association does not exist" do
28
-
29
- context "when not autobuilding" do
30
-
31
- it "returns false" do
32
- expect(person).to_not have_game
22
+ context 'when the association does not exist' do
23
+ context 'when not autobuilding' do
24
+ it 'returns false' do
25
+ expect(person).not_to have_game
33
26
  end
34
27
  end
35
28
 
36
- context "when autobuilding" do
37
-
38
- it "returns false" do
39
- expect(person).to_not have_book
29
+ context 'when autobuilding' do
30
+ it 'returns false' do
31
+ expect(person).not_to have_book
40
32
  end
41
33
  end
42
34
  end
43
35
  end
44
36
 
45
- context "when the association is a has many" do
46
-
47
- context "when the association has documents" do
48
-
37
+ context 'when the association is a has many' do
38
+ context 'when the association has documents' do
49
39
  let!(:post) do
50
40
  person.posts.build
51
41
  end
52
42
 
53
- it "returns true" do
43
+ it 'returns true' do
54
44
  expect(person).to have_posts
55
45
  end
56
46
  end
57
47
 
58
- context "when the association does not have documents" do
59
-
60
- it "returns false" do
61
- expect(person).to_not have_posts
48
+ context 'when the association does not have documents' do
49
+ it 'returns false' do
50
+ expect(person).not_to have_posts
62
51
  end
63
52
  end
64
53
  end
65
54
 
66
- context "when the association is a has and belongs to many" do
67
-
68
- context "when the association has documents" do
69
-
55
+ context 'when the association is a has and belongs to many' do
56
+ context 'when the association has documents' do
70
57
  let!(:preference) do
71
58
  person.preferences.build
72
59
  end
73
60
 
74
- it "returns true" do
61
+ it 'returns true' do
75
62
  expect(person).to have_preferences
76
63
  end
77
64
  end
78
65
 
79
- context "when the association does not have documents" do
80
-
81
- it "returns false" do
82
- expect(person).to_not have_preferences
66
+ context 'when the association does not have documents' do
67
+ it 'returns false' do
68
+ expect(person).not_to have_preferences
83
69
  end
84
70
  end
85
71
  end
86
72
 
87
- context "when the association is a belongs to" do
88
-
89
- context "when the association is named next" do
90
-
73
+ context 'when the association is a belongs to' do
74
+ context 'when the association is named next' do
91
75
  let(:user) do
92
76
  User.create!
93
77
  end
94
78
 
95
- it "allows the existence check" do
96
- expect(user).to_not have_next
79
+ it 'allows the existence check' do
80
+ expect(user).not_to have_next
97
81
  end
98
82
  end
99
83
 
100
- context "when the association exists" do
101
-
84
+ context 'when the association exists' do
102
85
  let!(:game) do
103
86
  person.build_game
104
87
  end
105
88
 
106
- it "returns true" do
89
+ it 'returns true' do
107
90
  expect(game).to have_person
108
91
  end
109
92
  end
110
93
 
111
- context "when the association does not exist" do
112
-
113
- context "when the association does not autobuild" do
114
-
94
+ context 'when the association does not exist' do
95
+ context 'when the association does not autobuild' do
115
96
  let(:game) do
116
97
  Game.new
117
98
  end
118
99
 
119
- it "returns false" do
120
- expect(game).to_not have_person
100
+ it 'returns false' do
101
+ expect(game).not_to have_person
121
102
  end
122
103
  end
123
104
 
124
- context "when the association autobuilds" do
125
-
105
+ context 'when the association autobuilds' do
126
106
  let(:book) do
127
107
  Book.new
128
108
  end
129
109
 
130
- it "returns false" do
131
- expect(book).to_not have_person
110
+ it 'returns false' do
111
+ expect(book).not_to have_person
132
112
  end
133
113
  end
134
114
  end
135
115
  end
136
116
 
137
- context "when the association is an embeds one" do
138
-
139
- context "when the association exists" do
140
-
117
+ context 'when the association is an embeds one' do
118
+ context 'when the association exists' do
141
119
  let!(:name) do
142
120
  person.build_name
143
121
  end
144
122
 
145
- it "returns true" do
123
+ it 'returns true' do
146
124
  expect(person).to have_name
147
125
  end
148
126
  end
149
127
 
150
- context "when the association does not exist" do
151
-
152
- context "when the association does not autobuild" do
153
-
154
- it "returns false" do
155
- expect(person).to_not have_name
128
+ context 'when the association does not exist' do
129
+ context 'when the association does not autobuild' do
130
+ it 'returns false' do
131
+ expect(person).not_to have_name
156
132
  end
157
133
  end
158
134
 
159
- context "when the association autobuilds" do
160
-
135
+ context 'when the association autobuilds' do
161
136
  let(:person) do
162
137
  Person.new
163
138
  end
164
139
 
165
- it "returns false" do
166
- expect(person).to_not have_passport
140
+ it 'returns false' do
141
+ expect(person).not_to have_passport
167
142
  end
168
143
  end
169
144
  end
170
145
 
171
- context "when the association is set to nil first" do
146
+ context 'when the association is set to nil first' do
172
147
  let!(:name) do
173
148
  person.build_name
174
149
  end
175
150
 
176
- it "returns true" do
151
+ it 'returns true' do
177
152
  person.name = nil
178
153
  person.name = name
179
154
  expect(person).to have_name
@@ -181,61 +156,53 @@ describe Mongoid::Association::Accessors do
181
156
  end
182
157
  end
183
158
 
184
- context "when the association is an embeds many" do
185
-
186
- context "when the association has documents" do
187
-
159
+ context 'when the association is an embeds many' do
160
+ context 'when the association has documents' do
188
161
  let!(:address) do
189
162
  person.addresses.build
190
163
  end
191
164
 
192
- it "returns true" do
165
+ it 'returns true' do
193
166
  expect(person).to have_addresses
194
167
  end
195
168
  end
196
169
 
197
- context "when the association does not have documents" do
198
-
199
- it "returns false" do
200
- expect(person).to_not have_addresses
170
+ context 'when the association does not have documents' do
171
+ it 'returns false' do
172
+ expect(person).not_to have_addresses
201
173
  end
202
174
  end
203
175
  end
204
176
 
205
- context "when the association is an embedded in" do
206
-
207
- context "when the association exists" do
208
-
177
+ context 'when the association is an embedded in' do
178
+ context 'when the association exists' do
209
179
  let!(:name) do
210
180
  person.build_name
211
181
  end
212
182
 
213
- it "returns true" do
183
+ it 'returns true' do
214
184
  expect(name).to have_namable
215
185
  end
216
186
  end
217
187
 
218
- context "when the association does not exist" do
219
-
220
- context "when the association does not autobuild" do
221
-
188
+ context 'when the association does not exist' do
189
+ context 'when the association does not autobuild' do
222
190
  let(:name) do
223
191
  Name.new
224
192
  end
225
193
 
226
- it "returns false" do
227
- expect(name).to_not have_namable
194
+ it 'returns false' do
195
+ expect(name).not_to have_namable
228
196
  end
229
197
  end
230
198
 
231
- context "when the association autobuilds" do
232
-
199
+ context 'when the association autobuilds' do
233
200
  let(:passport) do
234
201
  Passport.new
235
202
  end
236
203
 
237
- it "returns false" do
238
- expect(passport).to_not have_person
204
+ it 'returns false' do
205
+ expect(passport).not_to have_person
239
206
  end
240
207
  end
241
208
  end
@@ -243,300 +210,270 @@ describe Mongoid::Association::Accessors do
243
210
  end
244
211
 
245
212
  describe "\#{getter}" do
246
-
247
213
  let(:person) do
248
214
  Person.new
249
215
  end
250
216
 
251
- context "when autobuilding the association" do
252
-
253
- context "when the association is an embeds one" do
254
-
255
- context "when the association does not exist" do
256
-
217
+ context 'when autobuilding the association' do
218
+ context 'when the association is an embeds one' do
219
+ context 'when the association does not exist' do
257
220
  let!(:passport) do
258
221
  person.passport
259
222
  end
260
223
 
261
- it "builds the new document" do
224
+ it 'builds the new document' do
262
225
  expect(passport).to be_a(Passport)
263
226
  end
264
227
 
265
- it "stores in the altered attribute" do
266
- expect(person.as_document["pass"]).to eq(passport.attributes)
228
+ it 'stores in the altered attribute' do
229
+ expect(person.as_document['pass']).to eq(passport.attributes)
267
230
  end
268
231
  end
269
232
 
270
- context "when the association exists" do
271
-
233
+ context 'when the association exists' do
272
234
  let!(:passport) do
273
- person.build_passport(number: "123123321")
235
+ person.build_passport(number: '123123321')
274
236
  end
275
237
 
276
- it "does not build a new document" do
238
+ it 'does not build a new document' do
277
239
  expect(person.passport).to eq(passport)
278
240
  end
279
-
280
241
  end
281
242
  end
282
243
 
283
- context "when the association is an embedded in" do
284
-
244
+ context 'when the association is an embedded in' do
285
245
  let(:passport) do
286
246
  Passport.new
287
247
  end
288
248
 
289
- context "when the association does not exist" do
290
-
249
+ context 'when the association does not exist' do
291
250
  let(:person) do
292
251
  passport.person
293
252
  end
294
253
 
295
- it "builds the new document" do
254
+ it 'builds the new document' do
296
255
  expect(person).to be_a(Person)
297
256
  end
298
257
  end
299
258
 
300
- context "when the association exists" do
301
-
259
+ context 'when the association exists' do
302
260
  let!(:person) do
303
- passport.build_person(title: "sir")
261
+ passport.build_person(title: 'sir')
304
262
  end
305
263
 
306
- it "does not build a new document" do
264
+ it 'does not build a new document' do
307
265
  expect(passport.person).to eq(person)
308
266
  end
309
267
  end
310
268
  end
311
269
 
312
- context "when the association is a has one" do
313
-
314
- context "when the association does not exist" do
315
-
270
+ context 'when the association is a has one' do
271
+ context 'when the association does not exist' do
316
272
  let(:book) do
317
273
  person.book
318
274
  end
319
275
 
320
- it "builds the new document" do
276
+ it 'builds the new document' do
321
277
  expect(book).to be_a(Book)
322
278
  end
323
279
  end
324
280
 
325
- context "when the association exists" do
326
-
281
+ context 'when the association exists' do
327
282
  let!(:book) do
328
- person.build_book(title: "art of war")
283
+ person.build_book(title: 'art of war')
329
284
  end
330
285
 
331
- it "does not build a new document" do
286
+ it 'does not build a new document' do
332
287
  expect(person.book).to eq(book)
333
288
  end
334
289
  end
335
290
  end
336
291
 
337
- context "when the association is a belongs to" do
338
-
292
+ context 'when the association is a belongs to' do
339
293
  let(:book) do
340
294
  Book.new
341
295
  end
342
296
 
343
- context "when the association does not exist" do
344
-
297
+ context 'when the association does not exist' do
345
298
  let(:person) do
346
299
  book.person
347
300
  end
348
301
 
349
- it "builds the new document" do
302
+ it 'builds the new document' do
350
303
  expect(person).to be_a(Person)
351
304
  end
352
305
  end
353
306
 
354
- context "when the association exists" do
355
-
307
+ context 'when the association exists' do
356
308
  let!(:person) do
357
- book.build_person(title: "sir")
309
+ book.build_person(title: 'sir')
358
310
  end
359
311
 
360
- it "does not build a new document" do
312
+ it 'does not build a new document' do
361
313
  expect(book.person).to eq(person)
362
314
  end
363
315
  end
364
316
  end
365
317
  end
366
318
 
367
- context "when the association is not polymorphic" do
368
-
319
+ context 'when the association is not polymorphic' do
369
320
  let(:person) do
370
321
  Person.create!
371
322
  end
372
323
 
373
- context "when the association is a many to many" do
374
-
324
+ context 'when the association is a many to many' do
375
325
  let!(:preference) do
376
- Preference.create!(name: "Setting")
326
+ Preference.create!(name: 'Setting')
377
327
  end
378
328
 
379
329
  before do
380
330
  person.preferences << Preference.last
381
331
  end
382
332
 
383
- context "when reloading the association directly" do
384
-
333
+ context 'when reloading the association directly' do
385
334
  let(:preferences) do
386
335
  person.preferences(true)
387
336
  end
388
337
 
389
- it "reloads the correct documents" do
338
+ it 'reloads the correct documents' do
390
339
  expect(preferences).to eq([ preference ])
391
340
  end
392
341
 
393
- it "reloads a new instance" do
394
- expect(preferences.first).to_not equal(preference)
342
+ it 'reloads a new instance' do
343
+ expect(preferences.first).not_to equal(preference)
395
344
  end
396
345
  end
397
346
 
398
- context "when reloading via the base document" do
399
-
347
+ context 'when reloading via the base document' do
400
348
  let(:preferences) do
401
349
  person.reload.preferences
402
350
  end
403
351
 
404
- it "reloads the correct documents" do
352
+ it 'reloads the correct documents' do
405
353
  expect(preferences).to eq([ preference ])
406
354
  end
407
355
 
408
- it "reloads a new instance" do
409
- expect(preferences.first).to_not equal(preference)
356
+ it 'reloads a new instance' do
357
+ expect(preferences.first).not_to equal(preference)
410
358
  end
411
359
  end
412
360
 
413
- context "when performing a fresh find on the base" do
414
-
361
+ context 'when performing a fresh find on the base' do
415
362
  let(:preferences) do
416
363
  Person.find(person.id).preferences
417
364
  end
418
365
 
419
- it "reloads the correct documents" do
366
+ it 'reloads the correct documents' do
420
367
  expect(preferences).to eq([ preference ])
421
368
  end
422
369
  end
423
370
  end
424
371
 
425
- context "when the association is a many to one" do
426
-
372
+ context 'when the association is a many to one' do
427
373
  let!(:post) do
428
- Post.create!(title: "First!")
374
+ Post.create!(title: 'First!')
429
375
  end
430
376
 
431
377
  before do
432
378
  person.posts << Post.last
433
379
  end
434
380
 
435
- context "when reloading the association directly" do
436
-
381
+ context 'when reloading the association directly' do
437
382
  let(:posts) do
438
383
  person.posts(true)
439
384
  end
440
385
 
441
- it "reloads the correct documents" do
386
+ it 'reloads the correct documents' do
442
387
  expect(posts).to eq([ post ])
443
388
  end
444
389
 
445
- it "reloads a new instance" do
446
- expect(posts.first).to_not equal(post)
390
+ it 'reloads a new instance' do
391
+ expect(posts.first).not_to equal(post)
447
392
  end
448
393
  end
449
394
 
450
- context "when reloading via the base document" do
451
-
395
+ context 'when reloading via the base document' do
452
396
  let(:posts) do
453
397
  person.reload.posts
454
398
  end
455
399
 
456
- it "reloads the correct documents" do
400
+ it 'reloads the correct documents' do
457
401
  expect(posts).to eq([ post ])
458
402
  end
459
403
 
460
- it "reloads a new instance" do
461
- expect(posts.first).to_not equal(post)
404
+ it 'reloads a new instance' do
405
+ expect(posts.first).not_to equal(post)
462
406
  end
463
407
  end
464
408
 
465
- context "when performing a fresh find on the base" do
466
-
409
+ context 'when performing a fresh find on the base' do
467
410
  let(:posts) do
468
411
  Person.find(person.id).posts
469
412
  end
470
413
 
471
- it "reloads the correct documents" do
414
+ it 'reloads the correct documents' do
472
415
  expect(posts).to eq([ post ])
473
416
  end
474
417
  end
475
418
  end
476
419
 
477
- context "when the association is a references one" do
478
-
420
+ context 'when the association is a references one' do
479
421
  let!(:game) do
480
- Game.create!(name: "Centipeded")
422
+ Game.create!(name: 'Centipeded')
481
423
  end
482
424
 
483
425
  before do
484
426
  person.game = Game.last
485
427
  end
486
428
 
487
- context "when reloading the association directly" do
488
-
429
+ context 'when reloading the association directly' do
489
430
  let(:reloaded_game) do
490
431
  person.game(true)
491
432
  end
492
433
 
493
- it "reloads the correct documents" do
434
+ it 'reloads the correct documents' do
494
435
  expect(reloaded_game).to eq(game)
495
436
  end
496
437
 
497
- it "reloads a new instance" do
498
- expect(reloaded_game).to_not equal(game)
438
+ it 'reloads a new instance' do
439
+ expect(reloaded_game).not_to equal(game)
499
440
  end
500
441
  end
501
442
 
502
- context "when reloading via the base document" do
503
-
443
+ context 'when reloading via the base document' do
504
444
  let(:reloaded_game) do
505
445
  person.reload.game
506
446
  end
507
447
 
508
- it "reloads the correct documents" do
448
+ it 'reloads the correct documents' do
509
449
  expect(reloaded_game).to eq(game)
510
450
  end
511
451
 
512
- it "reloads a new instance" do
513
- expect(reloaded_game).to_not equal(game)
452
+ it 'reloads a new instance' do
453
+ expect(reloaded_game).not_to equal(game)
514
454
  end
515
455
  end
516
456
 
517
- context "when performing a fresh find on the base" do
518
-
457
+ context 'when performing a fresh find on the base' do
519
458
  let(:reloaded_game) do
520
459
  Person.find(person.id).game
521
460
  end
522
461
 
523
- it "reloads the correct documents" do
462
+ it 'reloads the correct documents' do
524
463
  expect(reloaded_game).to eq(game)
525
464
  end
526
465
  end
527
466
  end
528
467
  end
529
468
 
530
- context "when the association is polymorphic" do
531
-
469
+ context 'when the association is polymorphic' do
532
470
  context "when there's a single references many/one" do
533
-
534
471
  let!(:movie) do
535
- Movie.create!(title: "Inception")
472
+ Movie.create!(title: 'Inception')
536
473
  end
537
474
 
538
475
  let!(:book) do
539
- Book.create!(title: "Jurassic Park")
476
+ Book.create!(title: 'Jurassic Park')
540
477
  end
541
478
 
542
479
  let!(:movie_rating) do
@@ -547,35 +484,32 @@ describe Mongoid::Association::Accessors do
547
484
  book.create_rating(value: 5)
548
485
  end
549
486
 
550
- context "when accessing a referenced in" do
551
-
487
+ context 'when accessing a referenced in' do
552
488
  let!(:rating) do
553
489
  Rating.where(value: 10).first
554
490
  end
555
491
 
556
- it "returns the correct document" do
492
+ it 'returns the correct document' do
557
493
  expect(rating.ratable).to eq(movie)
558
494
  end
559
495
  end
560
496
 
561
- context "when accessing a references many" do
562
-
497
+ context 'when accessing a references many' do
563
498
  let(:ratings) do
564
499
  Movie.first.ratings
565
500
  end
566
501
 
567
- it "returns the correct documents" do
502
+ it 'returns the correct documents' do
568
503
  expect(ratings).to eq([ movie_rating ])
569
504
  end
570
505
  end
571
506
 
572
- context "when accessing a references one" do
573
-
507
+ context 'when accessing a references one' do
574
508
  let!(:rating) do
575
509
  Book.find(book.id).rating
576
510
  end
577
511
 
578
- it "returns the correct document" do
512
+ it 'returns the correct document' do
579
513
  expect(rating).to eq(book_rating)
580
514
  end
581
515
  end
@@ -584,31 +518,31 @@ describe Mongoid::Association::Accessors do
584
518
 
585
519
  context 'when projecting' do
586
520
  context 'embeds_one' do
587
-
588
521
  let!(:person) do
589
- Person.create!(passport: Passport.new(number: "123123321", country: "USA"))
522
+ Person.create!(passport: Passport.new(number: '123123321', country: 'USA'))
590
523
  end
591
524
 
592
- context "when the record is queried with the embedded association projected" do
525
+ context 'when the record is queried with the embedded association projected' do
593
526
  let(:persisted_person) { Person.only(:passport).first }
594
527
 
595
528
  it 'creates an accessor for the projected embedded document' do
596
- expect(persisted_person.passport.number).to eq("123123321")
597
- expect(persisted_person.passport.country).to eq("USA")
529
+ expect(persisted_person.passport.number).to eq('123123321')
530
+ expect(persisted_person.passport.country).to eq('USA')
598
531
  end
599
532
  end
600
533
 
601
534
  context 'when the record is queried with a field on the embedded association projected' do
602
- let(:persisted_person) { Person.only("pass.number").first }
535
+ let(:persisted_person) { Person.only('pass.number').first }
603
536
 
604
537
  it 'creates an accessor for the projected field on the embedded document' do
605
- expect(persisted_person.passport.number).to eq("123123321")
538
+ expect(persisted_person.passport.number).to eq('123123321')
606
539
  end
607
540
 
608
541
  it 'does not create an accessor for another field on the embedded document' do
609
542
  expect do
610
543
  persisted_person.passport.country
611
- end.to raise_error(Mongoid::Errors::AttributeNotLoaded, /Attempted to access attribute 'country' on Passport which was not loaded/)
544
+ end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
545
+ /Attempted to access attribute 'country' on Passport which was not loaded/)
612
546
  end
613
547
  end
614
548
 
@@ -626,19 +560,20 @@ describe Mongoid::Association::Accessors do
626
560
  end
627
561
 
628
562
  context 'association then field' do
629
- let(:persisted_person) { Person.only(:pass, "pass.number").first }
563
+ let(:persisted_person) { Person.only(:pass, 'pass.number').first }
630
564
 
631
565
  context '4.2 server and lower' do
632
566
  max_server_version '4.2'
633
567
 
634
568
  it 'creates an accessor for the projected field on the embedded document' do
635
- expect(persisted_person.passport.number).to eq("123123321")
569
+ expect(persisted_person.passport.number).to eq('123123321')
636
570
  end
637
571
 
638
572
  it 'does not create an accessor for another field on the embedded document' do
639
573
  expect do
640
574
  persisted_person.passport.country
641
- end.to raise_error(Mongoid::Errors::AttributeNotLoaded, /Attempted to access attribute 'country' on Passport which was not loaded/)
575
+ end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
576
+ /Attempted to access attribute 'country' on Passport which was not loaded/)
642
577
  end
643
578
  end
644
579
 
@@ -652,11 +587,11 @@ describe Mongoid::Association::Accessors do
652
587
  max_server_version '4.2'
653
588
 
654
589
  it 'creates an accessor for the projected field on the embedded document' do
655
- expect(persisted_person.passport.number).to eq("123123321")
590
+ expect(persisted_person.passport.number).to eq('123123321')
656
591
  end
657
592
 
658
593
  it 'retrieves other fields' do
659
- persisted_person.passport.country.should == 'USA'
594
+ persisted_person.passport.country.should eq 'USA'
660
595
  end
661
596
  end
662
597
 
@@ -666,11 +601,10 @@ describe Mongoid::Association::Accessors do
666
601
  end
667
602
 
668
603
  context 'embeds_many' do
669
-
670
604
  let!(:person) do
671
605
  Person.create!(phone_numbers: [
672
- Phone.new(number: '111-111-1111', landline: true),
673
- ])
606
+ Phone.new(number: '111-111-1111', landline: true)
607
+ ])
674
608
  end
675
609
 
676
610
  context 'when the record is queried with the embedded association projected' do
@@ -684,7 +618,7 @@ describe Mongoid::Association::Accessors do
684
618
 
685
619
  shared_examples 'allows access to field of projected association' do
686
620
  it 'creates an accessor for the embedded document' do
687
- expect(persisted_person.phone_numbers.first).to be_a_kind_of(Phone)
621
+ expect(persisted_person.phone_numbers.first).to be_a(Phone)
688
622
  end
689
623
 
690
624
  it 'creates an accessor for the projected field on the embedded document' do
@@ -693,19 +627,19 @@ describe Mongoid::Association::Accessors do
693
627
  end
694
628
 
695
629
  context 'when the record is queried with a field on the embedded association projected' do
696
- let(:persisted_person) { Person.only("phone_numbers.number").first }
630
+ let(:persisted_person) { Person.only('phone_numbers.number').first }
697
631
 
698
632
  include_examples 'allows access to field of projected association'
699
633
 
700
634
  it 'does not create an accessor for another field on the embedded document' do
701
635
  expect do
702
636
  persisted_person.phone_numbers.first.landline
703
- end.to raise_error(Mongoid::Errors::AttributeNotLoaded, /Attempted to access attribute 'landline' on Phone which was not loaded/)
637
+ end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
638
+ /Attempted to access attribute 'landline' on Phone which was not loaded/)
704
639
  end
705
640
  end
706
641
 
707
642
  context 'when projecting association and a field in association' do
708
-
709
643
  shared_examples 'is prohibited on 4.4+ server' do
710
644
  context '4.4 server and higher' do
711
645
  min_server_version '4.4'
@@ -729,9 +663,9 @@ describe Mongoid::Association::Accessors do
729
663
  it 'does not create an accessor for another field on the embedded document' do
730
664
  expect do
731
665
  persisted_person.phone_numbers.first.landline
732
- end.to raise_error(Mongoid::Errors::AttributeNotLoaded, /Attempted to access attribute 'landline' on Phone which was not loaded/)
666
+ end.to raise_error(Mongoid::Errors::AttributeNotLoaded,
667
+ /Attempted to access attribute 'landline' on Phone which was not loaded/)
733
668
  end
734
-
735
669
  end
736
670
 
737
671
  include_examples 'is prohibited on 4.4+ server'
@@ -757,120 +691,108 @@ describe Mongoid::Association::Accessors do
757
691
  end
758
692
  end
759
693
 
760
- context "when setting associations to empty values" do
761
-
762
- context "when the document is a referenced in" do
763
-
694
+ context 'when setting associations to empty values' do
695
+ context 'when the document is a referenced in' do
764
696
  let(:post) do
765
697
  Post.new
766
698
  end
767
699
 
768
- context "when setting the association directly" do
769
-
700
+ context 'when setting the association directly' do
770
701
  before do
771
- post.person = ""
702
+ post.person = ''
772
703
  end
773
704
 
774
- it "converts them to nil" do
705
+ it 'converts them to nil' do
775
706
  expect(post.person).to be_nil
776
707
  end
777
708
  end
778
709
 
779
- context "when setting the foreign key" do
780
-
710
+ context 'when setting the foreign key' do
781
711
  before do
782
- post.person_id = ""
712
+ post.person_id = ''
783
713
  end
784
714
 
785
- it "converts it to nil" do
715
+ it 'converts it to nil' do
786
716
  expect(post.person_id).to be_nil
787
717
  end
788
718
  end
789
719
  end
790
720
 
791
- context "when the document is a references one" do
792
-
721
+ context 'when the document is a references one' do
793
722
  let(:person) do
794
723
  Person.new
795
724
  end
796
725
 
797
- context "when setting the association directly" do
798
-
726
+ context 'when setting the association directly' do
799
727
  before do
800
- person.game = ""
728
+ person.game = ''
801
729
  end
802
730
 
803
- it "converts them to nil" do
731
+ it 'converts them to nil' do
804
732
  expect(person.game).to be_nil
805
733
  end
806
734
  end
807
735
 
808
- context "when setting the foreign key" do
809
-
736
+ context 'when setting the foreign key' do
810
737
  let(:game) do
811
738
  Game.new
812
739
  end
813
740
 
814
741
  before do
815
- game.person_id = ""
742
+ game.person_id = ''
816
743
  end
817
744
 
818
- it "converts it to nil" do
745
+ it 'converts it to nil' do
819
746
  expect(game.person_id).to be_nil
820
747
  end
821
748
  end
822
749
  end
823
750
 
824
- context "when the document is a references many" do
825
-
751
+ context 'when the document is a references many' do
826
752
  let(:person) do
827
753
  Person.new
828
754
  end
829
755
 
830
- context "when setting the foreign key" do
831
-
756
+ context 'when setting the foreign key' do
832
757
  let(:post) do
833
758
  Post.new
834
759
  end
835
760
 
836
761
  before do
837
- post.person_id = ""
762
+ post.person_id = ''
838
763
  end
839
764
 
840
- it "converts it to nil" do
765
+ it 'converts it to nil' do
841
766
  expect(post.person).to be_nil
842
767
  end
843
768
  end
844
769
 
845
- context "when setting the _ids accessor" do
846
-
770
+ context 'when setting the _ids accessor' do
847
771
  let(:post) do
848
772
  Post.create!
849
773
  end
850
774
 
851
775
  before do
852
- person.post_ids = [ "" ]
776
+ person.post_ids = [ '' ]
853
777
  end
854
778
 
855
- it "ignore blank values" do
779
+ it 'ignore blank values' do
856
780
  expect(person.post_ids).to be_empty
857
781
  end
858
782
  end
859
783
  end
860
784
 
861
- context "when the document is a references many to many" do
862
-
785
+ context 'when the document is a references many to many' do
863
786
  let(:person) do
864
787
  Person.new
865
788
  end
866
789
 
867
- context "when setting the foreign key" do
868
-
790
+ context 'when setting the foreign key' do
869
791
  before do
870
- person.preference_ids = [ "", "" ]
792
+ person.preference_ids = [ '', '' ]
871
793
  end
872
794
 
873
- it "does not add them" do
795
+ it 'does not add them' do
874
796
  expect(person.preference_ids).to be_empty
875
797
  end
876
798
  end
@@ -916,8 +838,7 @@ describe Mongoid::Association::Accessors do
916
838
  end
917
839
  end
918
840
 
919
- context "when setting association foreign keys" do
920
-
841
+ context 'when setting association foreign keys' do
921
842
  let(:game) do
922
843
  Game.new
923
844
  end
@@ -926,67 +847,61 @@ describe Mongoid::Association::Accessors do
926
847
  Person.create!
927
848
  end
928
849
 
929
- context "when value is an empty string" do
930
-
850
+ context 'when value is an empty string' do
931
851
  before do
932
- game.person_id = ""
852
+ game.person_id = ''
933
853
  game.save!
934
854
  end
935
855
 
936
- it "sets the foreign key to empty" do
856
+ it 'sets the foreign key to empty' do
937
857
  expect(game.reload.person_id).to be_blank
938
858
  end
939
859
  end
940
860
 
941
- context "when value is a populated string" do
942
-
861
+ context 'when value is a populated string' do
943
862
  before do
944
863
  game.person_id = person.id.to_s
945
864
  game.save!
946
865
  end
947
866
 
948
- it "sets the foreign key as ObjectID" do
867
+ it 'sets the foreign key as ObjectID' do
949
868
  expect(game.reload.person_id).to eq(person.id)
950
869
  end
951
870
  end
952
871
 
953
- context "when value is a ObjectID" do
954
-
872
+ context 'when value is a ObjectID' do
955
873
  before do
956
874
  game.person_id = person.id
957
875
  game.save!
958
876
  end
959
877
 
960
- it "keeps the foreign key as ObjectID" do
878
+ it 'keeps the foreign key as ObjectID' do
961
879
  expect(game.reload.person_id).to eq(person.id)
962
880
  end
963
881
  end
964
882
 
965
- context "when setting ids multiple times on the association itself" do
966
-
883
+ context 'when setting ids multiple times on the association itself' do
967
884
  before do
968
885
  game.person = person.id
969
886
  game.person = person.id
970
887
  end
971
888
 
972
- it "sets the association foreign key" do
889
+ it 'sets the association foreign key' do
973
890
  expect(game.person_id).to eq(person.id)
974
891
  end
975
892
 
976
- it "sets the appropriate association" do
893
+ it 'sets the appropriate association' do
977
894
  expect(game.person).to eq(person)
978
895
  end
979
896
  end
980
897
  end
981
898
 
982
899
  context 'when setting the association more than once' do
983
-
984
900
  let(:person) do
985
901
  Person.create!
986
902
  end
987
903
 
988
904
  context 'when the association is a references one' do
989
-
990
905
  let(:game) do
991
906
  Game.create!
992
907
  end
@@ -1002,9 +917,8 @@ describe Mongoid::Association::Accessors do
1002
917
  end
1003
918
 
1004
919
  context 'when the association is a references many' do
1005
-
1006
920
  let!(:preference) do
1007
- Preference.create!(name: "Setting")
921
+ Preference.create!(name: 'Setting')
1008
922
  end
1009
923
 
1010
924
  before do
@@ -1017,7 +931,6 @@ describe Mongoid::Association::Accessors do
1017
931
  end
1018
932
 
1019
933
  context 'when the association is an embeds one' do
1020
-
1021
934
  let!(:name) do
1022
935
  Name.new
1023
936
  end
@@ -1033,7 +946,6 @@ describe Mongoid::Association::Accessors do
1033
946
  end
1034
947
 
1035
948
  context 'when the association is an embeds many' do
1036
-
1037
949
  let!(:address) do
1038
950
  Address.new
1039
951
  end