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,26 +1,22 @@
1
1
  # frozen_string_literal: true
2
- # rubocop:todo all
3
2
 
4
- require "spec_helper"
3
+ require 'spec_helper'
5
4
 
6
5
  describe Mongoid::Contextual::Atomic do
7
-
8
- describe "#add_to_set" do
9
-
6
+ describe '#add_to_set' do
10
7
  let!(:depeche_mode) do
11
- Band.create!(members: [ "Dave" ])
8
+ Band.create!(members: [ 'Dave' ])
12
9
  end
13
10
 
14
11
  let!(:new_order) do
15
- Band.create!(members: [ "Peter" ])
12
+ Band.create!(members: [ 'Peter' ])
16
13
  end
17
14
 
18
15
  let!(:smiths) do
19
16
  Band.create!
20
17
  end
21
18
 
22
- context "when the criteria has no sorting" do
23
-
19
+ context 'when the criteria has no sorting' do
24
20
  let(:criteria) do
25
21
  Band.all
26
22
  end
@@ -30,24 +26,23 @@ describe Mongoid::Contextual::Atomic do
30
26
  end
31
27
 
32
28
  before do
33
- context.add_to_set(members: "Dave")
29
+ context.add_to_set(members: 'Dave')
34
30
  end
35
31
 
36
- it "does not add duplicates" do
37
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
32
+ it 'does not add duplicates' do
33
+ expect(depeche_mode.reload.members).to eq([ 'Dave' ])
38
34
  end
39
35
 
40
- it "adds unique values" do
41
- expect(new_order.reload.members).to eq([ "Peter", "Dave" ])
36
+ it 'adds unique values' do
37
+ expect(new_order.reload.members).to eq(%w[Peter Dave])
42
38
  end
43
39
 
44
- it "adds to non initialized fields" do
45
- expect(smiths.reload.members).to eq([ "Dave" ])
40
+ it 'adds to non initialized fields' do
41
+ expect(smiths.reload.members).to eq([ 'Dave' ])
46
42
  end
47
43
  end
48
44
 
49
- context "when the criteria has sorting" do
50
-
45
+ context 'when the criteria has sorting' do
51
46
  let(:criteria) do
52
47
  Band.asc(:name)
53
48
  end
@@ -57,30 +52,29 @@ describe Mongoid::Contextual::Atomic do
57
52
  end
58
53
 
59
54
  before do
60
- context.add_to_set(members: "Dave", genres: "Electro")
55
+ context.add_to_set(members: 'Dave', genres: 'Electro')
61
56
  end
62
57
 
63
- it "does not add duplicates" do
64
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
58
+ it 'does not add duplicates' do
59
+ expect(depeche_mode.reload.members).to eq([ 'Dave' ])
65
60
  end
66
61
 
67
- it "adds multiple operations" do
68
- expect(depeche_mode.reload.genres).to eq([ "Electro" ])
62
+ it 'adds multiple operations' do
63
+ expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
69
64
  end
70
65
 
71
- it "adds unique values" do
72
- expect(new_order.reload.members).to eq([ "Peter", "Dave" ])
66
+ it 'adds unique values' do
67
+ expect(new_order.reload.members).to eq(%w[Peter Dave])
73
68
  end
74
69
 
75
- it "adds to non initialized fields" do
76
- expect(smiths.reload.members).to eq([ "Dave" ])
70
+ it 'adds to non initialized fields' do
71
+ expect(smiths.reload.members).to eq([ 'Dave' ])
77
72
  end
78
73
  end
79
74
 
80
75
  context 'when the criteria has a collation' do
81
-
82
76
  let(:criteria) do
83
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
77
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
84
78
  end
85
79
 
86
80
  let(:context) do
@@ -88,35 +82,33 @@ describe Mongoid::Contextual::Atomic do
88
82
  end
89
83
 
90
84
  before do
91
- context.add_to_set(members: "Dave", genres: "Electro")
85
+ context.add_to_set(members: 'Dave', genres: 'Electro')
92
86
  end
93
87
 
94
- it "does not add duplicates" do
95
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
88
+ it 'does not add duplicates' do
89
+ expect(depeche_mode.reload.members).to eq([ 'Dave' ])
96
90
  end
97
91
 
98
- it "adds multiple operations" do
99
- expect(depeche_mode.reload.genres).to eq([ "Electro" ])
92
+ it 'adds multiple operations' do
93
+ expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
100
94
  end
101
95
  end
102
96
  end
103
97
 
104
- describe "#add_each_to_set" do
105
-
98
+ describe '#add_each_to_set' do
106
99
  let!(:depeche_mode) do
107
- Band.create!(members: [ "Dave" ])
100
+ Band.create!(members: [ 'Dave' ])
108
101
  end
109
102
 
110
103
  let!(:new_order) do
111
- Band.create!(members: [ "Peter" ])
104
+ Band.create!(members: [ 'Peter' ])
112
105
  end
113
106
 
114
107
  let!(:smiths) do
115
108
  Band.create!
116
109
  end
117
110
 
118
- context "when the criteria has no sorting" do
119
-
111
+ context 'when the criteria has no sorting' do
120
112
  let(:criteria) do
121
113
  Band.all
122
114
  end
@@ -126,24 +118,23 @@ describe Mongoid::Contextual::Atomic do
126
118
  end
127
119
 
128
120
  before do
