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,52 +1,47 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
5
  # Retrieve the singleton class for the given class.
7
6
  def singleton_class_for(klass)
8
- class <<klass; self; end
7
+ class << klass; self; end
9
8
  end
10
9
 
11
10
  # Helper method for removing a declared scope
12
11
  def remove_scope(klass, scope)
13
- if klass._declared_scopes[scope]
14
- singleton_class_for(klass).remove_method(scope)
15
- klass._declared_scopes.delete(scope)
16
- end
12
+ return unless klass._declared_scopes[scope]
13
+
14
+ singleton_class_for(klass).remove_method(scope)
15
+ klass._declared_scopes.delete(scope)
17
16
  end
18
17
 
19
18
  describe Mongoid::Scopable do
20
-
21
- describe ".default_scope" do
22
-
23
- context "when provided a proc" do
24
-
19
+ describe '.default_scope' do
20
+ context 'when provided a proc' do
25
21
  let(:criteria) do
26
- Band.where(name: "Depeche Mode")
22
+ Band.where(name: 'Depeche Mode')
27
23
  end
28
24
 
29
25
  before do
30
- Band.default_scope ->{ criteria }
26
+ Band.default_scope -> { criteria }
31
27
  end
32
28
 
33
29
  after do
34
30
  Band.default_scoping = nil
35
31
  end
36
32
 
37
- it "adds the default scope to the class" do
33
+ it 'adds the default scope to the class' do
38
34
  expect(Band.default_scoping.call).to eq(criteria)
39
35
  end
40
36
 
41
- it "flags as being default scoped" do
37
+ it 'flags as being default scoped' do
42
38
  expect(Band).to be_default_scoping
43
39
  end
44
40
  end
45
41
 
46
- context "when provided a block" do
47
-
42
+ context 'when provided a block' do
48
43
  let(:criteria) do
49
- Band.where(name: "Depeche Mode")
44
+ Band.where(name: 'Depeche Mode')
50
45
  end
51
46
 
52
47
  before do
@@ -57,18 +52,18 @@ describe Mongoid::Scopable do
57
52
  Band.default_scoping = nil
58
53
  end
59
54
 
60
- it "adds the default scope to the class" do
55
+ it 'adds the default scope to the class' do
61
56
  expect(Band.default_scoping.call).to eq(criteria)
62
57
  end
63
58
 
64
- it "flags as being default scoped" do
59
+ it 'flags as being default scoped' do
65
60
  expect(Band).to be_default_scoping
66
61
  end
67
62
  end
68
63
 
69
- context "when a class method" do
64
+ context 'when a class method' do
70
65
  let(:criteria) do
71
- Band.where(name: "Depeche Mode")
66
+ Band.where(name: 'Depeche Mode')
72
67
  end
73
68
 
74
69
  before do
@@ -86,42 +81,40 @@ describe Mongoid::Scopable do
86
81
  Object.send(:remove_const, :DefaultScopeAsClassMethod)
87
82
  end
88
83
 
89
- it "adds the default scope to the class" do
84
+ it 'adds the default scope to the class' do
90
85
  pending 'https://jira.mongodb.org/browse/MONGOID-5483'
91
86
  expect(DefaultScopeAsClassMethod.default_scoping.call).to eq(criteria)
92
87
  end
93
88
 
94
- it "flags as being default scoped" do
89
+ it 'flags as being default scoped' do
95
90
  pending 'https://jira.mongodb.org/browse/MONGOID-5483'
96
91
  expect(DefaultScopeAsClassMethod).to be_default_scoping
97
92
  end
98
93
  end
99
94
 
100
- context "when provided a non proc" do
101
-
102
- it "raises an error" do
103
- expect {
95
+ context 'when provided a non proc' do
96
+ it 'raises an error' do
97
+ expect do
104
98
  Band.default_scope({})
105
- }.to raise_error(Mongoid::Errors::InvalidScope)
99
+ end.to raise_error(Mongoid::Errors::InvalidScope)
106
100
  end
107
101
  end
108
102
 
109
- context "when there is more then one default_scope" do
110
-
103
+ context 'when there is more then one default_scope' do
111
104
  let(:criteria) do
112
- ->{ Band.where(name: "Depeche Mode") }
105
+ -> { Band.where(name: 'Depeche Mode') }
113
106
  end
114
107
 
115
108
  let(:additional_criteria) do
116
- ->{ Band.where(origin: "England") }
109
+ -> { Band.where(origin: 'England') }
117
110
  end
118
111
 
119
112
  let(:proc_criteria) do
120
- ->{ Band.where(active: true) }
113
+ -> { Band.where(active: true) }
121
114
  end
122
115
 
123
116
  let(:rand_criteria) do
124
- ->{ Band.gt(likes: Mongo::Monitoring.next_operation_id) }
117
+ -> { Band.gt(likes: Mongo::Monitoring.next_operation_id) }
125
118
  end
126
119
 
127
120
  before do
@@ -135,192 +128,177 @@ describe Mongoid::Scopable do
135
128
  Band.default_scoping = nil
136
129
  end
137
130
 
138
- it "adds the first default scope" do
139
- expect(Band.default_scoping.call.selector["name"]).to eq("Depeche Mode")
131
+ it 'adds the first default scope' do
132
+ expect(Band.default_scoping.call.selector['name']).to eq('Depeche Mode')
140
133
  end
141
134
 
142
- it "adds the additional default scope" do
143
- expect(Band.default_scoping.call.selector["origin"]).to eq("England")
135
+ it 'adds the additional default scope' do
136
+ expect(Band.default_scoping.call.selector['origin']).to eq('England')
144
137
  end
145
138
 
146
- it "adds the proc default scope" do
147
- expect(Band.default_scoping.call.selector["active"]).to be true
139
+ it 'adds the proc default scope' do
140
+ expect(Band.default_scoping.call.selector['active']).to be true
148
141
  end
149
142
 
150
- it "delays execution of the merge until called" do
151
- expect(Band.all.selector["likes"]).to_not eq(Band.all.selector["likes"])
143
+ it 'delays execution of the merge until called' do
144
+ expect(Band.all.selector['likes']).not_to eq(Band.all.selector['likes'])
152
145
  end
153
146
 
154
- it "flags as being default scoped" do
147
+ it 'flags as being default scoped' do
155
148
  expect(Band).to be_default_scoping
156
149
  end
157
150
  end
158
151
 
159
- context "when parent class has default scope" do
160
-
161
- let (:selector) do
152
+ context 'when parent class has default scope' do
153
+ let(:selector) do
162
154
  AudibleSound.all.selector
163
155
  end
164
156
 
165
157
  it "the subclass doesn't duplicate the default scope in the selector" do
166
- expect(selector).to eq({'active' => true})
158
+ expect(selector).to eq({ 'active' => true })
167
159
  end
168
160
  end
