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,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
5
- require_relative "./has_and_belongs_to_many_models"
3
+ require 'spec_helper'
4
+ require_relative 'has_and_belongs_to_many_models'
6
5
 
7
6
  describe Mongoid::Association::Referenced::HasAndBelongsToMany do
8
-
9
7
  before do
10
8
  class HasManyLeftObject; include Mongoid::Document; end
11
9
  class HasManyRightObject; include Mongoid::Document; end
@@ -29,14 +27,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
29
27
  end
30
28
 
31
29
  let(:options) do
32
- { }
30
+ {}
33
31
  end
34
32
 
35
33
  describe '#relation_complements' do
36
-
37
34
  let(:expected_complements) do
38
35
  [
39
- Mongoid::Association::Referenced::HasAndBelongsToMany,
36
+ Mongoid::Association::Referenced::HasAndBelongsToMany
40
37
  ]
41
38
  end
42
39
 
@@ -46,7 +43,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
46
43
  end
47
44
 
48
45
  describe '#setup!' do
49
-
50
46
  it 'sets up a getter for the relation' do
51
47
  expect(Mongoid::Association::Accessors).to receive(:define_getter!).with(association)
52
48
  association.setup!
@@ -63,12 +59,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
63
59
  end
64
60
 
65
61
  context 'autosave' do
66
-
67
62
  context 'when the :autosave option is true' do
68
-
69
63
  let(:options) do
70
64
  {
71
- autosave: true
65
+ autosave: true
72
66
  }
73
67
  end
74
68
 
@@ -85,10 +79,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
85
79
  end
86
80
 
87
81
  context 'when the :autosave option is false' do
88
-
89
82
  let(:options) do
90
83
  {
91
- autosave: false
84
+ autosave: false
92
85
  }
93
86
  end
94
87
 
@@ -99,7 +92,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
99
92
  end
100
93
 
101
94
  context 'when the :autosave option is not provided' do
102
-
103
95
  let(:association) do
104
96
  # Note that it is necessary to create the association directly, otherwise the
105
97
  # setup! method will be called by the :has_many macro
@@ -114,10 +106,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
114
106
  end
115
107
 
116
108
  context 'when the :validate option is true' do
117
-
118
109
  let(:options) do
119
110
  {
120
- validate: true
111
+ validate: true
121
112
  }
122
113
  end
123
114
 
@@ -134,10 +125,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
134
125
  end
135
126
 
136
127
  context 'when the :validate option is false' do
137
-
138
128
  let(:options) do
139
129
  {
140
- validate: false
130
+ validate: false
141
131
  }
142
132
  end
143
133
 
@@ -148,7 +138,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
148
138
  end
149
139
 
150
140
  context 'when the :validate option is not provided' do
151
-
152
141
  let(:association) do
153
142
  # Note that it is necessary to create the association directly, otherwise the
154
143
  # setup! method will be called by the :has_many macro
@@ -162,7 +151,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
162
151
  end
163
152
 
164
153
  context 'foreign key field' do
165
-
166
154
  before do
167
155
  association
168
156
  end
@@ -173,13 +161,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
173
161
  end
174
162
 
175
163
  context 'index' do
176
-
177
164
  before do
178
165
  association
179
166
  end
180
167
 
181
168
  context 'when index is true' do
182
-
183
169
  let(:options) do