129
- context.add_each_to_set(members: [ "Dave", "Joe" ])
121
+ context.add_each_to_set(members: %w[Dave Joe])
130
122
  end
131
123
 
132
- it "does not add duplicates" do
133
- expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ])
124
+ it 'does not add duplicates' do
125
+ expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
134
126
  end
135
127
 
136
- it "adds unique values" do
137
- expect(new_order.reload.members).to eq([ "Peter", "Dave", "Joe" ])
128
+ it 'adds unique values' do
129
+ expect(new_order.reload.members).to eq(%w[Peter Dave Joe])
138
130
  end
139
131
 
140
- it "adds to non initialized fields" do
141
- expect(smiths.reload.members).to eq([ "Dave", "Joe" ])
132
+ it 'adds to non initialized fields' do
133
+ expect(smiths.reload.members).to eq(%w[Dave Joe])
142
134
  end
143
135
  end
144
136
 
145
- context "when the criteria has sorting" do
146
-
137
+ context 'when the criteria has sorting' do
147
138
  let(:criteria) do
148
139
  Band.asc(:name)
149
140
  end
@@ -153,30 +144,29 @@ describe Mongoid::Contextual::Atomic do
153
144
  end
154
145
 
155
146
  before do
156
- context.add_each_to_set(members: [ "Dave", "Joe" ], genres: "Electro")
147
+ context.add_each_to_set(members: %w[Dave Joe], genres: 'Electro')
157
148
  end
158
149
 
159
- it "does not add duplicates" do
160
- expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ])
150
+ it 'does not add duplicates' do
151
+ expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
161
152
  end
162
153
 
163
- it "adds multiple operations" do
164
- expect(depeche_mode.reload.genres).to eq([ "Electro" ])
154
+ it 'adds multiple operations' do
155
+ expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
165
156
  end
166
157
 
167
- it "adds unique values" do
168
- expect(new_order.reload.members).to eq([ "Peter", "Dave", "Joe" ])
158
+ it 'adds unique values' do
159
+ expect(new_order.reload.members).to eq(%w[Peter Dave Joe])
169
160
  end
170
161
 
171
- it "adds to non initialized fields" do
172
- expect(smiths.reload.members).to eq([ "Dave", "Joe" ])
162
+ it 'adds to non initialized fields' do
163
+ expect(smiths.reload.members).to eq(%w[Dave Joe])
173
164
  end
174
165
  end
175
166
 
176
167
  context 'when the criteria has a collation' do
177
-
178
168
  let(:criteria) do
179
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
169
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
180
170
  end
181
171
 
182
172
  let(:context) do
@@ -184,21 +174,20 @@ describe Mongoid::Contextual::Atomic do
184
174
  end
185
175
 
186
176
  before do
187
- context.add_each_to_set(members: [ "Dave", "Joe" ], genres: "Electro")
177
+ context.add_each_to_set(members: %w[Dave Joe], genres: 'Electro')
188
178
  end
189
179
 
190
- it "does not add duplicates" do
191
- expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ])
180
+ it 'does not add duplicates' do
181
+ expect(depeche_mode.reload.members).to eq(%w[Dave Joe])
192
182
  end
193
183
 
194
- it "adds multiple operations" do
195
- expect(depeche_mode.reload.genres).to eq([ "Electro" ])
184
+ it 'adds multiple operations' do
185
+ expect(depeche_mode.reload.genres).to eq([ 'Electro' ])
196
186
  end
197
187
  end
198
188
  end
199
189
 
200
- describe "#bit" do
201
-
190
+ describe '#bit' do
202
191
  let!(:depeche_mode) do
203
192
  Band.create!(likes: 60)
204
193
  end
@@ -211,47 +200,43 @@ describe Mongoid::Contextual::Atomic do
211
200
  Mongoid::Contextual::Mongo.new(criteria)
212
201
  end
213
202
 
214
- context "when performing a bitwise and" do
215
-
203
+ context 'when performing a bitwise and' do
216
204
  before do
217
205
  context.bit(likes: { and: 13 })
218
206
  end
219
207
 
220
- it "performs the bitwise operation on initialized fields" do
208
+ it 'performs the bitwise operation on initialized fields' do
221
209
  expect(depeche_mode.reload.likes).to eq(12)
222
210
  end
223
211
  end
224
212
 
225
- context "when performing a bitwise or" do
226
-
213
+ context 'when performing a bitwise or' do
227
214
  before do
228
215
  context.bit(likes: { or: 13 })
229
216
  end
230
217
 
231
- it "performs the bitwise operation on initialized fields" do
218
+ it 'performs the bitwise operation on initialized fields' do
232
219
  expect(depeche_mode.reload.likes).to eq(61)
233
220
  end
234
221
  end
235
222
 
236
- context "when chaining bitwise operations" do
237
-
223
+ context 'when chaining bitwise operations' do
238
224
  before do
239
225
  context.bit(likes: { and: 13, or: 10 })
240
226
  end
241
227
 
242
- it "performs the bitwise operation on initialized fields" do
228
+ it 'performs the bitwise operation on initialized fields' do
243
229
  expect(depeche_mode.reload.likes).to eq(14)
244
230
  end
245
231
  end
246
232
 
247
233
  context 'when the criteria has a collation' do
248
-
249
234
  let!(:depeche_mode) do
250
- Band.create!(members: [ "Dave" ], likes: 60)
235
+ Band.create!(members: [ 'Dave' ], likes: 60)
251
236
  end
