mongoid 9.0.11 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -8
  3. data/README.md +5 -11
  4. data/Rakefile +35 -38
  5. data/lib/config/locales/en.yml +11 -0
  6. data/lib/mongoid/association/accessors.rb +19 -26
  7. data/lib/mongoid/association/bindable.rb +43 -45
  8. data/lib/mongoid/association/builders.rb +18 -15
  9. data/lib/mongoid/association/constrainable.rb +3 -5
  10. data/lib/mongoid/association/depending.rb +34 -38
  11. data/lib/mongoid/association/eager.rb +47 -13
  12. data/lib/mongoid/association/eager_loadable.rb +152 -24
  13. data/lib/mongoid/association/embedded/batchable.rb +28 -30
  14. data/lib/mongoid/association/embedded/cyclic.rb +8 -11
  15. data/lib/mongoid/association/embedded/eager.rb +1 -6
  16. data/lib/mongoid/association/embedded/embedded_in/binding.rb +6 -9
  17. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -3
  18. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -0
  19. data/lib/mongoid/association/embedded/embedded_in.rb +25 -22
  20. data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -2
  21. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +2 -3
  22. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  23. data/lib/mongoid/association/embedded/embeds_many.rb +24 -21
  24. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -2
  25. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +2 -6
  26. data/lib/mongoid/association/embedded/embeds_one.rb +20 -18
  27. data/lib/mongoid/association/embedded.rb +0 -1
  28. data/lib/mongoid/association/macros.rb +3 -7
  29. data/lib/mongoid/association/many.rb +75 -3
  30. data/lib/mongoid/association/marshalable.rb +0 -3
  31. data/lib/mongoid/association/nested/many.rb +18 -13
  32. data/lib/mongoid/association/nested/nested_buildable.rb +6 -9
  33. data/lib/mongoid/association/nested/one.rb +4 -7
  34. data/lib/mongoid/association/nested.rb +1 -3
  35. data/lib/mongoid/association/one.rb +0 -3
  36. data/lib/mongoid/association/options.rb +8 -7
  37. data/lib/mongoid/association/referenced/auto_save.rb +0 -2
  38. data/lib/mongoid/association/referenced/belongs_to/binding.rb +11 -15
  39. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +23 -5
  40. data/lib/mongoid/association/referenced/belongs_to/eager.rb +1 -3
  41. data/lib/mongoid/association/referenced/belongs_to.rb +48 -43
  42. data/lib/mongoid/association/referenced/counter_cache.rb +5 -10
  43. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -2
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +8 -4
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -3
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +52 -47
  47. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -2
  48. data/lib/mongoid/association/referenced/has_many/buildable.rb +11 -5
  49. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -3
  50. data/lib/mongoid/association/referenced/has_many/enumerable.rb +107 -38
  51. data/lib/mongoid/association/referenced/has_many/proxy.rb +10 -6
  52. data/lib/mongoid/association/referenced/has_many.rb +30 -24
  53. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -2
  54. data/lib/mongoid/association/referenced/has_one/buildable.rb +11 -9
  55. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -3
  56. data/lib/mongoid/association/referenced/has_one.rb +26 -21
  57. data/lib/mongoid/association/referenced/syncable.rb +30 -34
  58. data/lib/mongoid/association/referenced.rb +0 -1
  59. data/lib/mongoid/association/reflections.rb +0 -3
  60. data/lib/mongoid/association/relatable.rb +69 -66
  61. data/lib/mongoid/association.rb +12 -15
  62. data/lib/mongoid/atomic/modifiers.rb +65 -25
  63. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -7
  64. data/lib/mongoid/atomic/paths/embedded/one.rb +2 -4
  65. data/lib/mongoid/atomic/paths/embedded.rb +3 -6
  66. data/lib/mongoid/atomic/paths/root.rb +1 -4
  67. data/lib/mongoid/atomic/paths.rb +2 -3
  68. data/lib/mongoid/atomic.rb +0 -3
  69. data/lib/mongoid/attributes/dynamic.rb +6 -7
  70. data/lib/mongoid/attributes/nested.rb +8 -10
  71. data/lib/mongoid/attributes/projector.rb +7 -20
  72. data/lib/mongoid/attributes/readonly.rb +6 -11
  73. data/lib/mongoid/attributes.rb +18 -34
  74. data/lib/mongoid/cacheable.rb +24 -6
  75. data/lib/mongoid/clients/factory.rb +12 -15
  76. data/lib/mongoid/clients/options.rb +2 -5
  77. data/lib/mongoid/clients/sessions.rb +50 -60
  78. data/lib/mongoid/clients/storage_options.rb +1 -4
  79. data/lib/mongoid/clients/validators/storage.rb +2 -3
  80. data/lib/mongoid/clients/validators.rb +1 -2
  81. data/lib/mongoid/clients.rb +8 -11
  82. data/lib/mongoid/collection_configurable.rb +10 -14
  83. data/lib/mongoid/composable.rb +30 -34
  84. data/lib/mongoid/config/defaults.rb +7 -4
  85. data/lib/mongoid/config/encryption.rb +1 -3
  86. data/lib/mongoid/config/environment.rb +7 -16
  87. data/lib/mongoid/config/introspection.rb +14 -16
  88. data/lib/mongoid/config/options.rb +16 -10
  89. data/lib/mongoid/config/validators/async_query_executor.rb +3 -6
  90. data/lib/mongoid/config/validators/client.rb +12 -15
  91. data/lib/mongoid/config/validators/option.rb +3 -5
  92. data/lib/mongoid/config/validators.rb +3 -4
  93. data/lib/mongoid/config.rb +132 -42
  94. data/lib/mongoid/contextual/aggregable/memory.rb +2 -4
  95. data/lib/mongoid/contextual/aggregable/mongo.rb +20 -22
  96. data/lib/mongoid/contextual/aggregable/none.rb +2 -4
  97. data/lib/mongoid/contextual/aggregable.rb +5 -7
  98. data/lib/mongoid/contextual/atomic.rb +20 -24
  99. data/lib/mongoid/contextual/command.rb +0 -3
  100. data/lib/mongoid/contextual/map_reduce.rb +12 -16
  101. data/lib/mongoid/contextual/memory.rb +72 -65
  102. data/lib/mongoid/contextual/mongo/documents_loader.rb +2 -3
  103. data/lib/mongoid/contextual/mongo.rb +169 -85
  104. data/lib/mongoid/contextual/none.rb +9 -9
  105. data/lib/mongoid/contextual/queryable.rb +1 -4
  106. data/lib/mongoid/contextual.rb +18 -7
  107. data/lib/mongoid/copyable.rb +7 -9
  108. data/lib/mongoid/criteria/findable.rb +5 -7
  109. data/lib/mongoid/criteria/includable.rb +37 -8
  110. data/lib/mongoid/criteria/inspectable.rb +2 -5
  111. data/lib/mongoid/criteria/marshalable.rb +4 -8
  112. data/lib/mongoid/criteria/modifiable.rb +3 -11
  113. data/lib/mongoid/criteria/options.rb +0 -3
  114. data/lib/mongoid/criteria/permission.rb +34 -37
  115. data/lib/mongoid/criteria/queryable/aggregable.rb +9 -10
  116. data/lib/mongoid/criteria/queryable/expandable.rb +4 -9
  117. data/lib/mongoid/criteria/queryable/extensions/array.rb +7 -10
  118. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  119. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -4
  120. data/lib/mongoid/criteria/queryable/extensions/date.rb +2 -6
  121. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +3 -7
  122. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -4
  123. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +20 -11
  124. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -11
  125. data/lib/mongoid/criteria/queryable/extensions/object.rb +7 -8
  126. data/lib/mongoid/criteria/queryable/extensions/range.rb +6 -9
  127. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +10 -12
  128. data/lib/mongoid/criteria/queryable/extensions/set.rb +4 -6
  129. data/lib/mongoid/criteria/queryable/extensions/string.rb +5 -9
  130. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -7
  131. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -6
  132. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +2 -12
  133. data/lib/mongoid/criteria/queryable/extensions.rb +18 -21
  134. data/lib/mongoid/criteria/queryable/key.rb +12 -18
  135. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  136. data/lib/mongoid/criteria/queryable/mergeable.rb +31 -39
  137. data/lib/mongoid/criteria/queryable/optional.rb +17 -18
  138. data/lib/mongoid/criteria/queryable/options.rb +20 -9
  139. data/lib/mongoid/criteria/queryable/pipeline.rb +6 -9
  140. data/lib/mongoid/criteria/queryable/selectable.rb +131 -193
  141. data/lib/mongoid/criteria/queryable/selector.rb +20 -29
  142. data/lib/mongoid/criteria/queryable/smash.rb +1 -6
  143. data/lib/mongoid/criteria/queryable/storable.rb +20 -39
  144. data/lib/mongoid/criteria/queryable.rb +25 -15
  145. data/lib/mongoid/criteria/scopable.rb +5 -11
  146. data/lib/mongoid/criteria/translator.rb +5 -8
  147. data/lib/mongoid/criteria.rb +109 -54
  148. data/lib/mongoid/deprecable.rb +1 -4
  149. data/lib/mongoid/deprecation.rb +2 -6
  150. data/lib/mongoid/document.rb +1 -1
  151. data/lib/mongoid/encryptable.rb +1 -2
  152. data/lib/mongoid/equality.rb +4 -5
  153. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  154. data/lib/mongoid/errors/attribute_not_loaded.rb +1 -4
  155. data/lib/mongoid/errors/callback.rb +1 -4
  156. data/lib/mongoid/errors/create_collection_failure.rb +8 -11
  157. data/lib/mongoid/errors/criteria_argument_required.rb +2 -5
  158. data/lib/mongoid/errors/delete_restriction.rb +1 -4
  159. data/lib/mongoid/errors/document_not_destroyed.rb +1 -4
  160. data/lib/mongoid/errors/document_not_found.rb +16 -21
  161. data/lib/mongoid/errors/drop_collection_failure.rb +7 -10
  162. data/lib/mongoid/errors/empty_config_file.rb +1 -4
  163. data/lib/mongoid/errors/immutable_attribute.rb +1 -4
  164. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -4
  165. data/lib/mongoid/errors/invalid_async_query_executor.rb +2 -5
  166. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +2 -5
  167. data/lib/mongoid/errors/invalid_collection.rb +1 -3
  168. data/lib/mongoid/errors/invalid_config_file.rb +1 -4
  169. data/lib/mongoid/errors/invalid_config_option.rb +2 -5
  170. data/lib/mongoid/errors/invalid_dependent_strategy.rb +6 -10
  171. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +2 -4
  172. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -4
  173. data/lib/mongoid/errors/invalid_elem_match_operator.rb +5 -9
  174. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +1 -4
  175. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +1 -4
  176. data/lib/mongoid/errors/invalid_expression_operator.rb +3 -7
  177. data/lib/mongoid/errors/invalid_field.rb +2 -5
  178. data/lib/mongoid/errors/invalid_field_operator.rb +5 -9
  179. data/lib/mongoid/errors/invalid_field_option.rb +2 -5
  180. data/lib/mongoid/errors/invalid_field_type.rb +1 -4
  181. data/lib/mongoid/errors/invalid_find.rb +1 -4
  182. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -4
  183. data/lib/mongoid/errors/invalid_includes.rb +3 -6
  184. data/lib/mongoid/errors/invalid_index.rb +1 -4
  185. data/lib/mongoid/errors/invalid_options.rb +1 -4
  186. data/lib/mongoid/errors/invalid_path.rb +1 -4
  187. data/lib/mongoid/errors/invalid_persistence_option.rb +4 -7
  188. data/lib/mongoid/errors/invalid_query.rb +6 -11
  189. data/lib/mongoid/errors/invalid_relation.rb +10 -13
  190. data/lib/mongoid/errors/invalid_relation_option.rb +4 -7
  191. data/lib/mongoid/errors/invalid_scope.rb +1 -4
  192. data/lib/mongoid/errors/invalid_session_nesting.rb +0 -3
  193. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +2 -4
  194. data/lib/mongoid/errors/invalid_storage_options.rb +1 -4
  195. data/lib/mongoid/errors/invalid_time.rb +1 -4
  196. data/lib/mongoid/errors/invalid_transaction_nesting.rb +0 -3
  197. data/lib/mongoid/errors/inverse_not_found.rb +1 -4
  198. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -4
  199. data/lib/mongoid/errors/mixed_relations.rb +1 -3
  200. data/lib/mongoid/errors/mongoid_error.rb +7 -11
  201. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -4
  202. data/lib/mongoid/errors/no_client_config.rb +1 -4
  203. data/lib/mongoid/errors/no_client_database.rb +1 -4
  204. data/lib/mongoid/errors/no_client_hosts.rb +1 -4
  205. data/lib/mongoid/errors/no_clients_config.rb +1 -4
  206. data/lib/mongoid/errors/no_default_client.rb +1 -4
  207. data/lib/mongoid/errors/no_environment.rb +1 -4
  208. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -4
  209. data/lib/mongoid/errors/no_metadata.rb +1 -4
  210. data/lib/mongoid/errors/no_parent.rb +1 -4
  211. data/lib/mongoid/errors/readonly_attribute.rb +1 -4
  212. data/lib/mongoid/errors/readonly_document.rb +1 -4
  213. data/lib/mongoid/errors/rollback.rb +0 -2
  214. data/lib/mongoid/errors/scope_overwrite.rb +2 -4
  215. data/lib/mongoid/errors/sessions_not_supported.rb +0 -3
  216. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -3
  217. data/lib/mongoid/errors/transaction_error.rb +0 -3
  218. data/lib/mongoid/errors/transactions_not_supported.rb +0 -3
  219. data/lib/mongoid/errors/unknown_attribute.rb +1 -4
  220. data/lib/mongoid/errors/unknown_model.rb +1 -4
  221. data/lib/mongoid/errors/unregistered_class.rb +1 -1
  222. data/lib/mongoid/errors/unsaved_document.rb +1 -3
  223. data/lib/mongoid/errors/unsupported_isolation_level.rb +22 -0
  224. data/lib/mongoid/errors/unsupported_javascript.rb +1 -4
  225. data/lib/mongoid/errors/validations.rb +3 -5
  226. data/lib/mongoid/errors.rb +72 -72
  227. data/lib/mongoid/evolvable.rb +0 -3
  228. data/lib/mongoid/extensions/array.rb +5 -7
  229. data/lib/mongoid/extensions/big_decimal.rb +6 -7
  230. data/lib/mongoid/extensions/binary.rb +3 -6
  231. data/lib/mongoid/extensions/boolean.rb +4 -7
  232. data/lib/mongoid/extensions/bson_document.rb +28 -0
  233. data/lib/mongoid/extensions/date.rb +10 -14
  234. data/lib/mongoid/extensions/date_time.rb +2 -6
  235. data/lib/mongoid/extensions/decimal128.rb +1 -5
  236. data/lib/mongoid/extensions/false_class.rb +3 -5
  237. data/lib/mongoid/extensions/float.rb +5 -10
  238. data/lib/mongoid/extensions/hash.rb +5 -10
  239. data/lib/mongoid/extensions/integer.rb +5 -10
  240. data/lib/mongoid/extensions/module.rb +1 -4
  241. data/lib/mongoid/extensions/nil_class.rb +0 -1
  242. data/lib/mongoid/extensions/object.rb +9 -14
  243. data/lib/mongoid/extensions/object_id.rb +2 -6
  244. data/lib/mongoid/extensions/range.rb +14 -15
  245. data/lib/mongoid/extensions/raw_value.rb +0 -3
  246. data/lib/mongoid/extensions/regexp.rb +3 -6
  247. data/lib/mongoid/extensions/set.rb +3 -4
  248. data/lib/mongoid/extensions/string.rb +8 -12
  249. data/lib/mongoid/extensions/symbol.rb +3 -7
  250. data/lib/mongoid/extensions/time.rb +24 -26
  251. data/lib/mongoid/extensions/time_with_zone.rb +4 -7
  252. data/lib/mongoid/extensions/true_class.rb +3 -5
  253. data/lib/mongoid/extensions.rb +26 -26
  254. data/lib/mongoid/factory.rb +5 -9
  255. data/lib/mongoid/fields/encrypted.rb +0 -1
  256. data/lib/mongoid/fields/foreign_key.rb +9 -10
  257. data/lib/mongoid/fields/localized.rb +12 -12
  258. data/lib/mongoid/fields/standard.rb +5 -7
  259. data/lib/mongoid/fields/validators/macro.rb +23 -34
  260. data/lib/mongoid/fields/validators.rb +1 -2
  261. data/lib/mongoid/fields.rb +151 -58
  262. data/lib/mongoid/findable.rb +82 -53
  263. data/lib/mongoid/indexable/specification.rb +20 -6
  264. data/lib/mongoid/indexable/validators/options.rb +33 -40
  265. data/lib/mongoid/indexable.rb +26 -25
  266. data/lib/mongoid/inspectable.rb +4 -7
  267. data/lib/mongoid/interceptable.rb +41 -40
  268. data/lib/mongoid/loadable.rb +17 -18
  269. data/lib/mongoid/loggable.rb +4 -8
  270. data/lib/mongoid/matchable.rb +0 -2
  271. data/lib/mongoid/matcher/all.rb +2 -5
  272. data/lib/mongoid/matcher/and.rb +0 -3
  273. data/lib/mongoid/matcher/bits.rb +13 -8
  274. data/lib/mongoid/matcher/bits_all_clear.rb +1 -3
  275. data/lib/mongoid/matcher/bits_all_set.rb +1 -3
  276. data/lib/mongoid/matcher/bits_any_clear.rb +1 -3
  277. data/lib/mongoid/matcher/bits_any_set.rb +1 -3
  278. data/lib/mongoid/matcher/elem_match.rb +13 -15
  279. data/lib/mongoid/matcher/elem_match_expression.rb +0 -3
  280. data/lib/mongoid/matcher/eq.rb +0 -3
  281. data/lib/mongoid/matcher/eq_impl.rb +12 -17
  282. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +4 -7
  283. data/lib/mongoid/matcher/exists.rb +1 -4
  284. data/lib/mongoid/matcher/expression.rb +5 -10
  285. data/lib/mongoid/matcher/expression_operator.rb +1 -3
  286. data/lib/mongoid/matcher/field_expression.rb +10 -13
  287. data/lib/mongoid/matcher/field_operator.rb +4 -6
  288. data/lib/mongoid/matcher/gt.rb +0 -3
  289. data/lib/mongoid/matcher/gte.rb +0 -3
  290. data/lib/mongoid/matcher/in.rb +9 -12
  291. data/lib/mongoid/matcher/lt.rb +0 -3
  292. data/lib/mongoid/matcher/lte.rb +0 -3
  293. data/lib/mongoid/matcher/mod.rb +4 -8
  294. data/lib/mongoid/matcher/ne.rb +0 -3
  295. data/lib/mongoid/matcher/nin.rb +0 -3
  296. data/lib/mongoid/matcher/nor.rb +1 -6
  297. data/lib/mongoid/matcher/not.rb +0 -3
  298. data/lib/mongoid/matcher/or.rb +0 -3
  299. data/lib/mongoid/matcher/regex.rb +11 -14
  300. data/lib/mongoid/matcher/size.rb +2 -5
  301. data/lib/mongoid/matcher/type.rb +32 -37
  302. data/lib/mongoid/matcher.rb +7 -15
  303. data/lib/mongoid/model_resolver.rb +1 -0
  304. data/lib/mongoid/persistable/creatable.rb +23 -7
  305. data/lib/mongoid/persistable/deletable.rb +6 -7
  306. data/lib/mongoid/persistable/destroyable.rb +2 -6
  307. data/lib/mongoid/persistable/incrementable.rb +1 -3
  308. data/lib/mongoid/persistable/logical.rb +3 -5
  309. data/lib/mongoid/persistable/maxable.rb +2 -4
  310. data/lib/mongoid/persistable/minable.rb +2 -4
  311. data/lib/mongoid/persistable/multipliable.rb +1 -3
  312. data/lib/mongoid/persistable/poppable.rb +2 -4
  313. data/lib/mongoid/persistable/pullable.rb +3 -5
  314. data/lib/mongoid/persistable/pushable.rb +5 -7
  315. data/lib/mongoid/persistable/renamable.rb +1 -3
  316. data/lib/mongoid/persistable/savable.rb +0 -3
  317. data/lib/mongoid/persistable/settable.rb +4 -13
  318. data/lib/mongoid/persistable/unsettable.rb +1 -3
  319. data/lib/mongoid/persistable/updatable.rb +16 -24
  320. data/lib/mongoid/persistable/upsertable.rb +8 -10
  321. data/lib/mongoid/persistable.rb +28 -27
  322. data/lib/mongoid/persistence_context.rb +34 -41
  323. data/lib/mongoid/pluckable.rb +0 -2
  324. data/lib/mongoid/positional.rb +5 -11
  325. data/lib/mongoid/railtie.rb +16 -22
  326. data/lib/mongoid/railties/console_sandbox.rb +6 -8
  327. data/lib/mongoid/railties/controller_runtime.rb +7 -11
  328. data/lib/mongoid/railties/database.rake +42 -44
  329. data/lib/mongoid/scopable.rb +23 -31
  330. data/lib/mongoid/search_indexable.rb +330 -0
  331. data/lib/mongoid/selectable.rb +1 -3
  332. data/lib/mongoid/serializable.rb +6 -8
  333. data/lib/mongoid/shardable.rb +8 -17
  334. data/lib/mongoid/stateful.rb +5 -10
  335. data/lib/mongoid/stringified_symbol.rb +5 -9
  336. data/lib/mongoid/tasks/database.rake +31 -32
  337. data/lib/mongoid/tasks/database.rb +28 -30
  338. data/lib/mongoid/tasks/encryption.rb +10 -15
  339. data/lib/mongoid/threaded/lifecycle.rb +6 -9
  340. data/lib/mongoid/threaded.rb +132 -32
  341. data/lib/mongoid/timestamps/created/short.rb +2 -3
  342. data/lib/mongoid/timestamps/created.rb +1 -2
  343. data/lib/mongoid/timestamps/short.rb +0 -1
  344. data/lib/mongoid/timestamps/timeless.rb +8 -13
  345. data/lib/mongoid/timestamps/updated/short.rb +2 -3
  346. data/lib/mongoid/timestamps/updated.rb +2 -5
  347. data/lib/mongoid/timestamps.rb +4 -6
  348. data/lib/mongoid/touchable.rb +19 -11
  349. data/lib/mongoid/traversable.rb +3 -2
  350. data/lib/mongoid/validatable/associated.rb +1 -5
  351. data/lib/mongoid/validatable/format.rb +0 -2
  352. data/lib/mongoid/validatable/length.rb +0 -2
  353. data/lib/mongoid/validatable/localizable.rb +0 -3
  354. data/lib/mongoid/validatable/macros.rb +0 -2
  355. data/lib/mongoid/validatable/numericality.rb +24 -3
  356. data/lib/mongoid/validatable/presence.rb +8 -10
  357. data/lib/mongoid/validatable/queryable.rb +0 -3
  358. data/lib/mongoid/validatable/uniqueness.rb +12 -14
  359. data/lib/mongoid/validatable.rb +15 -20
  360. data/lib/mongoid/version.rb +1 -1
  361. data/lib/mongoid/warnings.rb +10 -11
  362. data/lib/mongoid.rb +30 -34
  363. data/lib/rails/generators/mongoid/config/config_generator.rb +2 -4
  364. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +4 -5
  365. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +2 -2
  366. data/lib/rails/generators/mongoid/model/model_generator.rb +5 -8
  367. data/lib/rails/generators/mongoid_generator.rb +6 -10
  368. data/lib/rails/mongoid.rb +1 -3
  369. data/spec/integration/active_job_spec.rb +1 -2
  370. data/spec/integration/app_spec.rb +142 -178
  371. data/spec/integration/associations/belongs_to_spec.rb +30 -28
  372. data/spec/integration/associations/embedded_dirty_spec.rb +0 -1
  373. data/spec/integration/associations/embedded_spec.rb +41 -43
  374. data/spec/integration/associations/embeds_many_spec.rb +46 -29
  375. data/spec/integration/associations/embeds_one_spec.rb +2 -1
  376. data/spec/integration/associations/foreign_key_spec.rb +10 -11
  377. data/spec/integration/associations/foreign_key_spec_models.rb +8 -9
  378. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +16 -13
  379. data/spec/integration/associations/has_many_spec.rb +17 -18
  380. data/spec/integration/associations/has_one_spec.rb +42 -45
  381. data/spec/integration/associations/nested_attributes_assignment_spec.rb +36 -39
  382. data/spec/integration/associations/reverse_population_spec.rb +4 -5
  383. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  384. data/spec/integration/associations/scope_option_spec.rb +18 -20
  385. data/spec/integration/atomic/modifiers_spec.rb +72 -52
  386. data/spec/integration/bson_regexp_raw_spec.rb +2 -3
  387. data/spec/integration/caching_spec.rb +68 -0
  388. data/spec/integration/callbacks_models.rb +11 -9
  389. data/spec/integration/callbacks_spec.rb +78 -80
  390. data/spec/integration/contextual/empty_spec.rb +19 -20
  391. data/spec/integration/criteria/alias_query_spec.rb +12 -19
  392. data/spec/integration/criteria/date_field_spec.rb +1 -2
  393. data/spec/integration/criteria/default_scope_spec.rb +23 -18
  394. data/spec/integration/criteria/logical_spec.rb +18 -19
  395. data/spec/integration/criteria/range_spec.rb +77 -86
  396. data/spec/integration/criteria/raw_value_spec.rb +122 -109
  397. data/spec/integration/criteria/time_with_zone_spec.rb +33 -24
  398. data/spec/integration/discriminator_key_spec.rb +85 -85
  399. data/spec/integration/discriminator_value_spec.rb +70 -73
  400. data/spec/integration/document_spec.rb +9 -10
  401. data/spec/integration/dots_and_dollars_spec.rb +104 -119
  402. data/spec/integration/encryption_spec.rb +8 -11
  403. data/spec/integration/i18n_fallbacks_spec.rb +7 -8
  404. data/spec/integration/isolation_state_spec.rb +241 -0
  405. data/spec/integration/matcher_examples_spec.rb +145 -168
  406. data/spec/integration/matcher_operator_data/in.yml +6 -6
  407. data/spec/integration/matcher_operator_spec.rb +16 -26
  408. data/spec/integration/matcher_spec.rb +31 -32
  409. data/spec/integration/persistence/collection_options_spec.rb +0 -2
  410. data/spec/integration/persistence/range_field_spec.rb +24 -2
  411. data/spec/integration/server_query_spec.rb +43 -37
  412. data/spec/integration/shardable_spec.rb +10 -11
  413. data/spec/integration/stringified_symbol_field_spec.rb +28 -43
  414. data/spec/lite_spec_helper.rb +11 -12
  415. data/spec/mongoid/association/accessors_spec.rb +197 -285
  416. data/spec/mongoid/association/auto_save_spec.rb +62 -93
  417. data/spec/mongoid/association/builders_spec.rb +121 -74
  418. data/spec/mongoid/association/constrainable_spec.rb +9 -22
  419. data/spec/mongoid/association/counter_cache_spec.rb +71 -104
  420. data/spec/mongoid/association/depending_spec.rb +166 -208
  421. data/spec/mongoid/association/eager_spec.rb +416 -80
  422. data/spec/mongoid/association/embedded/cyclic_spec.rb +36 -48
  423. data/spec/mongoid/association/embedded/dirty_spec.rb +15 -20
  424. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +36 -54
  425. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +8 -15
  426. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +135 -175
  427. data/spec/mongoid/association/embedded/embedded_in_spec.rb +25 -127
  428. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +9 -14
  429. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +38 -51
  430. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1151 -1340
  431. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -17
  432. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +11 -11
  433. data/spec/mongoid/association/embedded/embeds_many_spec.rb +25 -138
  434. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +15 -23
  435. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +18 -26
  436. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +204 -273
  437. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  438. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  439. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +5 -6
  440. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -143
  441. data/spec/mongoid/association/macros_spec.rb +213 -300
  442. data/spec/mongoid/association/nested/many_spec.rb +51 -73
  443. data/spec/mongoid/association/nested/one_spec.rb +56 -80
  444. data/spec/mongoid/association/options_spec.rb +187 -310
  445. data/spec/mongoid/association/polymorphic_spec.rb +35 -53
  446. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +55 -76
  447. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +36 -41
  448. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +81 -101
  449. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +258 -345
  450. data/spec/mongoid/association/referenced/belongs_to_models.rb +4 -3
  451. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +3 -4
  452. data/spec/mongoid/association/referenced/belongs_to_spec.rb +91 -294
  453. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +42 -56
  454. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +41 -32
  455. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +36 -42
  456. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +8 -9
  457. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +771 -975
  458. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +9 -9
  459. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +5 -6
  460. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +59 -177
  461. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +29 -43
  462. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +53 -53
  463. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +104 -67
  464. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +431 -675
  465. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -2
  466. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +173 -11
  467. data/spec/mongoid/association/referenced/has_many_models.rb +1 -2
  468. data/spec/mongoid/association/referenced/has_many_query_spec.rb +3 -4
  469. data/spec/mongoid/association/referenced/has_many_spec.rb +44 -188
  470. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +26 -38
  471. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +28 -29
  472. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +29 -42
  473. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +270 -332
  474. data/spec/mongoid/association/referenced/has_one_models.rb +1 -2
  475. data/spec/mongoid/association/referenced/has_one_query_spec.rb +3 -4
  476. data/spec/mongoid/association/referenced/has_one_spec.rb +40 -188
  477. data/spec/mongoid/association/reflections_spec.rb +14 -24
  478. data/spec/mongoid/association/syncable_spec.rb +102 -125
  479. data/spec/mongoid/association_spec.rb +47 -70
  480. data/spec/mongoid/atomic/modifiers_spec.rb +184 -197
  481. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +39 -52
  482. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +35 -49
  483. data/spec/mongoid/atomic/paths/root_spec.rb +9 -15
  484. data/spec/mongoid/atomic/paths_spec.rb +81 -117
  485. data/spec/mongoid/atomic_spec.rb +156 -171
  486. data/spec/mongoid/attributes/dynamic_spec.rb +5 -6
  487. data/spec/mongoid/attributes/nested_spec.rb +1219 -1692
  488. data/spec/mongoid/attributes/nested_spec_models.rb +8 -9
  489. data/spec/mongoid/attributes/projector_spec.rb +2 -6
  490. data/spec/mongoid/attributes/readonly_spec.rb +73 -97
  491. data/spec/mongoid/attributes_spec.rb +669 -826
  492. data/spec/mongoid/cacheable_spec.rb +74 -44
  493. data/spec/mongoid/changeable_spec.rb +591 -733
  494. data/spec/mongoid/clients/factory_spec.rb +122 -154
  495. data/spec/mongoid/clients/options_spec.rb +40 -59
  496. data/spec/mongoid/clients/sessions_spec.rb +25 -44
  497. data/spec/mongoid/clients/transactions_spec.rb +33 -50
  498. data/spec/mongoid/clients/transactions_spec_models.rb +3 -4
  499. data/spec/mongoid/clients_spec.rb +265 -355
  500. data/spec/mongoid/collection_configurable_spec.rb +9 -12
  501. data/spec/mongoid/composable_spec.rb +2 -9
  502. data/spec/mongoid/config/defaults_spec.rb +24 -31
  503. data/spec/mongoid/config/encryption_spec.rb +54 -57
  504. data/spec/mongoid/config/environment_spec.rb +30 -40
  505. data/spec/mongoid/config/introspection_spec.rb +42 -37
  506. data/spec/mongoid/config/options_spec.rb +14 -21
  507. data/spec/mongoid/config_spec.rb +145 -195
  508. data/spec/mongoid/contextual/aggregable/memory_spec.rb +98 -135
  509. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +4 -7
  510. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +149 -187
  511. data/spec/mongoid/contextual/aggregable/none_spec.rb +14 -16
  512. data/spec/mongoid/contextual/atomic_spec.rb +223 -271
  513. data/spec/mongoid/contextual/map_reduce_spec.rb +110 -138
  514. data/spec/mongoid/contextual/memory_spec.rb +706 -854
  515. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +12 -13
  516. data/spec/mongoid/contextual/mongo_spec.rb +1008 -1213
  517. data/spec/mongoid/contextual/none_spec.rb +54 -59
  518. data/spec/mongoid/contextual/short_circuit_spec.rb +139 -0
  519. data/spec/mongoid/copyable_spec.rb +254 -300
  520. data/spec/mongoid/copyable_spec_models.rb +0 -1
  521. data/spec/mongoid/criteria/findable_spec.rb +322 -387
  522. data/spec/mongoid/criteria/includable_spec.rb +421 -372
  523. data/spec/mongoid/criteria/includable_spec_models.rb +16 -7
  524. data/spec/mongoid/criteria/inspectable_spec.rb +11 -14
  525. data/spec/mongoid/criteria/marshalable_spec.rb +11 -14
  526. data/spec/mongoid/criteria/modifiable_spec.rb +366 -512
  527. data/spec/mongoid/criteria/options_spec.rb +2 -7
  528. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +112 -141
  529. data/spec/mongoid/criteria/queryable/expandable_spec.rb +8 -11
  530. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +127 -184
  531. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +123 -60
  532. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +84 -117
  533. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +44 -65
  534. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +86 -108
  535. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +94 -33
  536. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +103 -138
  537. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +95 -34
  538. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +25 -38
  539. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +26 -28
  540. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +32 -54
  541. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +136 -130
  542. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +16 -24
  543. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +15 -24
  544. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +12 -19
  545. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +46 -63
  546. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +28 -42
  547. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +73 -96
  548. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +71 -92
  549. data/spec/mongoid/criteria/queryable/key_spec.rb +32 -36
  550. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +44 -49
  551. data/spec/mongoid/criteria/queryable/optional_spec.rb +373 -486
  552. data/spec/mongoid/criteria/queryable/options_spec.rb +172 -123
  553. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +65 -87
  554. data/spec/mongoid/criteria/queryable/queryable_spec.rb +41 -53
  555. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +576 -680
  556. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +7 -11
  557. data/spec/mongoid/criteria/queryable/selectable_spec.rb +807 -998
  558. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +154 -191
  559. data/spec/mongoid/criteria/queryable/selector_spec.rb +294 -390
  560. data/spec/mongoid/criteria/queryable/smash_spec.rb +6 -11
  561. data/spec/mongoid/criteria/queryable/storable_spec.rb +54 -81
  562. data/spec/mongoid/criteria/queryable_mql_spec.rb +92 -0
  563. data/spec/mongoid/criteria/scopable_spec.rb +102 -138
  564. data/spec/mongoid/criteria/translator_spec.rb +59 -60
  565. data/spec/mongoid/criteria_projection_spec.rb +81 -99
  566. data/spec/mongoid/criteria_spec.rb +935 -950
  567. data/spec/mongoid/document_fields_spec.rb +28 -30
  568. data/spec/mongoid/document_persistence_context_spec.rb +13 -15
  569. data/spec/mongoid/document_query_spec.rb +9 -12
  570. data/spec/mongoid/document_spec.rb +317 -409
  571. data/spec/mongoid/equality_spec.rb +69 -102
  572. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +8 -11
  573. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +7 -10
  574. data/spec/mongoid/errors/callback_spec.rb +8 -11
  575. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -8
  576. data/spec/mongoid/errors/document_not_destroyed_spec.rb +7 -10
  577. data/spec/mongoid/errors/document_not_found_spec.rb +51 -61
  578. data/spec/mongoid/errors/invalid_collection_spec.rb +9 -13
  579. data/spec/mongoid/errors/invalid_config_file_spec.rb +8 -11
  580. data/spec/mongoid/errors/invalid_config_option_spec.rb +8 -11
  581. data/spec/mongoid/errors/invalid_field_option_spec.rb +7 -10
  582. data/spec/mongoid/errors/invalid_field_spec.rb +10 -11
  583. data/spec/mongoid/errors/invalid_field_type_spec.rb +9 -12
  584. data/spec/mongoid/errors/invalid_find_spec.rb +8 -11
  585. data/spec/mongoid/errors/invalid_includes_spec.rb +9 -13
  586. data/spec/mongoid/errors/invalid_index_spec.rb +8 -11
  587. data/spec/mongoid/errors/invalid_options_spec.rb +8 -11
  588. data/spec/mongoid/errors/invalid_path_spec.rb +7 -10
  589. data/spec/mongoid/errors/invalid_relation_spec.rb +15 -16
  590. data/spec/mongoid/errors/invalid_scope_spec.rb +8 -11
  591. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -6
  592. data/spec/mongoid/errors/invalid_storage_options_spec.rb +8 -11
  593. data/spec/mongoid/errors/invalid_time_spec.rb +8 -11
  594. data/spec/mongoid/errors/inverse_not_found_spec.rb +9 -12
  595. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +9 -12
  596. data/spec/mongoid/errors/mixed_relations_spec.rb +8 -11
  597. data/spec/mongoid/errors/mongoid_error_spec.rb +21 -24
  598. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -9
  599. data/spec/mongoid/errors/no_client_config_spec.rb +7 -10
  600. data/spec/mongoid/errors/no_client_database_spec.rb +9 -12
  601. data/spec/mongoid/errors/no_client_hosts_spec.rb +9 -12
  602. data/spec/mongoid/errors/no_clients_config_spec.rb +7 -10
  603. data/spec/mongoid/errors/no_environment_spec.rb +8 -11
  604. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +8 -11
  605. data/spec/mongoid/errors/no_metadata_spec.rb +7 -10
  606. data/spec/mongoid/errors/no_parent_spec.rb +7 -10
  607. data/spec/mongoid/errors/readonly_attribute_spec.rb +7 -10
  608. data/spec/mongoid/errors/readonly_document_spec.rb +6 -9
  609. data/spec/mongoid/errors/scope_overwrite_spec.rb +9 -12
  610. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +9 -12
  611. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -8
  612. data/spec/mongoid/errors/unsaved_document_spec.rb +8 -11
  613. data/spec/mongoid/errors/unsupported_javascript_spec.rb +9 -12
  614. data/spec/mongoid/errors/validations_spec.rb +11 -14
  615. data/spec/mongoid/extensions/array_spec.rb +70 -92
  616. data/spec/mongoid/extensions/big_decimal_spec.rb +233 -313
  617. data/spec/mongoid/extensions/binary_spec.rb +21 -32
  618. data/spec/mongoid/extensions/boolean_spec.rb +52 -75
  619. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +43 -54
  620. data/spec/mongoid/extensions/date_spec.rb +26 -38
  621. data/spec/mongoid/extensions/date_time_spec.rb +22 -32
  622. data/spec/mongoid/extensions/decimal128_spec.rb +12 -18
  623. data/spec/mongoid/extensions/false_class_spec.rb +10 -17
  624. data/spec/mongoid/extensions/float_spec.rb +40 -61
  625. data/spec/mongoid/extensions/hash_spec.rb +46 -64
  626. data/spec/mongoid/extensions/integer_spec.rb +40 -61
  627. data/spec/mongoid/extensions/module_spec.rb +13 -18
  628. data/spec/mongoid/extensions/nil_class_spec.rb +2 -5
  629. data/spec/mongoid/extensions/object_id_spec.rb +159 -247
  630. data/spec/mongoid/extensions/object_spec.rb +31 -47
  631. data/spec/mongoid/extensions/range_spec.rb +112 -115
  632. data/spec/mongoid/extensions/raw_value_spec.rb +10 -12
  633. data/spec/mongoid/extensions/regexp_spec.rb +23 -36
  634. data/spec/mongoid/extensions/set_spec.rb +38 -49
  635. data/spec/mongoid/extensions/string_spec.rb +118 -167
  636. data/spec/mongoid/extensions/stringified_symbol_spec.rb +29 -43
  637. data/spec/mongoid/extensions/symbol_spec.rb +12 -20
  638. data/spec/mongoid/extensions/time_spec.rb +160 -202
  639. data/spec/mongoid/extensions/time_with_zone_spec.rb +79 -105
  640. data/spec/mongoid/extensions/true_class_spec.rb +10 -17
  641. data/spec/mongoid/factory_spec.rb +125 -148
  642. data/spec/mongoid/fields/foreign_key_spec.rb +124 -169
  643. data/spec/mongoid/fields/localized_spec.rb +140 -185
  644. data/spec/mongoid/fields/standard_spec.rb +43 -59
  645. data/spec/mongoid/fields_spec.rb +751 -620
  646. data/spec/mongoid/findable_spec.rb +260 -228
  647. data/spec/mongoid/indexable/specification_spec.rb +42 -58
  648. data/spec/mongoid/indexable_spec.rb +260 -264
  649. data/spec/mongoid/inspectable_spec.rb +45 -55
  650. data/spec/mongoid/interceptable_spec.rb +784 -922
  651. data/spec/mongoid/interceptable_spec_models.rb +35 -35
  652. data/spec/mongoid/loading_spec.rb +47 -43
  653. data/spec/mongoid/loggable_spec.rb +3 -6
  654. data/spec/mongoid/matcher/extract_attribute_spec.rb +2 -6
  655. data/spec/mongoid/mongoizable_spec.rb +81 -90
  656. data/spec/mongoid/monkey_patches_spec.rb +4 -0
  657. data/spec/mongoid/persistable/creatable_spec.rb +181 -220
  658. data/spec/mongoid/persistable/deletable_spec.rb +139 -179
  659. data/spec/mongoid/persistable/destroyable_spec.rb +135 -164
  660. data/spec/mongoid/persistable/incrementable_spec.rb +65 -84
  661. data/spec/mongoid/persistable/logical_spec.rb +48 -61
  662. data/spec/mongoid/persistable/maxable_spec.rb +45 -44
  663. data/spec/mongoid/persistable/minable_spec.rb +45 -44
  664. data/spec/mongoid/persistable/multipliable_spec.rb +54 -69
  665. data/spec/mongoid/persistable/poppable_spec.rb +47 -60
  666. data/spec/mongoid/persistable/pullable_spec.rb +79 -103
  667. data/spec/mongoid/persistable/pushable_spec.rb +106 -131
  668. data/spec/mongoid/persistable/renamable_spec.rb +52 -65
  669. data/spec/mongoid/persistable/savable_spec.rb +152 -189
  670. data/spec/mongoid/persistable/settable_spec.rb +121 -145
  671. data/spec/mongoid/persistable/unsettable_spec.rb +56 -73
  672. data/spec/mongoid/persistable/updatable_spec.rb +185 -232
  673. data/spec/mongoid/persistable/upsertable_spec.rb +66 -77
  674. data/spec/mongoid/persistable_spec.rb +132 -139
  675. data/spec/mongoid/persistence_context_spec.rb +31 -89
  676. data/spec/mongoid/positional_spec.rb +67 -79
  677. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +0 -3
  678. data/spec/mongoid/railties/console_sandbox_spec.rb +0 -1
  679. data/spec/mongoid/relations/proxy_spec.rb +0 -1
  680. data/spec/mongoid/reloadable_spec.rb +250 -145
  681. data/spec/mongoid/scopable_spec.rb +319 -398
  682. data/spec/mongoid/search_indexable_spec.rb +446 -41
  683. data/spec/mongoid/selectable_spec.rb +36 -51
  684. data/spec/mongoid/serializable_spec.rb +269 -312
  685. data/spec/mongoid/shardable_models.rb +5 -5
  686. data/spec/mongoid/shardable_spec.rb +44 -46
  687. data/spec/mongoid/stateful_spec.rb +55 -75
  688. data/spec/mongoid/tasks/database_rake_spec.rb +138 -141
  689. data/spec/mongoid/tasks/database_spec.rb +80 -80
  690. data/spec/mongoid/tasks/encryption_spec.rb +22 -20
  691. data/spec/mongoid/threaded_spec.rb +57 -83
  692. data/spec/mongoid/timestamps/created/short_spec.rb +12 -16
  693. data/spec/mongoid/timestamps/created_spec.rb +16 -20
  694. data/spec/mongoid/timestamps/timeless_spec.rb +31 -43
  695. data/spec/mongoid/timestamps/updated/short_spec.rb +21 -28
  696. data/spec/mongoid/timestamps/updated_spec.rb +18 -25
  697. data/spec/mongoid/timestamps_spec.rb +171 -188
  698. data/spec/mongoid/timestamps_spec_models.rb +12 -13
  699. data/spec/mongoid/touchable_spec.rb +330 -294
  700. data/spec/mongoid/touchable_spec_models.rb +35 -37
  701. data/spec/mongoid/traversable_spec.rb +435 -471
  702. data/spec/mongoid/validatable/associated_spec.rb +42 -60
  703. data/spec/mongoid/validatable/format_spec.rb +24 -34
  704. data/spec/mongoid/validatable/length_spec.rb +62 -86
  705. data/spec/mongoid/validatable/numericality_spec.rb +114 -23
  706. data/spec/mongoid/validatable/presence_spec.rb +149 -203
  707. data/spec/mongoid/validatable/uniqueness_spec.rb +632 -830
  708. data/spec/mongoid/validatable_spec.rb +71 -103
  709. data/spec/mongoid/warnings_spec.rb +5 -9
  710. data/spec/mongoid_spec.rb +25 -41
  711. data/spec/rails/controller_extension/controller_runtime_spec.rb +45 -49
  712. data/spec/rails/mongoid_spec.rb +15 -15
  713. data/spec/shared/lib/mrss/cluster_config.rb +5 -40
  714. data/spec/shared/lib/mrss/constraints.rb +7 -46
  715. data/spec/shared/lib/mrss/docker_runner.rb +10 -21
  716. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -31
  717. data/spec/shared/lib/mrss/release/candidate.rb +18 -12
  718. data/spec/shared/lib/mrss/server_version_registry.rb +1 -5
  719. data/spec/shared/share/Dockerfile.erb +6 -8
  720. data/spec/shared/shlib/server.sh +0 -50
  721. data/spec/shared/shlib/set_env.sh +4 -10
  722. data/spec/spec_helper.rb +54 -31
  723. data/spec/support/authorization.rb +0 -1
  724. data/spec/support/client_registry.rb +1 -2
  725. data/spec/support/constraints.rb +8 -25
  726. data/spec/support/crypt/models.rb +7 -8
  727. data/spec/support/crypt.rb +6 -9
  728. data/spec/support/expectations.rb +21 -7
  729. data/spec/support/feature_sandbox.rb +1 -4
  730. data/spec/support/helpers.rb +0 -1
  731. data/spec/support/immutable_ids.rb +20 -21
  732. data/spec/support/macros.rb +1 -3
  733. data/spec/support/models/account.rb +4 -5
  734. data/spec/support/models/acolyte.rb +5 -5
  735. data/spec/support/models/actor.rb +3 -3
  736. data/spec/support/models/actress.rb +0 -1
  737. data/spec/support/models/address.rb +11 -11
  738. data/spec/support/models/address_component.rb +1 -1
  739. data/spec/support/models/address_number.rb +1 -1
  740. data/spec/support/models/agency.rb +1 -1
  741. data/spec/support/models/agent.rb +1 -1
  742. data/spec/support/models/album.rb +1 -2
  743. data/spec/support/models/alert.rb +1 -1
  744. data/spec/support/models/animal.rb +4 -5
  745. data/spec/support/models/answer.rb +1 -1
  746. data/spec/support/models/appointment.rb +2 -2
  747. data/spec/support/models/armrest.rb +0 -1
  748. data/spec/support/models/array_field.rb +0 -1
  749. data/spec/support/models/article.rb +0 -1
  750. data/spec/support/models/artist.rb +16 -12
  751. data/spec/support/models/artwork.rb +1 -1
  752. data/spec/support/models/audible_sound.rb +0 -1
  753. data/spec/support/models/audio.rb +2 -2
  754. data/spec/support/models/augmentation.rb +1 -2
  755. data/spec/support/models/author.rb +1 -1
  756. data/spec/support/models/baby.rb +1 -1
  757. data/spec/support/models/band.rb +0 -1
  758. data/spec/support/models/bar.rb +2 -2
  759. data/spec/support/models/basic.rb +0 -1
  760. data/spec/support/models/bed.rb +0 -1
  761. data/spec/support/models/big_palette.rb +0 -1
  762. data/spec/support/models/birthday.rb +3 -5
  763. data/spec/support/models/bolt.rb +0 -1
  764. data/spec/support/models/bomb.rb +1 -1
  765. data/spec/support/models/book.rb +1 -1
  766. data/spec/support/models/breed.rb +1 -1
  767. data/spec/support/models/browser.rb +1 -2
  768. data/spec/support/models/building.rb +0 -1
  769. data/spec/support/models/building_address.rb +1 -1
  770. data/spec/support/models/bus.rb +1 -1
  771. data/spec/support/models/business.rb +2 -2
  772. data/spec/support/models/callback_test.rb +1 -1
  773. data/spec/support/models/canvas.rb +5 -6
  774. data/spec/support/models/car.rb +0 -1
  775. data/spec/support/models/cat.rb +0 -2
  776. data/spec/support/models/catalog.rb +0 -1
  777. data/spec/support/models/category.rb +1 -1
  778. data/spec/support/models/child.rb +1 -1
  779. data/spec/support/models/child_doc.rb +5 -6
  780. data/spec/support/models/church.rb +1 -1
  781. data/spec/support/models/circle.rb +0 -1
  782. data/spec/support/models/circuit.rb +2 -2
  783. data/spec/support/models/circus.rb +0 -1
  784. data/spec/support/models/code.rb +2 -1
  785. data/spec/support/models/coding/pull_request.rb +0 -1
  786. data/spec/support/models/coding.rb +0 -1
  787. data/spec/support/models/comment.rb +0 -1
  788. data/spec/support/models/company.rb +0 -1
  789. data/spec/support/models/consumption_period.rb +0 -1
  790. data/spec/support/models/contextable_item.rb +1 -1
  791. data/spec/support/models/contractor.rb +1 -1
  792. data/spec/support/models/cookie.rb +0 -1
  793. data/spec/support/models/country_code.rb +2 -3
  794. data/spec/support/models/courier_job.rb +2 -2
  795. data/spec/support/models/cover.rb +0 -1
  796. data/spec/support/models/crate.rb +0 -1
  797. data/spec/support/models/customer.rb +0 -1
  798. data/spec/support/models/customer_address.rb +0 -1
  799. data/spec/support/models/deed.rb +1 -1
  800. data/spec/support/models/definition.rb +1 -1
  801. data/spec/support/models/delegating_patient.rb +0 -1
  802. data/spec/support/models/description.rb +0 -1
  803. data/spec/support/models/dictionary.rb +1 -1
  804. data/spec/support/models/division.rb +2 -2
  805. data/spec/support/models/doctor.rb +0 -1
  806. data/spec/support/models/dog.rb +2 -2
  807. data/spec/support/models/dokument.rb +1 -1
  808. data/spec/support/models/draft.rb +0 -1
  809. data/spec/support/models/dragon.rb +1 -1
  810. data/spec/support/models/driver.rb +2 -2
  811. data/spec/support/models/drug.rb +1 -1
  812. data/spec/support/models/dungeon.rb +1 -1
  813. data/spec/support/models/edit.rb +1 -1
  814. data/spec/support/models/email.rb +1 -1
  815. data/spec/support/models/employer.rb +1 -2
  816. data/spec/support/models/entry.rb +1 -1
  817. data/spec/support/models/eraser.rb +0 -1
  818. data/spec/support/models/even.rb +1 -1
  819. data/spec/support/models/event.rb +3 -4
  820. data/spec/support/models/exhibition.rb +1 -1
  821. data/spec/support/models/exhibitor.rb +1 -1
  822. data/spec/support/models/explosion.rb +1 -1
  823. data/spec/support/models/eye.rb +0 -1
  824. data/spec/support/models/eye_bowl.rb +2 -3
  825. data/spec/support/models/face.rb +2 -3
  826. data/spec/support/models/fanatic.rb +1 -1
  827. data/spec/support/models/favorite.rb +1 -1
  828. data/spec/support/models/filesystem.rb +1 -1
  829. data/spec/support/models/fire_hydrant.rb +1 -1
  830. data/spec/support/models/firefox.rb +0 -1
  831. data/spec/support/models/fish.rb +0 -1
  832. data/spec/support/models/folder.rb +0 -2
  833. data/spec/support/models/folder_item.rb +1 -3
  834. data/spec/support/models/fruits.rb +9 -5
  835. data/spec/support/models/game.rb +3 -4
  836. data/spec/support/models/ghost.rb +0 -1
  837. data/spec/support/models/guitar.rb +0 -1
  838. data/spec/support/models/hole.rb +0 -1
  839. data/spec/support/models/home.rb +1 -1
  840. data/spec/support/models/house.rb +2 -2
  841. data/spec/support/models/html_writer.rb +0 -1
  842. data/spec/support/models/id_key.rb +3 -3
  843. data/spec/support/models/idnodef.rb +0 -1
  844. data/spec/support/models/image.rb +0 -1
  845. data/spec/support/models/implant.rb +1 -2
  846. data/spec/support/models/instrument.rb +2 -3
  847. data/spec/support/models/item.rb +2 -2
  848. data/spec/support/models/jar.rb +1 -2
  849. data/spec/support/models/kaleidoscope.rb +1 -1
  850. data/spec/support/models/kangaroo.rb +1 -1
  851. data/spec/support/models/label.rb +2 -2
  852. data/spec/support/models/language.rb +1 -1
  853. data/spec/support/models/lat_lng.rb +0 -1
  854. data/spec/support/models/league.rb +1 -1
  855. data/spec/support/models/learner.rb +0 -1
  856. data/spec/support/models/line_item.rb +1 -1
  857. data/spec/support/models/location.rb +1 -1
  858. data/spec/support/models/login.rb +1 -2
  859. data/spec/support/models/manufacturer.rb +0 -1
  860. data/spec/support/models/meat.rb +1 -1
  861. data/spec/support/models/membership.rb +1 -1
  862. data/spec/support/models/message.rb +1 -2
  863. data/spec/support/models/minim.rb +0 -1
  864. data/spec/support/models/mixed_drink.rb +1 -1
  865. data/spec/support/models/modifier_models.rb +25 -0
  866. data/spec/support/models/mop.rb +0 -1
  867. data/spec/support/models/movie.rb +1 -1
  868. data/spec/support/models/my_hash.rb +1 -2
  869. data/spec/support/models/name.rb +4 -5
  870. data/spec/support/models/name_only.rb +0 -1
  871. data/spec/support/models/node.rb +1 -1
  872. data/spec/support/models/note.rb +3 -3
  873. data/spec/support/models/nut.rb +0 -1
  874. data/spec/support/models/odd.rb +1 -1
  875. data/spec/support/models/order.rb +1 -1
  876. data/spec/support/models/ordered_post.rb +1 -1
  877. data/spec/support/models/ordered_preference.rb +1 -1
  878. data/spec/support/models/oscar.rb +1 -1
  879. data/spec/support/models/other_owner_object.rb +0 -1
  880. data/spec/support/models/override.rb +3 -11
  881. data/spec/support/models/ownable.rb +1 -1
  882. data/spec/support/models/owner.rb +1 -1
  883. data/spec/support/models/pack.rb +0 -1
  884. data/spec/support/models/page.rb +3 -3
  885. data/spec/support/models/page_question.rb +1 -1
  886. data/spec/support/models/palette.rb +2 -2
  887. data/spec/support/models/parent.rb +2 -2
  888. data/spec/support/models/parent_doc.rb +1 -1
  889. data/spec/support/models/passport.rb +0 -1
  890. data/spec/support/models/patient.rb +2 -2
  891. data/spec/support/models/pdf_writer.rb +0 -1
  892. data/spec/support/models/pencil.rb +0 -1
  893. data/spec/support/models/person.rb +32 -28
  894. data/spec/support/models/pet.rb +1 -1
  895. data/spec/support/models/pet_owner.rb +1 -1
  896. data/spec/support/models/phone.rb +1 -2
  897. data/spec/support/models/piano.rb +0 -1
  898. data/spec/support/models/pizza.rb +1 -1
  899. data/spec/support/models/player.rb +5 -5
  900. data/spec/support/models/post.rb +12 -12
  901. data/spec/support/models/post_genre.rb +1 -1
  902. data/spec/support/models/powerup.rb +1 -2
  903. data/spec/support/models/preference.rb +2 -2
  904. data/spec/support/models/princess.rb +1 -1
  905. data/spec/support/models/product.rb +3 -3
  906. data/spec/support/models/profile.rb +2 -1
  907. data/spec/support/models/pronunciation.rb +1 -1
  908. data/spec/support/models/pub.rb +2 -2
  909. data/spec/support/models/publication/encyclopedia.rb +0 -1
  910. data/spec/support/models/publication/review.rb +0 -1
  911. data/spec/support/models/publication.rb +0 -1
  912. data/spec/support/models/purchase.rb +1 -1
  913. data/spec/support/models/purchased_item.rb +1 -1
  914. data/spec/support/models/question.rb +2 -2
  915. data/spec/support/models/quiz.rb +1 -1
  916. data/spec/support/models/rating.rb +1 -1
  917. data/spec/support/models/record.rb +2 -3
  918. data/spec/support/models/registry.rb +1 -1
  919. data/spec/support/models/role.rb +1 -1
  920. data/spec/support/models/root_category.rb +1 -1
  921. data/spec/support/models/sandbox/app/models/app_models_message.rb +0 -1
  922. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +0 -1
  923. data/spec/support/models/sandbox/sandbox_message.rb +0 -1
  924. data/spec/support/models/sandbox/sandbox_user.rb +0 -1
  925. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +0 -1
  926. data/spec/support/models/sandwich.rb +1 -1
  927. data/spec/support/models/scheduler.rb +0 -1
  928. data/spec/support/models/school.rb +0 -1
  929. data/spec/support/models/scribe.rb +1 -1
  930. data/spec/support/models/sealer.rb +0 -1
  931. data/spec/support/models/seat.rb +0 -1
  932. data/spec/support/models/seo.rb +1 -1
  933. data/spec/support/models/series.rb +1 -1
  934. data/spec/support/models/server.rb +1 -1
  935. data/spec/support/models/service.rb +2 -2
  936. data/spec/support/models/shape.rb +3 -3
  937. data/spec/support/models/shelf.rb +1 -1
  938. data/spec/support/models/shield.rb +2 -2
  939. data/spec/support/models/shipment_address.rb +0 -1
  940. data/spec/support/models/shipping_container.rb +1 -1
  941. data/spec/support/models/shipping_pack.rb +0 -1
  942. data/spec/support/models/shirt.rb +0 -1
  943. data/spec/support/models/shop.rb +2 -2
  944. data/spec/support/models/short_agent.rb +0 -1
  945. data/spec/support/models/short_quiz.rb +1 -1
  946. data/spec/support/models/simple.rb +1 -1
  947. data/spec/support/models/slave.rb +1 -1
  948. data/spec/support/models/song.rb +1 -2
  949. data/spec/support/models/sound.rb +2 -2
  950. data/spec/support/models/spacer.rb +0 -1
  951. data/spec/support/models/square.rb +0 -1
  952. data/spec/support/models/staff.rb +0 -1
  953. data/spec/support/models/store_as_dup_test1.rb +2 -2
  954. data/spec/support/models/store_as_dup_test2.rb +1 -1
  955. data/spec/support/models/store_as_dup_test3.rb +2 -2
  956. data/spec/support/models/store_as_dup_test4.rb +1 -1
  957. data/spec/support/models/strategy.rb +0 -1
  958. data/spec/support/models/student.rb +1 -2
  959. data/spec/support/models/sub_item.rb +0 -1
  960. data/spec/support/models/subscription.rb +2 -2
  961. data/spec/support/models/survey.rb +2 -2
  962. data/spec/support/models/symptom.rb +2 -2
  963. data/spec/support/models/system_role.rb +2 -3
  964. data/spec/support/models/tag.rb +2 -2
  965. data/spec/support/models/target.rb +1 -1
  966. data/spec/support/models/template.rb +1 -1
  967. data/spec/support/models/thing.rb +1 -1
  968. data/spec/support/models/threadlocker.rb +0 -1
  969. data/spec/support/models/title.rb +0 -1
  970. data/spec/support/models/tool.rb +3 -3
  971. data/spec/support/models/topping.rb +1 -1
  972. data/spec/support/models/toy.rb +0 -1
  973. data/spec/support/models/track.rb +1 -1
  974. data/spec/support/models/translation.rb +1 -1
  975. data/spec/support/models/tree.rb +2 -3
  976. data/spec/support/models/truck.rb +0 -1
  977. data/spec/support/models/updatable.rb +0 -1
  978. data/spec/support/models/user.rb +3 -4
  979. data/spec/support/models/user_account.rb +3 -3
  980. data/spec/support/models/validation_callback.rb +4 -4
  981. data/spec/support/models/vehicle.rb +2 -3
  982. data/spec/support/models/version.rb +1 -1
  983. data/spec/support/models/vertex.rb +0 -1
  984. data/spec/support/models/vet_visit.rb +1 -1
  985. data/spec/support/models/video.rb +2 -2
  986. data/spec/support/models/video_game.rb +0 -1
  987. data/spec/support/models/washer.rb +0 -1
  988. data/spec/support/models/weapon.rb +1 -2
  989. data/spec/support/models/wiki_page.rb +2 -3
  990. data/spec/support/models/word.rb +2 -2
  991. data/spec/support/models/word_origin.rb +1 -2
  992. data/spec/support/models/writer.rb +3 -3
  993. data/spec/support/rails_mock.rb +7 -12
  994. data/spec/support/shared/time.rb +0 -1
  995. data/spec/support/sinatra_mock.rb +4 -2
  996. data/spec/support/spec_config.rb +19 -18
  997. metadata +14 -2
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
5
  describe Mongoid::Association::Macros do