184
170
  {
185
171
  index: true
@@ -187,13 +173,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
187
173
  end
188
174
 
189
175
  it 'sets up the index with the key' do
190
- expect(has_many_left_class.index_specifications.first.fields).to match_array([association.key.to_sym])
176
+ expect(has_many_left_class.index_specifications.first.fields).to contain_exactly(association.key.to_sym)
191
177
  end
192
178
  end
193
179
 
194
180
  context 'when index is false' do
195
-
196
-
197
181
  it 'does not set up an index' do
198
182
  expect(has_many_left_class.index_specifications).to eq([])
199
183
  end
@@ -201,14 +185,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
201
185
  end
202
186
 
203
187
  context 'dependent' do
204
-
205
188
  context 'when the dependent option is provided' do
206
-
207
189
  context 'when the dependent option is :delete_all' do
208
-
209
190
  let(:options) do
210
191
  {
211
- dependent: :delete_all
192
+ dependent: :delete_all
212
193
  }
213
194
  end
214
195
 
@@ -225,10 +206,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
225
206
  end
226
207
 
227
208
  context 'when the dependent option is :destroy' do
228
-
229
209
  let(:options) do
230
210
  {
231
- dependent: :destroy
211
+ dependent: :destroy
232
212
  }
233
213
  end
234
214
 
@@ -245,10 +225,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
245
225
  end
246
226
 
247
227
  context 'when the dependent option is :nullify' do
248
-
249
228
  let(:options) do
250
229
  {
251
- dependent: :nullify
230
+ dependent: :nullify
252
231
  }
253
232
  end
254
233
 
@@ -265,10 +244,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
265
244
  end
266
245
 
267
246
  context 'when the dependent option is :restrict_with_exception' do
268
-
269
247
  let(:options) do
270
248
  {
271
- dependent: :restrict_with_exception
249
+ dependent: :restrict_with_exception
272
250
  }
273
251
  end
274
252
 
@@ -285,10 +263,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
285
263
  end
286
264
 
287
265
  context 'when the dependent option is :restrict_with_error' do
288
-
289
266
  let(:options) do
290
267
  {
291
- dependent: :restrict_with_error
268
+ dependent: :restrict_with_error
292
269
  }
293
270
  end
294
271
 
@@ -306,7 +283,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
306
283
  end
307
284
 
308
285
  context 'when the dependent option is not provided' do
309
-
310
286
  it 'does not set up the dependency' do
311
287
  expect(Mongoid::Association::Depending).not_to receive(:define_dependency!)
312
288
  association.setup!
@@ -316,30 +292,25 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
316
292
  end
317
293
 
318
294
  describe '#type' do
319
-
320
295
  it 'returns nil' do
321
296
  expect(association.type).to be_nil
322
297
  end
323
298
  end
324
299
 
325
300
  describe '#inverse_type' do
326
-
327
301
  it 'returns nil' do
328
302
  expect(association.inverse_type).to be_nil
329
303
  end
330
304
  end
331
305
 
332
306
  describe '#inverse_type_setter' do
333
-
334
307
  it 'returns nil' do
335
308
  expect(association.inverse_type_setter).to be_nil
336
309
  end
337
310
  end
338
311
 
339
312
  describe '#foreign_key' do
340
-
341
313
  context 'when options has foreign_key specified' do
342
-
343
314
  let(:options) do
344
315
  { foreign_key: :other_object_id }
345
316
  end
@@ -350,7 +321,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
350
321
  end
351
322
 
352
323
  context 'when options does not have foreign_key specified' do
353
-
354
324
  it 'returns the default foreign key, the name of the inverse followed by "_ids"' do
355
325
  expect(association.foreign_key).to eq("#{name.to_s.singularize}_ids")
356
326
  end
@@ -358,19 +328,16 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
358
328
  end
359
329
 
360
330
  describe '#embedded?' do
361
-
362
331
  it 'returns false' do
363
332
  expect(association.embedded?).to be(false)
364
333
  end
365
334
  end
366
335
 
367
336
  describe '#primary_key' do
368
-
369
337
  context 'when the :primary_key option is specified' do
370
-
371
338
  let(:options) do
372
339
  {
373
- primary_key: 'guid'
340
+ primary_key: 'guid'
374
341
  }
375
342
  end
376
343
 
@@ -380,7 +347,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
380
347
  end
381
348
 
382
349
  context 'when the :primary_key option is not specified' do
383
-
384
350
  it 'returns the primary_key default' do
385
351
  expect(association.primary_key).to eq(Mongoid::Association::Relatable::PRIMARY_KEY_DEFAULT)
386
352
  end
@@ -388,14 +354,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
388
354
  end
389
355
 
390
356
  describe '#indexed?' do
391
-
392
357
  context 'when :index is specified in the options' do
393
-
394
358
  context 'when :index is true' do
395
-
396
359
  let(:options) do
397
360
  {
398
- index: true
361
+ index: true
399
362
  }
400
363
  end
401
364
 
@@ -405,10 +368,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
405
368
  end
406
369
 
407
370
  context 'when :index is false' do
408
-
409
371
  let(:options) do
410
372
  {
411
- index: false
373
+ index: false
412
374
  }
413
375
  end
414
376
 
@@ -419,7 +381,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
419
381
  end
420
382
 
421
383
  context 'when :index is not specified in the options' do
422
-
423
384
  it 'returns nil' do
424
385
  expect(association.indexed?).to be(false)
425
386
  end
@@ -427,58 +388,49 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
427
388
  end
428
389
 
429
390
  describe '#relation' do
430
-
431
391
  it 'returns Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy' do
432
392
  expect(association.relation).to be(Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy)
433
393
  end
434
394
  end
435
395
 
436
396
  describe '#validation_default' do
437
-
438
397
  it 'returns true' do
439
398
  expect(association.validation_default).to be(true)
440
399
  end
441
400
  end
442
401
 
443
402
  describe '#name' do
444
-
445
403
  it 'returns the name of the relation' do
446
404
  expect(association.name).to be(name)
447
405
  end
448
406
  end
449
407
 
450
408
  describe '#options' do
451
-
452
409
  it 'returns the options' do
453
410
  expect(association.options).to be(options)
454
411
  end
455
412
  end
456
413
 
457
414
  describe '#merge!' do
458
-
459
415
  end
460
416
 
461
417
  describe '#store_as' do
462
-
463
418
  it 'returns nil' do
464
419
  expect(association.store_as).to be_nil
465
420
  end
466
421
  end
467
422
 
468
423
  describe '#touchable?' do
469
-
470
424
  it 'return false' do
471
425
  expect(association.send(:touchable?)).to be(false)
472
426
  end
473
427
  end
474
428
 
475
429
  describe '#order' do
476
-
477
430
  context 'when order is specified in the options' do
478
-
479
431
  let(:options) do
480
432
  {
481
- order: :rating.desc
433
+ order: :rating.desc
482
434
  }
483
435
  end
484
436
 
@@ -488,7 +440,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
488
440
  end
489
441
 
490
442
  context 'when order is not specified in the options' do
491
-
492
443
  it 'returns nil' do
493
444
  expect(association.order).to be_nil
494
445
  end
@@ -496,9 +447,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
496
447
  end
497
448
 
498
449
  describe '#scope' do
499
-
500
450
  context 'when scope is specified in the options' do
501
-
502
451
  let(:options) do
503
452
  { scope: -> { unscoped.where(foo: :bar) } }
504
453
  end
@@ -509,7 +458,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
509
458
  end
510
459
 
511
460
  context 'when scope is not specified in the options' do
512
-
513
461
  it 'returns nil' do
514
462
  expect(association.scope).to be_nil
515
463
  end
@@ -517,117 +465,98 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
517
465
  end
518
466
 
519
467
  describe '#as' do
520
-
521
468
  it 'returns nil' do
522
469
  expect(association.as).to be_nil
523
470
  end
524
471
  end
525
472
 
526
473
  describe '#polymorphic?' do
527
-
528
474
  it 'returns false' do
529
475
  expect(association.polymorphic?).to be(false)
530
476
  end
531
477
  end
532
478
 
533
479
  describe '#type_setter' do
534
-
535
480
  it 'returns nil' do
536
481
  expect(association.type).to be_nil
537
482
  end
538
483
  end
539
484
 
540
485
  describe '#dependent' do
541
-
542
486
  it 'returns nil' do
543
487
  expect(association.dependent).to be_nil
544
488
  end
545
489
  end
546
490
 
547
491
  describe '#bindable?' do
548
-
549
492
  it 'returns false' do
550
493
  expect(association.bindable?(Person.new)).to be(false)
551
494
  end
552
495
  end
553
496
 
554
497
  describe '#inverses' do
555
-
556
498
  before do
557
499
  HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
558
500
  end
559
501
 
560
502
  context 'when inverse_of is specified' do
561
-
562
503
  before do
563
504
  options.merge!(inverse_of: :inverse_name)
564
505
  end
565
506
 
566
507
  it 'returns the :inverse_of value' do
567
- expect(association.inverses).to eq([:inverse_name])
508
+ expect(association.inverses).to eq([ :inverse_name ])
568
509
  end
569
510
  end
570
511
 
571
512
  context 'when inverse_of is not specified' do
572
-
573
513
  it 'uses the inverse class to find the inverse name' do
574
- expect(association.inverses).to eq([:has_many_left_objects])
514
+ expect(association.inverses).to eq([ :has_many_left_objects ])
575
515
  end
576
516
  end
577
517
 
578
518
  context 'when :cyclic is specified' do
579
-
580
519
  it 'returns the cyclic inverse name' do
581
-
582
520
  end
583
521
  end
584
522
  end
585
523
 
586
524
  describe '##inverse' do
525
+ before do
526
+ HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
527
+ end
587
528
 
529
+ context 'when inverse_of is specified' do
588
530
  before do
589
- HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
531
+ options.merge!(inverse_of: :inverse_name)
590
532
  end
591
533
 
592
- context 'when inverse_of is specified' do
593
-
594
- before do
595
- options.merge!(inverse_of: :inverse_name)
596
- end
597
-
598
- it 'returns the :inverse_of value' do
599
- expect(association.inverse).to eq(:inverse_name)
600
- end
534
+ it 'returns the :inverse_of value' do
535
+ expect(association.inverse).to eq(:inverse_name)
601
536
  end
537
+ end
602
538
 
603
- context 'when inverse_of is not specified' do
604
-
605
- it 'uses the inverse class to find the inverse name' do
606
- expect(association.inverse).to eq(:has_many_left_objects)
607
- end
539
+ context 'when inverse_of is not specified' do
540
+ it 'uses the inverse class to find the inverse name' do
541
+ expect(association.inverse).to eq(:has_many_left_objects)
608
542
  end
543
+ end
609
544
 
610
- context 'when :cyclic is specified' do
611
-
612
- it 'returns the cyclic inverse name' do
613
-
614
- end
545
+ context 'when :cyclic is specified' do
546
+ it 'returns the cyclic inverse name' do
615
547
  end
616
548
  end
549
+ end
617
550
 
618
551
  describe '#inverse_association' do
619
-
620
552
  end
621
553
 
622
554
  describe '#autosave' do
623
-
624
555
  context 'when the autosave option is specified' do
625
-
626
556
  context 'when the autosave option is true' do
627
-
628
557
  let(:options) do
629
558
  {
630
- autosave: true
559
+ autosave: true
631
560
  }
632
561
  end
633
562
 
@@ -637,10 +566,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
637
566
  end
638
567
 
639
568
  context 'when the autosave option is false' do
640
-
641
569
  let(:options) do
642
570
  {
643
- autosave: false
571
+ autosave: false
644
572
  }
645
573
  end
646
574
 
@@ -651,7 +579,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
651
579
  end
652
580
 
653
581
  context 'when the autosave option is not specified' do
654
-
655
582
  it 'returns false' do
656
583
  expect(association.autosave).to be(false)
657
584
  end
@@ -659,9 +586,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
659
586
  end
660
587
 
661
588
  describe '#relation_class_name' do
662
-
663
589
  context 'when the :class_name option is specified' do
664
-
665
590
  let(:options) do
666
591
  { class_name: 'OtherHasManyRightObject' }
667
592
  end
@@ -672,7 +597,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
672
597
  end
673
598
 
674
599
  context 'when the class_name option is not specified' do
675
-
676
600
  it 'uses the name of the relation to deduce the class name' do
677
601
  expect(association.relation_class_name).to eq('HasManyRightObject')
678
602
  end
@@ -680,9 +604,7 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
680
604
  end
681
605
 
682
606
  describe '#relation_class' do
683
-
684
607
  context 'when the :class_name option is specified' do
685
-
686
608
  let!(:_class) do
687
609
  class OtherHasManyRightObject; end
688
610
  OtherHasManyRightObject
@@ -698,7 +620,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
698
620
  end
699
621
 
700
622
  context 'when the class_name option is not specified' do
701
-
702
623
  it 'uses the name of the relation to deduce the class name' do
703
624
  expect(association.relation_class).to eq(HasManyRightObject)
704
625
  end
@@ -706,23 +627,19 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
706
627
  end
707
628
 
708
629
  describe '#inverse_class_name' do
709
-
710
630
  it 'returns the name of the owner class' do
711
631
  expect(association.inverse_class_name).to eq(HasManyLeftObject.name)
712
632
  end
713
633
  end
714
634
 
715
635
  describe '#inverse_class' do
716
-
717
636
  it 'returns the owner class' do
718
637
  expect(association.inverse_class).to be(HasManyLeftObject)
719
638
  end
720
639
  end
721
640
 
722
641
  describe '#inverse_of' do
723
-
724
642
  context 'when :inverse_of is specified in the options' do
725
-
726
643
  let(:options) do
727
644
  { inverse_of: :a_has_many_left_object }
728
645
  end
@@ -733,7 +650,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
733
650
  end
734
651
 
735
652
  context 'when :inverse_of is not specified in the options' do
736
-
737
653
  it 'returns nil' do
738
654
  expect(association.inverse_of).to be_nil
739
655
  end
@@ -748,18 +664,14 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
748
664
  # end
749
665
 
750
666
  describe '#setter' do
751
-
752
667
  it 'returns a string of the name followed by =' do
753
668
  expect(association.setter).to eq("#{name}=")
754
669
  end
755
670
  end
756
671
 
757
672
  describe '#validate?' do
758
-
759
673
  context 'when :validate is specified in the options' do
760
-
761
674
  context 'when validate is true' do
762
-
763
675
  let(:options) do
764
676
  { validate: true }
765
677
  end
@@ -770,7 +682,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
770
682
  end
771
683
 
772
684
  context 'when validate is false' do
773
-
774
685
  let(:options) do
775
686
  { validate: false }
776
687
  end
@@ -782,7 +693,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
782
693
  end
783
694
 
784
695
  context 'when :validate is not specified in the options' do
785
-
786
696
  it 'returns the validation_default' do
787
697
  expect(association.send(:validate?)).to eq(association.validation_default)
788
698
  end
@@ -790,14 +700,11 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
790
700
  end
791
701
 
792
702
  describe '#forced_nil_inverse?' do
793
-
794
703
  context 'when inverse_of is specified in the options' do
795
-
796
704
  context 'when :inverse_of is nil' do
797
-
798
705
  let(:options) do
799
706
  {
800
- inverse_of: nil
707
+ inverse_of: nil
801
708
  }
802
709
  end
803
710
 
@@ -807,10 +714,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
807
714
  end
808
715
 
809
716
  context 'when :inverse_of is a symbol' do
810
-
811
717
  let(:options) do
812
718
  {
813
- inverse_of: :inverse_name
719
+ inverse_of: :inverse_name
814
720
  }
815
721
  end
816
722
 
@@ -820,10 +726,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
820
726
  end
821
727
 
822
728
  context 'when :inverse_of is false' do
823
-
824
729
  let(:options) do
825
730
  {
826
- inverse_of: false
731
+ inverse_of: false
827
732
  }
828
733
  end
829
734
 
@@ -834,7 +739,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
834
739
  end
835
740
 
836
741
  context 'when :inverse_of is not specified in the options' do
837
-
838
742
  it 'returns false' do
839
743
  expect(association.forced_nil_inverse?).to be(false)
840
744
  end
@@ -842,16 +746,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
842
746
  end
843
747
 
844
748
  describe '#stores_foreign_key?' do
845
-
846
749
  it 'returns false' do
847
750
  expect(association.stores_foreign_key?).to be(true)
848
751
  end
849
752
  end
850
753
 
851
754
  describe '#inverse_setter' do
852
-
853
755
  context 'when an inverse can be determined' do
854
-
855
756
  before do
856
757
  HasManyRightObject.has_and_belongs_to_many :has_many_left_objects
857
758
  end
@@ -862,7 +763,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
862
763
  end
863
764
 
864
765
  context 'when an inverse cannot be determined' do
865
-
866
766
  it 'returns nil' do
867
767
  expect(association.inverse_setter).to be_nil
868
768
  end
@@ -870,11 +770,10 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
870
770
  end
871
771
 
872
772
  describe '#extension' do
873
-
874
773
  context 'when a block is passed' do
875
-
876
774
  let(:association) do
877
- has_many_left_class.has_and_belongs_to_many name, options do; end
775
+ has_many_left_class.has_and_belongs_to_many name, options do
776
+ end
878
777
  end
879
778
 
880
779
  it 'defines an extension module' do
@@ -883,12 +782,12 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
883
782
 
884
783
  it 'returns the extension' do
885
784
  expect(association.extension).to eq(
886
- "#{has_many_left_class.name}::#{has_many_left_class.name}#{name.to_s.camelize}RelationExtension".constantize)
785
+ "#{has_many_left_class.name}::#{has_many_left_class.name}#{name.to_s.camelize}RelationExtension".constantize
786
+ )
887
787
  end
