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,198 +1,181 @@
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::Criteria::Queryable::Selector do
7
-
8
- describe "merge!" do
9
-
6
+ describe 'merge!' do
10
7
  let(:selector) do
11
8
  described_class.new
12
9
  end
13
10
 
14
- context "when selector is nested" do
15
-
11
+ context 'when selector is nested' do
16
12
  before do
17
13
  selector[:field] = selection
18
14
  selector.merge!(other)
19
15
  end
20
16
 
21
17
  let(:selection) do
22
- { "$lt" => 50 }
18
+ { '$lt' => 50 }
23
19
  end
24
20
 
25
- context "when other contains same key with a hash" do
26
-
21
+ context 'when other contains same key with a hash' do
27
22
  let(:other) do
28
- { "field" => { "$gt" => 20 } }
23
+ { 'field' => { '$gt' => 20 } }
29
24
  end
30
25
 
31
- it "deep merges" do
32
- expect(selector['field']).to eq({"$lt"=>50, "$gt" => 20})
26
+ it 'deep merges' do
27
+ expect(selector['field']).to eq({ '$lt' => 50, '$gt' => 20 })
33
28
  end
34
29
  end
35
30
 
36
- context "when other contains same key without hash" do
37
-
31
+ context 'when other contains same key without hash' do
38
32
  let(:other) do
39
- { "field" => 10 }
33
+ { 'field' => 10 }
40
34
  end
41
35
 
42
- it "merges" do
36
+ it 'merges' do
43
37
  expect(selector['field']).to eq(10)
44
38
  end
45
39
  end
46
40
  end
47
41
 
48
- context "when selector contains a $nin string" do
49
-
42
+ context 'when selector contains a $nin string' do
50
43
  let(:initial) do
51
- { "$nin" => ["foo"] }
44
+ { '$nin' => [ 'foo' ] }
52
45
  end
53
46
 
54
47
  before do
55
- selector["field"] = initial
48
+ selector['field'] = initial
56
49
  end
57
50
 
58
- context "when merging in a new $nin" do
59
-
51
+ context 'when merging in a new $nin' do
60
52
  let(:other) do
61
- { "field" => { "$nin" => ["bar"] } }
53
+ { 'field' => { '$nin' => [ 'bar' ] } }
62
54
  end
63
55
 
64
56
  before do
65
57
  selector.merge!(other)
66
58
  end
67
59
 
68
- it "combines the two $nin queries into one" do
60
+ it 'combines the two $nin queries into one' do
69
61
  expect(selector).to eq({
70
- "field" => { "$nin" => ["foo", "bar"] }
71
- })
62
+ 'field' => { '$nin' => %w[foo bar] }
63
+ })
72
64
  end
73
65
  end
74
66
  end
75
67
 
76
- context "when selector contains a $nin symbol" do
77
-
68
+ context 'when selector contains a $nin symbol' do
78
69
  let(:initial) do
79
- { :$nin => ["foo"] }
70
+ { :$nin => [ 'foo' ] }
80
71
  end
81
72
 
82
73
  before do
83
- selector["field"] = initial
74
+ selector['field'] = initial
84
75
  end
85
76
 
86
- context "when merging in a new $nin" do
87
-
77
+ context 'when merging in a new $nin' do
88
78
  let(:other) do
89
- { "field" => { :$nin => ["bar"] } }
79
+ { 'field' => { :$nin => [ 'bar' ] } }
90
80
  end
91
81
 
92
82
  before do
93
83
  selector.merge!(other)
94
84
  end
95
85
 
96
- it "combines the two $nin queries into one" do
86
+ it 'combines the two $nin queries into one' do
97
87
  expect(selector).to eq({
98
- "field" => { :$nin => ["foo", "bar"] }
99
- })
88
+ 'field' => { :$nin => %w[foo bar] }
89
+ })
100
90
  end
101
91
  end
102
92
  end
103
93
 
104
- context "when selector contains a $in string" do
105
-
94
+ context 'when selector contains a $in string' do
106
95
  let(:initial) do
107
- { "$in" => [1, 2] }
96
+ { '$in' => [ 1, 2 ] }
108
97
  end
109
98
 
110
99
  before do
111
- selector["field"] = initial
100
+ selector['field'] = initial
112
101
  end
113
102
 
114
- context "when merging in a new $in with an intersecting value" do
115
-
103
+ context 'when merging in a new $in with an intersecting value' do
116
104
  let(:other) do
117
- { "field" => { "$in" => [1] } }
105
+ { 'field' => { '$in' => [ 1 ] } }
118
106
  end
119
107
 
120
108
  before do
121
109
  selector.merge!(other)
122
110
  end
123
111
 
124
- it "intersects the $in values" do
112
+ it 'intersects the $in values' do
125
113
  expect(selector).to eq({
126
- "field" => { "$in" => [1] }
114
+ 'field' => { '$in' => [ 1 ] }
127
115
  })
128
116
  end
129
117
  end
130
118
 
131
- context "when merging in a new $in with no intersecting values" do
132
-
119
+ context 'when merging in a new $in with no intersecting values' do
133
120
  let(:other) do
134
- { "field" => { "$in" => [3] } }
121
+ { 'field' => { '$in' => [ 3 ] } }
135
122
  end
136
123
 
137
124
  before do
138
125
  selector.merge!(other)
139
126
  end
140
127
 
141
- it "intersects the $in values" do
128
+ it 'intersects the $in values' do
142
129
  expect(selector).to eq({
143
- "field" => { "$in" => [] }
130
+ 'field' => { '$in' => [] }
144
131
  })
