mongoid 8.1.10 → 9.0.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 (1035) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -9
  5. data/Rakefile +63 -45
  6. data/lib/config/locales/en.yml +66 -5
  7. data/lib/mongoid/association/accessors.rb +16 -20
  8. data/lib/mongoid/association/bindable.rb +27 -8
  9. data/lib/mongoid/association/builders.rb +3 -2
  10. data/lib/mongoid/association/constrainable.rb +1 -0
  11. data/lib/mongoid/association/depending.rb +16 -1
  12. data/lib/mongoid/association/eager.rb +160 -0
  13. data/lib/mongoid/association/eager_loadable.rb +15 -7
  14. data/lib/mongoid/association/embedded/batchable.rb +6 -7
  15. data/lib/mongoid/association/embedded/cyclic.rb +1 -0
  16. data/lib/mongoid/association/embedded/eager.rb +23 -0
  17. data/lib/mongoid/association/embedded/embedded_in/binding.rb +5 -4
  18. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +1 -0
  19. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +21 -7
  20. data/lib/mongoid/association/embedded/embedded_in.rb +7 -0
  21. data/lib/mongoid/association/embedded/embeds_many/binding.rb +3 -2
  22. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -0
  23. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +134 -144
  24. data/lib/mongoid/association/embedded/embeds_many.rb +1 -0
  25. data/lib/mongoid/association/embedded/embeds_one/binding.rb +3 -2
  26. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -0
  27. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +112 -54
  28. data/lib/mongoid/association/embedded/embeds_one.rb +1 -0
  29. data/lib/mongoid/association/embedded.rb +2 -0
  30. data/lib/mongoid/association/macros.rb +17 -14
  31. data/lib/mongoid/association/many.rb +1 -0
  32. data/lib/mongoid/association/marshalable.rb +4 -0
  33. data/lib/mongoid/association/nested/many.rb +8 -3
  34. data/lib/mongoid/association/nested/nested_buildable.rb +32 -0
  35. data/lib/mongoid/association/nested/one.rb +6 -3
  36. data/lib/mongoid/association/nested.rb +1 -0
  37. data/lib/mongoid/association/one.rb +1 -0
  38. data/lib/mongoid/association/options.rb +9 -2
  39. data/lib/mongoid/association/proxy.rb +30 -18
  40. data/lib/mongoid/association/referenced/auto_save.rb +6 -2
  41. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  42. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -0
  43. data/lib/mongoid/association/referenced/belongs_to/eager.rb +2 -1
  44. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +19 -14
  45. data/lib/mongoid/association/referenced/belongs_to.rb +2 -1
  46. data/lib/mongoid/association/referenced/counter_cache.rb +7 -2
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +15 -3
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +1 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -1
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +132 -94
  51. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +8 -3
  52. data/lib/mongoid/association/referenced/has_many/binding.rb +1 -0
  53. data/lib/mongoid/association/referenced/has_many/buildable.rb +1 -0
  54. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -1
  55. data/lib/mongoid/association/referenced/has_many/enumerable.rb +43 -27
  56. data/lib/mongoid/association/referenced/has_many/proxy.rb +131 -104
  57. data/lib/mongoid/association/referenced/has_many.rb +2 -1
  58. data/lib/mongoid/association/referenced/has_one/binding.rb +1 -0
  59. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -0
  60. data/lib/mongoid/association/referenced/has_one/eager.rb +3 -3
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +37 -28
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -1
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -6
  64. data/lib/mongoid/association/referenced.rb +1 -0
  65. data/lib/mongoid/association/reflections.rb +5 -4
  66. data/lib/mongoid/association/relatable.rb +10 -4
  67. data/lib/mongoid/association.rb +5 -0
  68. data/lib/mongoid/atomic/modifiers.rb +1 -0
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +2 -1
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -0
  71. data/lib/mongoid/atomic/paths/embedded.rb +1 -0
  72. data/lib/mongoid/atomic/paths/root.rb +1 -0
  73. data/lib/mongoid/atomic/paths.rb +1 -0
  74. data/lib/mongoid/atomic.rb +23 -62
  75. data/lib/mongoid/atomic_update_preparer.rb +88 -0
  76. data/lib/mongoid/attributes/dynamic.rb +1 -0
  77. data/lib/mongoid/attributes/embedded.rb +34 -0
  78. data/lib/mongoid/attributes/nested.rb +3 -2
  79. data/lib/mongoid/attributes/processing.rb +11 -10
  80. data/lib/mongoid/attributes/projector.rb +1 -0
  81. data/lib/mongoid/attributes/readonly.rb +4 -8
  82. data/lib/mongoid/attributes.rb +6 -4
  83. data/lib/mongoid/cacheable.rb +2 -1
  84. data/lib/mongoid/changeable.rb +58 -49
  85. data/lib/mongoid/clients/factory.rb +37 -1
  86. data/lib/mongoid/clients/options.rb +113 -3
  87. data/lib/mongoid/clients/sessions.rb +245 -64
  88. data/lib/mongoid/clients/storage_options.rb +37 -1
  89. data/lib/mongoid/clients/validators/storage.rb +1 -0
  90. data/lib/mongoid/clients/validators.rb +1 -0
  91. data/lib/mongoid/clients.rb +36 -4
  92. data/lib/mongoid/collection_configurable.rb +1 -0
  93. data/lib/mongoid/composable.rb +5 -0
  94. data/lib/mongoid/config/defaults.rb +16 -36
  95. data/lib/mongoid/config/encryption.rb +213 -0
  96. data/lib/mongoid/config/environment.rb +2 -5
  97. data/lib/mongoid/config/introspection.rb +152 -0
  98. data/lib/mongoid/config/options.rb +8 -3
  99. data/lib/mongoid/config/validators/async_query_executor.rb +12 -2
  100. data/lib/mongoid/config/validators/client.rb +1 -0
  101. data/lib/mongoid/config/validators/option.rb +1 -0
  102. data/lib/mongoid/config/validators.rb +1 -0
  103. data/lib/mongoid/config.rb +57 -91
  104. data/lib/mongoid/contextual/aggregable/memory.rb +1 -0
  105. data/lib/mongoid/contextual/aggregable/mongo.rb +2 -5
  106. data/lib/mongoid/contextual/aggregable/none.rb +1 -0
  107. data/lib/mongoid/contextual/aggregable.rb +1 -0
  108. data/lib/mongoid/contextual/atomic.rb +98 -11
  109. data/lib/mongoid/contextual/command.rb +3 -0
  110. data/lib/mongoid/contextual/map_reduce.rb +6 -0
  111. data/lib/mongoid/contextual/memory.rb +45 -42
  112. data/lib/mongoid/contextual/mongo/documents_loader.rb +3 -2
  113. data/lib/mongoid/contextual/mongo.rb +32 -60
  114. data/lib/mongoid/contextual/none.rb +15 -32
  115. data/lib/mongoid/contextual/queryable.rb +4 -0
  116. data/lib/mongoid/contextual.rb +4 -0
  117. data/lib/mongoid/copyable.rb +3 -2
  118. data/lib/mongoid/criteria/findable.rb +44 -4
  119. data/lib/mongoid/criteria/includable.rb +5 -4
  120. data/lib/mongoid/criteria/inspectable.rb +4 -0
  121. data/lib/mongoid/criteria/marshalable.rb +4 -0
  122. data/lib/mongoid/criteria/modifiable.rb +5 -0
  123. data/lib/mongoid/criteria/options.rb +1 -0
  124. data/lib/mongoid/criteria/permission.rb +5 -0
  125. data/lib/mongoid/criteria/queryable/aggregable.rb +1 -0
  126. data/lib/mongoid/criteria/queryable/expandable.rb +1 -0
  127. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -1
  128. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -5
  129. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -1
  130. data/lib/mongoid/criteria/queryable/extensions/date.rb +4 -3
  131. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +2 -1
  132. data/lib/mongoid/criteria/queryable/extensions/hash.rb +2 -1
  133. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +2 -1
  134. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -16
  135. data/lib/mongoid/criteria/queryable/extensions/object.rb +4 -1
  136. data/lib/mongoid/criteria/queryable/extensions/range.rb +2 -1
  137. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +7 -1
  138. data/lib/mongoid/criteria/queryable/extensions/set.rb +2 -1
  139. data/lib/mongoid/criteria/queryable/extensions/string.rb +15 -3
  140. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +2 -1
  141. data/lib/mongoid/criteria/queryable/extensions/time.rb +2 -1
  142. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  143. data/lib/mongoid/criteria/queryable/extensions.rb +1 -0
  144. data/lib/mongoid/criteria/queryable/key.rb +10 -0
  145. data/lib/mongoid/criteria/queryable/macroable.rb +1 -0
  146. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -0
  147. data/lib/mongoid/criteria/queryable/optional.rb +1 -0
  148. data/lib/mongoid/criteria/queryable/options.rb +1 -0
  149. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -0
  150. data/lib/mongoid/criteria/queryable/selectable.rb +12 -27
  151. data/lib/mongoid/criteria/queryable/selector.rb +5 -2
  152. data/lib/mongoid/criteria/queryable/smash.rb +1 -0
  153. data/lib/mongoid/criteria/queryable/storable.rb +4 -3
  154. data/lib/mongoid/criteria/queryable.rb +1 -0
  155. data/lib/mongoid/criteria/scopable.rb +5 -0
  156. data/lib/mongoid/criteria/translator.rb +1 -0
  157. data/lib/mongoid/criteria.rb +37 -10
  158. data/lib/mongoid/deprecable.rb +1 -0
  159. data/lib/mongoid/deprecation.rb +8 -4
  160. data/lib/mongoid/document.rb +171 -125
  161. data/lib/mongoid/encryptable.rb +53 -0
  162. data/lib/mongoid/equality.rb +2 -22
  163. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -0
  164. data/lib/mongoid/errors/attribute_not_loaded.rb +34 -0
  165. data/lib/mongoid/errors/callback.rb +1 -0
  166. data/lib/mongoid/errors/create_collection_failure.rb +1 -0
  167. data/lib/mongoid/errors/criteria_argument_required.rb +1 -0
  168. data/lib/mongoid/errors/delete_restriction.rb +1 -0
  169. data/lib/mongoid/errors/document_not_destroyed.rb +1 -0
  170. data/lib/mongoid/errors/document_not_found.rb +1 -0
  171. data/lib/mongoid/errors/drop_collection_failure.rb +1 -0
  172. data/lib/mongoid/errors/empty_config_file.rb +1 -0
  173. data/lib/mongoid/errors/immutable_attribute.rb +1 -0
  174. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -0
  175. data/lib/mongoid/errors/invalid_async_query_executor.rb +1 -0
  176. data/lib/mongoid/errors/invalid_auto_encryption_configuration.rb +33 -0
  177. data/lib/mongoid/errors/invalid_collection.rb +1 -0
  178. data/lib/mongoid/errors/invalid_config_file.rb +1 -0
  179. data/lib/mongoid/errors/invalid_config_option.rb +1 -0
  180. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -0
  181. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +1 -0
  182. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +1 -0
  183. data/lib/mongoid/errors/invalid_elem_match_operator.rb +1 -0
  184. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +6 -4
  185. data/lib/mongoid/errors/invalid_estimated_count_scoping.rb +27 -0
  186. data/lib/mongoid/errors/invalid_expression_operator.rb +1 -0
  187. data/lib/mongoid/errors/invalid_field.rb +1 -0
  188. data/lib/mongoid/errors/invalid_field_operator.rb +1 -0
  189. data/lib/mongoid/errors/invalid_field_option.rb +1 -0
  190. data/lib/mongoid/errors/invalid_field_type.rb +1 -0
  191. data/lib/mongoid/errors/invalid_find.rb +1 -0
  192. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +1 -0
  193. data/lib/mongoid/errors/invalid_includes.rb +1 -0
  194. data/lib/mongoid/errors/invalid_index.rb +1 -0
  195. data/lib/mongoid/errors/invalid_options.rb +1 -0
  196. data/lib/mongoid/errors/invalid_path.rb +1 -0
  197. data/lib/mongoid/errors/invalid_persistence_option.rb +1 -0
  198. data/lib/mongoid/errors/invalid_query.rb +1 -0
  199. data/lib/mongoid/errors/invalid_relation.rb +1 -0
  200. data/lib/mongoid/errors/invalid_relation_option.rb +1 -0
  201. data/lib/mongoid/errors/invalid_scope.rb +1 -0
  202. data/lib/mongoid/errors/invalid_session_nesting.rb +17 -0
  203. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +1 -1
  204. data/lib/mongoid/errors/invalid_storage_options.rb +1 -0
  205. data/lib/mongoid/errors/invalid_time.rb +1 -0
  206. data/lib/mongoid/errors/invalid_transaction_nesting.rb +17 -0
  207. data/lib/mongoid/errors/inverse_not_found.rb +1 -0
  208. data/lib/mongoid/errors/mixed_client_configuration.rb +1 -0
  209. data/lib/mongoid/errors/mixed_relations.rb +1 -0
  210. data/lib/mongoid/errors/mongoid_error.rb +4 -3
  211. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -0
  212. data/lib/mongoid/errors/no_client_config.rb +1 -0
  213. data/lib/mongoid/errors/no_client_database.rb +1 -0
  214. data/lib/mongoid/errors/no_client_hosts.rb +1 -0
  215. data/lib/mongoid/errors/no_clients_config.rb +1 -0
  216. data/lib/mongoid/errors/no_default_client.rb +1 -0
  217. data/lib/mongoid/errors/no_environment.rb +1 -0
  218. data/lib/mongoid/errors/no_map_reduce_output.rb +1 -0
  219. data/lib/mongoid/errors/no_metadata.rb +1 -0
  220. data/lib/mongoid/errors/no_parent.rb +1 -0
  221. data/lib/mongoid/errors/readonly_attribute.rb +1 -0
  222. data/lib/mongoid/errors/readonly_document.rb +1 -0
  223. data/lib/mongoid/errors/rollback.rb +15 -0
  224. data/lib/mongoid/errors/scope_overwrite.rb +1 -0
  225. data/lib/mongoid/errors/sessions_not_supported.rb +17 -0
  226. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -0
  227. data/lib/mongoid/errors/transaction_error.rb +25 -0
  228. data/lib/mongoid/errors/transactions_not_supported.rb +17 -0
  229. data/lib/mongoid/errors/unknown_attribute.rb +1 -0
  230. data/lib/mongoid/errors/unknown_model.rb +1 -0
  231. data/lib/mongoid/errors/unsaved_document.rb +1 -0
  232. data/lib/mongoid/errors/unsupported_javascript.rb +1 -0
  233. data/lib/mongoid/errors/validations.rb +1 -0
  234. data/lib/mongoid/errors.rb +10 -1
  235. data/lib/mongoid/evolvable.rb +1 -0
  236. data/lib/mongoid/extensions/array.rb +10 -24
  237. data/lib/mongoid/extensions/big_decimal.rb +14 -6
  238. data/lib/mongoid/extensions/binary.rb +3 -0
  239. data/lib/mongoid/extensions/boolean.rb +3 -0
  240. data/lib/mongoid/extensions/date.rb +7 -2
  241. data/lib/mongoid/extensions/date_time.rb +4 -6
  242. data/lib/mongoid/extensions/decimal128.rb +3 -0
  243. data/lib/mongoid/extensions/false_class.rb +5 -2
  244. data/lib/mongoid/extensions/float.rb +4 -1
  245. data/lib/mongoid/extensions/hash.rb +21 -143
  246. data/lib/mongoid/extensions/integer.rb +6 -1
  247. data/lib/mongoid/extensions/module.rb +4 -1
  248. data/lib/mongoid/extensions/nil_class.rb +5 -2
  249. data/lib/mongoid/extensions/object.rb +23 -35
  250. data/lib/mongoid/extensions/object_id.rb +3 -0
  251. data/lib/mongoid/extensions/range.rb +9 -6
  252. data/lib/mongoid/extensions/raw_value.rb +34 -0
  253. data/lib/mongoid/extensions/regexp.rb +3 -0
  254. data/lib/mongoid/extensions/set.rb +13 -2
  255. data/lib/mongoid/extensions/string.rb +18 -10
  256. data/lib/mongoid/extensions/symbol.rb +5 -0
  257. data/lib/mongoid/extensions/time.rb +7 -19
  258. data/lib/mongoid/extensions/time_with_zone.rb +6 -2
  259. data/lib/mongoid/extensions/true_class.rb +5 -2
  260. data/lib/mongoid/extensions.rb +2 -32
  261. data/lib/mongoid/factory.rb +134 -40
  262. data/lib/mongoid/fields/encrypted.rb +48 -0
  263. data/lib/mongoid/fields/foreign_key.rb +29 -3
  264. data/lib/mongoid/fields/localized.rb +6 -0
  265. data/lib/mongoid/fields/standard.rb +5 -0
  266. data/lib/mongoid/fields/validators/macro.rb +3 -1
  267. data/lib/mongoid/fields/validators.rb +1 -0
  268. data/lib/mongoid/fields.rb +41 -46
  269. data/lib/mongoid/findable.rb +2 -2
  270. data/lib/mongoid/indexable/specification.rb +55 -19
  271. data/lib/mongoid/indexable/validators/options.rb +1 -0
  272. data/lib/mongoid/indexable.rb +1 -0
  273. data/lib/mongoid/inspectable.rb +32 -0
  274. data/lib/mongoid/interceptable.rb +18 -8
  275. data/lib/mongoid/loadable.rb +83 -0
  276. data/lib/mongoid/loggable.rb +1 -0
  277. data/lib/mongoid/matchable.rb +1 -0
  278. data/lib/mongoid/matcher/all.rb +15 -0
  279. data/lib/mongoid/matcher/and.rb +14 -0
  280. data/lib/mongoid/matcher/bits.rb +19 -0
  281. data/lib/mongoid/matcher/bits_all_clear.rb +21 -0
  282. data/lib/mongoid/matcher/bits_all_set.rb +21 -0
  283. data/lib/mongoid/matcher/bits_any_clear.rb +21 -0
  284. data/lib/mongoid/matcher/bits_any_set.rb +21 -0
  285. data/lib/mongoid/matcher/elem_match.rb +15 -0
  286. data/lib/mongoid/matcher/elem_match_expression.rb +14 -2
  287. data/lib/mongoid/matcher/eq.rb +15 -0
  288. data/lib/mongoid/matcher/eq_impl.rb +33 -16
  289. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +14 -2
  290. data/lib/mongoid/matcher/exists.rb +15 -0
  291. data/lib/mongoid/matcher/expression.rb +13 -0
  292. data/lib/mongoid/matcher/expression_operator.rb +14 -0
  293. data/lib/mongoid/matcher/field_expression.rb +15 -0
  294. data/lib/mongoid/matcher/field_operator.rb +24 -0
  295. data/lib/mongoid/matcher/gt.rb +15 -0
  296. data/lib/mongoid/matcher/gte.rb +15 -0
  297. data/lib/mongoid/matcher/in.rb +15 -0
  298. data/lib/mongoid/matcher/lt.rb +15 -0
  299. data/lib/mongoid/matcher/lte.rb +15 -0
  300. data/lib/mongoid/matcher/mod.rb +16 -0
  301. data/lib/mongoid/matcher/ne.rb +15 -0
  302. data/lib/mongoid/matcher/nin.rb +15 -0
  303. data/lib/mongoid/matcher/nor.rb +14 -0
  304. data/lib/mongoid/matcher/not.rb +16 -0
  305. data/lib/mongoid/matcher/or.rb +14 -0
  306. data/lib/mongoid/matcher/regex.rb +24 -0
  307. data/lib/mongoid/matcher/size.rb +16 -0
  308. data/lib/mongoid/matcher/type.rb +25 -0
  309. data/lib/mongoid/matcher.rb +5 -15
  310. data/lib/mongoid/persistable/creatable.rb +14 -9
  311. data/lib/mongoid/persistable/deletable.rb +7 -2
  312. data/lib/mongoid/persistable/destroyable.rb +34 -7
  313. data/lib/mongoid/persistable/incrementable.rb +2 -1
  314. data/lib/mongoid/persistable/logical.rb +1 -0
  315. data/lib/mongoid/persistable/maxable.rb +37 -0
  316. data/lib/mongoid/persistable/minable.rb +37 -0
  317. data/lib/mongoid/persistable/multipliable.rb +36 -0
  318. data/lib/mongoid/persistable/poppable.rb +1 -0
  319. data/lib/mongoid/persistable/pullable.rb +1 -0
  320. data/lib/mongoid/persistable/pushable.rb +1 -0
  321. data/lib/mongoid/persistable/renamable.rb +1 -0
  322. data/lib/mongoid/persistable/savable.rb +1 -0
  323. data/lib/mongoid/persistable/settable.rb +1 -0
  324. data/lib/mongoid/persistable/unsettable.rb +1 -0
  325. data/lib/mongoid/persistable/updatable.rb +37 -18
  326. data/lib/mongoid/persistable/upsertable.rb +20 -7
  327. data/lib/mongoid/persistable.rb +11 -1
  328. data/lib/mongoid/persistence_context.rb +46 -6
  329. data/lib/mongoid/positional.rb +1 -0
  330. data/lib/mongoid/railtie.rb +24 -1
  331. data/lib/mongoid/railties/bson_object_id_serializer.rb +39 -0
  332. data/lib/mongoid/railties/console_sandbox.rb +42 -0
  333. data/lib/mongoid/railties/controller_runtime.rb +20 -4
  334. data/lib/mongoid/railties/database.rake +12 -0
  335. data/lib/mongoid/reloadable.rb +38 -30
  336. data/lib/mongoid/scopable.rb +19 -23
  337. data/lib/mongoid/search_indexable.rb +167 -0
  338. data/lib/mongoid/selectable.rb +1 -0
  339. data/lib/mongoid/serializable.rb +8 -7
  340. data/lib/mongoid/shardable.rb +1 -0
  341. data/lib/mongoid/stateful.rb +9 -3
  342. data/lib/mongoid/stringified_symbol.rb +19 -6
  343. data/lib/mongoid/tasks/database.rake +13 -0
  344. data/lib/mongoid/tasks/database.rb +63 -0
  345. data/lib/mongoid/tasks/encryption.rake +59 -0
  346. data/lib/mongoid/tasks/encryption.rb +108 -0
  347. data/lib/mongoid/threaded/lifecycle.rb +1 -0
  348. data/lib/mongoid/threaded.rb +94 -30
  349. data/lib/mongoid/timestamps/created/short.rb +1 -0
  350. data/lib/mongoid/timestamps/created.rb +5 -11
  351. data/lib/mongoid/timestamps/short.rb +1 -0
  352. data/lib/mongoid/timestamps/timeless.rb +29 -0
  353. data/lib/mongoid/timestamps/updated/short.rb +1 -0
  354. data/lib/mongoid/timestamps/updated.rb +2 -1
  355. data/lib/mongoid/timestamps.rb +1 -0
  356. data/lib/mongoid/touchable.rb +154 -49
  357. data/lib/mongoid/traversable.rb +127 -122
  358. data/lib/mongoid/utils.rb +32 -2
  359. data/lib/mongoid/validatable/associated.rb +4 -6
  360. data/lib/mongoid/validatable/format.rb +1 -0
  361. data/lib/mongoid/validatable/length.rb +1 -0
  362. data/lib/mongoid/validatable/localizable.rb +1 -0
  363. data/lib/mongoid/validatable/macros.rb +5 -0
  364. data/lib/mongoid/validatable/presence.rb +1 -0
  365. data/lib/mongoid/validatable/queryable.rb +9 -0
  366. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  367. data/lib/mongoid/validatable.rb +3 -2
  368. data/lib/mongoid/version.rb +2 -1
  369. data/lib/mongoid/warnings.rb +9 -16
  370. data/lib/mongoid.rb +38 -5
  371. data/lib/rails/generators/mongoid/config/config_generator.rb +17 -3
  372. data/lib/rails/generators/mongoid/config/templates/mongoid.rb +25 -0
  373. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +36 -62
  374. data/lib/rails/generators/mongoid/model/model_generator.rb +4 -0
  375. data/lib/rails/generators/mongoid_generator.rb +13 -0
  376. data/lib/rails/mongoid.rb +4 -29
  377. data/spec/config/mongoid.yml +0 -1
  378. data/spec/integration/active_job_spec.rb +32 -0
  379. data/spec/integration/app_spec.rb +72 -52
  380. data/spec/integration/associations/belongs_to_spec.rb +1 -0
  381. data/spec/integration/associations/embedded_dirty_spec.rb +1 -0
  382. data/spec/integration/associations/embedded_spec.rb +75 -6
  383. data/spec/integration/associations/embeds_many_spec.rb +1 -0
  384. data/spec/integration/associations/embeds_one_spec.rb +1 -0
  385. data/spec/integration/associations/foreign_key_spec.rb +1 -0
  386. data/spec/integration/associations/foreign_key_spec_models.rb +1 -0
  387. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +1 -0
  388. data/spec/integration/associations/has_many_spec.rb +1 -0
  389. data/spec/integration/associations/has_one_spec.rb +1 -0
  390. data/spec/integration/associations/nested_attributes_assignment_spec.rb +1 -0
  391. data/spec/integration/associations/reverse_population_spec.rb +1 -0
  392. data/spec/integration/associations/reverse_population_spec_models.rb +1 -0
  393. data/spec/integration/associations/scope_option_spec.rb +1 -0
  394. data/spec/integration/atomic/modifiers_spec.rb +1 -0
  395. data/spec/integration/bson_regexp_raw_spec.rb +1 -0
  396. data/spec/integration/callbacks_models.rb +3 -2
  397. data/spec/integration/callbacks_spec.rb +2 -1
  398. data/spec/integration/contextual/empty_spec.rb +1 -0
  399. data/spec/integration/criteria/alias_query_spec.rb +25 -88
  400. data/spec/integration/criteria/date_field_spec.rb +1 -0
  401. data/spec/integration/criteria/default_scope_spec.rb +1 -0
  402. data/spec/integration/criteria/logical_spec.rb +10 -28
  403. data/spec/integration/criteria/range_spec.rb +1 -2
  404. data/spec/integration/criteria/raw_value_spec.rb +525 -0
  405. data/spec/integration/criteria/time_with_zone_spec.rb +1 -0
  406. data/spec/integration/discriminator_key_spec.rb +1 -0
  407. data/spec/integration/discriminator_value_spec.rb +1 -0
  408. data/spec/integration/document_spec.rb +1 -0
  409. data/spec/integration/dots_and_dollars_spec.rb +1 -0
  410. data/spec/integration/encryption_spec.rb +100 -0
  411. data/spec/integration/i18n_fallbacks_spec.rb +7 -33
  412. data/spec/integration/matcher_examples_spec.rb +1 -0
  413. data/spec/integration/matcher_operator_data/bits_all_clear.yml +0 -15
  414. data/spec/integration/matcher_operator_data/bits_all_set.yml +0 -15
  415. data/spec/integration/matcher_operator_data/bits_any_clear.yml +0 -15
  416. data/spec/integration/matcher_operator_data/bits_any_set.yml +0 -15
  417. data/spec/integration/matcher_operator_data/size.yml +0 -3
  418. data/spec/integration/matcher_operator_data/type.yml +0 -6
  419. data/spec/integration/matcher_operator_data/type_array.yml +0 -1
  420. data/spec/integration/matcher_operator_data/type_decimal.yml +0 -4
  421. data/spec/integration/matcher_operator_spec.rb +1 -0
  422. data/spec/integration/matcher_spec.rb +21 -66
  423. data/spec/integration/persistence/range_field_spec.rb +1 -0
  424. data/spec/integration/server_query_spec.rb +1 -0
  425. data/spec/integration/shardable_spec.rb +1 -0
  426. data/spec/integration/stringified_symbol_field_spec.rb +1 -0
  427. data/spec/lite_spec_helper.rb +36 -10
  428. data/spec/mongoid/association/accessors_spec.rb +11 -28
  429. data/spec/mongoid/association/auto_save_spec.rb +1 -0
  430. data/spec/mongoid/association/builders_spec.rb +1 -0
  431. data/spec/mongoid/association/constrainable_spec.rb +1 -0
  432. data/spec/mongoid/association/counter_cache_spec.rb +1 -0
  433. data/spec/mongoid/association/depending_spec.rb +1 -0
  434. data/spec/mongoid/association/eager_spec.rb +52 -24
  435. data/spec/mongoid/association/embedded/cyclic_spec.rb +1 -0
  436. data/spec/mongoid/association/embedded/dirty_spec.rb +1 -0
  437. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +1 -0
  438. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +1 -0
  439. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +1 -0
  440. data/spec/mongoid/association/embedded/embedded_in_spec.rb +19 -7
  441. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +1 -0
  442. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +1 -0
  443. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +1 -0
  444. data/spec/mongoid/association/embedded/embeds_many_models.rb +17 -2
  445. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -7
  446. data/spec/mongoid/association/embedded/embeds_many_spec.rb +1 -0
  447. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +1 -0
  448. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +1 -0
  449. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +1 -0
  450. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +1 -0
  451. data/spec/mongoid/association/embedded/embeds_one_models.rb +6 -1
  452. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +2 -1
  453. data/spec/mongoid/association/embedded/embeds_one_spec.rb +1 -0
  454. data/spec/mongoid/association/macros_spec.rb +1 -0
  455. data/spec/mongoid/association/nested/many_spec.rb +1 -0
  456. data/spec/mongoid/association/nested/one_spec.rb +1 -0
  457. data/spec/mongoid/association/options_spec.rb +1 -0
  458. data/spec/mongoid/association/polymorphic_spec.rb +1 -0
  459. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +1 -0
  460. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +1 -0
  461. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +1 -0
  462. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -4
  463. data/spec/mongoid/association/referenced/belongs_to_models.rb +1 -0
  464. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +2 -1
  465. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1 -0
  466. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +2 -1
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +1 -0
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +1 -0
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -31
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +1 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +2 -1
  473. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1 -0
  474. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -0
  475. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +1 -0
  476. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +1 -0
  477. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  479. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +1085 -2002
  480. data/spec/mongoid/association/referenced/has_many_models.rb +1 -0
  481. data/spec/mongoid/association/referenced/has_many_query_spec.rb +2 -1
  482. data/spec/mongoid/association/referenced/has_many_spec.rb +1 -0
  483. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +1 -0
  484. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +1 -0
  485. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +1 -0
  486. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +1 -0
  487. data/spec/mongoid/association/referenced/has_one_models.rb +1 -0
  488. data/spec/mongoid/association/referenced/has_one_query_spec.rb +2 -1
  489. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -0
  490. data/spec/mongoid/association/reflections_spec.rb +1 -0
  491. data/spec/mongoid/association/syncable_spec.rb +1 -0
  492. data/spec/mongoid/association_spec.rb +1 -60
  493. data/spec/mongoid/atomic/modifiers_spec.rb +1 -0
  494. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +1 -0
  495. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +1 -0
  496. data/spec/mongoid/atomic/paths/root_spec.rb +1 -0
  497. data/spec/mongoid/atomic/paths_spec.rb +1 -0
  498. data/spec/mongoid/atomic_spec.rb +1 -0
  499. data/spec/mongoid/atomic_update_preparer_spec.rb +83 -0
  500. data/spec/mongoid/attributes/dynamic_spec.rb +1 -0
  501. data/spec/mongoid/attributes/embedded_spec.rb +118 -0
  502. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  503. data/spec/mongoid/attributes/nested_spec_models.rb +1 -0
  504. data/spec/mongoid/attributes/projector_spec.rb +1 -0
  505. data/spec/mongoid/attributes/readonly_spec.rb +1 -19
  506. data/spec/mongoid/attributes_spec.rb +18 -35
  507. data/spec/mongoid/cacheable_spec.rb +1 -0
  508. data/spec/mongoid/changeable_spec.rb +4 -3
  509. data/spec/mongoid/clients/factory_spec.rb +77 -0
  510. data/spec/mongoid/clients/options_spec.rb +9 -5
  511. data/spec/mongoid/clients/sessions_spec.rb +27 -10
  512. data/spec/mongoid/clients/transactions_spec.rb +958 -185
  513. data/spec/mongoid/clients/transactions_spec_models.rb +159 -0
  514. data/spec/mongoid/clients_spec.rb +47 -2
  515. data/spec/mongoid/collection_configurable_spec.rb +1 -0
  516. data/spec/mongoid/composable_spec.rb +1 -0
  517. data/spec/mongoid/config/defaults_spec.rb +31 -92
  518. data/spec/mongoid/config/encryption_spec.rb +152 -0
  519. data/spec/mongoid/config/environment_spec.rb +13 -41
  520. data/spec/mongoid/config/introspection_spec.rb +114 -0
  521. data/spec/mongoid/config/options_spec.rb +1 -0
  522. data/spec/mongoid/config_spec.rb +20 -133
  523. data/spec/mongoid/contextual/aggregable/memory_spec.rb +1 -0
  524. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +1 -0
  525. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +5 -29
  526. data/spec/mongoid/contextual/aggregable/none_spec.rb +3 -14
  527. data/spec/mongoid/contextual/atomic_spec.rb +203 -12
  528. data/spec/mongoid/contextual/map_reduce_spec.rb +1 -0
  529. data/spec/mongoid/contextual/memory_spec.rb +364 -534
  530. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +10 -3
  531. data/spec/mongoid/contextual/mongo_spec.rb +101 -277
  532. data/spec/mongoid/contextual/none_spec.rb +1 -0
  533. data/spec/mongoid/copyable_spec.rb +1 -0
  534. data/spec/mongoid/copyable_spec_models.rb +1 -0
  535. data/spec/mongoid/criteria/findable_spec.rb +191 -0
  536. data/spec/mongoid/criteria/includable_spec.rb +1 -0
  537. data/spec/mongoid/criteria/includable_spec_models.rb +1 -0
  538. data/spec/mongoid/criteria/inspectable_spec.rb +1 -0
  539. data/spec/mongoid/criteria/marshalable_spec.rb +3 -2
  540. data/spec/mongoid/criteria/modifiable_spec.rb +1 -0
  541. data/spec/mongoid/criteria/options_spec.rb +1 -0
  542. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -0
  543. data/spec/mongoid/criteria/queryable/expandable_spec.rb +1 -0
  544. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +1 -0
  545. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +8 -7
  546. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -0
  547. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +21 -11
  548. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +1 -0
  549. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +1 -0
  550. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +1 -0
  551. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +1 -0
  552. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +1 -0
  553. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +1 -0
  554. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +1 -0
  555. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +1 -0
  556. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +1 -11
  557. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +1 -11
  558. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +1 -0
  559. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +48 -66
  560. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +5 -0
  561. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +1 -0
  562. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +1 -0
  563. data/spec/mongoid/criteria/queryable/key_spec.rb +1 -0
  564. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +1 -0
  565. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -0
  566. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -0
  567. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +1 -0
  568. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -0
  569. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +4 -3
  570. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +1 -0
  571. data/spec/mongoid/criteria/queryable/selectable_spec.rb +51 -214
  572. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +1 -0
  573. data/spec/mongoid/criteria/queryable/selector_spec.rb +96 -0
  574. data/spec/mongoid/criteria/queryable/smash_spec.rb +1 -0
  575. data/spec/mongoid/criteria/queryable/storable_spec.rb +10 -32
  576. data/spec/mongoid/criteria/scopable_spec.rb +1 -0
  577. data/spec/mongoid/criteria/translator_spec.rb +1 -0
  578. data/spec/mongoid/criteria_projection_spec.rb +6 -5
  579. data/spec/mongoid/criteria_spec.rb +221 -359
  580. data/spec/mongoid/document_fields_spec.rb +1 -0
  581. data/spec/mongoid/document_persistence_context_spec.rb +77 -0
  582. data/spec/mongoid/document_query_spec.rb +5 -4
  583. data/spec/mongoid/document_spec.rb +3 -148
  584. data/spec/mongoid/equality_spec.rb +41 -149
  585. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +1 -0
  586. data/spec/mongoid/errors/attribute_not_loaded_spec.rb +32 -0
  587. data/spec/mongoid/errors/callback_spec.rb +1 -0
  588. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -0
  589. data/spec/mongoid/errors/document_not_destroyed_spec.rb +1 -0
  590. data/spec/mongoid/errors/document_not_found_spec.rb +1 -0
  591. data/spec/mongoid/errors/invalid_collection_spec.rb +1 -0
  592. data/spec/mongoid/errors/invalid_config_file_spec.rb +1 -0
  593. data/spec/mongoid/errors/invalid_config_option_spec.rb +1 -0
  594. data/spec/mongoid/errors/invalid_field_option_spec.rb +1 -0
  595. data/spec/mongoid/errors/invalid_field_spec.rb +1 -0
  596. data/spec/mongoid/errors/invalid_field_type_spec.rb +1 -0
  597. data/spec/mongoid/errors/invalid_find_spec.rb +1 -0
  598. data/spec/mongoid/errors/invalid_includes_spec.rb +1 -0
  599. data/spec/mongoid/errors/invalid_index_spec.rb +1 -0
  600. data/spec/mongoid/errors/invalid_options_spec.rb +1 -0
  601. data/spec/mongoid/errors/invalid_path_spec.rb +1 -0
  602. data/spec/mongoid/errors/invalid_relation_spec.rb +1 -0
  603. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -0
  604. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +1 -0
  605. data/spec/mongoid/errors/invalid_storage_options_spec.rb +1 -0
  606. data/spec/mongoid/errors/invalid_time_spec.rb +1 -0
  607. data/spec/mongoid/errors/inverse_not_found_spec.rb +1 -0
  608. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +1 -0
  609. data/spec/mongoid/errors/mixed_relations_spec.rb +1 -0
  610. data/spec/mongoid/errors/mongoid_error_spec.rb +9 -22
  611. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +1 -0
  612. data/spec/mongoid/errors/no_client_config_spec.rb +1 -0
  613. data/spec/mongoid/errors/no_client_database_spec.rb +1 -0
  614. data/spec/mongoid/errors/no_client_hosts_spec.rb +1 -0
  615. data/spec/mongoid/errors/no_clients_config_spec.rb +1 -0
  616. data/spec/mongoid/errors/no_environment_spec.rb +1 -0
  617. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +1 -0
  618. data/spec/mongoid/errors/no_metadata_spec.rb +1 -0
  619. data/spec/mongoid/errors/no_parent_spec.rb +1 -0
  620. data/spec/mongoid/errors/readonly_attribute_spec.rb +1 -0
  621. data/spec/mongoid/errors/readonly_document_spec.rb +1 -0
  622. data/spec/mongoid/errors/scope_overwrite_spec.rb +1 -0
  623. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -0
  624. data/spec/mongoid/errors/unknown_attribute_spec.rb +1 -0
  625. data/spec/mongoid/errors/unsaved_document_spec.rb +1 -0
  626. data/spec/mongoid/errors/unsupported_javascript_spec.rb +1 -0
  627. data/spec/mongoid/errors/validations_spec.rb +1 -0
  628. data/spec/mongoid/extensions/array_spec.rb +3 -262
  629. data/spec/mongoid/extensions/big_decimal_spec.rb +5 -4
  630. data/spec/mongoid/extensions/binary_spec.rb +1 -0
  631. data/spec/mongoid/extensions/boolean_spec.rb +1 -0
  632. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +8 -7
  633. data/spec/mongoid/extensions/date_spec.rb +3 -20
  634. data/spec/mongoid/extensions/date_time_spec.rb +3 -9
  635. data/spec/mongoid/extensions/decimal128_spec.rb +1 -0
  636. data/spec/mongoid/extensions/false_class_spec.rb +1 -7
  637. data/spec/mongoid/extensions/float_spec.rb +3 -9
  638. data/spec/mongoid/extensions/hash_spec.rb +19 -222
  639. data/spec/mongoid/extensions/integer_spec.rb +3 -8
  640. data/spec/mongoid/extensions/module_spec.rb +1 -0
  641. data/spec/mongoid/extensions/nil_class_spec.rb +1 -0
  642. data/spec/mongoid/extensions/object_id_spec.rb +1 -0
  643. data/spec/mongoid/extensions/object_spec.rb +1 -176
  644. data/spec/mongoid/extensions/range_spec.rb +1 -11
  645. data/spec/mongoid/extensions/raw_value_spec.rb +67 -0
  646. data/spec/mongoid/extensions/regexp_spec.rb +1 -0
  647. data/spec/mongoid/extensions/set_spec.rb +2 -3
  648. data/spec/mongoid/extensions/string_spec.rb +3 -113
  649. data/spec/mongoid/extensions/stringified_symbol_spec.rb +1 -0
  650. data/spec/mongoid/extensions/symbol_spec.rb +1 -31
  651. data/spec/mongoid/extensions/time_spec.rb +32 -350
  652. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -30
  653. data/spec/mongoid/extensions/true_class_spec.rb +1 -7
  654. data/spec/mongoid/factory_spec.rb +1 -0
  655. data/spec/mongoid/fields/foreign_key_spec.rb +282 -119
  656. data/spec/mongoid/fields/localized_spec.rb +1 -0
  657. data/spec/mongoid/fields/standard_spec.rb +1 -0
  658. data/spec/mongoid/fields_spec.rb +60 -66
  659. data/spec/mongoid/findable_spec.rb +2 -61
  660. data/spec/mongoid/indexable/specification_spec.rb +132 -13
  661. data/spec/mongoid/indexable_spec.rb +323 -9
  662. data/spec/mongoid/inspectable_spec.rb +81 -0
  663. data/spec/mongoid/interceptable_spec.rb +3 -82
  664. data/spec/mongoid/interceptable_spec_models.rb +112 -47
  665. data/spec/mongoid/loading_spec.rb +110 -0
  666. data/spec/mongoid/loggable_spec.rb +1 -0
  667. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -0
  668. data/spec/mongoid/mongoizable_spec.rb +1 -0
  669. data/spec/mongoid/monkey_patches_spec.rb +211 -0
  670. data/spec/mongoid/persistable/creatable_spec.rb +1 -0
  671. data/spec/mongoid/persistable/deletable_spec.rb +78 -31
  672. data/spec/mongoid/persistable/destroyable_spec.rb +230 -52
  673. data/spec/mongoid/persistable/incrementable_spec.rb +1 -0
  674. data/spec/mongoid/persistable/logical_spec.rb +1 -0
  675. data/spec/mongoid/persistable/maxable_spec.rb +147 -0
  676. data/spec/mongoid/persistable/minable_spec.rb +147 -0
  677. data/spec/mongoid/persistable/multipliable_spec.rb +227 -0
  678. data/spec/mongoid/persistable/poppable_spec.rb +1 -0
  679. data/spec/mongoid/persistable/pullable_spec.rb +1 -0
  680. data/spec/mongoid/persistable/pushable_spec.rb +1 -0
  681. data/spec/mongoid/persistable/renamable_spec.rb +1 -0
  682. data/spec/mongoid/persistable/savable_spec.rb +2 -6
  683. data/spec/mongoid/persistable/settable_spec.rb +5 -4
  684. data/spec/mongoid/persistable/unsettable_spec.rb +1 -0
  685. data/spec/mongoid/persistable/updatable_spec.rb +3 -2
  686. data/spec/mongoid/persistable/upsertable_spec.rb +34 -1
  687. data/spec/mongoid/persistable_spec.rb +1 -0
  688. data/spec/mongoid/persistence_context_spec.rb +1 -0
  689. data/spec/mongoid/positional_spec.rb +1 -0
  690. data/spec/mongoid/railties/bson_object_id_serializer_spec.rb +24 -0
  691. data/spec/mongoid/railties/console_sandbox_spec.rb +44 -0
  692. data/spec/mongoid/relations/proxy_spec.rb +1 -0
  693. data/spec/mongoid/reloadable_spec.rb +28 -83
  694. data/spec/mongoid/scopable_spec.rb +39 -50
  695. data/spec/mongoid/search_indexable_spec.rb +147 -0
  696. data/spec/mongoid/selectable_spec.rb +1 -0
  697. data/spec/mongoid/serializable_spec.rb +10 -16
  698. data/spec/mongoid/shardable_models.rb +1 -0
  699. data/spec/mongoid/shardable_spec.rb +1 -0
  700. data/spec/mongoid/stateful_spec.rb +1 -0
  701. data/spec/mongoid/tasks/database_rake_spec.rb +127 -49
  702. data/spec/mongoid/tasks/database_spec.rb +48 -1
  703. data/spec/mongoid/tasks/encryption_spec.rb +187 -0
  704. data/spec/mongoid/threaded_spec.rb +38 -0
  705. data/spec/mongoid/timestamps/created/short_spec.rb +1 -0
  706. data/spec/mongoid/timestamps/created_spec.rb +1 -23
  707. data/spec/mongoid/timestamps/timeless_spec.rb +1 -0
  708. data/spec/mongoid/timestamps/updated/short_spec.rb +1 -0
  709. data/spec/mongoid/timestamps/updated_spec.rb +1 -0
  710. data/spec/mongoid/timestamps_spec.rb +1 -0
  711. data/spec/mongoid/timestamps_spec_models.rb +1 -0
  712. data/spec/mongoid/touchable_spec.rb +490 -62
  713. data/spec/mongoid/touchable_spec_models.rb +96 -1
  714. data/spec/mongoid/traversable_spec.rb +1 -0
  715. data/spec/mongoid/validatable/associated_spec.rb +5 -14
  716. data/spec/mongoid/validatable/format_spec.rb +1 -0
  717. data/spec/mongoid/validatable/length_spec.rb +1 -0
  718. data/spec/mongoid/validatable/numericality_spec.rb +1 -0
  719. data/spec/mongoid/validatable/presence_spec.rb +1 -0
  720. data/spec/mongoid/validatable/uniqueness_spec.rb +48 -3
  721. data/spec/mongoid/validatable_spec.rb +1 -0
  722. data/spec/mongoid/warnings_spec.rb +1 -0
  723. data/spec/mongoid_spec.rb +27 -0
  724. data/spec/rails/controller_extension/controller_runtime_spec.rb +1 -0
  725. data/spec/rails/mongoid_spec.rb +26 -117
  726. data/spec/shared/LICENSE +20 -0
  727. data/spec/shared/bin/get-mongodb-download-url +17 -0
  728. data/spec/shared/bin/s3-copy +45 -0
  729. data/spec/shared/bin/s3-upload +69 -0
  730. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  731. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  732. data/spec/shared/lib/mrss/constraints.rb +378 -0
  733. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  734. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  735. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  736. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  737. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  738. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  739. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  740. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  741. data/spec/shared/lib/mrss/utils.rb +37 -0
  742. data/spec/shared/share/Dockerfile.erb +281 -0
  743. data/spec/shared/share/haproxy-1.conf +16 -0
  744. data/spec/shared/share/haproxy-2.conf +17 -0
  745. data/spec/shared/shlib/config.sh +27 -0
  746. data/spec/shared/shlib/distro.sh +74 -0
  747. data/spec/shared/shlib/server.sh +417 -0
  748. data/spec/shared/shlib/set_env.sh +146 -0
  749. data/spec/spec_helper.rb +26 -28
  750. data/spec/support/authorization.rb +1 -0
  751. data/spec/support/client_registry.rb +1 -0
  752. data/spec/support/constraints.rb +1 -0
  753. data/spec/support/crypt/models.rb +50 -0
  754. data/spec/support/crypt.rb +80 -0
  755. data/spec/support/expectations.rb +1 -0
  756. data/spec/support/feature_sandbox.rb +72 -0
  757. data/spec/support/helpers.rb +1 -0
  758. data/spec/support/immutable_ids.rb +22 -21
  759. data/spec/support/macros.rb +4 -6
  760. data/spec/support/models/account.rb +1 -0
  761. data/spec/support/models/acolyte.rb +1 -0
  762. data/spec/support/models/actor.rb +1 -0
  763. data/spec/support/models/actress.rb +1 -0
  764. data/spec/support/models/address.rb +3 -0
  765. data/spec/support/models/address_component.rb +1 -0
  766. data/spec/support/models/address_number.rb +1 -0
  767. data/spec/support/models/agency.rb +1 -0
  768. data/spec/support/models/agent.rb +1 -0
  769. data/spec/support/models/album.rb +1 -0
  770. data/spec/support/models/alert.rb +1 -0
  771. data/spec/support/models/animal.rb +1 -0
  772. data/spec/support/models/answer.rb +1 -0
  773. data/spec/support/models/appointment.rb +1 -0
  774. data/spec/support/models/armrest.rb +1 -0
  775. data/spec/support/models/array_field.rb +1 -0
  776. data/spec/support/models/article.rb +1 -0
  777. data/spec/support/models/artist.rb +1 -0
  778. data/spec/support/models/artwork.rb +1 -0
  779. data/spec/support/models/audible_sound.rb +1 -0
  780. data/spec/support/models/audio.rb +1 -0
  781. data/spec/support/models/augmentation.rb +1 -0
  782. data/spec/support/models/author.rb +1 -0
  783. data/spec/support/models/baby.rb +1 -0
  784. data/spec/support/models/band.rb +5 -1
  785. data/spec/support/models/bar.rb +1 -0
  786. data/spec/support/models/basic.rb +1 -0
  787. data/spec/support/models/bed.rb +1 -0
  788. data/spec/support/models/big_palette.rb +1 -0
  789. data/spec/support/models/birthday.rb +1 -0
  790. data/spec/support/models/bolt.rb +1 -0
  791. data/spec/support/models/bomb.rb +1 -0
  792. data/spec/support/models/book.rb +1 -0
  793. data/spec/support/models/breed.rb +1 -0
  794. data/spec/support/models/browser.rb +1 -0
  795. data/spec/support/models/building.rb +1 -0
  796. data/spec/support/models/building_address.rb +1 -0
  797. data/spec/support/models/bus.rb +1 -0
  798. data/spec/support/models/business.rb +1 -0
  799. data/spec/support/models/callback_test.rb +1 -0
  800. data/spec/support/models/canvas.rb +1 -0
  801. data/spec/support/models/car.rb +1 -0
  802. data/spec/support/models/cat.rb +1 -0
  803. data/spec/support/models/catalog.rb +1 -0
  804. data/spec/support/models/category.rb +1 -0
  805. data/spec/support/models/child.rb +1 -0
  806. data/spec/support/models/child_doc.rb +1 -0
  807. data/spec/support/models/church.rb +1 -0
  808. data/spec/support/models/circle.rb +1 -0
  809. data/spec/support/models/circuit.rb +1 -0
  810. data/spec/support/models/circus.rb +1 -0
  811. data/spec/support/models/code.rb +1 -0
  812. data/spec/support/models/coding/pull_request.rb +1 -0
  813. data/spec/support/models/coding.rb +1 -0
  814. data/spec/support/models/comment.rb +1 -0
  815. data/spec/support/models/company.rb +1 -0
  816. data/spec/support/models/consumption_period.rb +1 -0
  817. data/spec/support/models/contextable_item.rb +1 -0
  818. data/spec/support/models/contractor.rb +1 -0
  819. data/spec/support/models/cookie.rb +1 -0
  820. data/spec/support/models/country_code.rb +1 -0
  821. data/spec/support/models/courier_job.rb +1 -0
  822. data/spec/support/models/cover.rb +1 -0
  823. data/spec/support/models/crate.rb +1 -0
  824. data/spec/support/models/customer.rb +1 -0
  825. data/spec/support/models/customer_address.rb +1 -0
  826. data/spec/support/models/deed.rb +1 -0
  827. data/spec/support/models/definition.rb +1 -0
  828. data/spec/support/models/delegating_patient.rb +1 -0
  829. data/spec/support/models/description.rb +1 -0
  830. data/spec/support/models/dictionary.rb +1 -0
  831. data/spec/support/models/division.rb +1 -0
  832. data/spec/support/models/doctor.rb +1 -0
  833. data/spec/support/models/dog.rb +1 -0
  834. data/spec/support/models/dokument.rb +1 -0
  835. data/spec/support/models/draft.rb +1 -0
  836. data/spec/support/models/dragon.rb +1 -0
  837. data/spec/support/models/driver.rb +1 -0
  838. data/spec/support/models/drug.rb +1 -0
  839. data/spec/support/models/dungeon.rb +1 -0
  840. data/spec/support/models/edit.rb +1 -0
  841. data/spec/support/models/email.rb +1 -0
  842. data/spec/support/models/employer.rb +1 -0
  843. data/spec/support/models/entry.rb +1 -0
  844. data/spec/support/models/eraser.rb +1 -0
  845. data/spec/support/models/even.rb +1 -0
  846. data/spec/support/models/event.rb +1 -0
  847. data/spec/support/models/exhibition.rb +1 -0
  848. data/spec/support/models/exhibitor.rb +1 -0
  849. data/spec/support/models/explosion.rb +1 -0
  850. data/spec/support/models/eye.rb +1 -0
  851. data/spec/support/models/eye_bowl.rb +1 -0
  852. data/spec/support/models/face.rb +1 -0
  853. data/spec/support/models/fanatic.rb +1 -0
  854. data/spec/support/models/favorite.rb +8 -1
  855. data/spec/support/models/filesystem.rb +1 -0
  856. data/spec/support/models/fire_hydrant.rb +1 -0
  857. data/spec/support/models/firefox.rb +1 -0
  858. data/spec/support/models/fish.rb +1 -0
  859. data/spec/support/models/folder.rb +1 -0
  860. data/spec/support/models/folder_item.rb +1 -0
  861. data/spec/support/models/fruits.rb +1 -0
  862. data/spec/support/models/game.rb +1 -0
  863. data/spec/support/models/ghost.rb +1 -0
  864. data/spec/support/models/guitar.rb +1 -0
  865. data/spec/support/models/hole.rb +1 -0
  866. data/spec/support/models/home.rb +1 -0
  867. data/spec/support/models/house.rb +1 -0
  868. data/spec/support/models/html_writer.rb +1 -0
  869. data/spec/support/models/id_key.rb +1 -0
  870. data/spec/support/models/idnodef.rb +1 -0
  871. data/spec/support/models/image.rb +1 -0
  872. data/spec/support/models/implant.rb +1 -0
  873. data/spec/support/models/instrument.rb +1 -0
  874. data/spec/support/models/item.rb +1 -0
  875. data/spec/support/models/jar.rb +1 -0
  876. data/spec/support/models/kaleidoscope.rb +1 -0
  877. data/spec/support/models/kangaroo.rb +1 -0
  878. data/spec/support/models/label.rb +1 -0
  879. data/spec/support/models/language.rb +1 -0
  880. data/spec/support/models/lat_lng.rb +1 -6
  881. data/spec/support/models/league.rb +1 -0
  882. data/spec/support/models/learner.rb +1 -0
  883. data/spec/support/models/line_item.rb +1 -0
  884. data/spec/support/models/location.rb +1 -0
  885. data/spec/support/models/login.rb +1 -0
  886. data/spec/support/models/manufacturer.rb +1 -0
  887. data/spec/support/models/meat.rb +1 -0
  888. data/spec/support/models/membership.rb +1 -0
  889. data/spec/support/models/message.rb +1 -0
  890. data/spec/support/models/minim.rb +1 -0
  891. data/spec/support/models/mixed_drink.rb +1 -0
  892. data/spec/support/models/mop.rb +1 -0
  893. data/spec/support/models/movie.rb +1 -0
  894. data/spec/support/models/my_hash.rb +1 -0
  895. data/spec/support/models/name.rb +1 -0
  896. data/spec/support/models/name_only.rb +1 -0
  897. data/spec/support/models/node.rb +1 -0
  898. data/spec/support/models/note.rb +1 -0
  899. data/spec/support/models/nut.rb +1 -0
  900. data/spec/support/models/odd.rb +1 -0
  901. data/spec/support/models/order.rb +1 -0
  902. data/spec/support/models/ordered_post.rb +1 -0
  903. data/spec/support/models/ordered_preference.rb +1 -0
  904. data/spec/support/models/oscar.rb +1 -0
  905. data/spec/support/models/other_owner_object.rb +1 -0
  906. data/spec/support/models/override.rb +1 -0
  907. data/spec/support/models/ownable.rb +1 -0
  908. data/spec/support/models/owner.rb +1 -0
  909. data/spec/support/models/pack.rb +1 -0
  910. data/spec/support/models/page.rb +1 -0
  911. data/spec/support/models/page_question.rb +1 -0
  912. data/spec/support/models/palette.rb +1 -0
  913. data/spec/support/models/parent.rb +1 -0
  914. data/spec/support/models/parent_doc.rb +1 -0
  915. data/spec/support/models/passport.rb +1 -0
  916. data/spec/support/models/patient.rb +1 -0
  917. data/spec/support/models/pdf_writer.rb +1 -0
  918. data/spec/support/models/pencil.rb +1 -0
  919. data/spec/support/models/person.rb +1 -0
  920. data/spec/support/models/pet.rb +1 -0
  921. data/spec/support/models/pet_owner.rb +1 -0
  922. data/spec/support/models/phone.rb +1 -0
  923. data/spec/support/models/piano.rb +1 -0
  924. data/spec/support/models/pizza.rb +1 -0
  925. data/spec/support/models/player.rb +1 -0
  926. data/spec/support/models/post.rb +1 -0
  927. data/spec/support/models/post_genre.rb +1 -0
  928. data/spec/support/models/powerup.rb +1 -0
  929. data/spec/support/models/preference.rb +1 -0
  930. data/spec/support/models/princess.rb +1 -0
  931. data/spec/support/models/product.rb +1 -0
  932. data/spec/support/models/profile.rb +1 -0
  933. data/spec/support/models/pronunciation.rb +1 -0
  934. data/spec/support/models/pub.rb +1 -0
  935. data/spec/support/models/publication/encyclopedia.rb +1 -0
  936. data/spec/support/models/publication/review.rb +1 -0
  937. data/spec/support/models/publication.rb +1 -0
  938. data/spec/support/models/purchase.rb +1 -0
  939. data/spec/support/models/purchased_item.rb +1 -0
  940. data/spec/support/models/question.rb +1 -0
  941. data/spec/support/models/quiz.rb +1 -0
  942. data/spec/support/models/rating.rb +1 -0
  943. data/spec/support/models/record.rb +1 -0
  944. data/spec/support/models/registry.rb +1 -0
  945. data/spec/support/models/role.rb +1 -0
  946. data/spec/support/models/root_category.rb +1 -0
  947. data/spec/support/models/sandbox/app/models/app_models_message.rb +4 -0
  948. data/spec/support/models/sandbox/lib/models/lib_models_message.rb +4 -0
  949. data/spec/support/models/sandbox/sandbox_message.rb +4 -0
  950. data/spec/support/models/sandbox/sandbox_user.rb +4 -0
  951. data/spec/support/models/sandbox/subdir/sandbox_comment.rb +4 -0
  952. data/spec/support/models/sandwich.rb +1 -0
  953. data/spec/support/models/scheduler.rb +1 -0
  954. data/spec/support/models/school.rb +1 -0
  955. data/spec/support/models/scribe.rb +1 -0
  956. data/spec/support/models/sealer.rb +1 -0
  957. data/spec/support/models/seat.rb +1 -0
  958. data/spec/support/models/seo.rb +1 -0
  959. data/spec/support/models/series.rb +1 -0
  960. data/spec/support/models/server.rb +1 -0
  961. data/spec/support/models/service.rb +1 -0
  962. data/spec/support/models/shape.rb +1 -0
  963. data/spec/support/models/shelf.rb +1 -0
  964. data/spec/support/models/shield.rb +1 -0
  965. data/spec/support/models/shipment_address.rb +1 -0
  966. data/spec/support/models/shipping_container.rb +1 -0
  967. data/spec/support/models/shipping_pack.rb +1 -0
  968. data/spec/support/models/shirt.rb +1 -0
  969. data/spec/support/models/shop.rb +1 -0
  970. data/spec/support/models/short_agent.rb +1 -0
  971. data/spec/support/models/short_quiz.rb +1 -0
  972. data/spec/support/models/simple.rb +1 -0
  973. data/spec/support/models/slave.rb +1 -0
  974. data/spec/support/models/song.rb +1 -0
  975. data/spec/support/models/sound.rb +1 -0
  976. data/spec/support/models/spacer.rb +1 -0
  977. data/spec/support/models/square.rb +1 -0
  978. data/spec/support/models/staff.rb +1 -0
  979. data/spec/support/models/store_as_dup_test1.rb +1 -0
  980. data/spec/support/models/store_as_dup_test2.rb +1 -0
  981. data/spec/support/models/store_as_dup_test3.rb +1 -0
  982. data/spec/support/models/store_as_dup_test4.rb +1 -0
  983. data/spec/support/models/strategy.rb +1 -0
  984. data/spec/support/models/student.rb +1 -0
  985. data/spec/support/models/sub_item.rb +1 -0
  986. data/spec/support/models/subscription.rb +1 -0
  987. data/spec/support/models/survey.rb +1 -0
  988. data/spec/support/models/symptom.rb +1 -0
  989. data/spec/support/models/system_role.rb +1 -0
  990. data/spec/support/models/tag.rb +1 -0
  991. data/spec/support/models/target.rb +1 -0
  992. data/spec/support/models/template.rb +1 -0
  993. data/spec/support/models/thing.rb +1 -0
  994. data/spec/support/models/threadlocker.rb +1 -0
  995. data/spec/support/models/title.rb +1 -0
  996. data/spec/support/models/tool.rb +1 -0
  997. data/spec/support/models/topping.rb +1 -0
  998. data/spec/support/models/toy.rb +1 -0
  999. data/spec/support/models/track.rb +1 -0
  1000. data/spec/support/models/translation.rb +1 -0
  1001. data/spec/support/models/tree.rb +1 -0
  1002. data/spec/support/models/truck.rb +1 -0
  1003. data/spec/support/models/updatable.rb +1 -0
  1004. data/spec/support/models/user.rb +1 -0
  1005. data/spec/support/models/user_account.rb +1 -0
  1006. data/spec/support/models/validation_callback.rb +1 -0
  1007. data/spec/support/models/vehicle.rb +1 -0
  1008. data/spec/support/models/version.rb +1 -0
  1009. data/spec/support/models/vertex.rb +1 -0
  1010. data/spec/support/models/vet_visit.rb +1 -0
  1011. data/spec/support/models/video.rb +1 -0
  1012. data/spec/support/models/video_game.rb +1 -0
  1013. data/spec/support/models/washer.rb +1 -0
  1014. data/spec/support/models/weapon.rb +1 -0
  1015. data/spec/support/models/wiki_page.rb +1 -0
  1016. data/spec/support/models/word.rb +1 -0
  1017. data/spec/support/models/word_origin.rb +1 -0
  1018. data/spec/support/models/writer.rb +1 -0
  1019. data/spec/support/rails_mock.rb +32 -0
  1020. data/spec/support/shared/time.rb +3 -21
  1021. data/spec/support/sinatra_mock.rb +7 -0
  1022. data/spec/support/spec_config.rb +30 -9
  1023. data.tar.gz.sig +0 -0
  1024. metadata +171 -37
  1025. metadata.gz.sig +1 -0
  1026. data/lib/mongoid/association/referenced/eager.rb +0 -163
  1027. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -113
  1028. data/lib/mongoid/contextual/geo_near.rb +0 -236
  1029. data/lib/mongoid/errors/invalid_session_use.rb +0 -21
  1030. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -27
  1031. data/lib/mongoid/query_cache.rb +0 -68
  1032. data/spec/mongoid/contextual/geo_near_spec.rb +0 -471
  1033. data/spec/mongoid/extensions_spec.rb +0 -43
  1034. data/spec/mongoid/query_cache_middleware_spec.rb +0 -50
  1035. data/spec/mongoid/query_cache_spec.rb +0 -865
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
 