888
788
  end
889
789
 
890
790
  context 'when an :extension is not specified in the options' do
891
-
892
791
  it 'returns false' do
893
792
  expect(association.extension).to be_nil
894
793
  end
@@ -896,28 +795,23 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
896
795
  end
897
796
 
898
797
  describe '#foreign_key_setter' do
899
-
900
798
  it 'returns the foreign key followed by "="' do
901
799
  expect(association.foreign_key_setter).to eq("#{association.foreign_key}=")
902
800
  end
903
801
  end
904
802
 
905
803
  describe '#criteria' do
906
-
907
804
  it 'returns a criteria object' do
908
805
  expect(association.criteria(BSON::ObjectId.new, HasManyLeftObject)).to be_a(Mongoid::Criteria)
909
806
  end
910
807
  end
911
808
 
912
809
  describe '#destructive?' do
913
-
914
810
  context 'when the dependent option is provided' do
915
-
916
811
  context 'when the dependent option is :delete_all' do
917
-
918
812
  let(:options) do
919
813
  {
920
- dependent: :delete_all
814
+ dependent: :delete_all
921
815
  }
922
816
  end
923
817
 
@@ -927,10 +821,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
927
821
  end
928
822
 
929
823
  context 'when the dependent option is :destroy' do
930
-
931
824
  let(:options) do