252
237
 
253
238
  let(:criteria) do
254
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
239
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
255
240
  end
256
241
 
257
242
  let(:context) do
@@ -262,14 +247,13 @@ describe Mongoid::Contextual::Atomic do
262
247
  context.bit(likes: { and: 13, or: 10 })
263
248
  end
264
249
 
265
- it "performs the bitwise operation on initialized fields" do
250
+ it 'performs the bitwise operation on initialized fields' do
266
251
  expect(depeche_mode.reload.likes).to eq(14)
267
252
  end
268
253
  end
269
254
  end
270
255
 
271
- describe "#inc" do
272
-
256
+ describe '#inc' do
273
257
  let!(:depeche_mode) do
274
258
  Band.create!(likes: 60)
275
259
  end
@@ -294,43 +278,39 @@ describe Mongoid::Contextual::Atomic do
294
278
  context.inc(likes: 10)
295
279
  end
296
280
 
297
- context "when the field exists" do
298
-
299
- it "incs the value" do
281
+ context 'when the field exists' do
282
+ it 'incs the value' do
300
283
  expect(depeche_mode.reload.likes).to eq(70)
301
284
  end
302
285
  end
303
286
 
304
- context "when the field does not exist" do
305
-
306
- it "does not error on the inc" do
307
- expect(smiths.reload.likes).to be == 10
287
+ context 'when the field does not exist' do
288
+ it 'does not error on the inc' do
289
+ expect(smiths.reload.likes).to eq 10
308
290
  end
309
291
  end
310
292
 
311
- context "when using the alias" do
312
-
293
+ context 'when using the alias' do
313
294
  before do
314
295
  context.inc(years: 1)
315
296
  end
316
297
 
317
- it "incs the value and read from alias" do
298
+ it 'incs the value and read from alias' do
318
299
  expect(beatles.reload.years).to eq(3)
319
300
  end
320
301
 
321
- it "incs the value and read from field" do
302
+ it 'incs the value and read from field' do
322
303
  expect(beatles.reload.y).to eq(3)
323
304
  end
324
305
  end
325
306
 
326
307
  context 'when the criteria has a collation' do
327
-
328
308
  let!(:depeche_mode) do
329
- Band.create!(members: [ "Dave" ])
309
+ Band.create!(members: [ 'Dave' ])
330
310
  end
331
311
 
332
312
  let(:criteria) do
333
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
313
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
334
314
  end
335
315
 
336
316
  let(:context) do
@@ -341,14 +321,13 @@ describe Mongoid::Contextual::Atomic do
341
321
  context.inc(years: 1)
342
322
  end
343
323
 
344
- it "incs the value and read from alias" do
324
+ it 'incs the value and read from alias' do
345
325
  expect(depeche_mode.reload.years).to eq(1)
346
326
  end
347
327
  end
348
328
  end
349
329
 
350
- describe "#mul" do
351
-
330
+ describe '#mul' do
352
331
  let!(:depeche_mode) { Band.create!(likes: 60) }
353
332
  let!(:smiths) { Band.create! }
354
333
  let!(:beatles) { Band.create!(years: 2) }
@@ -358,56 +337,51 @@ describe Mongoid::Contextual::Atomic do
358
337
 
359
338
  before { context.mul(likes: 10) }
360
339
 
361
- context "when the field exists" do
362
-
363
- it "muls the value" do
340
+ context 'when the field exists' do
341
+ it 'muls the value' do
364
342
  expect(depeche_mode.reload.likes).to eq(600)
365
343
  end
366
344
  end
367
345
 
368
- context "when the field does not exist" do
369
-
370
- it "sets undefined fields to zero" do
371
- expect(smiths.reload.likes).to be == 0
346
+ context 'when the field does not exist' do
347
+ it 'sets undefined fields to zero' do
348
+ expect(smiths.reload.likes).to eq 0
372
349
  end
373
350
  end
374
351
 
375
- context "when using the alias" do
376
-
352
+ context 'when using the alias' do
377
353
  before do
378
354
  context.mul(years: 2)
379
355
  end
380
356
 
381
- it "muls the value and read from alias" do
357
+ it 'muls the value and read from alias' do
382
358
  expect(beatles.reload.years).to eq(4)
383
359
  end
384
360
 
385
- it "muls the value and read from field" do
361
+ it 'muls the value and read from field' do
386
362
  expect(beatles.reload.y).to eq(4)
387
363
  end
388
364
  end
389
365
 
390
366
  context 'when the criteria has a collation' do
391
-
392
- let!(:depeche_mode) { Band.create!(members: [ "Dave" ], years: 3) }
367
+ let!(:depeche_mode) { Band.create!(members: [ 'Dave' ], years: 3) }
393
368
  let(:criteria) do
394
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
369
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
395
370
  end
396
371
 
397
372
  let(:context) { Mongoid::Contextual::Mongo.new(criteria) }
398
373
 
399
374
  before { context.mul(years: 2) }
400
375
 
401
- it "muls the value" do
376
+ it 'muls the value' do
402
377
  expect(depeche_mode.reload.years).to eq(6)
403
378
  end
404
379
  end
405
380
  end
406
381
 
407
- describe "#pop" do
408
-
382
+ describe '#pop' do
409
383
  let!(:depeche_mode) do
410
- Band.create!(members: [ "Dave", "Martin" ])
384
+ Band.create!(members: %w[Dave Martin])
411
385
  end