3
4
  require "spec_helper"
4
5
 
@@ -287,23 +288,8 @@ describe Mongoid::Criteria do
287
288
  Band.where(name: "Depeche Mode")
288
289
  end
289
290
 
290
- # as_json changed in rails 6 to call as_json on serializable_hash.
291
- # https://github.com/rails/rails/commit/2e5cb980a448e7f4ab00df6e9ad4c1cc456616aa
292
-
293
- context 'rails < 6' do
294
- max_rails_version '5.2'
295
-
296
- it "returns the criteria as a json hash" do
297
- expect(criteria.as_json).to eq([ band.serializable_hash ])
298
- end
299
- end
300
-
301
- context 'rails >= 6' do
302
- min_rails_version '6.0'
303
-
304
- it "returns the criteria as a json hash" do
305
- expect(criteria.as_json).to eq([ band.serializable_hash.as_json ])
306
- end
291
+ it "returns the criteria as a json hash" do
292
+ expect(criteria.as_json).to eq([ band.serializable_hash.as_json ])
307
293
  end
308
294
  end
309
295
 
@@ -1044,26 +1030,6 @@ describe Mongoid::Criteria do
1044
1030
  end
1045
1031
  end
1046
1032
 
1047
- describe "#geo_near" do
1048
- max_server_version '4.0'
1049
-
1050
- before do
1051
- Bar.create_indexes
1052
- end
1053
-
1054
- let!(:match) do
1055
- Bar.create!(location: [ 52.30, 13.25 ])
1056
- end
1057
-
1058
- let(:criteria) do
1059
- Bar.geo_near([ 52, 13 ]).max_distance(10).spherical
1060
- end
1061
-
1062
- it "returns the matching documents" do
1063
- expect(criteria).to eq([ match ])
1064
- end
1065
- end
1066
-
1067
1033
  describe "#eq" do