169
161
 
170
- context "when the default scope is dotted" do
171
-
162
+ context 'when the default scope is dotted' do
172
163
  let(:criteria) do
173
164
  Band.where('tags.foo' => 'bar')
174
165
  end
175
166
 
167
+ let(:band) do
168
+ Band.create!
169
+ end
170
+
176
171
  before do
177
- Band.default_scope ->{ criteria }
172
+ Band.default_scope -> { criteria }
173
+ band
178
174
  end
179
175
 
180
176
  after do
181
177
  Band.default_scoping = nil
182
178
  end
183
179
 
184
- let!(:band) do
185
- Band.create!
186
- end
187
-
188
- it "adds the scope as a dotted key attribute" do
180
+ it 'adds the scope as a dotted key attribute' do
189
181
  expect(band.attributes['tags.foo']).to eq('bar')
190
182
  end
191
183
 
192
- it "adds the default scope to the class" do
184
+ it 'adds the default scope to the class' do
193
185
  expect(Band.default_scoping.call).to eq(criteria)
194
186
  end
195
187
 
196
- it "flags as being default scoped" do
188
+ it 'flags as being default scoped' do
197
189
  expect(Band).to be_default_scoping
198
190
  end
199
191
 
200
- it "does not find the correct document" do
192
+ it 'does not find the correct document' do
201
193
  expect(Band.count).to eq(0)
202
194
  end
203
195
  end
204
196
 
205
- context "when the default scope is dotted with a query" do
206
-
197
+ context 'when the default scope is dotted with a query' do
207
198
  let(:criteria) do
208
- Band.where('tags.foo' => {'$eq' => 'bar'})
199
+ Band.where('tags.foo' => { '$eq' => 'bar' })
200
+ end
201
+ let!(:band) do
202
+ Band.create!('tags' => { 'foo' => 'bar' })
209
203
  end
210
204
 
211
205
  before do
212
- Band.default_scope ->{ criteria }
206
+ Band.default_scope -> { criteria }
213
207
  end
214
208
 
215
209
  after do
216
210
  Band.default_scoping = nil
217
211
  end
218
212
 
219
- let!(:band) do
220
- Band.create!('tags' => { 'foo' => 'bar' })
221
- end
222
-
223
- it "does not add the scope as a dotted key attribute" do
224
- expect(band.attributes).to_not have_key('tags.foo')
213
+ it 'does not add the scope as a dotted key attribute' do
214
+ expect(band.attributes).not_to have_key('tags.foo')
225
215
  end
226
216
 
227
- it "adds the default scope to the class" do
217
+ it 'adds the default scope to the class' do
228
218
  expect(Band.default_scoping.call).to eq(criteria)
229
219
  end
230
220
 
231
- it "flags as being default scoped" do
221
+ it 'flags as being default scoped' do
232
222
  expect(Band).to be_default_scoping
233
223
  end
234
224
 
235
- it "finds the correct document" do
225
+ it 'finds the correct document' do
236
226
  expect(Band.where.first).to eq(band)
237
227
  end
238
228
  end
239
229
  end
240
230
 
241
- describe ".default_scopable?" do
242
-
243
- context "when a default scope exists" do
244
-
231
+ describe '.default_scopable?' do
232
+ context 'when a default scope exists' do
245
233
  let(:criteria) do
246
- Band.where(name: "Depeche Mode")
234
+ Band.where(name: 'Depeche Mode')
247
235
  end
248
236
 
249
237
  before do
250
- Band.default_scope ->{ criteria }
238
+ Band.default_scope -> { criteria }
251
239
  end
252
240
 
253
241
  after do
254
242
  Band.default_scoping = nil
255
243
  end
256
244
 
257
- context "when not in an unscoped block" do
258
-
259
- it "returns true" do
245
+ context 'when not in an unscoped block' do
246
+ it 'returns true' do
260
247
  expect(Band).to be_default_scopable
261
248
  end
262
249
  end
263
250
 
264
- context "when in an unscoped block" do
265
-
266
- it "returns false" do
251
+ context 'when in an unscoped block' do
252
+ it 'returns false' do
267
253
  Band.unscoped do
268
- expect(Band).to_not be_default_scopable
254
+ expect(Band).not_to be_default_scopable
269
255
  end
270
256
  end
271
257
  end
272
258
  end
273
259
 
274
- context "when a default scope does not exist" do
275
-
276
- it "returns false" do
277
- expect(Band).to_not be_default_scopable
260
+ context 'when a default scope does not exist' do
261
+ it 'returns false' do
262
+ expect(Band).not_to be_default_scopable
278
263
  end
279
264
  end
280
265
  end
281
266
 
282
- describe ".queryable" do
283
-
284
- context "when no criteria exists on the stack" do
285
-
286
- it "returns an empty criteria" do
267
+ describe '.queryable' do
268
+ context 'when no criteria exists on the stack' do
269
+ it 'returns an empty criteria' do
287
270
  expect(Band.queryable.selector).to be_empty
288
271
  end
289
272
 
290
- context "when the class is not embedded" do
291
-
292
- it "returns a criteria with embedded set to nil" do
293
- expect(Band.queryable.embedded).to be(nil)
273
+ context 'when the class is not embedded' do
274
+ it 'returns a criteria with embedded set to nil' do
275
+ expect(Band.queryable.embedded).to be_nil
294
276
  end
295
277
  end
296
278
 
297
- context "when the class is embedded" do
298
-
299
- it "returns a criteria with embedded set to true" do
279
+ context 'when the class is embedded' do
280
+ it 'returns a criteria with embedded set to true' do
300
281
  expect(Address.queryable.embedded).to be(true)
301
282
  end
302
283
 
303
- context "when scopes are chained" do
304
-
284
+ context 'when scopes are chained' do
305
285
  let(:person) do
306
286
  Person.create!
307
287
  end
308
288
 
309
- it "constructs a criteria for an embedded relation" do
289
+ it 'constructs a criteria for an embedded relation' do
310
290
  expect(person.addresses.without_postcode_ordered.embedded).to be(true)
311
291
  end
312
292
  end
313
293
  end
314
294
  end
315
295
 
316
- context "when a criteria exists on the stack" do
317
-
296
+ context 'when a criteria exists on the stack' do
318
297
  let(:criteria) do
319
- Band.where(name: "Depeche Mode")
298
+ Band.where(name: 'Depeche Mode')
320
299
  end
321
300
 
322
- context "when using #current_scope=scope" do
323
-
301
+ context 'when using #current_scope=scope' do
324
302
  before do
325
303
  Mongoid::Threaded.current_scope = criteria
326
304
  end
@@ -329,13 +307,12 @@ describe Mongoid::Scopable do
329
307
  Mongoid::Threaded.current_scope = nil
330
308
  end
331
309
 