412
386
 
413
387
  let!(:smiths) do
@@ -422,44 +396,41 @@ describe Mongoid::Contextual::Atomic do
422
396
  Mongoid::Contextual::Mongo.new(criteria)
423
397
  end
424
398
 
425
- context "when popping from the front" do
426
-
399
+ context 'when popping from the front' do
427
400
  before do
428
401
  context.pop(members: -1)
429
402
  end
430
403
 
431
- it "pops the first element off the array" do
432
- expect(depeche_mode.reload.members).to eq([ "Martin" ])
404
+ it 'pops the first element off the array' do
405
+ expect(depeche_mode.reload.members).to eq([ 'Martin' ])
433
406
  end
434
407
 
435
- it "does not error on uninitialized fields" do
408
+ it 'does not error on uninitialized fields' do
436
409
  expect(smiths.reload.members).to be_nil
437
410
  end
438
411
  end
439
412
 
440
- context "when popping from the rear" do
441
-
413
+ context 'when popping from the rear' do
442
414
  before do
443
415
  context.pop(members: 1)
444
416
  end
445
417
 
446
- it "pops the last element off the array" do
447
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
418
+ it 'pops the last element off the array' do
419
+ expect(depeche_mode.reload.members).to eq([ 'Dave' ])
448
420
  end
449
421
 
450
- it "does not error on uninitialized fields" do
422
+ it 'does not error on uninitialized fields' do
451
423
  expect(smiths.reload.members).to be_nil
452
424
  end
453
425
  end
454
426
 
455
427
  context 'when the criteria has a collation' do
456
-
457
428
  let!(:depeche_mode) do
458
- Band.create!(members: [ "Dave" ])
429
+ Band.create!(members: [ 'Dave' ])
459
430
  end
460
431
 
461
432
  let(:criteria) do
462
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
433
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
463
434
  end
464
435
 
465
436
  let(:context) do
@@ -470,16 +441,15 @@ describe Mongoid::Contextual::Atomic do
470
441
  context.pop(members: 1)
471
442
  end
472
443
 
473
- it "pops the last element off the array" do
444
+ it 'pops the last element off the array' do
474
445
  expect(depeche_mode.reload.members).to be_empty
475
446
  end
476
447
  end
477
448
  end
478
449
 
479
- describe "#pull" do
480
-
450
+ describe '#pull' do
481
451
  let!(:depeche_mode) do
482
- Band.create!(members: [ "Dave", "Alan" ])
452
+ Band.create!(members: %w[Dave Alan])
483
453
  end
484
454
 
485
455
  let!(:smiths) do
@@ -495,25 +465,24 @@ describe Mongoid::Contextual::Atomic do
495
465
  end
496
466
 
497
467
  before do
498
- context.pull(members: "Alan")
468
+ context.pull(members: 'Alan')
499
469
  end
500
470
 
501
- it "pulls when the value is found" do
502
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
471
+ it 'pulls when the value is found' do
472
+ expect(depeche_mode.reload.members).to eq([ 'Dave' ])
503
473
  end
504
474
 
505
- it "does not error on non existent fields" do
475
+ it 'does not error on non existent fields' do
506
476
  expect(smiths.reload.members).to be_nil
507
477
  end
508
478
 
509
479
  context 'when the criteria has a collation' do
510
-
511
480
  let!(:depeche_mode) do
512
- Band.create!(members: [ "Dave" ])
481
+ Band.create!(members: [ 'Dave' ])
513
482
  end
514
483
 
515
484
  let(:criteria) do
516
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
485
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
517
486
  end
518
487
 
519
488
  let(:context) do
@@ -521,21 +490,19 @@ describe Mongoid::Contextual::Atomic do
521
490
  end
522
491
 
523
492
  before do
524
- context.pull(members: "DAVE")
493
+ context.pull(members: 'DAVE')
525
494
  end
526
495
 
527
- it "pulls when the value is found" do
496
+ it 'pulls when the value is found' do
528
497
  expect(depeche_mode.reload.members).to be_empty
529
498
  end
530
499
  end
531
500
  end
532
501
 
533
- describe "#pull_all" do
534
-
502
+ describe '#pull_all' do
535
503
  context 'when the criteria does not have a collation' do
536
-
537
504
  let!(:depeche_mode) do
538
- Band.create!(members: [ "Dave", "Alan", "Fletch" ])
505
+ Band.create!(members: %w[Dave Alan Fletch])
539
506
  end
540
507
 
541
508
  let!(:smiths) do
@@ -551,22 +518,21 @@ describe Mongoid::Contextual::Atomic do
551
518
  end
552
519
 
553
520
  before do
554
- context.pull_all(members: [ "Alan", "Dave" ])
521
+ context.pull_all(members: %w[Alan Dave])
555
522
  end
556
523
 
557
- it "pulls when the values are found" do
558
- expect(depeche_mode.reload.members).to eq([ "Fletch" ])
524
+ it 'pulls when the values are found' do
525
+ expect(depeche_mode.reload.members).to eq([ 'Fletch' ])
559
526
  end
560
527
 
561
- it "does not error on non existent fields" do
528
+ it 'does not error on non existent fields' do
562
529
  expect(smiths.reload.members).to be_nil
563
530
  end
564
531
  end
565
532
 
566
533
  context 'when the criteria has a collation' do
567
-
568
534
  let!(:depeche_mode) do