1068
1034
 
1069
1035
  let!(:match) do
@@ -1460,52 +1426,68 @@ describe Mongoid::Criteria do
1460
1426
  end
1461
1427
  end
1462
1428
 
1463
- describe "#merge!" do
1429
+ describe '#merge!' do
1430
+ let(:band) { Band.new }
1431
+ let(:criteria) { Band.scoped.where(name: 'Depeche Mode').asc(:name) }
1432
+ let(:association) { Band.relations['records'] }
1433
+ subject(:merged) { criteria.merge!(other) }
1464
1434
 
1465
- let(:band) do
1466
- Band.new
1467
- end
1435
+ context 'when merging a Criteria' do
1436
+ let(:other) do
1437
+ { klass: Band, includes: [:records] }
1438
+ end
1468
1439
 
1469
- let(:criteria) do
1470
- Band.scoped.where(name: "Depeche Mode").asc(:name)
1471
- end
1440
+ it 'merges the selector' do
1441
+ expect(merged.selector).to eq({ 'name' => 'Depeche Mode' })
1442
+ end
1472
1443
 
1473
- let(:mergeable) do
1474
- Band.includes(:records).tap do |crit|
1475
- crit.documents = [ band ]
1444
+ it 'merges the options' do
1445
+ expect(merged.options).to eq({ sort: { 'name' => 1 }})
1476
1446
  end