932
825
  {
933
- dependent: :destroy
826
+ dependent: :destroy
934
827
  }
935
828
  end
936
829
 
@@ -940,10 +833,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
940
833
  end
941
834
 
942
835
  context 'when the dependent option is :nullify' do
943
-
944
836
  let(:options) do
945
837
  {
946
- dependent: :nullify
838
+ dependent: :nullify
947
839
  }
948
840
  end
949
841
 
@@ -953,10 +845,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
953
845
  end
954
846
 
955
847
  context 'when the dependent option is :restrict_with_exception' do
956
-
957
848
  let(:options) do
958
849
  {
959
- dependent: :restrict_with_exception
850
+ dependent: :restrict_with_exception
960
851
  }
961
852
  end
962
853
 
@@ -966,10 +857,9 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
966
857
  end
967
858
 
968
859
  context 'when the dependent option is :restrict_with_error' do
969
-
970
860
  let(:options) do
971
861
  {
972
- dependent: :restrict_with_error
862
+ dependent: :restrict_with_error
973
863
  }
974
864
  end
975
865
 
@@ -980,7 +870,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
980
870
  end
981
871
 
982
872
  context 'when the dependent option is not provided' do
983
-
984
873
  it 'returns false' do
985
874
  expect(association.destructive?).to be(false)