569
- Band.create!(members: [ "Dave", "Alan", "Fletch" ])
535
+ Band.create!(members: %w[Dave Alan Fletch])
570
536
  end
571
537
 
572
538
  let(:criteria) do
@@ -578,21 +544,19 @@ describe Mongoid::Contextual::Atomic do
578
544
  end
579
545
 
580
546
  before do
581
- context.pull_all(members: [ "ALAN", "DAVE" ])
547
+ context.pull_all(members: %w[ALAN DAVE])
582
548
  end
583
549
 
584
- it "pulls when the value is found" do
585
- expect(depeche_mode.reload.members).to eq([ "Fletch" ])
550
+ it 'pulls when the value is found' do
551
+ expect(depeche_mode.reload.members).to eq([ 'Fletch' ])
586
552
  end
587
553
  end
588
554
  end
589
555
 
590
- describe "#push" do
591
-
556
+ describe '#push' do
592
557
  context 'when the criteria does not have a collation' do
593
-
594
558
  let!(:depeche_mode) do
595
- Band.create!(members: [ "Dave" ])
559
+ Band.create!(members: [ 'Dave' ])
596
560
  end
597
561
 
598
562
  let!(:smiths) do
@@ -608,22 +572,21 @@ describe Mongoid::Contextual::Atomic do
608
572
  end
609
573
 
610
574
  before do
611
- context.push(members: "Alan")
575
+ context.push(members: 'Alan')
612
576
  end
613
577
 
614
- it "pushes the value to existing arrays" do
615
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
578
+ it 'pushes the value to existing arrays' do
579
+ expect(depeche_mode.reload.members).to eq(%w[Dave Alan])
616
580
  end
617
581
 
618
- it "pushes to non existent fields" do
619
- expect(smiths.reload.members).to eq([ "Alan" ])
582
+ it 'pushes to non existent fields' do
583
+ expect(smiths.reload.members).to eq([ 'Alan' ])
620
584
  end
621
585
  end
622
586
 
623
587
  context 'when the criteria has a collation' do
624
-
625
588
  let!(:depeche_mode) do
626
- Band.create!(members: [ "Dave" ])
589
+ Band.create!(members: [ 'Dave' ])
627
590
  end
628
591
 
629
592
  let!(:smiths) do
@@ -631,7 +594,7 @@ describe Mongoid::Contextual::Atomic do
631
594
  end
632
595
 
633
596
  let(:criteria) do
634
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
597
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
635
598
  end
636
599
 
637
600
  let(:context) do
@@ -639,25 +602,23 @@ describe Mongoid::Contextual::Atomic do
639
602
  end
640
603
 
641
604
  before do
642
- context.push(members: "Alan")
605
+ context.push(members: 'Alan')
643
606
  end
644
607
 
645
- it "pushes the value to existing arrays" do
646
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
608
+ it 'pushes the value to existing arrays' do
609
+ expect(depeche_mode.reload.members).to eq(%w[Dave Alan])
647
610
  end
648
611
 
649
- it "pushes to non existent fields" do
612
+ it 'pushes to non existent fields' do
650
613
  expect(smiths.reload.members).to be_nil
651
614
  end
652
615
  end
653
616
  end
654
617
 
655
- describe "#push_all" do
656
-
618
+ describe '#push_all' do
657
619
  context 'when the criteria does not have a collation' do
658
-
659
620
  let!(:depeche_mode) do
660
- Band.create!(members: [ "Dave" ])
621
+ Band.create!(members: [ 'Dave' ])
661
622
  end
662
623
 
663
624
  let!(:smiths) do
@@ -673,22 +634,21 @@ describe Mongoid::Contextual::Atomic do
673
634
  end
674
635
 
675
636
  before do
676
- context.push_all(members: [ "Alan", "Fletch" ])
637
+ context.push_all(members: %w[Alan Fletch])
677
638
  end
678
639
 
679
- it "pushes the values to existing arrays" do
680
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
640
+ it 'pushes the values to existing arrays' do
641
+ expect(depeche_mode.reload.members).to eq(%w[Dave Alan Fletch])
681
642
  end
682
643
 
683
- it "pushes to non existent fields" do
684
- expect(smiths.reload.members).to eq([ "Alan", "Fletch" ])
644
+ it 'pushes to non existent fields' do
645
+ expect(smiths.reload.members).to eq(%w[Alan Fletch])
685
646
  end
686
647
  end
687
648
 
688
649
  context 'when the criteria has a collation' do
689
-
690
650
  let!(:depeche_mode) do
691
- Band.create!(members: [ "Dave" ])
651
+ Band.create!(members: [ 'Dave' ])
692
652
  end
693
653
 
694
654
  let!(:smiths) do
@@ -696,7 +656,7 @@ describe Mongoid::Contextual::Atomic do
696
656
  end
697
657
 
698
658
  let(:criteria) do
699
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
659
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
700
660
  end
701
661
 
702
662
  let(:context) do
@@ -704,21 +664,19 @@ describe Mongoid::Contextual::Atomic do
704
664
  end
705
665
 
706
666
  before do
707
- context.push_all(members: [ "Alan", "Fletch" ])
667
+ context.push_all(members: %w[Alan Fletch])
708
668
  end
709
669
 
710
- it "pushes the values to existing arrays" do
711
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
670
+ it 'pushes the values to existing arrays' do
671
+ expect(depeche_mode.reload.members).to eq(%w[Dave Alan Fletch])
712
672
  end