145
132
  end
146
133
  end
147
134
  end
148
135
 
149
- context "when selector contains a $in symbol" do
150
-
136
+ context 'when selector contains a $in symbol' do
151
137
  let(:initial) do
152
- { :$in => [1, 2] }
138
+ { :$in => [ 1, 2 ] }
153
139
  end
154
140
 
155
141
  before do
156
- selector["field"] = initial
142
+ selector['field'] = initial
157
143
  end
158
144
 
159
- context "when merging in a new $in with an intersecting value" do
160
-
145
+ context 'when merging in a new $in with an intersecting value' do
161
146
  let(:other) do
162
- { "field" => { :$in => [1] } }
147
+ { 'field' => { :$in => [ 1 ] } }
163
148
  end
164
149
 
165
150
  before do
166
151
  selector.merge!(other)
167
152
  end
168
153
 
169
- it "intersects the $in values" do
154
+ it 'intersects the $in values' do
170
155
  expect(selector).to eq({
171
- "field" => { :$in => [1] }
156
+ 'field' => { :$in => [ 1 ] }
172
157
  })
173
158
  end
174
159
  end
175
160
 
176
- context "when merging in a new $in with no intersecting values" do
177
-
161
+ context 'when merging in a new $in with no intersecting values' do
178
162
  let(:other) do
179
- { "field" => { :$in => [3] } }
163
+ { 'field' => { :$in => [ 3 ] } }
180
164
  end
181
165
 
182
166
  before do
183
167
  selector.merge!(other)
184
168
  end
185
169
 
186
- it "intersects the $in values" do
170
+ it 'intersects the $in values' do
187
171
  expect(selector).to eq({
188
- "field" => { :$in => [] }
172
+ 'field' => { :$in => [] }
189
173
  })
190
174
  end
191
175
  end
192
176
  end
193
177
 
194
- context "when selector is not nested" do
195
-
178
+ context 'when selector is not nested' do
196
179
  before do
197
180
  selector[:field] = selection
198
181
  selector.merge!(other)
@@ -203,16 +186,15 @@ describe Mongoid::Criteria::Queryable::Selector do
203
186
  end
204
187
 
205
188
  let(:other) do
206
- { "field" => { "$gt" => 20 } }
189
+ { 'field' => { '$gt' => 20 } }
207
190
  end
208
191
 
209
- it "merges" do
210
- expect(selector['field']).to eq({ "$gt" => 20 })
192
+ it 'merges' do
193
+ expect(selector['field']).to eq({ '$gt' => 20 })
211
194
  end
212
195
  end
213
196
 
214
197
  context 'when an object does not support the | operator' do
215
-
216
198
  before do
217
199
  selector['start'] = selection
218
200
  selector.merge!(other)
@@ -223,108 +205,104 @@ describe Mongoid::Criteria::Queryable::Selector do
223
205
  end
224
206
 
225
207
  let(:other) do
226
- { 'start' => selection, 'name' => 'test', }
208
+ { 'start' => selection, 'name' => 'test' }
227
209
  end
228
210
 
229
- it "merges" do
211
+ it 'merges' do
230
212
  expect(selector['name']).to eq('test')
231
213
  expect(selector['start']).to eq(selection)
232
214
  end
233
215
  end
234
216
 
235
- context "when the selector contains an $or" do
236
-
217
+ context 'when the selector contains an $or' do
237
218
  let(:initial) do
238
- [{ "value" => 1 }]
219
+ [ { 'value' => 1 } ]
239
220
  end
240
221
 
241
222
  before do
242
- selector["$or"] = initial
223
+ selector['$or'] = initial
243
224
  end
244
225
 
245
- context "when merging in a new $or" do
246
-
226
+ context 'when merging in a new $or' do
247
227
  let(:other) do
248
- [{ "value" => 2 }]
228
+ [ { 'value' => 2 } ]
249
229
  end
250
230
 
251
231
  before do
252
- selector.merge!({ "$or" => other })
232
+ selector.merge!({ '$or' => other })
253
233
  end
254
234
 
255
- it "combines the two $or queries into one" do
235
+ it 'combines the two $or queries into one' do
256
236
  expect(selector).to eq({
257
- "$or" => [{ "value" => 1 }, { "value" => 2 }]
258
- })
237
+ '$or' => [ { 'value' => 1 }, { 'value' => 2 } ]
238
+ })
259
239
  end
260
240
  end
261
241
  end
262
242
 
263
- context "when the selector contains an $and" do
264
-
243
+ context 'when the selector contains an $and' do
265
244
  let(:initial) do
266
- [{ "value" => 1 }]
245
+ [ { 'value' => 1 } ]
267
246
  end
268
247
 
269
248
  before do
270
- selector["$and"] = initial
249
+ selector['$and'] = initial
271
250
  end
272
251
 
273
- context "when merging in a new $and" do
274
-
252
+ context 'when merging in a new $and' do
275
253
  let(:other) do
276
- [{ "value" => 2 }]
254
+ [ { 'value' => 2 } ]
277
255
  end
278
256
 
279
257
  before do
280
- selector.merge!({ "$and" => other })
258
+ selector.merge!({ '$and' => other })
281
259
  end
282
260
 
283
- it "combines the two $and queries into one" do
261
+ it 'combines the two $and queries into one' do
284
262
  expect(selector).to eq({
285
- "$and" => [{ "value" => 1 }, { "value" => 2 }]
286
- })
263
+ '$and' => [ { 'value' => 1 }, { 'value' => 2 } ]
264
+ })
287
265
  end