332
- it "returns the criteria on the stack" do
310
+ it 'returns the criteria on the stack' do
333
311
  expect(Band.queryable).to eq(criteria)
334
312
  end
335
313
  end
336
314
 
337
- context "when using #set_current_scope(scope, klass)" do
338
-
315
+ context 'when using #set_current_scope(scope, klass)' do
339
316
  before do
340
317
  Mongoid::Threaded.set_current_scope(criteria, Band)
341
318
  end
@@ -344,21 +321,18 @@ describe Mongoid::Scopable do
344
321
  Mongoid::Threaded.set_current_scope(nil, Band)
345
322
  end
346
323
 
347
- it "returns the criteria on the stack" do
324
+ it 'returns the criteria on the stack' do
348
325
  expect(Band.queryable).to eq(criteria)
349
326
  end
350
327
  end
351
328
  end
352
329
  end
353
330
 
354
- describe ".scope" do
355
-
356
- context "when provided a criteria" do
357
-
331
+ describe '.scope' do
332
+ context 'when provided a criteria' do
358
333
  context 'when a collation is defined on the criteria' do
359
-
360
334
  before do
361
- Band.scope(:tests, ->{ Band.where(name: 'TESTING').collation(locale: 'en_US', strength: 2) })
335
+ Band.scope(:tests, -> { Band.where(name: 'TESTING').collation(locale: 'en_US', strength: 2) })
362
336
  Band.create!(name: 'testing')
363
337
  end
364
338
 
@@ -371,12 +345,11 @@ describe Mongoid::Scopable do
371
345
  end
372
346
  end
373
347
 
374
- context "when a block is provided" do
375
-
348
+ context 'when a block is provided' do
376
349
  before do
377
- Band.scope(:active, ->{ Band.where(active: true) }) do
350
+ Band.scope(:active, -> { Band.where(active: true) }) do
378
351
  def add_origin
379
- tap { |c| c.selector[:origin] = "Deutschland" }
352
+ tap { |c| c.selector[:origin] = 'Deutschland' }
380
353
  end
381
354
  end
382
355
  end
@@ -389,17 +362,16 @@ describe Mongoid::Scopable do
389
362
  Band.active.add_origin
390
363
  end
391
364
 
392
- it "adds the extension to the scope" do
393
- expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
365
+ it 'adds the extension to the scope' do
366
+ expect(scope.selector).to eq({ 'active' => true, 'origin' => 'Deutschland' })
394
367
  end
395
368
  end
396
369
 
397
- context "when scoping an embedded document" do
398
-
370
+ context 'when scoping an embedded document' do
399
371
  before do
400
372
  Record.scope(
401
373
  :tool,
402
- ->{ Record.where(:name.in => [ "undertow", "aenima", "lateralus" ]) }
374
+ -> { Record.where(:name.in => %w[undertow aenima lateralus]) }
403
375
  )
404
376
  end
405
377
 
@@ -407,65 +379,60 @@ describe Mongoid::Scopable do
407
379
  remove_scope(Record, :tool)
408
380
  end
409
381
 
410
- context "when calling the scope" do
411
-
382
+ context 'when calling the scope' do
412
383
  let(:band) do
413
384
  Band.new
414
385
  end
415
386
 
416
387
  let!(:undertow) do
417
- band.records.build(name: "undertow")
388
+ band.records.build(name: 'undertow')
418
389
  end
419
390
 
420
391
  let(:scoped) do
421
392
  band.records.tool
422
393
  end
423
394
 
424
- it "returns the correct documents" do
395
+ it 'returns the correct documents' do
425
396
  expect(scoped).to eq([ undertow ])
426
397
  end
427
398
  end
428
399
  end
429
400
 
430
- context "when no block is provided" do
431
-
401
+ context 'when no block is provided' do
432
402
  before do
433
- Band.scope(:active, ->{ Band.where(active: true).skip(10) })
403
+ Band.scope(:active, -> { Band.where(active: true).skip(10) })
434
404
  end
435
405
 
436
406
  after do
437
407
  remove_scope(Band, :active)
438
408
  end
439
409
 
440
- it "adds a method for the scope" do
410
+ it 'adds a method for the scope' do
441
411
  expect(Band).to respond_to(:active)
442
412
  end
443
413
 
444
- context "when calling the scope" do
445
-
446
- context "when calling from the class" do
447
-
414
+ context 'when calling the scope' do
415
+ context 'when calling from the class' do
448
416
  let(:scope) do
449
417
  Band.active
450
418
  end
451
419
 
452
- it "returns a criteria" do
420
+ it 'returns a criteria' do
453
421
  expect(scope).to be_a(Mongoid::Criteria)
454
422
  end
455
423
 
456
- it "contains the proper selector" do
457
- expect(scope.selector).to eq({ "active" => true })
424
+ it 'contains the proper selector' do
425
+ expect(scope.selector).to eq({ 'active' => true })
458
426
  end
459
427
 
460
- it "contains the proper options" do
428
+ it 'contains the proper options' do
461
429
  expect(scope.options).to eq({ skip: 10 })
462
430
  end
463
431
  end
464
432
 
465
- context "when chained to another scope" do
466
-
433
+ context 'when chained to another scope' do
467
434
  before do
468
- Band.scope(:english, ->{ Band.where(origin: "England") })
435
+ Band.scope(:english, -> { Band.where(origin: 'England') })
469
436
  end
470
437
 
471
438
  after do
@@ -476,113 +443,109 @@ describe Mongoid::Scopable do
476
443
  Band.english.active
477
444
  end
478
445
 
479
- it "returns a criteria" do
446
+ it 'returns a criteria' do
480
447
  expect(scope).to be_a(Mongoid::Criteria)
481
448
  end
482
449
 
483
- it "contains the proper selector" do
484
- expect(scope.selector).to eq({ "active" => true, "origin" => "England" })
450
+ it 'contains the proper selector' do
451
+ expect(scope.selector).to eq({ 'active' => true, 'origin' => 'England' })
485
452
  end
486
453
 
487
- it "contains the proper options" do
454
+ it 'contains the proper options' do
488
455
  expect(scope.options).to eq({ skip: 10 })
489
456
  end
490
457
 
491
- it "does not modify the original scope" do
492
- expect(Band.active.selector).to eq({ "active" => true })
458
+ it 'does not modify the original scope' do
459
+ expect(Band.active.selector).to eq({ 'active' => true })
493
460
  end
494
461
  end
495
462
 
496
- context "when chained to a criteria" do
497
-
463
+ context 'when chained to a criteria' do
498
464
  let(:criteria) do
499
- Band.where(origin: "England")
465
+ Band.where(origin: 'England')
500
466
  end
501
467
 
502
468
  let(:scope) do
503
469
  criteria.active
504
470
  end
505
471
 
506
- it "returns a criteria" do
472
+ it 'returns a criteria' do
507
473
  expect(scope).to be_a(Mongoid::Criteria)