1477
- end
1478
1447
 
1479
- let(:association) do
1480
- Band.relations["records"]
1481
- end
1448
+ it 'merges the scoping options' do
1449
+ expect(merged.scoping_options).to eq([ nil, nil ])
1450
+ end
1482
1451
 
1483
- let(:merged) do
1484
- criteria.merge!(mergeable)
1485
- end
1452
+ it 'merges the inclusions' do
1453
+ expect(merged.inclusions).to eq([ association ])
1454
+ end
1486
1455
 
1487
- it "merges the selector" do
1488
- expect(merged.selector).to eq({ "name" => "Depeche Mode" })
1456
+ it 'returns the same criteria' do
1457
+ expect(merged).to equal(criteria)
1458
+ end
1489
1459
  end
1490
1460
 
1491
- it "merges the options" do
1492
- expect(merged.options).to eq({ sort: { "name" => 1 }})
1493
- end
1461
+ context 'when merging a Hash' do
1462
+ let(:other) do
1463
+ Band.includes(:records).tap do |crit|
1464
+ crit.documents = [ band ]
1465
+ end
1466
+ end
1494
1467
 
1495
- it "merges the documents" do
1496
- expect(merged.documents).to eq([ band ])
1497
- end
1468
+ it 'merges the selector' do
1469
+ expect(merged.selector).to eq({ 'name' => 'Depeche Mode' })
1470
+ end
1498
1471
 