713
673
  end
714
674
  end
715
675
 
716
- describe "#rename" do
717
-
676
+ describe '#rename' do
718
677
  context 'when the criteria does not have a collation' do
719
-
720
678
  let!(:depeche_mode) do
721
- Band.create!(members: [ "Dave" ])
679
+ Band.create!(members: [ 'Dave' ])
722
680
  end
723
681
 
724
682
  let!(:smiths) do
@@ -737,19 +695,18 @@ describe Mongoid::Contextual::Atomic do
737
695
  context.rename(members: :musicians)
738
696
  end
739
697
 
740
- it "renames existing fields" do
741
- expect(depeche_mode.reload.musicians).to eq([ "Dave" ])
698
+ it 'renames existing fields' do
699
+ expect(depeche_mode.reload.musicians).to eq([ 'Dave' ])
742
700
  end
743
701
 
744
- it "does not rename non existent fields" do
745
- expect(smiths.reload).to_not respond_to(:musicians)
702
+ it 'does not rename non existent fields' do
703
+ expect(smiths.reload).not_to respond_to(:musicians)
746
704
  end
747
705
  end
748
706
 
749
707
  context 'when the criteria has a collation' do
750
-
751
708
  let!(:depeche_mode) do
752
- Band.create!(members: [ "Dave" ])
709
+ Band.create!(members: [ 'Dave' ])
753
710
  end
754
711
 
755
712
  let!(:smiths) do
@@ -757,7 +714,7 @@ describe Mongoid::Contextual::Atomic do
757
714
  end
758
715
 
759
716
  let(:criteria) do
760
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
717
+ Band.where(members: [ 'DAVE' ]).collation(locale: 'en_US', strength: 2)
761
718
  end
762
719
 
763
720
  let(:context) do
@@ -768,20 +725,19 @@ describe Mongoid::Contextual::Atomic do
768
725
  context.rename(members: :musicians)
769
726
  end
770
727
 
771
- it "renames existing fields" do
772
- expect(depeche_mode.reload.musicians).to eq([ "Dave" ])
728
+ it 'renames existing fields' do
729
+ expect(depeche_mode.reload.musicians).to eq([ 'Dave' ])
773
730
  end
774
731
 
775
- it "does not rename non existent fields" do
776
- expect(smiths.reload).to_not respond_to(:musicians)
732
+ it 'does not rename non existent fields' do
733
+ expect(smiths.reload).not_to respond_to(:musicians)
777
734
  end
778
735
  end
779
736
  end
780
737
 
781
- describe "#set" do
782
-
738
+ describe '#set' do
783
739
  let!(:depeche_mode) do
784
- Band.create!(name: "Depeche Mode")
740
+ Band.create!(name: 'Depeche Mode')
785
741
  end
786
742
 
787
743
  let!(:smiths) do
@@ -797,23 +753,22 @@ describe Mongoid::Contextual::Atomic do
797
753
  end
798
754
 
799
755
  before do
800
- context.set(name: "Recoil")
756
+ context.set(name: 'Recoil')
801
757
  end
802
758
 
803
759
  shared_examples 'writes as expected' do
804
- it "sets existing fields" do
805
- expect(depeche_mode.reload.name).to eq("Recoil")
760
+ it 'sets existing fields' do
761
+ expect(depeche_mode.reload.name).to eq('Recoil')
806
762
  end
807
763
 
808
- it "sets non existent fields" do
809
- expect(smiths.reload.name).to eq("Recoil")
764
+ it 'sets non existent fields' do
765
+ expect(smiths.reload.name).to eq('Recoil')
810
766
  end
811
767
  end
812
768
 
813
769
  include_examples 'writes as expected'
814
770
 
815
771
  context 'when fields being set have been projected out' do
816
-
817
772
  let(:criteria) do
818
773
  Band.only(:genres)
819
774
  end
@@ -822,16 +777,14 @@ describe Mongoid::Contextual::Atomic do
822
777
  end
823
778
  end
824
779
 
825
- describe "#unset" do
826
-
827
- context "when unsetting a single field" do
828
-
780
+ describe '#unset' do
781
+ context 'when unsetting a single field' do
829
782
  let!(:depeche_mode) do
830
- Band.create!(name: "Depeche Mode", years: 10)
783
+ Band.create!(name: 'Depeche Mode', years: 10)
831
784
  end
832
785
 
833
786
  let!(:new_order) do
834
- Band.create!(name: "New Order", years: 10)
787
+ Band.create!(name: 'New Order', years: 10)
835
788
  end
836
789
 
837
790
  let(:criteria) do
@@ -842,43 +795,41 @@ describe Mongoid::Contextual::Atomic do
842
795
  Mongoid::Contextual::Mongo.new(criteria)
843
796
  end
844
797
 
845
- context "when the field is not aliased" do
846
-
798
+ context 'when the field is not aliased' do
847
799
  before do
848
800
  context.unset(:name)
849
801
  end
850
802
 
851
- it "unsets the fields from all documents" do
803
+ it 'unsets the fields from all documents' do
852
804
  depeche_mode.reload
853
805
  new_order.reload
854
806
  expect(depeche_mode.name).to be_nil
855
- expect(depeche_mode.years).to_not be_nil
807
+ expect(depeche_mode.years).not_to be_nil
856
808
  expect(new_order.name).to be_nil