508
474
  end
509
475
 
510
- it "contains the proper selector" do
511
- expect(scope.selector).to eq({ "origin" => "England", "active" => true })
476
+ it 'contains the proper selector' do
477
+ expect(scope.selector).to eq({ 'origin' => 'England', 'active' => true })
512
478
  end
513
479
 
514
- it "contains the proper options" do
480
+ it 'contains the proper options' do
515
481
  expect(scope.options).to eq({ skip: 10 })
516
482
  end
517
483
 
518
- it "does not modify the original scope" do
519
- expect(Band.active.selector).to eq({ "active" => true })
484
+ it 'does not modify the original scope' do
485
+ expect(Band.active.selector).to eq({ 'active' => true })
520
486
  end
521
487
 
522
- it "does not modify the original criteria" do
523
- expect(criteria.selector).to eq({ "origin" => "England" })
488
+ it 'does not modify the original criteria' do
489
+ expect(criteria.selector).to eq({ 'origin' => 'England' })
524
490
  end
525
491
  end
526
492
  end
527
493
  end
528
494
 
529
- context "when the name conflict with an existing method" do
530
-
531
- context "when raising an error" do
495
+ context 'when the name conflict with an existing method' do
496
+ context 'when raising an error' do
532
497
  config_override :scope_overwrite_exception, true
533
498
 
534
499
  after do
535
500
  remove_scope(Band, :active)
536
501
  end
537
502
 
538
- it "raises an exception" do
539
- expect {
540
- Band.scope(:active, ->{ Band.where(active: true) })
541
- Band.scope(:active, ->{ Band.where(active: true) })
542
- }.to raise_error(Mongoid::Errors::ScopeOverwrite)
503
+ it 'raises an exception' do
504
+ expect do
505
+ Band.scope(:active, -> { Band.where(active: true) })
506
+ Band.scope(:active, -> { Band.where(active: true) })
507
+ end.to raise_error(Mongoid::Errors::ScopeOverwrite)
543
508
  end
544
509
  end
545
510
 
546
- context "when not raising an error" do
511
+ context 'when not raising an error' do
547
512
  config_override :scope_overwrite_exception, false
548
513
 
549
514
  after do
550
515
  remove_scope(Band, :active)
551
516
  end
552
517
 
553
- it "raises no exception" do
554
- Band.scope(:active, ->{ Band.where(active: true) })
555
- Band.scope(:active, ->{ Band.where(active: true) })
518
+ it 'raises no exception' do
519
+ Band.scope(:active, -> { Band.where(active: true) })
520
+ Band.scope(:active, -> { Band.where(active: true) })
556
521
  end
557
522
  end
558
523
  end
559
524
  end
560
525
 
561
- context "when provided a proc" do
562
-
563
- context "when a block is provided" do
564
-
565
- context "when with optional and keyword arguments" do
526
+ context 'when provided a proc' do
527
+ context 'when a block is provided' do
528
+ context 'when with optional and keyword arguments' do
566
529
  before do