1499
- it "merges the scoping options" do
1500
- expect(merged.scoping_options).to eq([ nil, nil ])
1501
- end
1472
+ it 'merges the options' do
1473
+ expect(merged.options).to eq({ sort: { 'name' => 1 }})
1474
+ end
1502
1475
 
1503
- it "merges the inclusions" do
1504
- expect(merged.inclusions).to eq([ association ])
1505
- end
1476
+ it 'merges the documents' do
1477
+ expect(merged.documents).to eq([ band ])
1478
+ end
1479
+
1480
+ it 'merges the scoping options' do
1481
+ expect(merged.scoping_options).to eq([ nil, nil ])
1482
+ end
1483
+
1484
+ it 'merges the inclusions' do
1485
+ expect(merged.inclusions).to eq([ association ])
1486
+ end
1506
1487
 
1507
- it "returns the same criteria" do
1508
- expect(merged).to equal(criteria)
1488
+ it 'returns the same criteria' do
1489
+ expect(merged).to equal(criteria)
1490
+ end
1509
1491
  end
1510
1492
  end
1511
1493
 
@@ -1735,10 +1717,8 @@ describe Mongoid::Criteria do
1735
1717
  Product.pluck(:price)
1736
1718
  end
1737
1719
 
1738
- with_config_values :legacy_pluck_distinct, true, false do
1739
- it "uses the aliases" do
1740
- expect(plucked).to eq([ 100000, 1 ])
1741
- end
1720
+ it "uses the aliases" do
1721
+ expect(plucked).to eq([ 100000, 1 ])
1742
1722
  end