7
-
8
6
  class TestClass
9
7
  include Mongoid::Document
10
8
  end
@@ -24,10 +22,10 @@ describe Mongoid::Association::Macros do
24
22
  end
25
23
 
26
24
  describe 'Model loading' do
27
-
28
25
  let(:model_associations) do
29
26
  class TestModel
30
27
  include Mongoid::Document
28
+
31
29
  field :associations
32
30
  end
33
31
  end
@@ -37,286 +35,267 @@ describe Mongoid::Association::Macros do
37
35
  end
38
36
 
39
37
  it 'prohibits the use of :associations as an attribute' do
40
- expect {
38
+ expect do
41
39
  model_associations
42
- }.to raise_exception(Mongoid::Errors::InvalidField)
40
+ end.to raise_exception(Mongoid::Errors::InvalidField)
43
41
  end
44
42
  end
45
43
 
46
- describe ".embedded_in" do
47
-
48
- it "defines the macro" do
44
+ describe '.embedded_in' do
45
+ it 'defines the macro' do
49
46
  expect(klass).to respond_to(:embedded_in)
50
47
  end
51
48
 
52
49
  context 'when the relation name is invalid' do
53
-
54
50
  let(:relation) do
55
51
  klass.embedded_in(:fields)
56
52
  end
57
53
 