986
875
  end
@@ -988,35 +877,30 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
988
877
  end
989
878
 
990
879
  describe '#nested_builder' do
991
-
992
880
  it 'returns an instance of Association::Nested::Many' do
993
881
  expect(association.nested_builder({}, {})).to be_a(Mongoid::Association::Nested::Many)
994
882
  end
995
883
  end
996
884
 
997
885
  describe '#cascading_callbacks?' do
998
-
999
886
  it 'returns false' do
1000
887
  expect(association.cascading_callbacks?).to be(false)
1001
888
  end
1002
889
  end
1003
890
 
1004
891
  describe '#path' do
1005
-
1006
892
  it 'returns an instance of Mongoid::Atomic::Paths::Root' do
1007
893
  expect(association.path(double)).to be_a(Mongoid::Atomic::Paths::Root)
1008
894
  end
1009
895
  end
1010
896
 
1011
897
  describe '#foreign_key_check' do
1012
-
1013
898
  it 'returns the foreign_key followed by "_previously_changed?"' do
1014
899
  expect(association.foreign_key_check).to eq('has_many_right_object_ids_previously_changed?')
1015
900
  end
1016
901
  end
1017
902
 
1018
903
  describe '#create_relation' do
1019
-
1020
904
  let(:left_object) do
1021
905
  HasManyLeftObject.new