1743
1723
  end
1744
1724
  end
@@ -1755,18 +1735,13 @@ describe Mongoid::Criteria do
1755
1735
  criteria.pluck(:name)
1756
1736
  end
1757
1737
 
1758
- with_config_values :legacy_pluck_distinct, true, false do
1759
- it "returns the values" do
1760
- expect(plucked).to contain_exactly("Depeche Mode", "Tool", "Photek")
1761
- end
1738
+ it "returns the values" do
1739
+ expect(plucked).to contain_exactly("Depeche Mode", "Tool", "Photek")
1762
1740
  end
1763
1741
 
1764
1742
  context "when subsequently executing the criteria without a pluck" do
1765
-
1766
- with_config_values :legacy_pluck_distinct, true, false do
1767
- it "does not limit the fields" do
1768
- expect(criteria.first.likes).to eq(3)
1769
- end
1743
+ it "does not limit the fields" do
1744
+ expect(criteria.first.likes).to eq(3)
1770
1745
  end
1771
1746
  end
1772
1747
 
@@ -1786,32 +1761,15 @@ describe Mongoid::Criteria do
1786
1761
  criteria.pluck(:name, 'records.name')
1787
1762
  end
1788
1763
 
1789
- context "when legacy_pluck_distinct is set" do
1790
- config_override :legacy_pluck_distinct, true
1791
- let(:expected) do
1792
- [
1793
- ["FKA Twigs", nil],
1794
- ['FKA Twigs', [{ "name" => "LP1" }]]
1795
- ]
1796
- end
1797
-
1798
- it 'returns the list of top-level field and subdocument values' do
1799
- expect(embedded_pluck).to eq(expected)
1800
- end
1764
+ let(:expected) do
1765
+ [
1766
+ ["FKA Twigs", nil],
1767
+ ['FKA Twigs', ["LP1"]]
1768
+ ]
1801
1769
  end