58
54
  it 'raises an InvalidRelation exception' do
59
- expect {
55
+ expect do
60
56
  relation
61
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
57
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
62
58
  end
63
59
  end
64
60
 
65
- context "when defining the relation" do
66
-
61
+ context 'when defining the relation' do
67
62
  before do
68
63
  klass.embedded_in(:person)
69
64
  end
70
65
 
71
- it "adds the association to the klass" do
72
- expect(klass.relations["person"]).to_not be_nil
66
+ it 'adds the association to the klass' do
67
+ expect(klass.relations['person']).not_to be_nil
73
68
  end
74
69
 
75
- it "defines the getter" do
70
+ it 'defines the getter' do
76
71
  expect(klass.allocate).to respond_to(:person)
77
72
  end
78
73
 
79
- it "defines the setter" do
74
+ it 'defines the setter' do
80
75
  expect(klass.allocate).to respond_to(:person=)
81
76
  end
82
77
 
83
- it "creates the correct relation" do
84
- expect(klass.relations["person"]).to be_a(
78
+ it 'creates the correct relation' do
79
+ expect(klass.relations['person']).to be_a(
85
80
  Mongoid::Association::Embedded::EmbeddedIn
86
81
  )
87
82
  end
88
83
 
89
- it "does not add associated validations" do
84
+ it 'does not add associated validations' do
90
85
  expect(klass._validators).to be_empty
91
86
  end
92
87
 
93
88
  context 'when an invalid option is provided' do
94
-
95
89
  it 'raises an InvalidRelationOption exception' do
96
- expect {
90
+ expect do
97
91
  klass.embedded_in(:person, sandwich: true)
98
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
92
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
99
93
  end
100
94
  end
101
95
 
102
- context "association properties" do
103
-
96
+ context 'association properties' do
104
97
  let(:association) do
105
- klass.relations["person"]
98
+ klass.relations['person']
106
99
  end
107
100
 
108
- it "automatically adds the name" do
101
+ it 'automatically adds the name' do
109
102
  expect(association.name).to eq(:person)
110
103
  end
111
104
 
112
- it "automatically adds the inverse class name" do
113
- expect(association.inverse_class_name).to eq("TestClass")
105
+ it 'automatically adds the inverse class name' do
106
+ expect(association.inverse_class_name).to eq('TestClass')
114
107
  end
115
108
  end
116
109
  end
117
110
  end
118
111
 
119
- describe ".embeds_many" do
120
-
121
- it "defines the macro" do
112
+ describe '.embeds_many' do
113
+ it 'defines the macro' do
122
114
  expect(klass).to respond_to(:embeds_many)
123
115
  end
124
116
 
125
- context "when defining the relation" do
117
+ context 'when defining the relation' do
118
+ before do
119
+ klass.embeds_many(:addresses)
120
+ end
126
121
 
127
122
  context 'when the relation name is invalid' do
128
-
129
123
  let(:relation) do
130
124
  klass.embeds_many(:fields)
131
125
  end
132
126
 
133
127
  it 'raises an InvalidRelation exception' do
134
- expect {
128
+ expect do
135
129
  relation
136
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
130
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
137
131
  end
138
132
  end
139
133
 
140
- before do
141
- klass.embeds_many(:addresses)
142
- end
143
-
144
- it "adds the association to the klass" do
145
- expect(klass.relations["addresses"]).to_not be_nil
134
+ it 'adds the association to the klass' do
135
+ expect(klass.relations['addresses']).not_to be_nil
146
136
  end
147
137
 
148
- it "defines the getter" do
138
+ it 'defines the getter' do
149
139
  expect(klass.allocate).to respond_to(:addresses)
150
140
  end
151
141
 
152
- it "defines the setter" do
142
+ it 'defines the setter' do
153
143
  expect(klass.allocate).to respond_to(:addresses=)
154
144
  end
155
145
 
156
- it "creates the correct relation" do
157
- expect(klass.relations["addresses"]).to be_a(
146
+ it 'creates the correct relation' do
147
+ expect(klass.relations['addresses']).to be_a(
158
148
  Mongoid::Association::Embedded::EmbedsMany
159
149
  )
160
150
  end
161
151
 
162
- it "adds an associated validation" do
152
+ it 'adds an associated validation' do
163
153
  expect(klass._validators[:addresses].first).to be_a(
164
154
  Mongoid::Validatable::AssociatedValidator
165
155
  )
166
156
  end
167
157
 
168
158
  context 'when an invalid option is provided' do
169
-
170
159
  it 'raises an InvalidRelationOption exception' do
171
- expect {
160
+ expect do
172
161
  klass.embeds_many(:addresses, sandwich: true)
173
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
162
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
174
163
  end
175
164
  end
176
165
 
177
- context "association properties" do
178
-
166
+ context 'association properties' do
179
167
  let(:association) do
180
- klass.relations["addresses"]
168
+ klass.relations['addresses']
181
169
  end
182
170
 
183
- it "automatically adds the name" do
171
+ it 'automatically adds the name' do
184
172
  expect(association.name).to eq(:addresses)
185
173
  end
186
174
 
187
- it "automatically adds the inverse class name" do
188
- expect(association.inverse_class_name).to eq("TestClass")
175
+ it 'automatically adds the inverse class name' do
176
+ expect(association.inverse_class_name).to eq('TestClass')
189
177
  end
190
178
  end
191
179
  end
192
180
 
193
181
  context 'when defining order on relation' do
194
-
195
182
  before do
196
183
  klass.embeds_many(:addresses, order: :number.asc)
197
184
  end
198
185
 
199
186
  let(:association) do
200
- klass.relations["addresses"]
187
+ klass.relations['addresses']
201
188
  end
202
189
 
203
- it "adds association to klass" do
204
- expect(association.order).to_not be_nil
190
+ it 'adds association to klass' do
191
+ expect(association.order).not_to be_nil
205
192
  end
206
193
 
207
- it "returns Mongoid::Criteria::Queryable::Key" do
208
- expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
194
+ it 'returns Mongoid::Criteria::Queryable::Key' do
195
+ expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
209
196
  end
210
197
  end
211
198
 
212
- context "when setting validate to false" do
213
-
199
+ context 'when setting validate to false' do
214
200
  before do
215
201
  klass.embeds_many(:addresses, validate: false)
216
202
  end
217
203
 
218
- it "does not add associated validations" do
204
+ it 'does not add associated validations' do
219
205
  expect(klass._validators).to be_empty
220
206
  end
221
207
  end
222
208
  end
223
209
 
224
- describe ".embeds_one" do
225
-
226
- it "defines the macro" do
210
+ describe '.embeds_one' do
211
+ it 'defines the macro' do
227
212
  expect(klass).to respond_to(:embeds_one)
228
213
  end
229
214
 
230
- context "when defining the relation" do
215
+ context 'when defining the relation' do
216
+ before do
217
+ klass.embeds_one(:name)
218
+ end
231
219
 
232
220
  context 'when the relation name is invalid' do
233
-
234
221
  let(:relation) do
235
222
  klass.embeds_one(:fields)
236
223
  end
237
224
 
238
225
  it 'raises an InvalidRelation exception' do
239
- expect {
226
+ expect do
240
227
  relation
241
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
228
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
242
229
  end
243
230
  end
244
231
 
245
- before do
246
- klass.embeds_one(:name)
247
- end
248
-
249
- it "adds the association to the klass" do
250
- expect(klass.relations["name"]).to_not be_nil
232
+ it 'adds the association to the klass' do
233
+ expect(klass.relations['name']).not_to be_nil
251
234
  end
252
235
 
253
- it "defines the getter" do
236
+ it 'defines the getter' do
254
237
  expect(klass.allocate).to respond_to(:name)
255
238
  end
256
239
 
257
- it "defines the setter" do
240
+ it 'defines the setter' do
258
241
  expect(klass.allocate).to respond_to(:name=)
259
242
  end
260
243
 
261
- it "defines the builder" do
244
+ it 'defines the builder' do
262
245
  expect(klass.allocate).to respond_to(:build_name)
263
246
  end
264
247
 
265
- it "defines the creator" do
248
+ it 'defines the creator' do
266
249
  expect(klass.allocate).to respond_to(:create_name)
267
250
  end
268
251
 
269
- it "creates the correct relation" do
270
- expect(klass.relations["name"]).to be_a(
252
+ it 'creates the correct relation' do
253
+ expect(klass.relations['name']).to be_a(
271
254
  Mongoid::Association::Embedded::EmbedsOne
272
255
  )
273
256
  end
274
257
 
275
- it "adds an associated validation" do
258
+ it 'adds an associated validation' do
276
259
  expect(klass._validators[:name].first).to be_a(
277
260
  Mongoid::Validatable::AssociatedValidator
278
261
  )
279
262
  end
280
263
 
281
264
  context 'when an invalid option is provided' do
282
-
283
265
  it 'raises an InvalidRelationOption exception' do
284
- expect {
266
+ expect do
285
267
  klass.embeds_one(:name, sandwich: true)
286
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
268
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
287
269
  end
288
270
  end
289
271
 
290
- context "association properties" do
291
-
272
+ context 'association properties' do
292
273
  let(:association) do
293
- klass.relations["name"]
274
+ klass.relations['name']
294
275
  end
295
276
 
296
- it "automatically adds the name" do
277
+ it 'automatically adds the name' do
297
278
  expect(association.name).to eq(:name)
298
279
  end
299
280
 
300
- it "automatically adds the inverse class name" do
301
- expect(association.inverse_class_name).to eq("TestClass")
281
+ it 'automatically adds the inverse class name' do
282
+ expect(association.inverse_class_name).to eq('TestClass')
302
283
  end
303
284
  end
304
285
  end
305
286
 
306
- context "when setting validate to false" do
307
-
287
+ context 'when setting validate to false' do
308
288
  before do
309
289
  klass.embeds_one(:name, validate: false)
310
290
  end
311
291
 
312
- it "does not add associated validations" do
292
+ it 'does not add associated validations' do
313
293
  expect(klass._validators).to be_empty
314
294
  end
315
295
  end
316
296
  end
317
297
 
318
- describe ".belongs_to" do
319
-
298
+ describe '.belongs_to' do
320
299
  let(:_class) do
321
300
  class RelationsTestClass
322
301
  include Mongoid::Document
@@ -352,33 +331,27 @@ describe Mongoid::Association::Macros do
352
331
  end
353
332
  end
354
333
 
355
- it "defines the macro" do
334
+ it 'defines the macro' do
356
335
  expect(_class).to respond_to(:belongs_to)
357
336
  end
358
337
 
359
338
  context 'when the relation has options' do
360
-
361
339
  context 'when an invalid option is provided' do
362
-
363
340
  it 'raises an InvalidRelationOption exception' do
364
- expect {
341
+ expect do
365
342
  klass.belongs_to(:person, sandwich: true)
366
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
343
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
367
344
  end
368
345
  end
369
346
 
370
347
  context 'when the relation has the option :required' do
371
-
372
348
  context 'when the relation does not have the :optional option' do
373
-
374
349
  context 'when :required is true' do
375
-
376
350
  let(:relation_options) do
377
351
  { required: true }
378
352
  end
379
353
 
380
354
  context 'when the default config is to require the association' do
381
-
382
355
  let(:default_require) { true }
383
356
 
384
357
  it 'requires the association' do
@@ -387,7 +360,6 @@ describe Mongoid::Association::Macros do
387
360
  end
388
361
 
389
362
  context 'when the default config is to not require the association' do
390
-
391
363
  let(:default_require) { false }
392
364
 
393
365
  it 'requires the association' do
@@ -397,13 +369,11 @@ describe Mongoid::Association::Macros do
397
369
  end
398
370
 
399
371
  context 'when :required is false' do
400
-
401
372
  let(:relation_options) do
402
373
  { required: false }
403
374
  end
404
375
 
405
376
  context 'when the default config is to require the association' do
406
-
407
377
  let(:default_require) { true }
408
378
 
409
379
  it 'does not require the association' do
@@ -412,7 +382,6 @@ describe Mongoid::Association::Macros do
412
382
  end
413
383
 
414
384
  context 'when the default config is to not require the association' do
415
-
416
385
  let(:default_require) { false }
417
386
 
418
387
  it 'does not require the association' do
@@ -423,11 +392,8 @@ describe Mongoid::Association::Macros do
423
392
  end
424
393
 
425
394
  context 'when the relation has the option :optional' do
426
-
427
395
  context 'when :required is true' do
428
-
429
396
  context 'when :optional is true' do
430
-
431
397
  let(:relation_options) do
432
398
  {
433
399
  required: true,
@@ -436,7 +402,6 @@ describe Mongoid::Association::Macros do
436
402
  end
437
403
 
438
404
  context 'when the default config is to require the association' do
439
-
440
405
  let(:default_require) { true }
441
406
 
442
407
  it 'requires the association' do
@@ -445,7 +410,6 @@ describe Mongoid::Association::Macros do
445
410
  end
446
411
 
447
412
  context 'when the default config is to not require the association' do
448
-
449
413
  let(:default_require) { false }
450
414
 
451
415
  it 'requires the association' do
@@ -455,7 +419,6 @@ describe Mongoid::Association::Macros do
455
419
  end
456
420
 
457
421
  context 'when :optional is false' do
458
-
459
422
  let(:relation_options) do
460
423
  {
461
424
  required: true,
@@ -464,7 +427,6 @@ describe Mongoid::Association::Macros do
464
427
  end
465
428
 
466
429
  context 'when the default config is to require the association' do
467
-
468
430
  let(:default_require) { true }
469
431
 
470
432
  it 'requires the association' do
@@ -473,7 +435,6 @@ describe Mongoid::Association::Macros do
473
435
  end
474
436
 
475
437
  context 'when the default config is to not require the association' do
476
-
477
438
  let(:default_require) { false }
478
439
 
479
440
  it 'requires the association' do
@@ -484,9 +445,7 @@ describe Mongoid::Association::Macros do
484
445
  end
485
446
 
486
447
  context 'when :required is false' do
487
-
488
448
  context 'when :optional is true' do
489
-
490
449
  let(:relation_options) do
491
450
  {
492
451
  required: false,
@@ -495,7 +454,6 @@ describe Mongoid::Association::Macros do
495
454
  end
496
455
 
497
456
  context 'when the default config is to require the association' do
498
-
499
457
  let(:default_require) { true }
500
458
 
501
459
  it 'does not require the association' do
@@ -504,7 +462,6 @@ describe Mongoid::Association::Macros do
504
462
  end
505
463
 
506
464
  context 'when the default config is to not require the association' do
507
-
508
465
  let(:default_require) { true }
509
466
 
510
467
  it 'does not require the association' do
@@ -514,7 +471,6 @@ describe Mongoid::Association::Macros do
514
471
  end
515
472
 
516
473
  context 'when :optional is false' do
517
-
518
474
  let(:relation_options) do
519
475
  {
520
476
  required: false,
@@ -523,7 +479,6 @@ describe Mongoid::Association::Macros do
523
479
  end
524
480
 
525
481
  context 'when the default config is to require the association' do
526
-
527
482
  let(:default_require) { true }
528
483
 
529
484
  it 'does not require the association' do
@@ -532,7 +487,6 @@ describe Mongoid::Association::Macros do
532
487
  end
533
488
 
534
489
  context 'when the default config is to not require the association' do
535
-
536
490
  let(:default_require) { false }
537
491
 
538
492
  it 'does not require the association' do
@@ -545,17 +499,13 @@ describe Mongoid::Association::Macros do
545
499
  end
546
500
 
547
501
  context 'when the relation does not have the option :required' do
548
-
549
502
  context 'when the relation has the option :optional' do
550
-
551
503
  context 'when :optional is true' do
552
-
553
504
  let(:relation_options) do
554
505
  { optional: true }
555
506
  end
556
507
 
557
508
  context 'when the default config is to require the association' do
558
-
559
509
  let(:default_require) { true }
560
510
 
561
511
  it 'does not require the association' do
@@ -564,7 +514,6 @@ describe Mongoid::Association::Macros do
564
514
  end
565
515
 
566
516
  context 'when the default config is to not require the association' do
567
-
568
517
  let(:default_require) { false }
569
518
 
570
519
  it 'does not require the association' do
@@ -574,13 +523,11 @@ describe Mongoid::Association::Macros do
574
523
  end
575
524
 
576
525
  context 'when :optional is false' do
577
-
578
526
  let(:relation_options) do
579
527
  { optional: false }
580
528
  end
581
529
 
582
530
  context 'when the default config is to require the association' do
583
-
584
531
  let(:default_require) { true }
585
532
 
586
533
  it 'requires the association' do
@@ -589,7 +536,6 @@ describe Mongoid::Association::Macros do
589
536
  end
590
537
 
591
538
  context 'when the default config is to not require the association' do
592
-
593
539
  let(:default_require) { false }
594
540
 
595
541
  it 'requires the association' do
@@ -602,9 +548,7 @@ describe Mongoid::Association::Macros do
602
548
  end
603
549
 
604
550
  context 'when the relation does not have options' do
605
-
606
551
  context 'when the default config is to require the association' do
607
-
608
552
  let(:default_require) { true }
609
553
 
610
554
  it 'requires the association' do
@@ -613,7 +557,6 @@ describe Mongoid::Association::Macros do
613
557
  end
614
558
 
615
559
  context 'when the default config is to not require the association' do
616
-
617
560
  let(:default_require) { false }
618
561
 
619
562
  it 'does not require the association' do
@@ -622,10 +565,8 @@ describe Mongoid::Association::Macros do
622
565
  end
623
566
  end
624
567
 
625
- context "when the relation is polymorphic" do
626
-
627
- context "when indexed is true" do
628
-
568
+ context 'when the relation is polymorphic' do
569
+ context 'when indexed is true' do
629
570
  before do
630
571
  klass.belongs_to(:relatable, polymorphic: true, index: true)
631
572
  end
@@ -634,425 +575,400 @@ describe Mongoid::Association::Macros do
634
575
  klass.index_specifications.first
635
576
  end
636
577
 
637
- it "adds the background index to the definitions" do
578
+ it 'adds the background index to the definitions' do
638
579
  expect(index.key).to eq(relatable_id: 1, relatable_type: 1)
639
580
  end
640
581
  end
641
582
  end
642
583
 
643
- context "when defining the relation" do
584
+ context 'when defining the relation' do
585
+ before do
586
+ klass.belongs_to(:person)
587
+ end
644
588
 
645
589
  context 'when the relation name is invalid' do
646
-
647
590
  let(:relation) do
648
591
  klass.belongs_to(:fields)
649
592
  end
650
593
 
651
594
  it 'raises an InvalidRelation exception' do
652
- expect {
595
+ expect do
653
596
  relation
654
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
597
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
655
598
  end
656
599
  end
657
600
 
658
- before do
659
- klass.belongs_to(:person)
601
+ it 'adds the association to the klass' do
602
+ expect(klass.relations['person']).not_to be_nil
660
603
  end
661
604
 
662
- it "adds the association to the klass" do
663
- expect(klass.relations["person"]).to_not be_nil
664
- end
665
-
666
- it "defines the getter" do
605
+ it 'defines the getter' do
667
606
  expect(klass.allocate).to respond_to(:person)
668
607
  end
669
608
 
670
- it "defines the setter" do
609
+ it 'defines the setter' do
671
610
  expect(klass.allocate).to respond_to(:person=)
672
611
  end
673
612
 
674
- it "defines the builder" do
613
+ it 'defines the builder' do
675
614
  expect(klass.allocate).to respond_to(:build_person)
676
615
  end
677
616
 
678
- it "defines the creator" do
617
+ it 'defines the creator' do
679
618
  expect(klass.allocate).to respond_to(:create_person)
680
619
  end
681
620
 
682
- it "creates the correct relation" do
683
- expect(klass.relations["person"]).to be_a(
621
+ it 'creates the correct relation' do
622
+ expect(klass.relations['person']).to be_a(
684
623
  Mongoid::Association::Referenced::BelongsTo
685
624
  )
686
625
  end
687
626
 
688
- it "creates the field for the foreign key" do
627
+ it 'creates the field for the foreign key' do
689
628
  expect(klass.allocate).to respond_to(:person_id)
690
629
  end
691
630
 
692
- context "association properties" do
693
-
631
+ context 'association properties' do
694
632
  let(:association) do
695
- klass.relations["person"]
633
+ klass.relations['person']
696
634
  end
697
635
 
698
- it "automatically adds the name" do
636
+ it 'automatically adds the name' do
699
637
  expect(association.name).to eq(:person)
700
638
  end
701
639
 
702
- it "automatically adds the inverse class name" do
703
- expect(association.inverse_class_name).to eq("TestClass")
640
+ it 'automatically adds the inverse class name' do
641
+ expect(association.inverse_class_name).to eq('TestClass')
704
642
  end
705
643
  end
706
644
  end
707
645
  end
708
646
 
709
- describe ".has_many" do
710
-
711
- it "defines the macro" do
647
+ describe '.has_many' do
648
+ it 'defines the macro' do
712
649
  expect(klass).to respond_to(:has_many)
713
650
  end
714
651
 
715
- context "when defining the relation" do
652
+ context 'when defining the relation' do
653
+ before do
654
+ klass.has_many(:posts)
655
+ end
716
656
 
717
657
  context 'when the relation name is invalid' do
718
-
719
658
  let(:relation) do
720
659
  klass.has_many(:fields)
721
660
  end
722
661
 
723
662
  it 'raises an InvalidRelation exception' do
724
- expect {
663
+ expect do
725
664
  relation
726
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
665
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
727
666
  end
728
667
  end
729
668
 
730
- before do
731
- klass.has_many(:posts)
732
- end
733
-
734
- it "adds the association to the klass" do
735
- expect(klass.relations["posts"]).to_not be_nil
669
+ it 'adds the association to the klass' do
670
+ expect(klass.relations['posts']).not_to be_nil
736
671
  end
737
672
 
738
- it "defines the getter" do
673
+ it 'defines the getter' do
739
674
  expect(klass.allocate).to respond_to(:posts)
740
675
  end
741
676
 
742
- it "defines the setter" do
677
+ it 'defines the setter' do
743
678
  expect(klass.allocate).to respond_to(:posts=)
744
679
  end
745
680
 
746
- it "creates the correct relation" do
747
- expect(klass.relations["posts"]).to be_a(
681
+ it 'creates the correct relation' do
682
+ expect(klass.relations['posts']).to be_a(
748
683
  Mongoid::Association::Referenced::HasMany
749
684
  )
750
685
  end
751
686
 
752
- it "adds an associated validation" do
687
+ it 'adds an associated validation' do
753
688
  expect(klass._validators[:posts].first).to be_a(
754
689
  Mongoid::Validatable::AssociatedValidator
755
690
  )
756
691
  end
757
692
 
758
- context "association properties" do
759
-
693
+ context 'association properties' do
760
694
  let(:association) do
761
- klass.relations["posts"]
695
+ klass.relations['posts']
762
696
  end
763
697
 
764
- it "automatically adds the name" do
698
+ it 'automatically adds the name' do
765
699
  expect(association.name).to eq(:posts)
766
700
  end
767
701
 
768
- it "automatically adds the inverse class name" do
769
- expect(association.inverse_class_name).to eq("TestClass")
702
+ it 'automatically adds the inverse class name' do
703
+ expect(association.inverse_class_name).to eq('TestClass')
770
704
  end
771
705
  end
772
706
 
773
707
  context 'when an invalid option is provided' do
774
-
775
708
  it 'raises an InvalidRelationOption exception' do
776
- expect {
709
+ expect do
777
710
  klass.has_many(:names, sandwich: true)
778
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
711
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
779
712
  end
780
713
  end
781
714
  end
782
715
 
783
716
  context 'when defining order on relation' do
784
-
785
717
  before do
786
718
  klass.has_many(:posts, order: :rating.asc)
787
719
  end
788
720
 
789
721
  let(:association) do
790
- klass.relations["posts"]
722
+ klass.relations['posts']
791
723
  end
792
724
 
793
- it "adds association to klass" do
794
- expect(association.order).to_not be_nil
725
+ it 'adds association to klass' do
726
+ expect(association.order).not_to be_nil
795
727
  end
796
728
 
797
- it "returns Mongoid::Criteria::Queryable::Key" do
798
- expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
729
+ it 'returns Mongoid::Criteria::Queryable::Key' do
730
+ expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
799
731
  end
800
732
  end
801
733
 
802
- context "when setting validate to false" do
803
-
734
+ context 'when setting validate to false' do
804
735
  before do
805
736
  klass.has_many(:posts, validate: false)
806
737
  end
807
738
 
808
- it "does not add associated validations" do
739
+ it 'does not add associated validations' do
809
740
  expect(klass._validators).to be_empty
810
741
  end
811
742
  end
812
743
  end
813
744
 
814
- describe ".has_and_belongs_to_many" do
815
-
816
- it "defines the macro" do
745
+ describe '.has_and_belongs_to_many' do
746
+ it 'defines the macro' do
817
747
  expect(klass).to respond_to(:has_and_belongs_to_many)
818
748
  end
819
749
 
820
- context "when defining the relation" do
750
+ context 'when defining the relation' do
751
+ before do
752
+ klass.has_and_belongs_to_many(:preferences)
753
+ end
821
754
 
822
755
  context 'when the relation name is invalid' do
823
-
824
756
  let(:relation) do
825
757
  klass.has_and_belongs_to_many(:fields)
826
758
  end
827
759
 
828
760
  it 'raises an InvalidRelation exception' do
829
- expect {
761
+ expect do
830
762
  relation
831
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
763
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
832
764
  end
833
765
  end
834
766
 
835
767
  context 'when an invalid option is provided' do
836
-
837
768
  it 'raises an InvalidRelationOption exception' do
838
- expect {
769
+ expect do
839
770
  klass.has_and_belongs_to_many(:fields, sandwich: true)
840
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
771
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
841
772
  end
842
773
  end
843
774
 
844
- before do
845
- klass.has_and_belongs_to_many(:preferences)
846
- end
847
-
848
- it "adds the association to the klass" do
849
- expect(klass.relations["preferences"]).to_not be_nil
775
+ it 'adds the association to the klass' do
776
+ expect(klass.relations['preferences']).not_to be_nil
850
777
  end
851
778
 
852
- it "defines the getter" do
779
+ it 'defines the getter' do
853
780
  expect(klass.allocate).to respond_to(:preferences)
854
781
  end
855
782
 
856
- it "defines the setter" do
783
+ it 'defines the setter' do
857
784
  expect(klass.allocate).to respond_to(:preferences=)
858
785
  end
859
786
 
860
- it "creates the correct relation" do
861
- expect(klass.relations["preferences"]).to be_a(
787
+ it 'creates the correct relation' do
788
+ expect(klass.relations['preferences']).to be_a(
862
789
  Mongoid::Association::Referenced::HasAndBelongsToMany
863
790
  )
864
791
  end
865
792
 
866
- it "creates the field for the foreign key" do
793
+ it 'creates the field for the foreign key' do
867
794
  expect(klass.allocate).to respond_to(:preference_ids)
868
795
  end
869
796
 
870
797
  context 'when defining order on relation' do
871
-
872
798
  before do
873
799
  klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
874
800
  end
875
801
 
876
802
  let(:association) do
877
- klass.relations["preferences"]
803
+ klass.relations['preferences']
878
804
  end
879
805
 
880
- it "adds association to klass" do
881
- expect(association.order).to_not be_nil
806
+ it 'adds association to klass' do
807
+ expect(association.order).not_to be_nil
882
808
  end
883
809
 
884
- it "returns Mongoid::Criteria::Queryable::Key" do
885
- expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
810
+ it 'returns Mongoid::Criteria::Queryable::Key' do
811
+ expect(association.order).to be_a(Mongoid::Criteria::Queryable::Key)
886
812
  end
887
813
  end
888
814
 
889
- context "association properties" do
890
-
815
+ context 'association properties' do
891
816
  let(:association) do
892
- klass.relations["preferences"]
817
+ klass.relations['preferences']
893
818
  end
894
819
 
895
- it "automatically adds the name" do
820
+ it 'automatically adds the name' do
896
821
  expect(association.name).to eq(:preferences)
897
822
  end
898
823
 
899
- it "automatically adds the inverse class name" do
900
- expect(association.inverse_class_name).to eq("TestClass")
824
+ it 'automatically adds the inverse class name' do
825
+ expect(association.inverse_class_name).to eq('TestClass')
901
826
  end
902
827
  end
903
828
  end
904
829
  end
905
830
 
906
- describe ".has_one" do
907
-
908
- it "defines the macro" do
831
+ describe '.has_one' do
832
+ it 'defines the macro' do
909
833
  expect(klass).to respond_to(:has_one)
910
834
  end
911
835
 
912
- context "when defining the relation" do
836
+ context 'when defining the relation' do
837
+ before do
838
+ klass.has_one(:game)
839
+ end
913
840
 
914
841
  context 'when the relation name is invalid' do
915
-
916
842
  let(:relation) do
917
843
  klass.has_one(:fields)
918
844
  end
919
845
 
920
846
  it 'raises an InvalidRelation exception' do
921
- expect {
847
+ expect do
922
848
  relation
923
- }.to raise_exception(Mongoid::Errors::InvalidRelation)
849
+ end.to raise_exception(Mongoid::Errors::InvalidRelation)
924
850
  end
925
851
  end
926
852
 
927
853
  context 'when an invalid option is provided' do
928
-
929
854
  it 'raises an InvalidRelationOption exception' do
930
- expect {
855
+ expect do
931
856
  klass.has_one(:game, sandwich: true)
932
- }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
857
+ end.to raise_exception(Mongoid::Errors::InvalidRelationOption)
933
858
  end
934
859
  end
935
860
 
936
- before do
937
- klass.has_one(:game)
938
- end
939
-
940
- it "adds the association to the klass" do
941
- expect(klass.relations["game"]).to_not be_nil
861
+ it 'adds the association to the klass' do
862
+ expect(klass.relations['game']).not_to be_nil
942
863
  end
943
864
 
944
- it "defines the getter" do
865
+ it 'defines the getter' do
945
866
  expect(klass.allocate).to respond_to(:game)
946
867
  end
947
868
 
948
- it "defines the setter" do
869
+ it 'defines the setter' do
949
870
  expect(klass.allocate).to respond_to(:game=)
950
871
  end
951
872
 
952
- it "defines the builder" do
873
+ it 'defines the builder' do
953
874
  expect(klass.allocate).to respond_to(:build_game)
954
875
  end
955
876
 
956
- it "defines the creator" do
877
+ it 'defines the creator' do
957
878
  expect(klass.allocate).to respond_to(:create_game)
958
879
  end
959
880
 
960
- it "creates the correct relation" do
961
- expect(klass.relations["game"]).to be_a(
881
+ it 'creates the correct relation' do
882
+ expect(klass.relations['game']).to be_a(
962
883
  Mongoid::Association::Referenced::HasOne
963
884
  )
964
885
  end
965
886
 
966
- it "adds an associated validation" do
887
+ it 'adds an associated validation' do
967
888
  expect(klass._validators[:game].first).to be_a(
968
889
  Mongoid::Validatable::AssociatedValidator
969
890
  )
970
891
  end
971
892
 
972
- context "association properties" do
973
-
893
+ context 'association properties' do
974
894
  let(:association) do
975
- klass.relations["game"]
895
+ klass.relations['game']
976
896
  end
977
897
 
978
- it "automatically adds the name" do
898
+ it 'automatically adds the name' do
979
899
  expect(association.name).to eq(:game)
980
900
  end
981
901
 
982
- it "automatically adds the inverse class name" do
983
- expect(association.inverse_class_name).to eq("TestClass")
902
+ it 'automatically adds the inverse class name' do
903
+ expect(association.inverse_class_name).to eq('TestClass')
984
904
  end
985
905
  end
986
906
  end
987
907
 
988
- context "when setting validate to false" do
989
-
908
+ context 'when setting validate to false' do
990
909
  before do
991
910
  klass.has_one(:game, validate: false)
992
911
  end
993
912
 
994
- it "does not add associated validations" do
913
+ it 'does not add associated validations' do
995
914
  expect(klass._validators).to be_empty
996
915
  end
997
916
  end
998
917
  end
999
918
 
1000
- describe "#relations" do
1001
-
919
+ describe '#relations' do
1002
920
  before do
1003
921
  klass.embeds_one(:name)
1004
922
  end
1005
923
 
1006
- it "returns a bson document of relations" do
1007
- expect(klass.allocate.relations).to be_a_kind_of(BSON::Document)
924
+ it 'returns a bson document of relations' do
925
+ expect(klass.allocate.relations).to be_a(BSON::Document)
1008
926
  end
1009
927
 
1010
- it "has keys that are the relation name" do
928
+ it 'has keys that are the relation name' do
1011
929
  expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1012
930
  end
1013
931
 
1014
- it "has keys that can be accessed by a String" do
932
+ it 'has keys that can be accessed by a String' do
1015
933
  expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1016
934
  end
1017
935
 
1018
- it "has keys that can be accessed by a Symbol" do
936
+ it 'has keys that can be accessed by a Symbol' do
1019
937
  expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1020
938
  end
1021
939
 
1022
- it "has values that are association" do
940
+ it 'has values that are association' do
1023
941
  expect(
1024
942
  klass.allocate.relations.values.first
1025
- ).to be_a_kind_of(Mongoid::Association::Embedded::EmbedsOne)
943
+ ).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1026
944
  end
1027
945
  end
1028
946
 
1029
- describe ".relations" do
1030
-
947
+ describe '.relations' do
1031
948
  before do
1032
949
  klass.embeds_one(:name)
1033
950
  end
1034
951
 
1035
- it "has keys that are the relation name" do
952
+ it 'has keys that are the relation name' do
1036
953
  expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1037
954
  end
1038
955
 
1039
- it "has keys that can be accessed by a String" do
956
+ it 'has keys that can be accessed by a String' do
1040
957
  expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1041
958
  end
1042
959
 
1043
- it "has keys that can be accessed by a Symbol" do
960
+ it 'has keys that can be accessed by a Symbol' do
1044
961
  expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1045
962
  end
1046
963
 
1047
- it "has values that are association" do
964
+ it 'has values that are association' do
1048
965
  expect(
1049
966
  klass.relations.values.first
1050
967
  ).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1051
968
  end
1052
969
  end
1053
970
 
1054
- context "when creating an association with an extension" do
1055
-
971
+ context 'when creating an association with an extension' do
1056
972
  class Peep
1057
973
  include Mongoid::Document
1058
974
  end
@@ -1062,13 +978,13 @@ describe Mongoid::Association::Macros do
1062
978
 
1063
979
  module Extension
1064
980
  def short_name
1065
- "spec"
981
+ 'spec'
1066
982
  end
1067
983
  end
1068
984
 
1069
985
  module AnotherExtension
1070
986
  def very_short_name
1071
- "spec"
987
+ 'spec'
1072
988
  end
1073
989
  end
1074
990
  end
@@ -1077,40 +993,37 @@ describe Mongoid::Association::Macros do
1077
993
  Peep.new(handle: Handle.new)
1078
994
  end
1079
995
 
1080
- context "when the extension is a block" do
1081
-
996
+ context 'when the extension is a block' do
1082
997
  before do
1083
998
  Peep.embeds_one(:handle) do
1084
999
  def full_name
1085
- "spec"
1000
+ 'spec'
1086
1001
  end
1087
1002
  end
1088
1003
  end
1089
1004
 
1090
- it "extends the relation" do
1091
- expect(peep.handle.full_name).to eq("spec")
1005
+ it 'extends the relation' do
1006
+ expect(peep.handle.full_name).to eq('spec')
1092
1007
  end
1093
1008
  end
1094
1009
 
1095
- context "when the extension is a module" do
1096
-
1010
+ context 'when the extension is a module' do
1097
1011
  before do
1098
1012
  Peep.embeds_one(:handle, extend: Handle::Extension)
1099
1013
  end
1100
1014
 
1101
- it "extends the relation" do
1102
- expect(peep.handle.short_name).to eq("spec")
1015
+ it 'extends the relation' do
1016
+ expect(peep.handle.short_name).to eq('spec')
1103
1017
  end
1104
1018
  end
1105
1019
 
1106
- context "when the extension is two modules" do
1107
-
1020
+ context 'when the extension is two modules' do
1108
1021
  before do
1109
1022
  Peep.embeds_one(:handle, extend: [ Handle::Extension, Handle::AnotherExtension ])
1110
1023
  end
1111
1024
 
1112
- it "extends the relation" do
1113
- expect(peep.handle.very_short_name).to eq("spec")
1025
+ it 'extends the relation' do
1026
+ expect(peep.handle.very_short_name).to eq('spec')
1114
1027
  end
1115
1028
  end
1116
1029
  end