1022
906
  end
@@ -1037,7 +921,6 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
1037
921
  end
1038
922
 
1039
923
  describe '#inverse_foreign_key' do
1040
-
1041
924
  it 'returns generated key' do
1042
925
  expect(association.inverse_foreign_key).to eq('has_many_left_object_ids')
1043
926
  end
@@ -1063,23 +946,25 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
1063
946
  end
1064
947
  end
1065
948
 
1066
- context "when using a model that uses the class_name option" do
949
+ context 'when using a model that uses the class_name option' do
1067
950
  let(:inverse_foreign_key) { HabtmmSchool.relations[:students].inverse_foreign_key }
1068
- it "gets the correct inverse foreign key" do
1069
- expect(inverse_foreign_key).to eq("school_ids")
951
+
952
+ it 'gets the correct inverse foreign key' do
953
+ expect(inverse_foreign_key).to eq('school_ids')
1070
954
  end
1071
955
  end
1072
956
  end
1073
957
 
1074
958
  describe '#inverse_foreign_key_setter' do
1075
-
1076
959
  it 'returns generated method name' do
1077
960
  expect(association.inverse_foreign_key_setter).to eq('has_many_left_object_ids=')
1078
961
  end
1079
962
  end
1080
963
 
1081
- context "when adding an object to the association" do
964
+ context 'when adding an object to the association' do
1082
965
  let!(:start_time) { Timecop.freeze(Time.at(Time.now.to_i)) }
966
+ let!(:school) { HabtmmSchool.create! }
967
+ let!(:student) { HabtmmStudent.create! }
1083
968
 
1084
969
  let(:update_time) do
1085
970
  Timecop.freeze(Time.at(Time.now.to_i) + 2)
@@ -1089,16 +974,13 @@ describe Mongoid::Association::Referenced::HasAndBelongsToMany do
1089
974
  Timecop.return
1090
975
  end
1091
976
 
1092
- let!(:school) { HabtmmSchool.create! }
1093
- let!(:student) { HabtmmStudent.create! }
1094
-
1095
977
  before do
1096
978
  update_time
1097
- school.update(students: [student])
979
+ school.update(students: [ student ])
1098
980
  end
1099
981
 
1100
- it "updates the updated at" do
1101
- pending "MONGOID-4953"
982
+ it 'updates the updated at' do
983
+ pending 'MONGOID-4953'
1102
984
  expect(school.updated_at).to eq(update_time)
1103
985
  end
1104
986
  end