1802
1770
 
1803
- context "when legacy_pluck_distinct is not set" do
1804
- config_override :legacy_pluck_distinct, false
1805
- let(:expected) do
1806
- [
1807
- ["FKA Twigs", nil],
1808
- ['FKA Twigs', ["LP1"]]
1809
- ]
1810
- end
1811
-
1812
- it 'returns the list of top-level field and subdocument values' do
1813
- expect(embedded_pluck).to eq(expected)
1814
- end
1771
+ it 'returns the list of top-level field and subdocument values' do
1772
+ expect(embedded_pluck).to eq(expected)
1815
1773
  end
1816
1774
  end
1817
1775
 
@@ -1826,32 +1784,15 @@ describe Mongoid::Criteria do
1826
1784
  criteria.pluck('records.name')
1827
1785
  end
1828
1786
 
1829
- context "when legacy_pluck_distinct is set" do
1830
- config_override :legacy_pluck_distinct, true
1831
- let(:expected) do
1832
- [
1833
- nil,
1834
- [{ "name" => "LP1" }]
1835
- ]
1836
- end
1837
-
1838
- it 'returns the list of subdocument values' do
1839
- expect(embedded_pluck).to eq(expected)
1840
- end
1787
+ let(:expected) do
1788
+ [
1789
+ nil,
1790
+ ["LP1"]
1791
+ ]
1841
1792
  end
1842
1793
 
1843
- context "when legacy_pluck_distinct is not set" do
1844
- config_override :legacy_pluck_distinct, false
1845
- let(:expected) do
1846
- [
1847
- nil,
1848
- ["LP1"]
1849
- ]
1850
- end
1851
-
1852
- it 'returns the list of subdocument values' do
1853
- expect(embedded_pluck).to eq(expected)
1854
- end
1794
+ it 'returns the list of subdocument values' do
1795
+ expect(embedded_pluck).to eq(expected)
1855
1796
  end
1856
1797
  end
1857
1798
  end
@@ -1863,10 +1804,8 @@ describe Mongoid::Criteria do
1863
1804
  Band.where(:name.exists => true).pluck(:name, :likes)
1864
1805
  end
1865
1806
 
1866
- with_config_values :legacy_pluck_distinct, true, false do
1867
- it "returns the values" do
1868
- expect(plucked).to contain_exactly(["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
1869
- end
1807
+ it "returns the values" do
1808
+ expect(plucked).to contain_exactly(["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
1870
1809
  end
1871
1810
  end
1872
1811
 
@@ -1876,10 +1815,8 @@ describe Mongoid::Criteria do
1876
1815
  Band.where(:name.exists => true).pluck(:likes)
1877
1816
  end
1878
1817
 
1879
- with_config_values :legacy_pluck_distinct, true, false do
1880
- it "returns the duplicates" do
1881
- expect(plucked).to contain_exactly(3, 3, 1)
1882
- end
1818
+ it "returns the duplicates" do
1819
+ expect(plucked).to contain_exactly(3, 3, 1)
1883
1820
  end
1884
1821
  end
1885
1822
  end
@@ -1890,10 +1827,8 @@ describe Mongoid::Criteria do
1890
1827
  Band.where(name: "New Order").pluck(:_id)
1891
1828
  end
1892
1829
 
1893
- with_config_values :legacy_pluck_distinct, true, false do
1894
- it "returns an empty array" do
1895
- expect(plucked).to be_empty
1896
- end
1830
+ it "returns an empty array" do
1831
+ expect(plucked).to be_empty
1897
1832
  end
1898
1833
  end
1899
1834
 
@@ -1903,10 +1838,8 @@ describe Mongoid::Criteria do
1903
1838
  Band.all.pluck(:id)
1904
1839
  end
1905
1840
 
1906
- with_config_values :legacy_pluck_distinct, true, false do
1907
- it "returns the field values" do
1908
- expect(plucked).to eq([ depeche.id, tool.id, photek.id ])
1909
- end
1841
+ it "returns the field values" do
1842
+ expect(plucked).to eq([ depeche.id, tool.id, photek.id ])
1910
1843
  end
1911
1844
  end
1912
1845
 
@@ -1916,10 +1849,8 @@ describe Mongoid::Criteria do
1916
1849
  Band.all.pluck(:id, :fooz)
1917
1850
  end
1918
1851
 
1919
- with_config_values :legacy_pluck_distinct, true, false do
1920
- it "returns nil for the field that doesnt exist" do
1921
- expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil] ])
1922
- end
1852
+ it "returns nil for the field that doesnt exist" do
1853
+ expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil] ])
1923
1854
  end
1924
1855
  end
1925
1856
 
@@ -1931,10 +1862,8 @@ describe Mongoid::Criteria do
1931
1862
  Band.all.pluck(:foo)
1932
1863
  end
1933
1864
 
1934
- with_config_values :legacy_pluck_distinct, true, false do
1935
- it "returns an array with nil values" do
1936
- expect(plucked).to eq([nil, nil, nil])
1937
- end
1865
+ it "returns an array with nil values" do
1866
+ expect(plucked).to eq([nil, nil, nil])
1938
1867
  end
1939
1868
  end
1940
1869
 
@@ -1944,10 +1873,8 @@ describe Mongoid::Criteria do
1944
1873
  Band.all.pluck(:foo, :bar)
1945
1874
  end
1946
1875
 
1947
- with_config_values :legacy_pluck_distinct, true, false do
1948
- it "returns an array of arrays with nil values" do
1949
- expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil]])
1950
- end
1876
+ it "returns an array of arrays with nil values" do
1877
+ expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil]])
1951
1878
  end
1952
1879
  end
1953
1880
  end
@@ -1976,36 +1903,16 @@ describe Mongoid::Criteria do
1976
1903
  Dictionary.all.pluck(:description_translations, :description)
1977
1904
  end
1978
1905
 