857
- expect(new_order.years).to_not be_nil
809
+ expect(new_order.years).not_to be_nil
858
810
  end
859
811
  end
860
812
 
861
- context "when the field is aliased" do
813
+ context 'when the field is aliased' do
862
814
  before do
863
815
  context.unset(:years)
864
816
  end
865
817
 
866
- it "unsets the fields from all documents" do
818
+ it 'unsets the fields from all documents' do
867
819
  depeche_mode.reload
868
820
  new_order.reload
869
- expect(depeche_mode.name).to_not be_nil
821
+ expect(depeche_mode.name).not_to be_nil
870
822
  expect(depeche_mode.years).to be_nil
871
- expect(new_order.name).to_not be_nil
823
+ expect(new_order.name).not_to be_nil
872
824
  expect(new_order.years).to be_nil
873
825
  end
874
826
  end
875
827
  end
876
828
 
877
- context "when unsetting multiple fields" do
878
-
829
+ context 'when unsetting multiple fields' do
879
830
  let!(:new_order) do
880
- Band.create!(name: "New Order", genres: %w[electro dub], years: 10,
881
- likes: 200, rating: 4.3, origin: 'Space')
831
+ Band.create!(name: 'New Order', genres: %w[electro dub], years: 10,
832
+ likes: 200, rating: 4.3, origin: 'Space')
882
833
  end
883
834
 
884
835
  let(:criteria) do
@@ -889,48 +840,45 @@ describe Mongoid::Contextual::Atomic do
889
840
  Mongoid::Contextual::Mongo.new(criteria)
890
841
  end
891
842
 
892
- context "when the field is not aliased" do
893
-
843
+ context 'when the field is not aliased' do
894
844
  before do
895
845
  context.unset(:name, :genres)
896
846
  end
897
847
 
898
- it "unsets the specified fields" do
848
+ it 'unsets the specified fields' do
899
849
  new_order.reload
900
850
  expect(new_order.name).to be_nil
901
851
  expect(new_order.genres).to be_nil
902
- expect(new_order.years).to_not be_nil
903
- expect(new_order.likes).to_not be_nil
904
- expect(new_order.rating).to_not be_nil
852
+ expect(new_order.years).not_to be_nil
853
+ expect(new_order.likes).not_to be_nil
854
+ expect(new_order.rating).not_to be_nil
905
855
  end
906
856
  end
907
857
 
908
- context "when the field is aliased" do
909
-
858
+ context 'when the field is aliased' do
910
859
  before do
911
860
  context.unset(:name, :years)
912
861
  end
913
862
 
914
- it "unsets the specified fields" do
863
+ it 'unsets the specified fields' do
915
864
  new_order.reload
916
865
  expect(new_order.name).to be_nil
917
- expect(new_order.genres).to_not be_nil
866
+ expect(new_order.genres).not_to be_nil
918
867
  expect(new_order.years).to be_nil
919
- expect(new_order.likes).to_not be_nil
920
- expect(new_order.rating).to_not be_nil
868
+ expect(new_order.likes).not_to be_nil
869
+ expect(new_order.rating).not_to be_nil
921
870
  end
922
871
  end
923
872
 
924
- context "when using Hash arguments" do
925
-
873
+ context 'when using Hash arguments' do
926
874
  before do
927
- context.unset({ years: true, likes: "" }, { rating: false, origin: nil })
875
+ context.unset({ years: true, likes: '' }, { rating: false, origin: nil })
928
876
  end
929
877
 
930
- it "unsets the specified fields" do
878
+ it 'unsets the specified fields' do
931
879
  new_order.reload
932
- expect(new_order.name).to_not be_nil
933
- expect(new_order.genres).to_not be_nil
880
+ expect(new_order.name).not_to be_nil
881
+ expect(new_order.genres).not_to be_nil
934
882
  expect(new_order.years).to be_nil
935
883
  expect(new_order.likes).to be_nil
936
884
  expect(new_order.rating).to be_nil
@@ -938,16 +886,15 @@ describe Mongoid::Contextual::Atomic do
938
886
  end
939
887
  end
940
888
 
941
- context "when mixing argument types" do
942
-
889
+ context 'when mixing argument types' do
943
890
  before do
944
- context.unset(:name, [:years], { likes: "" }, { rating: false })
891
+ context.unset(:name, [ :years ], { likes: '' }, { rating: false })
945
892
  end
946
893
 
947
- it "unsets the specified fields" do
894
+ it 'unsets the specified fields' do
948
895
  new_order.reload
949
896
  expect(new_order.name).to be_nil
950
- expect(new_order.genres).to_not be_nil
897
+ expect(new_order.genres).not_to be_nil
951
898
  expect(new_order.years).to be_nil
952
899
  expect(new_order.likes).to be_nil
953
900
  expect(new_order.rating).to be_nil
@@ -956,13 +903,12 @@ describe Mongoid::Contextual::Atomic do
956
903
  end
957
904
 
958
905
  context 'when the criteria has a collation' do
959
-
960
906
  let!(:depeche_mode) do
961
- Band.create!(name: "Depeche Mode", years: 10)
907
+ Band.create!(name: 'Depeche Mode', years: 10)
962
908
  end
963
909
 
964
910
  let!(:new_order) do
965
- Band.create!(name: "New Order", years: 10)
911
+ Band.create!(name: 'New Order', years: 10)
966
912
  end
967
913
 