567
- Band.scope(:named_by, ->(name, deleted: false) {
530
+ Band.scope(:named_by, lambda { |name, deleted: false|
568
531
  Band.where(name: name, deleted: deleted)
569
532
  })
570
533
  end
571
534
 
572
535
  let(:scope) do
573
- Band.named_by("Emily", deleted: true)
536
+ Band.named_by('Emily', deleted: true)
574
537
  end
575
538
 
576
- it "sets the conditions from keyword arguments" do
577
- scope.selector.should == {'name' => 'Emily', 'deleted' => true}
539
+ it 'sets the conditions from keyword arguments' do
540
+ scope.selector.should eq({ 'name' => 'Emily', 'deleted' => true })
578
541
  end
579
542
  end
580
543
 
581
- context "when without arguments" do
544
+ context 'when without arguments' do
582
545
  before do
583
- Band.scope(:active, ->{ Band.where(active: true) }) do
546
+ Band.scope(:active, -> { Band.where(active: true) }) do
584
547
  def add_origin
585
- tap { |c| c.selector[:origin] = "Deutschland" }
548
+ tap { |c| c.selector[:origin] = 'Deutschland' }
586
549
  end
587
550
  end
588
551
  end
@@ -595,22 +558,20 @@ describe Mongoid::Scopable do
595
558
  Band.active.add_origin
596
559
  end
597
560
 
598
- it "adds the extension to the scope" do
599
- expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
561
+ it 'adds the extension to the scope' do
562
+ expect(scope.selector).to eq({ 'active' => true, 'origin' => 'Deutschland' })
600
563
  end
601
564
  end
602
565
  end
603
566
 
604
567
  context 'when the block is an none scope' do
605
-
606
568
  before do
607
569
  Simple.create!(name: 'Emily')
608
570
  end
609
571
 
610
572
  context 'when there is no default scope' do
611
-
612
573
  before do
613
- Simple.scope(:nothing, ->{ none })
574
+ Simple.scope(:nothing, -> { none })
614
575
  end
615
576
 
616
577
  it 'returns no results' do
@@ -619,14 +580,13 @@ describe Mongoid::Scopable do
619
580
  end
620
581
 
621
582
  context 'when there is a default scope' do
622
-
623
583
  let(:criteria) do
624
- Simple.where(name: "Emily")
584
+ Simple.where(name: 'Emily')
625
585
  end
626
586
 
627
587
  before do
628
- Simple.default_scope ->{ criteria }
629
- Simple.scope(:nothing, ->{ none })
588
+ Simple.default_scope -> { criteria }
589
+ Simple.scope(:nothing, -> { none })
630
590
  end
631
591
 
632
592
  after do
@@ -637,13 +597,11 @@ describe Mongoid::Scopable do
637
597
  expect(Simple.nothing).to be_empty
638
598
  end
639
599
  end
640
-
641
600
  end
642
601
 
643
- context "when no block is provided" do
644
-
602
+ context 'when no block is provided' do
645
603
  before do
646
- Band.scope(:active, ->{ Band.where(active: true).skip(10) })
604
+ Band.scope(:active, -> { Band.where(active: true).skip(10) })
647
605
  Band.scope(:named_by, ->(name) { Band.where(name: name) if name })
648
606
  end
649
607
 
@@ -652,42 +610,38 @@ describe Mongoid::Scopable do
652
610
  remove_scope(Band, :named_by)
653
611
  end
654
612
 
655
- it "adds a method for the scope" do
613
+ it 'adds a method for the scope' do
656
614
  expect(Band).to respond_to(:active)
657
615
  end
658
616
 
659
- context "when calling the scope" do
660
-
661
- context "when the scope would return nil" do
662
-
663
- it "returns a chainable empty scope" do
617
+ context 'when calling the scope' do
618
+ context 'when the scope would return nil' do
619
+ it 'returns a chainable empty scope' do
664
620
  expect(Band.named_by(nil)).to be_a(Mongoid::Criteria)
665
621
  end
666
622
  end
667
623
 
668
- context "when calling from the class" do
669
-
624
+ context 'when calling from the class' do
670
625
  let(:scope) do
671
626
  Band.active
672
627
  end
673
628
 
674
- it "returns a criteria" do
629
+ it 'returns a criteria' do
675
630
  expect(scope).to be_a(Mongoid::Criteria)
676
631
  end
677
632
 
678
- it "contains the proper selector" do
679
- expect(scope.selector).to eq({ "active" => true })
633
+ it 'contains the proper selector' do
634
+ expect(scope.selector).to eq({ 'active' => true })
680
635
  end
681
636
 
682
- it "contains the proper options" do
637
+ it 'contains the proper options' do
683
638
  expect(scope.options).to eq({ skip: 10 })
684
639
  end
685
640
  end
686
641
 
687
- context "when chained to another scope" do
688
-
642
+ context 'when chained to another scope' do
689
643
  before do
690
- Band.scope(:english, ->{ Band.where(origin: "England") })
644
+ Band.scope(:english, -> { Band.where(origin: 'England') })
691
645
  end
692
646
 
693
647
  after do
@@ -698,60 +652,58 @@ describe Mongoid::Scopable do
698
652
  Band.english.active
699
653
  end
700
654
 
701
- it "returns a criteria" do
655
+ it 'returns a criteria' do
702
656
  expect(scope).to be_a(Mongoid::Criteria)
703
657
  end
704
658
 
705
- it "contains the proper selector" do
706
- expect(scope.selector).to eq({ "active" => true, "origin" => "England" })
659
+ it 'contains the proper selector' do
660
+ expect(scope.selector).to eq({ 'active' => true, 'origin' => 'England' })
707
661
  end
708
662
 
709
- it "contains the proper options" do
663
+ it 'contains the proper options' do
710
664
  expect(scope.options).to eq({ skip: 10 })
711
665
  end
712
666
 
713
- it "does not modify the original scope" do
714
- expect(Band.active.selector).to eq({ "active" => true })
667
+ it 'does not modify the original scope' do
668
+ expect(Band.active.selector).to eq({ 'active' => true })
715
669
  end
716
670
  end
717
671
 
718
- context "when chained to a criteria" do
719
-
672
+ context 'when chained to a criteria' do
720
673
  let(:criteria) do
721
- Band.where(origin: "England")
674
+ Band.where(origin: 'England')
722
675
  end
723
676
 
724
677
  let(:scope) do
725
678
  criteria.active
726
679
  end
727
680
 
728
- it "returns a criteria" do
681
+ it 'returns a criteria' do
729
682
  expect(scope).to be_a(Mongoid::Criteria)
730
683
  end
731
684
 
732
- it "contains the proper selector" do
733
- expect(scope.selector).to eq({ "origin" => "England", "active" => true })
685
+ it 'contains the proper selector' do
686
+ expect(scope.selector).to eq({ 'origin' => 'England', 'active' => true })
734
687
  end
735
688
 
736
- it "contains the proper options" do
689
+ it 'contains the proper options' do
737
690
  expect(scope.options).to eq({ skip: 10 })
738
691
  end
739
692
 
740
- it "does not modify the original scope" do
741
- expect(Band.active.selector).to eq({ "active" => true })
693
+ it 'does not modify the original scope' do
694
+ expect(Band.active.selector).to eq({ 'active' => true })
742
695
  end
743
696
 
744
- it "does not modify the original criteria" do
745
- expect(criteria.selector).to eq({ "origin" => "England" })
697
+ it 'does not modify the original criteria' do
698
+ expect(criteria.selector).to eq({ 'origin' => 'England' })
746
699
  end
747
700
  end
748
701
 
749
- context "when chaining scopes through more than one model" do
750
-
702
+ context 'when chaining scopes through more than one model' do
751
703
  before do
752
- Author.scope(:author, -> { where(author: true) } )
753
- Article.scope(:is_public, -> { where(public: true) } )
754
- Article.scope(:authored, -> {
704
+ Author.scope(:author, -> { where(author: true) })
705
+ Article.scope(:is_public, -> { where(public: true) })
706
+ Article.scope(:authored, lambda {
755
707
  author_ids = Author.author.pluck(:id)
756
708
  where(:author_id.in => author_ids)
757
709
  })
@@ -771,12 +723,11 @@ describe Mongoid::Scopable do
771
723
  end
772
724
 
773
725
  context "when calling another model's scope from within a scope" do
774
-
775
726
  let(:authored_count) do
776
727
  Article.authored.size
777
728
  end
778
729
 
779
- it "returns the correct documents" do
730
+ it 'returns the correct documents' do
780
731
  expect(authored_count).to eq(3)
781
732
  end
782
733
  end
@@ -786,7 +737,7 @@ describe Mongoid::Scopable do
786
737
  Article.is_public.authored.size
787
738
  end
788
739
 
789
- it "returns the correct documents" do
740
+ it 'returns the correct documents' do
790
741
  expect(is_public_authored_count).to eq(2)
791
742
  end
792
743
  end
@@ -794,54 +745,50 @@ describe Mongoid::Scopable do
794
745
  end
795
746
  end
796
747
 
797
- context "when the name conflict with an existing method" do
798
-
799
- context "when raising an error" do
748
+ context 'when the name conflict with an existing method' do
749
+ context 'when raising an error' do
800
750
  config_override :scope_overwrite_exception, true
801
751
 
802
752
  after do
803
753
  remove_scope(Band, :active)
804
754
  end
805
755
 
806
- it "raises an exception" do
807
- expect {
808
- Band.scope(:active, ->{ Band.where(active: true) })
809
- Band.scope(:active, ->{ Band.where(active: true) })
810
- }.to raise_error(Mongoid::Errors::ScopeOverwrite)
756
+ it 'raises an exception' do
757
+ expect do
758
+ Band.scope(:active, -> { Band.where(active: true) })
759
+ Band.scope(:active, -> { Band.where(active: true) })
760
+ end.to raise_error(Mongoid::Errors::ScopeOverwrite)
811
761
  end
812
762
  end
813
763
 
814
- context "when not raising an error" do
764
+ context 'when not raising an error' do
815
765
  config_override :scope_overwrite_exception, false
816
766
 
817
767
  after do
818
768
  remove_scope(Band, :active)
819
769
  end
820
770
 
821
- it "raises no exception" do
822
- Band.scope(:active, ->{ Band.where(active: true) })
823
- Band.scope(:active, ->{ Band.where(active: true) })
771
+ it 'raises no exception' do
772
+ Band.scope(:active, -> { Band.where(active: true) })
773
+ Band.scope(:active, -> { Band.where(active: true) })
824
774
  end
825
775
  end
826
776
  end
827
777
  end
828
778
 
829
- context "when provided a non proc or criteria" do
830
-
831
- it "raises an error" do
832
- expect {
779
+ context 'when provided a non proc or criteria' do
780
+ it 'raises an error' do
781
+ expect do
833
782
  Band.scope(:active, {})
834
- }.to raise_error(Mongoid::Errors::InvalidScope)
783
+ end.to raise_error(Mongoid::Errors::InvalidScope)
835
784
  end
836
785
  end
837
786
 
838
- context "when chaining a proc with a proc" do
839
-
840
- context "when both scopes are or queries" do
841
-
787
+ context 'when chaining a proc with a proc' do
788
+ context 'when both scopes are or queries' do
842
789
  before do
843
- Band.scope(:xxx, ->{ Band.any_of({ :aaa.gt => 0 }, { :bbb.gt => 0 }) })
844
- Band.scope(:yyy, ->{ Band.any_of({ :ccc => nil }, { :ccc.gt => 1 }) })
790
+ Band.scope(:xxx, -> { Band.any_of({ :aaa.gt => 0 }, { :bbb.gt => 0 }) })
791
+ Band.scope(:yyy, -> { Band.any_of({ ccc: nil }, { :ccc.gt => 1 }) })
845
792
  end
846
793
 
847
794
  after do
@@ -853,26 +800,25 @@ describe Mongoid::Scopable do
853
800
  Band.yyy.xxx
854
801
  end
855
802
 
856
- it "properly chains the $or queries together" do
803
+ it 'properly chains the $or queries together' do
857
804
  expect(criteria.selector).to eq({
858
- "$or" => [
859
- { "ccc" => nil },
860
- { "ccc" => { "$gt" => 1.0 }},
861
- ],
862
- '$and' => ['$or' => [
863
- { "aaa" => { "$gt" => 0.0 }},
864
- { "bbb" => { "$gt" => 0.0 }}
865
- ]],
866
- })
805
+ '$or' => [
806
+ { 'ccc' => nil },
807
+ { 'ccc' => { '$gt' => 1.0 } }
808
+ ],
809
+ '$and' => [ { '$or' => [
810
+ { 'aaa' => { '$gt' => 0.0 } },
811
+ { 'bbb' => { '$gt' => 0.0 } }
812
+ ] } ]
813
+ })
867
814
  end
868
815
  end
869
816
  end
870
817
 
871
- context "when working with a subclass" do
872
-
818
+ context 'when working with a subclass' do
873
819
  before do
874
- Shape.scope(:located_at, ->(x,y) {Shape.where(x: x, y: y)})
875
- Circle.scope(:with_radius, ->(r) {Circle.where(radius: r)})
820
+ Shape.scope(:located_at, ->(x, y) { Shape.where(x: x, y: y) })
821
+ Circle.scope(:with_radius, ->(r) { Circle.where(radius: r) })
876
822
  end
877
823
 
878
824
  after do
@@ -885,7 +831,7 @@ describe Mongoid::Scopable do
885
831
  end
886
832
 
887
833
  let(:circle_located_at) do
888
- Circle.located_at(0,0)
834
+ Circle.located_at(0, 0)
889
835
  end
890
836
 
891
837
  let(:circle_scope_keys) do
@@ -893,20 +839,19 @@ describe Mongoid::Scopable do
893
839
  end
894
840
 
895
841
  it "doesn't include subclass scopes in superclass scope list" do
896
- expect(shape_scope_keys).to match_array([:located_at])
842
+ expect(shape_scope_keys).to contain_exactly(:located_at)
897
843
  end
898
844
 
899
- it "includes superclass scope methods on subclass" do
845
+ it 'includes superclass scope methods on subclass' do
900
846
  expect(circle_located_at).to be_a(Mongoid::Criteria)
901
847
  end
902
848
 
903
- it "includes superclass scopes in subclass scope list" do
904
- expect(circle_scope_keys).to match_array([:located_at, :with_radius])
849
+ it 'includes superclass scopes in subclass scope list' do
850
+ expect(circle_scope_keys).to match_array(%i[located_at with_radius])
905
851
  end
906
852
  end
907
853
 
908
- context "when calling a scope defined in a parent class" do
909
-
854
+ context 'when calling a scope defined in a parent class' do
910
855
  before do
911
856
  Shape.class_eval do
912
857
  scope :visible, -> { large }
@@ -923,140 +868,128 @@ describe Mongoid::Scopable do
923
868
  remove_scope(Circle, :large)
924
869
  end
925
870
 
926
- it "uses subclass context for all the other used scopes" do
927
- expect(Circle.visible.selector).to eq("radius" => 5)
871
+ it 'uses subclass context for all the other used scopes' do
872
+ expect(Circle.visible.selector).to eq('radius' => 5)
928
873
  end
929
874
  end
930
875
  end
931
876
 
932
- describe ".scoped" do
933
-
934
- context "when no options are provided" do
935
-
877
+ describe '.scoped' do
878
+ context 'when no options are provided' do
936
879
  let(:scoped) do
937
880
  Band.scoped
938
881
  end
939
882
 
940
- it "returns a criteria" do
883
+ it 'returns a criteria' do
941
884
  expect(scoped).to be_a(Mongoid::Criteria)
942
885
  end
943
886
 
944
- it "contains an empty selector" do
887
+ it 'contains an empty selector' do
945
888
  expect(scoped.selector).to be_empty
946
889
  end
947
890
 
948
- it "contains empty options" do
891
+ it 'contains empty options' do
949
892
  expect(scoped.options).to be_empty
950
893
  end
951
894
  end
952
895
 
953
- context "when options are provided" do
954
-
896
+ context 'when options are provided' do
955
897
  let(:scoped) do
956
898
  Band.scoped(skip: 10, limit: 10)
957
899
  end
958
900
 
959
- it "returns a criteria" do
901
+ it 'returns a criteria' do
960
902
  expect(scoped).to be_a(Mongoid::Criteria)
961
903
  end
962
904
 
963
- it "contains an empty selector" do
905
+ it 'contains an empty selector' do
964
906
  expect(scoped.selector).to be_empty
965
907
  end
966
908
 
967
- it "contains the options" do
909
+ it 'contains the options' do
968
910
  expect(scoped.options).to eq({ skip: 10, limit: 10 })
969
911
  end
970
912
  end
971
913
 
972
- context "when a default scope exists" do
973
-
914
+ context 'when a default scope exists' do
974
915
  let(:criteria) do
975
- Band.where(name: "Depeche Mode")
916
+ Band.where(name: 'Depeche Mode')
917
+ end
918
+ let(:scoped) do
919
+ Band.scoped
976
920
  end
977
921
 
978
922
  before do
979
- Band.default_scope ->{ criteria }
923
+ Band.default_scope -> { criteria }
980
924
  end
981
925
 
982
926
  after do
983
927
  Band.default_scoping = nil
984
928
  end
985
929
 
986
- let(:scoped) do
987
- Band.scoped
988
- end
989
-
990
- it "allows the default scope to be added" do
991
- expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
930
+ it 'allows the default scope to be added' do
931
+ expect(scoped.selector).to eq({ 'name' => 'Depeche Mode' })
992
932
  end
993
933
 
994
- context "when chained after an unscoped criteria" do
995
-
934
+ context 'when chained after an unscoped criteria' do
996
935
  let(:scoped) do
997
936
  Band.unscoped.scoped
998
937
  end
999
938
 
1000
- it "reapplies the default scope" do
1001
- expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
939
+ it 'reapplies the default scope' do
940
+ expect(scoped.selector).to eq({ 'name' => 'Depeche Mode' })
1002
941
  end
1003
942
  end
1004
943
  end
1005
944
  end
1006
945
 
1007
- describe ".unscoped" do
1008
-
946
+ describe '.unscoped' do
1009
947
  let(:criteria) do
1010
- Band.where(name: "Depeche Mode")
948
+ Band.where(name: 'Depeche Mode')
1011
949
  end
1012
950
 
1013
951
  before do
1014
- Band.default_scope ->{ criteria }
952
+ Band.default_scope -> { criteria }
1015
953
  end
1016
954
 
1017
955
  after do
1018
956
  Band.default_scoping = nil
1019
957
  end
1020
958
 
1021
- context "when called directly" do
1022
-
959
+ context 'when called directly' do
1023
960
  let(:unscoped) do
1024
961
  Band.unscoped
1025
962
  end
1026
963
 
1027
- it "removes the default scope from the criteria" do
964
+ it 'removes the default scope from the criteria' do
1028
965
  expect(unscoped.selector).to be_empty
1029
966
  end
1030
967
 
1031
- context "when chained after a scoped criteria" do
1032
-
968
+ context 'when chained after a scoped criteria' do
1033
969
  let(:unscoped) do
1034
970
  Band.scoped.unscoped
1035
971
  end
1036
972
 
1037
- it "removes all scoping" do
973
+ it 'removes all scoping' do
1038
974
  expect(unscoped.selector).to be_empty
1039
975
  end
1040
976
  end
1041
977
 
1042
- context "when default scope is in a super class" do
1043
-
1044
- context "when scope is already defined in parent class" do
1045
-
978
+ context 'when default scope is in a super class' do
979
+ context 'when scope is already defined in parent class' do
1046
980
  let(:unscoped) do
1047
981
  class U1 < Kaleidoscope; end
1048
982
  U1.unscoped.activated
1049
983
  end
1050
984
 
1051
- it "clears default scope" do
1052
- expect(unscoped.selector).to eq({ "active" => true })
985
+ it 'clears default scope' do
986
+ expect(unscoped.selector).to eq({ 'active' => true })
1053
987
  end
1054
988
  end
1055
989
 
1056
- context "when the scope is created dynamically" do
1057
-
990
+ context 'when the scope is created dynamically' do
1058
991
  before do
1059
- Band.scope(:active, ->{ Band.where(active: true) })
992
+ Band.scope(:active, -> { Band.where(active: true) })
1060
993
  end
1061
994
 
1062
995
  after do
@@ -1068,44 +1001,40 @@ describe Mongoid::Scopable do
1068
1001
  U2.unscoped.active
1069
1002
  end
1070
1003
 
1071
- it "clears default scope" do
1072
- expect(unscoped.selector).to eq({ "active" => true })
1004
+ it 'clears default scope' do
1005
+ expect(unscoped.selector).to eq({ 'active' => true })
1073
1006
  end
1074
1007
  end
1075
1008
  end
1076
1009
  end
1077
1010
 
1078
- context "when used with a block" do
1079
-
1080
- context "when a criteria is called in the block" do
1081
-
1082
- it "does not allow default scoping to be added in the block" do
1011
+ context 'when used with a block' do
1012
+ context 'when a criteria is called in the block' do
1013
+ it 'does not allow default scoping to be added in the block' do
1083
1014
  Band.unscoped do
1084
1015
  expect(Band.skip(10).selector).to be_empty
1085
1016
  end
1086
1017
  end
1087
1018
  end
1088
1019
 
1089
- context "when a call is made to scoped in the block" do
1090
-
1091
- it "does not allow default scoping to be added in the block" do
1020
+ context 'when a call is made to scoped in the block' do
1021
+ it 'does not allow default scoping to be added in the block' do
1092
1022
  Band.unscoped do
1093
1023
  expect(Band.scoped.selector).to be_empty
1094
1024
  end
1095
1025
  end
1096
1026
  end
1097
1027
 
1098
- context "when a named scope is called in the block" do
1099
-
1028
+ context 'when a named scope is called in the block' do
1100
1029
  before do
1101
- Band.scope(:skipped, ->{ Band.skip(10) })
1030
+ Band.scope(:skipped, -> { Band.skip(10) })
1102
1031
  end
1103
1032
 
1104
1033
  after do
1105
1034
  remove_scope(Band, :skipped)
1106
1035
  end
1107
1036
 
1108
- it "does not allow the default scope to be applied" do
1037
+ it 'does not allow the default scope to be applied' do
1109
1038
  Band.unscoped do
1110
1039
  expect(Band.skipped.selector).to be_empty
1111
1040
  end
@@ -1114,76 +1043,71 @@ describe Mongoid::Scopable do
1114
1043
  end
1115
1044
  end
1116
1045
 
1117
- describe ".with_default_scope" do
1118
-
1046
+ describe '.with_default_scope' do
1119
1047
  let(:criteria) do
1120
- Band.where(name: "Depeche Mode")
1048
+ Band.where(name: 'Depeche Mode')
1121
1049
  end
1122
1050
 
1123
1051
  before do
1124
- Band.default_scope ->{ criteria }
1052
+ Band.default_scope -> { criteria }
1125
1053
  end
1126
1054
 
1127
1055
  after do
1128
1056
  Band.default_scoping = nil
1129
1057
  end
1130
1058
 
1131
- context "when inside an unscoped block" do
1132
-
1133
- it "returns an empty criteria" do
1059
+ context 'when inside an unscoped block' do
1060
+ it 'returns an empty criteria' do
1134
1061
  Band.unscoped do
1135
1062
  expect(Band.with_default_scope.selector).to be_empty
1136
1063
  end
1137
1064
  end
1138
1065
  end
1139
1066
 
1140
- context "when the criteria is unscoped" do
1141
-
1067
+ context 'when the criteria is unscoped' do
1142
1068
  let(:scoped) do
1143
1069
  Band.unscoped.with_default_scope
1144
1070
  end
1145
1071
 
1146
- it "returns an empty criteria" do
1072
+ it 'returns an empty criteria' do
1147
1073
  expect(scoped.selector).to be_empty
1148
1074
  end
1149
1075
  end
1150
1076
 
1151
- context "when no unscoping exists" do
1152
-
1077
+ context 'when no unscoping exists' do
1153
1078
  let(:scoped) do
1154
1079
  Band.with_default_scope
1155
1080
  end
1156
1081
 
1157
- it "returns a scoped criteria" do
1158
- expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
1082
+ it 'returns a scoped criteria' do
1083
+ expect(scoped.selector).to eq({ 'name' => 'Depeche Mode' })
1159
1084
  end
1160
1085
  end
1161
1086
  end
1162
1087
 
1163
- describe ".with_scope" do
1164
-
1088
+ describe '.with_scope' do
1165
1089
  let(:criteria) do
1166
1090
  Band.where(active: true)
1167
1091
  end
1168
1092
 
1169
- it "yields to the criteria" do
1093
+ it 'yields to the criteria' do
1170
1094
  Band.with_scope(criteria) do |crit|
1171
- expect(crit.selector).to eq({ "active" => true })
1095
+ expect(crit.selector).to eq({ 'active' => true })
1172
1096
  end
1173
1097
  end
1174
1098
 
1175
- context "when using #current_scope" do
1176
-
1177
- it "pops the criteria off the stack" do
1178
- Band.with_scope(criteria) do;end
1099
+ context 'when using #current_scope' do
1100
+ it 'pops the criteria off the stack' do
1101
+ Band.with_scope(criteria) do
1102
+ end
1179
1103
  expect(Mongoid::Threaded.current_scope).to be_nil
1180
1104
  end
1181
1105
  end
1182
1106
 
1183
- context "when using #current_scope(klass)" do
1184
-
1185
- it "pops the criteria off the stack" do
1186
- Band.with_scope(criteria) do;end
1107
+ context 'when using #current_scope(klass)' do
1108
+ it 'pops the criteria off the stack' do
1109
+ Band.with_scope(criteria) do
1110
+ end
1187
1111
  expect(Mongoid::Threaded.current_scope(Band)).to be_nil
1188
1112
  end
1189
1113
  end
@@ -1193,17 +1117,17 @@ describe Mongoid::Scopable do
1193
1117
  let(:c2) { Band.where(active: false) }
1194
1118
 
1195
1119
  it 'restores previous scope' do
1196
- Band.with_scope(c1) do |crit|
1197
- Band.with_scope(c2) do |crit2|
1198
- Mongoid::Threaded.current_scope(Band).selector.should == {
1199
- 'active' => true,
1200
- '$and' => ['active' => false],
1201
- }
1120
+ Band.with_scope(c1) do |_crit|
1121
+ Band.with_scope(c2) do |_crit2|
1122
+ Mongoid::Threaded.current_scope(Band).selector.should eq(
1123
+ {
1124
+ 'active' => true,
1125
+ '$and' => [ { 'active' => false } ]
1126
+ }
1127
+ )
1202
1128
  end
1203
1129
 
1204
- Mongoid::Threaded.current_scope(Band).selector.should == {
1205
- 'active' => true,
1206
- }
1130
+ Mongoid::Threaded.current_scope(Band).selector.should eq({ 'active' => true })
1207
1131
  end
1208
1132
  end
1209
1133
  end
@@ -1212,29 +1136,26 @@ describe Mongoid::Scopable do
1212
1136
  let(:c1) { Band.where(active: true) }
1213
1137
 
1214
1138
  it 'restores previous scope' do
1215
- Band.with_scope(c1) do |crit|
1216
- Band.unscoped do |crit2|
1217
- Mongoid::Threaded.current_scope(Band).should be nil
1139
+ Band.with_scope(c1) do |_crit|
1140
+ Band.unscoped do |_crit2|
1141
+ Mongoid::Threaded.current_scope(Band).should be_nil
1218
1142
  end
1219
1143
 
1220
- Mongoid::Threaded.current_scope(Band).selector.should == {
1221
- 'active' => true,
1222
- }
1144
+ Mongoid::Threaded.current_scope(Band).selector.should eq({ 'active' => true })
1223
1145
  end
1224
1146
  end
1225
1147
  end
1226
1148
  end
1227
1149
 
1228
- describe ".without_default_scope" do
1229
-
1230
- it "sets the threading options" do
1150
+ describe '.without_default_scope' do
1151
+ it 'sets the threading options' do
1231
1152
  Band.without_default_scope do
1232
1153
  expect(Mongoid::Threaded).to be_executing(:without_default_scope)
1233
1154
  expect(Mongoid::Threaded.without_default_scope?(Band)).to be(true)
1234
1155
  end
1235
1156
  end
1236
1157
 
1237
- it "suppresses default scope on the given model within the given block" do
1158
+ it 'suppresses default scope on the given model within the given block' do
1238
1159
  Appointment.without_default_scope do
1239
1160
  expect(Appointment.all.selector).to be_empty
1240
1161
  end
@@ -1247,14 +1168,14 @@ describe Mongoid::Scopable do
1247
1168
  end
1248
1169
  end
1249
1170
 
1250
- describe "scoped queries" do
1251
- context "with a default scope" do
1171
+ describe 'scoped queries' do
1172
+ context 'with a default scope' do
1252
1173
  let(:criteria) do
1253
- Band.where(name: "Depeche Mode")
1174
+ Band.where(name: 'Depeche Mode')
1254
1175
  end
1255
1176
 
1256
1177
  before do
1257
- Band.default_scope ->{ criteria }
1178
+ Band.default_scope -> { criteria }
1258
1179
  Band.scope :unscoped_everyone, -> { unscoped }
1259
1180
  Band.scope :removed_default, -> { scoped.remove_scoping(all) }
1260
1181
 
@@ -1268,7 +1189,7 @@ describe Mongoid::Scopable do
1268
1189
  remove_scope Band, :removed_default
1269
1190
  end
1270
1191
 
1271
- context "when allow_scopes_to_unset_default_scope == false" do # default for <= 9
1192
+ context 'when allow_scopes_to_unset_default_scope == false' do # default for <= 9
1272
1193
  config_override :allow_scopes_to_unset_default_scope, false
1273
1194
 
1274
1195
  it 'merges the default scope into the query with unscoped' do
@@ -1280,7 +1201,7 @@ describe Mongoid::Scopable do
1280
1201
  end
1281
1202
  end
1282
1203
 
1283
- context "when allow_scopes_to_unset_default_scope == true" do # default for >= 10
1204
+ context 'when allow_scopes_to_unset_default_scope == true' do # default for >= 10
1284
1205
  config_override :allow_scopes_to_unset_default_scope, true
1285
1206
 
1286
1207
  it 'does not merge the default scope into the query with unscoped' do