288
266
  end
289
267
  end
290
268
 
291
- context "when the selector contains a $nor" do
292
-
269
+ context 'when the selector contains a $nor' do
293
270
  let(:initial) do
294
- [{ "value" => 1 }]
271
+ [ { 'value' => 1 } ]
295
272
  end
296
273
 
297
274
  before do
298
- selector["$nor"] = initial
275
+ selector['$nor'] = initial
299
276
  end
300
277
 
301
- context "when merging in a new $nor" do
302
-
278
+ context 'when merging in a new $nor' do
303
279
  let(:other) do
304
- [{ "value" => 2 }]
280
+ [ { 'value' => 2 } ]
305
281
  end
306
282
 
307
283
  before do
308
- selector.merge!({ "$nor" => other })
284
+ selector.merge!({ '$nor' => other })
309
285
  end
310
286
 
311
- it "combines the two $nor queries into one" do
287
+ it 'combines the two $nor queries into one' do
312
288
  expect(selector).to eq({
313
- "$nor" => initial + other
314
- })
289
+ '$nor' => initial + other
290
+ })
315
291
  end
316
292
  end
317
293
  end
318
294
  end
319
295
 
320
- describe "#__deep_copy__" do
321
-
296
+ describe '#__deep_copy__' do
322
297
  let(:value) do
323
298
  [ 1, 2, 3 ]
324
299
  end
300
+ let(:cloned) do
301
+ selector.__deep_copy__
302
+ end
325
303
 
326
304
  let(:selection) do
327
- { "$in" => value }
305
+ { '$in' => value }
328
306
  end
329
307
 
330
308
  let(:selector) do
@@ -335,46 +313,37 @@ describe Mongoid::Criteria::Queryable::Selector do
335
313
  selector[:field] = selection
336
314
  end
337
315
 
338
- let(:cloned) do
339
- selector.__deep_copy__
340
- end
341
-
342
- it "returns an equal copy" do
316
+ it 'returns an equal copy' do
343
317
  expect(cloned).to eq(selector)
344
318
  end
345
319
 
346
- it "performs a deep copy" do
347
- expect(cloned["field"]).to_not equal(selection)
320
+ it 'performs a deep copy' do
321
+ expect(cloned['field']).not_to equal(selection)
348
322
  end
349
323
 
350
- it "clones n levels deep" do
351
- expect(cloned["field"]["$in"]).to_not equal(value)
324
+ it 'clones n levels deep' do
325
+ expect(cloned['field']['$in']).not_to equal(value)
352
326
  end
353
327
  end
354
328
 
355
- [ :store, :[]= ].each do |method|
356
-
329
+ %i[store []=].each do |method|
357
330
  describe "##{method}" do
358
-
359
- context "when aliases are provided" do
360
-
361
- context "when the alias has no serializer" do
362
-
331
+ context 'when aliases are provided' do
332
+ context 'when the alias has no serializer' do
363
333
  let(:selector) do
364
- described_class.new({ "id" => "_id" })
334
+ described_class.new({ 'id' => '_id' })
365
335
  end
366
336
 
367
337
  before do
368
- selector.send(method, "id", 1)
338
+ selector.send(method, 'id', 1)
369
339
  end
370
340
 
371
- it "stores the field in the selector by database name" do
372
- expect(selector["_id"]).to eq(1)
341
+ it 'stores the field in the selector by database name' do
342
+ expect(selector['_id']).to eq(1)
373
343
  end
374
344
  end
375
345
 
376
- context "when the alias has a serializer" do
377
-
346
+ context 'when the alias has a serializer' do
378
347
  before(:all) do
379
348
  class Field
380
349
  def evolve(object)
@@ -393,64 +362,58 @@ describe Mongoid::Criteria::Queryable::Selector do
393
362
 
394
363
  let(:selector) do
395
364
  described_class.new(
396
- { "id" => "_id" }, { "_id" => Field.new }
365
+ { 'id' => '_id' }, { '_id' => Field.new }
397
366
  )
398
367
  end
399
368
 
400
- it "stores the serialized field in the selector by database name" do
401
- selector.send(method, "id", "1")
402
- expect(selector["_id"]).to eq(1)
369
+ it 'stores the serialized field in the selector by database name' do
370
+ selector.send(method, 'id', '1')
371
+ expect(selector['_id']).to eq(1)
403
372
  end
404
373
 
405
- it "stores the serialized field when selector is deeply nested" do
406
- selector.send(method, "$or", [{'$and' => [{'_id' => '5'}]}])
374
+ it 'stores the serialized field when selector is deeply nested' do
375
+ selector.send(method, '$or', [ { '$and' => [ { '_id' => '5' } ] } ])
407
376
  expect(selector['$or'][0]['$and'][0]['_id']).to eq(5)
408
377
  end
409
378
  end
410
379
  end
411
380
 
412
- context "when no serializers are provided" do
413
-
381
+ context 'when no serializers are provided' do
414
382
  let(:selector) do
415
383
  described_class.new
416
384
  end
417
385
 
418
- context "when provided a standard object" do
419
-
420
- context "when the keys are strings" do
421
-
422
- it "does not serialize values" do
423
- expect(selector.send(method, "key", "5")).to eq("5")
386
+ context 'when provided a standard object' do
387
+ context 'when the keys are strings' do
388
+ it 'does not serialize values' do
389
+ expect(selector.send(method, 'key', '5')).to eq('5')
424
390
  end
425
391
  end
426
392
 