1979
- context "when legacy_pluck_distinct is set" do
1980
- config_override :legacy_pluck_distinct, true
1981
-
1982
- it 'returns the non-demongoized translations' do
1983
- expect(plucked.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
1984
- end
1985
-
1986
- it 'returns nil' do
1987
- expect(plucked_translations.first).to eq(nil)
1988
- end
1989
-
1990
- it 'returns nil for _translations' do
1991
- expect(plucked_translations_both.first).to eq([nil, {"de"=>"deutsch-text", "en"=>"english-text"}])
1992
- end
1906
+ it 'returns the demongoized translations' do
1907
+ expect(plucked.first).to eq('deutsch-text')
1993
1908
  end
1994
1909
 
1995
- context "when legacy_pluck_distinct is not set" do
1996
- config_override :legacy_pluck_distinct, false
1997
-
1998
- it 'returns the demongoized translations' do
1999
- expect(plucked.first).to eq('deutsch-text')
2000
- end
2001
-
2002
- it 'returns the full translations hash to _translations' do
2003
- expect(plucked_translations.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
2004
- end
1910
+ it 'returns the full translations hash to _translations' do
1911
+ expect(plucked_translations.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
1912
+ end
2005
1913
 
2006
- it 'returns both' do
2007
- expect(plucked_translations_both.first).to eq([{"de"=>"deutsch-text", "en"=>"english-text"}, "deutsch-text"])
2008
- end
1914
+ it 'returns both' do
1915
+ expect(plucked_translations_both.first).to eq([{"de"=>"deutsch-text", "en"=>"english-text"}, "deutsch-text"])
2009
1916
  end
2010
1917
  end
2011
1918
 
@@ -2015,20 +1922,8 @@ describe Mongoid::Criteria do
2015
1922
  Dictionary.all.pluck(:'description.de')
2016
1923
  end
2017
1924
 
2018
- context "when legacy_pluck_distinct is set" do
2019
- config_override :legacy_pluck_distinct, true
2020
-
2021
- it 'returns the specific translations' do
2022
- expect(plucked.first).to eq({'de' => 'deutsch-text'})
2023
- end
2024
- end
2025
-
2026
- context "when legacy_pluck_distinct is not set" do
2027
- config_override :legacy_pluck_distinct, false
2028
-
2029
- it 'returns the specific translations' do
2030
- expect(plucked.first).to eq('deutsch-text')
2031
- end
1925
+ it 'returns the specific translations' do
1926
+ expect(plucked.first).to eq('deutsch-text')
2032
1927
  end
2033
1928
  end
2034
1929
 
@@ -2038,20 +1933,8 @@ describe Mongoid::Criteria do
2038
1933
  Dictionary.all.pluck(:'description_translations.de')
2039
1934
  end
2040
1935
 
2041
- context "when legacy_pluck_distinct is set" do
2042
- config_override :legacy_pluck_distinct, true
2043
-
2044
- it 'returns the specific translations' do
2045
- expect(plucked.first).to eq(nil)
2046
- end
2047
- end
2048
-
2049
- context "when legacy_pluck_distinct is not set" do
2050
- config_override :legacy_pluck_distinct, false
2051
-
2052
- it 'returns the specific translations' do
2053
- expect(plucked.first).to eq('deutsch-text')
2054
- end
1936
+ it 'returns the specific translations' do
1937
+ expect(plucked.first).to eq('deutsch-text')
2055
1938
  end
2056
1939
  end
2057
1940
 
@@ -2066,23 +1949,11 @@ describe Mongoid::Criteria do
2066
1949
  Dictionary.all.pluck(:description).first
2067
1950
  end
2068
1951
 
2069
- context "when legacy_pluck_distinct is set" do
2070
- config_override :legacy_pluck_distinct, true
2071
-
2072
- it "does not correctly use the fallback" do
2073
- plucked.should == {"de"=>"deutsch-text", "en"=>"english-text"}
2074
- end
2075
- end
2076
-
2077
- context "when legacy_pluck_distinct is not set" do
2078
- config_override :legacy_pluck_distinct, false
2079
-
2080
- it "correctly uses the fallback" do
2081
- I18n.locale = :en
2082
- d = Dictionary.create!(description: 'english-text')
2083
- I18n.locale = :he
2084
- plucked.should == "english-text"
2085
- end
1952
+ it "correctly uses the fallback" do
1953
+ I18n.locale = :en
1954
+ d = Dictionary.create!(description: 'english-text')
1955
+ I18n.locale = :he
1956
+ plucked.should == "english-text"
2086
1957
  end
2087
1958
  end
2088
1959
 
@@ -2111,36 +1982,16 @@ describe Mongoid::Criteria do
2111
1982
  Person.where(employer_id: 12345).pluck("pass.name_translations.en").first
2112
1983
  end
2113
1984
 
2114
- context "when legacy_pluck_distinct is set" do
2115
- config_override :legacy_pluck_distinct, true
2116
-
2117
- it "returns the full hash embedded" do
2118
- expect(plucked).to eq({ "name" => { "en" => "Neil", "he" => "Nissim" } })
2119
- end
2120
-
2121
- it "returns the empty hash" do
2122
- expect(plucked_translations).to eq({})
2123
- end
2124
-
2125
- it "returns the empty hash" do
2126
- expect(plucked_translations_field).to eq({})
2127
- end
1985
+ it "returns the translation for the current locale" do
1986
+ expect(plucked).to eq("Nissim")
2128
1987
  end
2129
1988
 
2130
- context "when legacy_pluck_distinct is not set" do
2131
- config_override :legacy_pluck_distinct, false
2132
-
2133
- it "returns the translation for the current locale" do
2134
- expect(plucked).to eq("Nissim")
2135
- end
2136
-
2137
- it "returns the full _translation hash" do
2138
- expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
2139
- end
1989
+ it "returns the full _translation hash" do
1990
+ expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
1991
+ end
2140
1992
 
2141
- it "returns the translation for the requested locale" do
2142
- expect(plucked_translations_field).to eq("Neil")
2143
- end
1993
+ it "returns the translation for the requested locale" do
1994
+ expect(plucked_translations_field).to eq("Neil")
2144
1995
  end
2145
1996
  end
2146
1997
  end
@@ -2151,48 +2002,21 @@ describe Mongoid::Criteria do
2151
2002
  Band.where(name: maniacs.name).pluck(:sales)
2152
2003
  end
2153
2004
 
2154
- context "when legacy_pluck_distinct is set" do
2155
- config_override :legacy_pluck_distinct, true
2156
-
2157
- context 'when value is stored as string' do
2158
- config_override :map_big_decimal_to_decimal128, false
2159
-
2160
- it "does not demongoize the field" do
2161
- expect(plucked.first).to be_a(String)
2162
- expect(plucked.first).to eq("1E2")
2163
- end
2164
- end
2005
+ context 'when value is stored as string' do
2006
+ config_override :map_big_decimal_to_decimal128, false
2165
2007
 
2166
- context 'when value is stored as decimal128' do
2167
- config_override :map_big_decimal_to_decimal128, true
2168
- max_bson_version '4.99.99'
2169
-
2170
- it "does not demongoize the field" do
2171
- expect(plucked.first).to be_a(BSON::Decimal128)
2172
- expect(plucked.first).to eq(BSON::Decimal128.new("1E2"))
2173
- end
2008
+ it "demongoizes the field" do
2009
+ expect(plucked.first).to be_a(BigDecimal)
2010
+ expect(plucked.first).to eq(BigDecimal("1E2"))
2174
2011
  end
2175
2012
  end
2176
2013
 
2177
- context "when legacy_pluck_distinct is not set" do
2178
- config_override :legacy_pluck_distinct, false
2179
-
2180
- context 'when value is stored as string' do
2181
- config_override :map_big_decimal_to_decimal128, false
2182
-
2183
- it "demongoizes the field" do
2184
- expect(plucked.first).to be_a(BigDecimal)
2185
- expect(plucked.first).to eq(BigDecimal("1E2"))
2186
- end
2187
- end
2188
-
2189
- context 'when value is stored as decimal128' do
2190
- config_override :map_big_decimal_to_decimal128, true
2014
+ context 'when value is stored as decimal128' do
2015
+ config_override :map_big_decimal_to_decimal128, true
2191
2016
 
2192
- it "demongoizes the field" do
2193
- expect(plucked.first).to be_a(BigDecimal)
2194
- expect(plucked.first).to eq(BigDecimal("1E2"))
2195
- end
2017
+ it "demongoizes the field" do
2018
+ expect(plucked.first).to be_a(BigDecimal)
2019
+ expect(plucked.first).to eq(BigDecimal("1E2"))
2196
2020
  end
2197
2021
  end
2198
2022
  end
@@ -2203,22 +2027,8 @@ describe Mongoid::Criteria do
2203
2027
 
2204
2028
  let(:plucked) { Band.where(_id: band.id).pluck("label.sales") }
2205
2029
 
2206
- context "when legacy_pluck_distinct is set" do
2207
- config_override :legacy_pluck_distinct, true
2208
- config_override :map_big_decimal_to_decimal128, true
2209
- max_bson_version '4.99.99'
2210
-
2211
- it "returns a hash with a non-demongoized field" do
2212
- expect(plucked.first).to eq({ 'sales' => BSON::Decimal128.new('1E+2') })
2213
- end
2214
- end
2215
-
2216
- context "when legacy_pluck_distinct is not set" do
2217
- config_override :legacy_pluck_distinct, false
2218
-
2219
- it "demongoizes the field" do
2220
- expect(plucked).to eq([ BigDecimal("1E2") ])
2221
- end
2030
+ it "demongoizes the field" do
2031
+ expect(plucked).to eq([ BigDecimal("1E2") ])
2222
2032
  end
2223
2033
  end
2224
2034
 
@@ -2228,22 +2038,8 @@ describe Mongoid::Criteria do
2228
2038
 
2229
2039
  let(:plucked) { Band.where(_id: band.id).pluck("labels.sales") }
2230
2040
 
2231
- context "when legacy_pluck_distinct is set" do
2232
- config_override :legacy_pluck_distinct, true
2233
- config_override :map_big_decimal_to_decimal128, true
2234
- max_bson_version '4.99.99'
2235
-
2236
- it "returns a hash with a non-demongoized field" do
2237
- expect(plucked.first).to eq([{ 'sales' => BSON::Decimal128.new('1E+2') }])
2238
- end
2239
- end
2240
-
2241
- context "when legacy_pluck_distinct is not set" do
2242
- config_override :legacy_pluck_distinct, false
2243
-
2244
- it "demongoizes the field" do
2245
- expect(plucked.first).to eq([ BigDecimal("1E2") ])
2246
- end
2041
+ it "demongoizes the field" do
2042
+ expect(plucked.first).to eq([ BigDecimal("1E2") ])
2247
2043
  end
2248
2044
  end
2249
2045
 
@@ -2253,20 +2049,8 @@ describe Mongoid::Criteria do
2253
2049
 
2254
2050
  let(:plucked) { Band.where(_id: band.id).pluck("label.qwerty") }
2255
2051
 
2256
- context "when legacy_pluck_distinct is set" do
2257
- config_override :legacy_pluck_distinct, true
2258
-
2259
- it "returns an empty hash" do
2260
- expect(plucked.first).to eq({})
2261
- end
2262
- end
2263
-
2264
- context "when legacy_pluck_distinct is not set" do
2265
- config_override :legacy_pluck_distinct, false
2266
-
2267
- it "returns nil" do
2268
- expect(plucked.first).to eq(nil)
2269
- end
2052
+ it "returns nil" do
2053
+ expect(plucked.first).to eq(nil)
2270
2054
  end
2271
2055
  end
2272
2056
 
@@ -2505,17 +2289,6 @@ describe Mongoid::Criteria do
2505
2289
  end
2506
2290
  end
2507
2291
 
2508
- describe "#to_criteria" do
2509
-
2510
- let(:criteria) do
2511
- Band.all
2512
- end
2513
-
2514
- it "returns self" do
2515
- expect(criteria.to_criteria).to eq(criteria)
2516
- end
2517
- end
2518
-
2519
2292
  describe "#to_proc" do
2520
2293
 
2521
2294
  let(:criteria) do
@@ -2756,13 +2529,33 @@ describe Mongoid::Criteria do
2756
2529
  Band.create!(name: "Boards of Canada", sales: sales)
2757
2530
  end
2758
2531
 
2759
- let(:from_db) do
2532
+ it "cannot find values when querying using a BigDecimal value" do
2760
2533
  Mongoid.map_big_decimal_to_decimal128 = true
2761
- Band.where(sales: sales.to_s).first
2534
+ from_db = Band.where(sales: sales).first
2535
+ expect(from_db).to eq(nil)
2762
2536
  end
2763
2537
 
2764
- it "finds the document by the big decimal value" do
2765
- expect(from_db).to eq(band)
2538
+ it "cannot find values when querying using a string value" do
2539
+ Mongoid.map_big_decimal_to_decimal128 = true
2540
+ from_db = Band.where(sales: sales.to_s).first
2541
+ expect(from_db).to eq(nil)
2542
+ end
2543
+
2544
+ context "after converting value" do
2545
+ before do
2546
+ Mongoid.map_big_decimal_to_decimal128 = true
2547
+ band.set(sales: band.sales)
2548
+ end
2549
+
2550
+ it "can find values when querying using a BigDecimal value" do
2551
+ from_db = Band.where(sales: sales).first
2552
+ expect(from_db).to eq(band)
2553
+ end
2554
+
2555
+ it "can find values when querying using a string value" do
2556
+ from_db = Band.where(sales: sales.to_s).first
2557
+ expect(from_db).to eq(band)
2558
+ end
2766
2559
  end
2767
2560
  end
2768
2561
  end
@@ -2811,7 +2604,6 @@ describe Mongoid::Criteria do
2811
2604
  end
2812
2605
 
2813
2606
  context "when querying on a BSON::Decimal128" do
2814
- min_server_version '3.4'
2815
2607
 
2816
2608
  let(:decimal) do
2817
2609
  BSON::Decimal128.new("0.0005")
@@ -2844,6 +2636,17 @@ describe Mongoid::Criteria do
2844
2636
  expect(selector['ratable_id']).to eq(movie.id)
2845
2637
  end
2846
2638
  end
2639
+
2640
+ context "when querying an embedded document with aliases" do
2641
+
2642
+ let(:criteria) do
2643
+ Person.where("phones.extension" => "123")
2644
+ end
2645
+
2646
+ it "expands the aliases" do
2647
+ expect(criteria.selector).to eq("mobile_phones.ext" => "123")
2648
+ end
2649
+ end
2847
2650
  end
2848
2651
 
2849
2652
  context 'when given multiple keys in separate calls' do
@@ -3122,6 +2925,19 @@ describe Mongoid::Criteria do
3122
2925
  end
3123
2926
  end
3124
2927
  end
2928
+
2929
+ context "when searching for a regex on a symbol field" do
2930
+ let!(:person) { Person.create!(species: :hello)}
2931
+ let(:criteria) { Person.where(species: /ell/) }
2932
+
2933
+ it "creates the correct criteria" do
2934
+ expect(criteria.selector).to eq({ "species" => /ell/ })
2935
+ end
2936
+
2937
+ it "finds the document" do
2938
+ expect(criteria.first).to eq(person)
2939
+ end
2940
+ end
3125
2941
  end
3126
2942
 
3127
2943
  describe "#for_js" do
@@ -3130,6 +2946,12 @@ describe Mongoid::Criteria do
3130
2946
  Band.create!(name: "Depeche Mode")
3131
2947
  end
3132
2948
 
2949
+ it 'is deprecated' do
2950
+ expect(Mongoid.logger).to receive(:warn).with(/for_js is deprecated/).and_call_original
2951
+
2952
+ Band.for_js("this.name == 'Depeche Mode'")
2953
+ end
2954
+
3133
2955
  context "when the code has no scope" do
3134
2956
 
3135
2957
  let(:criteria) do
@@ -3178,11 +3000,11 @@ describe Mongoid::Criteria do
3178
3000
  context "when the method exists on the criteria" do
3179
3001
 
3180
3002
  before do
3181
- expect(criteria).to receive(:to_criteria).and_call_original
3003
+ expect(criteria).to receive(:only).and_call_original
3182
3004
  end
3183
3005
 
3184
3006
  it "calls the method on the criteria" do
3185
- expect(criteria.to_criteria).to eq(criteria)
3007
+ expect(criteria.only).to eq(criteria)
3186
3008
  end
3187
3009
  end
3188
3010
 
@@ -3389,4 +3211,44 @@ describe Mongoid::Criteria do
3389
3211
  end
3390
3212
  end
3391
3213
  end
3214
+
3215
+ describe '.from_hash' do
3216
+ subject(:criteria) { described_class.from_hash(hash) }
3217
+
3218
+ context 'when klass is specified' do
3219
+ let(:hash) do
3220
+ { klass: Band, where: { name: 'Songs Ohia' } }
3221
+ end
3222
+
3223
+ it 'returns a criteria' do
3224
+ expect(criteria).to be_a(Mongoid::Criteria)
3225
+ end
3226
+
3227
+ it 'sets the klass' do
3228
+ expect(criteria.klass).to eq(Band)
3229
+ end
3230
+
3231
+ it 'sets the selector' do
3232
+ expect(criteria.selector).to eq({ 'name' => 'Songs Ohia' })
3233
+ end
3234
+ end
3235
+
3236
+ context 'when klass is missing' do
3237
+ let(:hash) do
3238
+ { where: { name: 'Songs Ohia' } }
3239
+ end
3240
+
3241
+ it 'returns a criteria' do
3242
+ expect(criteria).to be_a(Mongoid::Criteria)
3243
+ end
3244
+
3245
+ it 'has klass nil' do
3246
+ expect(criteria.klass).to be_nil
3247
+ end
3248
+
3249
+ it 'sets the selector' do
3250
+ expect(criteria.selector).to eq({ 'name' => 'Songs Ohia' })
3251
+ end
3252
+ end
3253
+ end
3392
3254
  end