968
914
  let(:criteria) do
@@ -977,10 +923,10 @@ describe Mongoid::Contextual::Atomic do
977
923
  context.unset(:name)
978
924
  end
979
925
 
980
- it "unsets the unaliased field" do
926
+ it 'unsets the unaliased field' do
981
927
  depeche_mode.reload
982
928
  expect(depeche_mode.name).to be_nil
983
- expect(depeche_mode.years).to_not be_nil
929
+ expect(depeche_mode.years).not_to be_nil
984
930
  end
985
931
  end
986
932
  end
@@ -995,7 +941,8 @@ describe Mongoid::Contextual::Atomic do
995
941
  Band.create!(
996
942
  member_count: member_count,
997
943
  founded: founded,
998
- views: views)
944
+ views: views
945
+ )
999
946
  end
1000
947
 
1001
948
  let(:criteria) { Band.all }
@@ -1004,12 +951,12 @@ describe Mongoid::Contextual::Atomic do
1004
951
  shared_examples_for 'min-able comparisons' do
1005
952
  shared_examples_for 'a min-able context' do
1006
953
  it 'chooses the smaller value' do
1007
- context.send(min_method, "member_count" => given_members, views: given_views)
1008
- expect(band.reload.member_count).to be == [ member_count, given_members ].min
1009
- expect(band.views).to be == [ views, given_views ].min
954
+ context.send(min_method, 'member_count' => given_members, views: given_views)
955
+ expect(band.reload.member_count).to eq [ member_count, given_members ].min
956
+ expect(band.views).to eq [ views, given_views ].min
1010
957
  end
1011
958
  end
1012
-
959
+
1013
960
  context 'when given value < existing value' do
1014
961
  let(:given_views) { views - 1 }
1015
962
  let(:given_members) { member_count - 1 }
@@ -1034,25 +981,27 @@ describe Mongoid::Contextual::Atomic do
1034
981
  context 'when the named field does not yet exist on the document' do
1035
982
  it 'sets the field to the argument' do
1036
983
  context.send(min_method, new_field: 100)
1037
- expect(band.reload.new_field).to be == 100
984
+ expect(band.reload.new_field).to eq 100
1038
985
  end
1039
986
  end
1040
987
 
1041
988
  context 'when arguments are dates/times' do
1042
989
  it 'picks the earliest date' do
1043
990
  context.send(min_method, founded: founded - 1)
1044
- expect(band.reload.founded).to be == founded - 1
991
+ expect(band.reload.founded).to eq founded - 1
1045
992
  end
1046
993
  end
1047
994
  end
1048
995
 
1049
996
  context 'as itself' do
1050
997
  let(:min_method) { :set_min }
998
+
1051
999
  include_examples 'min-able comparisons'
1052
1000
  end
1053
1001
 
1054
1002
  context 'as #clamp_upper_bound' do
1055
1003
  let(:min_method) { :clamp_upper_bound }
1004
+
1056
1005
  include_examples 'min-able comparisons'
1057
1006
  end
1058
1007
  end
@@ -1067,7 +1016,8 @@ describe Mongoid::Contextual::Atomic do
1067
1016
  Band.create!(
1068
1017
  member_count: member_count,
1069
1018
  founded: founded,
1070
- views: views)
1019
+ views: views
1020
+ )
1071
1021
  end
1072
1022
 
1073
1023
  let(:criteria) { Band.all }
@@ -1076,9 +1026,9 @@ describe Mongoid::Contextual::Atomic do
1076
1026
  shared_examples_for 'max-able comparisons' do
1077
1027
  shared_examples_for 'a max-able context' do
1078
1028
  it 'chooses the larger value' do
1079
- context.send(max_method, "member_count" => given_members, views: given_views)
1080
- expect(band.reload.member_count).to be == [ member_count, given_members ].max
1081
- expect(band.views).to be == [ views, given_views ].max
1029
+ context.send(max_method, 'member_count' => given_members, views: given_views)
1030
+ expect(band.reload.member_count).to eq [ member_count, given_members ].max
1031
+ expect(band.views).to eq [ views, given_views ].max
1082
1032
  end
1083
1033
  end
1084
1034
 
@@ -1106,25 +1056,27 @@ describe Mongoid::Contextual::Atomic do
1106
1056
  context 'when the named field does not yet exist on the document' do
1107
1057
  it 'sets the field to the argument' do
1108
1058
  context.send(max_method, new_field: 100)
1109
- expect(band.reload.new_field).to be == 100
1059
+ expect(band.reload.new_field).to eq 100
1110
1060
  end
1111
1061
  end
1112
1062
 
1113
1063
  context 'when arguments are dates/times' do
1114
1064
  it 'picks the earliest date' do
1115
1065
  context.send(max_method, founded: founded + 1)
1116
- expect(band.reload.founded).to be == founded + 1
1066
+ expect(band.reload.founded).to eq founded + 1
1117
1067
  end
1118
1068
  end
1119
1069
  end
1120
1070
 
1121
1071
  context 'as itself' do
1122
1072
  let(:max_method) { :set_max }
1073
+
1123
1074
  include_examples 'max-able comparisons'
1124
1075
  end
1125
1076
 
1126
1077
  context 'as #clamp_lower_bound' do
1127
1078
  let(:max_method) { :clamp_lower_bound }
1079
+
1128
1080
  include_examples 'max-able comparisons'
1129
1081
  end
1130
1082
  end