427
- context "when the keys are symbols" do
428
-
429
- it "does not serialize values" do
430
- expect(selector.send(method, :key, "5")).to eq("5")
393
+ context 'when the keys are symbols' do
394
+ it 'does not serialize values' do
395
+ expect(selector.send(method, :key, '5')).to eq('5')
431
396
  end
432
397
  end
433
398
  end
434
399
 
435
- context "when provided a range" do
436
-
400
+ context 'when provided a range' do
437
401
  before do
438
- selector.send(method, "key", 1..3)
402
+ selector.send(method, 'key', 1..3)
439
403
  end
440
404
 
441
- it "serializes the range" do
442
- expect(selector["key"]).to eq({ "$gte" => 1, "$lte" => 3 })
405
+ it 'serializes the range' do
406
+ expect(selector['key']).to eq({ '$gte' => 1, '$lte' => 3 })
443
407
  end
444
408
  end
445
409
 
446
- context "when providing an array" do
447
-
410
+ context 'when providing an array' do
448
411
  let(:big_one) do
449
- BigDecimal("1.2321")
412
+ BigDecimal('1.2321')
450
413
  end
451
414
 
452
415
  let(:big_two) do
453
- BigDecimal("4.2222")
416
+ BigDecimal('4.2222')
454
417
  end
455
418
 
456
419
  let(:array) do
@@ -458,68 +421,64 @@ describe Mongoid::Criteria::Queryable::Selector do
458
421
  end
459
422
 
460
423
  before do
461
- selector.send(method, "key", array)
424
+ selector.send(method, 'key', array)
462
425
  end
463
426
 
464
427
  context 'when serializing bigdecimal to string' do
465
428
  config_override :map_big_decimal_to_decimal128, false
466
429
 
467
- it "serializes each element in the array" do
468
- expect(selector["key"]).to eq([ big_one.to_s, big_two.to_s ])
430
+ it 'serializes each element in the array' do
431
+ expect(selector['key']).to eq([ big_one.to_s, big_two.to_s ])
469
432
  end
470
433
  end
471
434
 
472
435
  context 'when serializing bigdecimal to decimal128' do
473
436
  config_override :map_big_decimal_to_decimal128, true
474
437
 
475
- it "serializes each element in the array" do
476
- expect(selector["key"]).to eq([ BSON::Decimal128.new(big_one), BSON::Decimal128.new(big_two)])
438
+ it 'serializes each element in the array' do
439
+ expect(selector['key']).to eq([ BSON::Decimal128.new(big_one), BSON::Decimal128.new(big_two) ])
477
440
  end
478
441
  end
479
442
  end
480
443
 
481
- context "when providing a Mongoid::RawValue" do
482
-
483
- context "and raw_value is a string" do
484
-
444
+ context 'when providing a Mongoid::RawValue' do
445
+ context 'and raw_value is a string' do
485
446
  before do
486
- selector.send(method, "key", Mongoid::RawValue("Foo"))
447
+ selector.send(method, 'key', Mongoid::RawValue('Foo'))
487
448
  end
488
449
 
489
- it "returns the raw_value" do
490
- expect(selector["key"]).to eq("Foo")
450
+ it 'returns the raw_value' do
451
+ expect(selector['key']).to eq('Foo')
491
452
  end
492
453
  end
493
454
 
494
- context "and raw_value cannot be converted by bson-ruby" do
495
-
455
+ context 'and raw_value cannot be converted by bson-ruby' do
496
456
  before do
497
- selector.send(method, "key", Mongoid::RawValue(4..5))
457
+ selector.send(method, 'key', Mongoid::RawValue(4..5))
498
458
  end
499
459
 
500
- it "returns the raw_value without conversion" do
501
- expect(selector["key"]).to eq(4..5)
460
+ it 'returns the raw_value without conversion' do
461
+ expect(selector['key']).to eq(4..5)
502
462
  end
503
463
  end
504
464
 
505
- context "and raw_value is a complex type" do
465
+ context 'and raw_value is a complex type' do
506
466
  config_override :map_big_decimal_to_decimal128, true
507
467
 
508
468
  before do
509
- selector.send(method, "key", Mongoid::RawValue([{ foo: 1, "Bar" => [/baz/, BigDecimal('2'), 4..5] }, 3]))
469
+ selector.send(method, 'key',
470
+ Mongoid::RawValue([ { foo: 1, 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ]))
510
471
  end
511
472
 
512
- it "returns the raw_value" do
513
- expect(selector["key"]).to eq([{ foo: 1, "Bar" => [/baz/, BigDecimal('2'), 4..5] }, 3])
473
+ it 'returns the raw_value' do
474
+ expect(selector['key']).to eq([ { foo: 1, 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ])
514
475
  end
515
476
  end
516
477
  end
517
478
  end
518
479
 
519
- context "when serializers are provided" do
520
-
521
- context "when the serializer is not localized" do
522
-
480
+ context 'when serializers are provided' do
481
+ context 'when the serializer is not localized' do
523
482
  before(:all) do
524
483
  class Field
525
484
  def evolve(object)
@@ -537,176 +496,153 @@ describe Mongoid::Criteria::Queryable::Selector do
537
496
  end
538
497
 
539
498
  let(:selector) do
540
- described_class.new({}, { "key" => Field.new })
499
+ described_class.new({}, { 'key' => Field.new })
541
500
  end
542
501
 
543
- context "when the criterion is simple" do
544
-
545
- context "when the key is a string" do
546
-
502
+ context 'when the criterion is simple' do
503
+ context 'when the key is a string' do
547
504
  before do
548
- selector.send(method, "key", "5")
505
+ selector.send(method, 'key', '5')
549
506
  end
550
507
 
551
- it "serializes the value" do
552
- expect(selector["key"]).to eq(5)
508
+ it 'serializes the value' do
509
+ expect(selector['key']).to eq(5)
553
510
  end
554
511
  end
555
512
 
556
- context "when the key is a symbol" do
557
-
513
+ context 'when the key is a symbol' do
558
514
  before do
559
- selector.send(method, :key, "5")
515
+ selector.send(method, :key, '5')
560
516
  end
561
517
 
562
- it "serializes the value" do
563
- expect(selector["key"]).to eq(5)
518
+ it 'serializes the value' do
519
+ expect(selector['key']).to eq(5)
564
520
  end
565
521
  end
566
522
  end
567
523
 
568
- context "when the criterion is complex" do
569
-
570
- context "when the field name is the key" do
571
-
572
- context "when the criterion is an array" do
573
-
574
- context "when the key is a string" do
575
-
524
+ context 'when the criterion is complex' do
525
+ context 'when the field name is the key' do
526
+ context 'when the criterion is an array' do
527
+ context 'when the key is a string' do
576
528
  before do
577
- selector.send(method, "key", [ "1", "2" ])
529
+ selector.send(method, 'key', %w[1 2])
578
530
  end
579
531
 
580
- it "serializes the value" do
581
- expect(selector["key"]).to eq([ 1, 2 ])
532
+ it 'serializes the value' do
533
+ expect(selector['key']).to eq([ 1, 2 ])
582
534
  end
583
535
  end
584
536
 
585
- context "when the key is a symbol" do
586
-
537
+ context 'when the key is a symbol' do
587
538
  before do
588
- selector.send(method, :key, [ "1", "2" ])
539
+ selector.send(method, :key, %w[1 2])
589
540
  end
590
541
 
591
- it "serializes the value" do
592
- expect(selector["key"]).to eq([ 1, 2 ])
542
+ it 'serializes the value' do
543
+ expect(selector['key']).to eq([ 1, 2 ])
593
544
  end
594
545
  end
595
546
  end
596
547
 
597
- context "when the criterion is a hash" do
598
-
599
- context "when the value is non enumerable" do
600
-
601
- context "when the key is a string" do
602
-
548
+ context 'when the criterion is a hash' do
549
+ context 'when the value is non enumerable' do
550
+ context 'when the key is a string' do
603
551
  before do
604
- selector.send(method, "key", { "$gt" => "5" })
552
+ selector.send(method, 'key', { '$gt' => '5' })
605
553
  end
606
554
 
607
- it "serializes the value" do
608
- expect(selector["key"]).to eq({ "$gt" => 5 })
555
+ it 'serializes the value' do
556
+ expect(selector['key']).to eq({ '$gt' => 5 })
609
557
  end
610
558
  end
611
559
 
612
- context "when the key is a symbol" do
613
-
560
+ context 'when the key is a symbol' do
614
561
  before do
615
- selector.send(method, :key, { "$gt" => "5" })
562
+ selector.send(method, :key, { '$gt' => '5' })
616
563
  end
617
564
 
618
- it "serializes the value" do
619
- expect(selector["key"]).to eq({ "$gt" => 5 })
565
+ it 'serializes the value' do
566
+ expect(selector['key']).to eq({ '$gt' => 5 })
620
567
  end
621
568
  end
622
569
  end
623
570
 
624
- context "when the value is enumerable" do
625
-
626
- context "when the key is a string" do
627
-
571
+ context 'when the value is enumerable' do
572
+ context 'when the key is a string' do
628
573
  before do
629
- selector.send(method, "key", { "$in" => [ "1", "2" ] })
574
+ selector.send(method, 'key', { '$in' => %w[1 2] })
630
575
  end
631
576
 
632
- it "serializes the value" do
633
- expect(selector["key"]).to eq({ "$in" => [ 1, 2 ] })
577
+ it 'serializes the value' do
578
+ expect(selector['key']).to eq({ '$in' => [ 1, 2 ] })
634
579
  end
635
580
  end
636
581
 
637
- context "when the key is a symbol" do
638
-
582
+ context 'when the key is a symbol' do
639
583
  before do
640
- selector.send(method, :key, { "$in" => [ "1", "2" ] })
584
+ selector.send(method, :key, { '$in' => %w[1 2] })
641
585
  end
642
586
 
643
- it "serializes the value" do
644
- expect(selector["key"]).to eq({ "$in" => [ 1, 2 ] })
587
+ it 'serializes the value' do
588
+ expect(selector['key']).to eq({ '$in' => [ 1, 2 ] })
645
589
  end
646
590
  end
647
591
  end
648
592
 
649
- [ "$and", "$or" ].each do |operator|
650
-
593
+ [ '$and', '$or' ].each do |operator|
651
594
  context "when the criterion is a #{operator}" do
652
-
653
- context "when the individual criteria are simple" do
654
-
655
- context "when the keys are strings" do
656
-
595
+ context 'when the individual criteria are simple' do
596
+ context 'when the keys are strings' do
657
597
  before do
658
- selector.send(method, operator, [{ "key" => "1" }])
598
+ selector.send(method, operator, [ { 'key' => '1' } ])
659
599
  end
660
600
 
661
- it "serializes the values" do
662
- expect(selector[operator]).to eq([{ "key" => 1 }])
601
+ it 'serializes the values' do
602
+ expect(selector[operator]).to eq([ { 'key' => 1 } ])
663
603
  end
664
604
  end
665
605
 
666
- context "when the keys are symbols" do
667
-
606
+ context 'when the keys are symbols' do
668
607
  before do
669
- selector.send(method, operator, [{ key: "1" }])
608
+ selector.send(method, operator, [ { key: '1' } ])
670
609
  end
671
610
 
672
- it "serializes the values" do
673
- expect(selector[operator]).to eq([{ "key" => 1 }])
611
+ it 'serializes the values' do
612
+ expect(selector[operator]).to eq([ { 'key' => 1 } ])
674
613
  end
675
614
  end
676
615
  end
677
616
 
678
- context "when the individual criteria are complex" do
679
-
680
- context "when the keys are strings" do
681
-
617
+ context 'when the individual criteria are complex' do
618
+ context 'when the keys are strings' do
682
619
  before do
683
620
  selector.send(
684
621
  method,
685
622
  operator,
686
- [{ "field" => "1" }, { "key" => { "$gt" => "2" }}]
623
+ [ { 'field' => '1' }, { 'key' => { '$gt' => '2' } } ]
687
624
  )
688
625
  end
689
626
 
690
- it "serializes the values" do
627
+ it 'serializes the values' do
691
628
  expect(selector[operator]).to eq(
692
- [{ "field" => "1" }, { "key" => { "$gt" => 2 }}]
629
+ [ { 'field' => '1' }, { 'key' => { '$gt' => 2 } } ]
693
630
  )
694
631
  end
695
632
  end
696
633
 
697
- context "when the keys are symbols" do
698
-
634
+ context 'when the keys are symbols' do
699
635
  before do
700
636
  selector.send(
701
637
  method,
702
638
  operator,
703
- [{ field: "1" }, { key: { "$gt" => "2" }}]
639
+ [ { field: '1' }, { key: { '$gt' => '2' } } ]
704
640
  )
705
641
  end
706
642
 
707
- it "serializes the values" do
643
+ it 'serializes the values' do
708
644
  expect(selector[operator]).to eq(
709
- [{ "field" => "1" }, { "key" => { "$gt" => 2 }}]
645
+ [ { 'field' => '1' }, { 'key' => { '$gt' => 2 } } ]
710
646
  )
711
647
  end
712
648
  end
@@ -715,60 +651,55 @@ describe Mongoid::Criteria::Queryable::Selector do
715
651
  end
716
652
  end
717
653
 
718
- context "when the criterion is a Mongoid::RawValue" do
719
-
720
- context "and raw_value is a serializable string" do
721
-
654
+ context 'when the criterion is a Mongoid::RawValue' do
655
+ context 'and raw_value is a serializable string' do
722
656
  before do
723
- selector.send(method, "key", Mongoid::RawValue("1"))
657
+ selector.send(method, 'key', Mongoid::RawValue('1'))
724
658
  end
725
659
 
726
- it "returns the raw_value" do
727
- expect(selector["key"]).to eq("1")
660
+ it 'returns the raw_value' do
661
+ expect(selector['key']).to eq('1')
728
662
  end
729
663
  end
730
664
 
731
- context "and raw_value is a serializable type" do
732
-
665
+ context 'and raw_value is a serializable type' do
733
666
  before do
734
- selector.send(method, "key", Mongoid::RawValue(BigDecimal('2')))
667
+ selector.send(method, 'key', Mongoid::RawValue(BigDecimal('2')))
735
668
  end
736
669
 
737
- it "returns the raw_value" do
738
- expect(selector["key"]).to eq(BigDecimal('2'))
670
+ it 'returns the raw_value' do
671
+ expect(selector['key']).to eq(BigDecimal('2'))
739
672
  end
740
673
  end
741
674
 
742
- context "and raw_value is a non-serializable string" do
743
-
675
+ context 'and raw_value is a non-serializable string' do
744
676
  before do
745
- selector.send(method, "key", Mongoid::RawValue("Foo"))
677
+ selector.send(method, 'key', Mongoid::RawValue('Foo'))
746
678
  end
747
679
 
748
- it "returns the raw_value" do
749
- expect(selector["key"]).to eq("Foo")
680
+ it 'returns the raw_value' do
681
+ expect(selector['key']).to eq('Foo')
750
682
  end
751
683
  end
752
684
 
753
- context "and raw_value cannot be converted by bson-ruby" do
754
-
685
+ context 'and raw_value cannot be converted by bson-ruby' do
755
686
  before do
756
- selector.send(method, "key", Mongoid::RawValue(4..5))
687
+ selector.send(method, 'key', Mongoid::RawValue(4..5))
757
688
  end
758
689
 
759
- it "returns the raw_value without conversion" do
760
- expect(selector["key"]).to eq(4..5)
690
+ it 'returns the raw_value without conversion' do
691
+ expect(selector['key']).to eq(4..5)
761
692
  end
762
693
  end
763
694
 
764
- context "and raw_value is a complex type" do
765
-
695
+ context 'and raw_value is a complex type' do
766
696
  before do
767
- selector.send(method, "key", Mongoid::RawValue([{ foo: "1", "Bar" => [/baz/, BigDecimal('2'), 4..5] }, 3]))
697
+ selector.send(method, 'key',
698
+ Mongoid::RawValue([ { foo: '1', 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ]))
768
699
  end
769
700
 
770
- it "returns the raw_value" do
771
- expect(selector["key"]).to eq([{ foo: "1", "Bar" => [/baz/, BigDecimal('2'), 4..5] }, 3])
701
+ it 'returns the raw_value' do
702
+ expect(selector['key']).to eq([ { foo: '1', 'Bar' => [ /baz/, BigDecimal('2'), 4..5 ] }, 3 ])
772
703
  end
773
704
  end
774
705
  end
@@ -776,7 +707,7 @@ describe Mongoid::Criteria::Queryable::Selector do
776
707
  end
777
708
  end
778
709
 
779
- context "when the serializer is localized" do
710
+ context 'when the serializer is localized' do
780
711
  with_default_i18n_configs
781
712
 
782
713
  before(:all) do
@@ -796,188 +727,165 @@ describe Mongoid::Criteria::Queryable::Selector do
796
727
  end
797
728
 
798
729
  let(:selector) do
799
- described_class.new({}, { "key" => Field.new })
730
+ described_class.new({}, { 'key' => Field.new })
800
731
  end
801
732
 
802
733
  before do
803
- ::I18n.locale = :de
734
+ I18n.locale = :de
804
735
  end
805
736
 
806
- context "when the criterion is simple" do
807
-
808
- context "when the key is a string" do
809
-
737
+ context 'when the criterion is simple' do
738
+ context 'when the key is a string' do
810
739
  before do
811
- selector.send(method, "key", "5")
740
+ selector.send(method, 'key', '5')
812
741
  end
813
742
 
814
- it "serializes the value" do
815
- expect(selector["key.de"]).to eq(5)
743
+ it 'serializes the value' do
744
+ expect(selector['key.de']).to eq(5)
816
745
  end
817
746
  end
818
747
 
819
- context "when the key is a symbol" do
820
-
748
+ context 'when the key is a symbol' do
821
749
  before do
822
- selector.send(method, :key, "5")
750
+ selector.send(method, :key, '5')
823
751
  end
824
752
 
825
- it "serializes the value" do
826
- expect(selector["key.de"]).to eq(5)
753
+ it 'serializes the value' do
754
+ expect(selector['key.de']).to eq(5)
827
755
  end
828
756
  end
829
757
  end
830
758
 
831
- context "when the criterion is complex" do
832
-
833
- context "when the field name is the key" do
834
-
835
- context "when the criterion is an array" do
836
-
837
- context "when the key is a string" do
838
-
759
+ context 'when the criterion is complex' do
760
+ context 'when the field name is the key' do
761
+ context 'when the criterion is an array' do
762
+ context 'when the key is a string' do
839
763
  before do
840
- selector.send(method, "key", [ "1", "2" ])
764
+ selector.send(method, 'key', %w[1 2])
841
765
  end
842
766
 
843
- it "serializes the value" do
844
- expect(selector["key.de"]).to eq([ 1, 2 ])
767
+ it 'serializes the value' do
768
+ expect(selector['key.de']).to eq([ 1, 2 ])
845
769
  end
846
770
  end
847
771
 
848
- context "when the key is a symbol" do
849
-
772
+ context 'when the key is a symbol' do
850
773
  before do
851
- selector.send(method, :key, [ "1", "2" ])
774
+ selector.send(method, :key, %w[1 2])
852
775
  end
853
776
 
854
- it "serializes the value" do
855
- expect(selector["key.de"]).to eq([ 1, 2 ])
777
+ it 'serializes the value' do
778
+ expect(selector['key.de']).to eq([ 1, 2 ])
856
779
  end
857
780
  end
858
781
  end
859
782
 
860
- context "when the criterion is a hash" do
861
-
862
- context "when the value is non enumerable" do
863
-
864
- context "when the key is a string" do
865
-
783
+ context 'when the criterion is a hash' do
784
+ context 'when the value is non enumerable' do
785
+ context 'when the key is a string' do
866
786
  let(:hash) do
867
- { "$gt" => "5" }
787
+ { '$gt' => '5' }
868
788
  end
869
789
 
870
790
  before do
871
- selector.send(method, "key", hash)
791
+ selector.send(method, 'key', hash)
872
792
  end
873
793
 
874
- it "serializes the value" do
875
- expect(selector["key.de"]).to eq({ "$gt" => 5 })
794
+ it 'serializes the value' do
795
+ expect(selector['key.de']).to eq({ '$gt' => 5 })
876
796
  end
877
797
 
878
- it "sets the same hash instance" do
879
- expect(selector["key.de"]).to equal(hash)
798
+ it 'sets the same hash instance' do
799
+ expect(selector['key.de']).to equal(hash)
880
800
  end
881
801
  end
882
802
 
883
- context "when the key is a symbol" do
884
-
803
+ context 'when the key is a symbol' do
885
804
  before do
886
- selector.send(method, :key, { "$gt" => "5" })
805
+ selector.send(method, :key, { '$gt' => '5' })
887
806
  end
888
807
 
889
- it "serializes the value" do
890
- expect(selector["key.de"]).to eq({ "$gt" => 5 })
808
+ it 'serializes the value' do
809
+ expect(selector['key.de']).to eq({ '$gt' => 5 })
891
810
  end
892
811
  end
893
812
  end
894
813
 
895
- context "when the value is enumerable" do
896
-
897
- context "when the key is a string" do
898
-
814
+ context 'when the value is enumerable' do
815
+ context 'when the key is a string' do
899
816
  before do
900
- selector.send(method, "key", { "$in" => [ "1", "2" ] })
817
+ selector.send(method, 'key', { '$in' => %w[1 2] })
901
818
  end
902
819
 
903
- it "serializes the value" do
904
- expect(selector["key.de"]).to eq({ "$in" => [ 1, 2 ] })
820
+ it 'serializes the value' do
821
+ expect(selector['key.de']).to eq({ '$in' => [ 1, 2 ] })
905
822
  end
906
823
  end
907
824
 
908
- context "when the key is a symbol" do
909
-
825
+ context 'when the key is a symbol' do
910
826
  before do
911
- selector.send(method, :key, { "$in" => [ "1", "2" ] })
827
+ selector.send(method, :key, { '$in' => %w[1 2] })
912
828
  end
913
829
 
914
- it "serializes the value" do
915
- expect(selector["key.de"]).to eq({ "$in" => [ 1, 2 ] })
830
+ it 'serializes the value' do
831
+ expect(selector['key.de']).to eq({ '$in' => [ 1, 2 ] })
916
832
  end
917
833
  end
918
834
  end
919
835
 
920
- [ "$and", "$or" ].each do |operator|
921
-
836
+ [ '$and', '$or' ].each do |operator|
922
837
  context "when the criterion is a #{operator}" do
923
-
924
- context "when the individual criteria are simple" do
925
-
926
- context "when the keys are strings" do
927
-
838
+ context 'when the individual criteria are simple' do
839
+ context 'when the keys are strings' do
928
840
  before do
929
- selector.send(method, operator, [{ "key" => "1" }])
841
+ selector.send(method, operator, [ { 'key' => '1' } ])
930
842
  end
931
843
 
932
- it "serializes the values" do
933
- expect(selector[operator]).to eq([{ "key.de" => 1 }])
844
+ it 'serializes the values' do
845
+ expect(selector[operator]).to eq([ { 'key.de' => 1 } ])
934
846
  end
935
847
  end
936
848
 
937
- context "when the keys are symbols" do
938
-
849
+ context 'when the keys are symbols' do
939
850
  before do
940
- selector.send(method, operator, [{ key: "1" }])
851
+ selector.send(method, operator, [ { key: '1' } ])
941
852
  end
942
853
 
943
- it "serializes the values" do
944
- expect(selector[operator]).to eq([{ "key.de" => 1 }])
854
+ it 'serializes the values' do
855
+ expect(selector[operator]).to eq([ { 'key.de' => 1 } ])
945
856
  end
946
857
  end
947
858
  end
948
859
 
949
- context "when the individual criteria are complex" do
950
-
951
- context "when the keys are strings" do
952
-
860
+ context 'when the individual criteria are complex' do
861
+ context 'when the keys are strings' do
953
862
  before do
954
863
  selector.send(
955
864
  method,
956
865
  operator,
957
- [{ "field" => "1" }, { "key" => { "$gt" => "2" }}]
866
+ [ { 'field' => '1' }, { 'key' => { '$gt' => '2' } } ]
958
867
  )
959
868
  end
960
869
 
961
- it "serializes the values" do
870
+ it 'serializes the values' do
962
871
  expect(selector[operator]).to eq(
963
- [{ "field" => "1" }, { "key.de" => { "$gt" => 2 }}]
872
+ [ { 'field' => '1' }, { 'key.de' => { '$gt' => 2 } } ]
964
873
  )
965
874
  end
966
875
  end
967
876
 
968
- context "when the keys are symbols" do
969
-
877
+ context 'when the keys are symbols' do
970
878
  before do
971
879
  selector.send(
972
880
  method,
973
881
  operator,
974
- [{ field: "1" }, { key: { "$gt" => "2" }}]
882
+ [ { field: '1' }, { key: { '$gt' => '2' } } ]
975
883
  )
976
884
  end
977
885
 
978
- it "serializes the values" do
886
+ it 'serializes the values' do
979
887
  expect(selector[operator]).to eq(
980
- [{ "field" => "1" }, { "key.de" => { "$gt" => 2 }}]
888
+ [ { 'field' => '1' }, { 'key.de' => { '$gt' => 2 } } ]
981
889
  )
982
890
  end
983
891
  end
@@ -992,41 +900,37 @@ describe Mongoid::Criteria::Queryable::Selector do
992
900
  end
993
901
  end
994
902
 
995
- describe "#to_pipeline" do
996
-
903
+ describe '#to_pipeline' do
997
904
  let(:selector) do
998
905
  described_class.new
999
906
  end
1000
907
 
1001
- context "when the selector is empty" do
1002
-
908
+ context 'when the selector is empty' do
1003
909
  let(:pipeline) do
1004
910
  selector.to_pipeline
1005
911
  end
1006
912
 
1007
- it "returns an empty array" do
913
+ it 'returns an empty array' do
1008
914
  expect(pipeline).to be_empty
1009
915
  end
1010
916
  end
1011
917
 
1012
- context "when the selector is not empty" do
1013
-
918
+ context 'when the selector is not empty' do
1014
919
  before do
1015
- selector["name"] = "test"
920
+ selector['name'] = 'test'
1016
921
  end
1017
922
 
1018
923
  let(:pipeline) do
1019
924
  selector.to_pipeline
1020
925
  end
1021
926
 
1022
- it "returns the selector in a $match entry" do
1023
- expect(pipeline).to eq([{ "$match" => { "name" => "test" }}])
927
+ it 'returns the selector in a $match entry' do
928
+ expect(pipeline).to eq([ { '$match' => { 'name' => 'test' } } ])
1024
929
  end
1025
930
  end
1026
931
  end
1027
932
 
1028
933
  describe '#multi_selection?' do
1029
-
1030
934
  let(:selector) do
1031
935
  described_class.new
1032
936
  end