mongoid 7.3.2 → 7.4.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 (886) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +17 -17
  4. data/README.md +2 -2
  5. data/lib/config/locales/en.yml +30 -16
  6. data/lib/mongoid/association/accessors.rb +0 -27
  7. data/lib/mongoid/association/bindable.rb +0 -21
  8. data/lib/mongoid/association/builders.rb +0 -9
  9. data/lib/mongoid/association/constrainable.rb +0 -3
  10. data/lib/mongoid/association/depending.rb +0 -7
  11. data/lib/mongoid/association/eager_loadable.rb +0 -3
  12. data/lib/mongoid/association/embedded/batchable.rb +11 -39
  13. data/lib/mongoid/association/embedded/cyclic.rb +2 -11
  14. data/lib/mongoid/association/embedded/embedded_in/binding.rb +0 -7
  15. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +0 -3
  16. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +0 -13
  17. data/lib/mongoid/association/embedded/embedded_in.rb +0 -23
  18. data/lib/mongoid/association/embedded/embeds_many/binding.rb +0 -7
  19. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +0 -3
  20. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +31 -44
  21. data/lib/mongoid/association/embedded/embeds_many.rb +0 -31
  22. data/lib/mongoid/association/embedded/embeds_one/binding.rb +0 -7
  23. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +0 -3
  24. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +26 -14
  25. data/lib/mongoid/association/embedded/embeds_one.rb +0 -27
  26. data/lib/mongoid/association/embedded.rb +0 -1
  27. data/lib/mongoid/association/macros.rb +6 -5
  28. data/lib/mongoid/association/many.rb +0 -17
  29. data/lib/mongoid/association/marshalable.rb +0 -5
  30. data/lib/mongoid/association/nested/many.rb +0 -11
  31. data/lib/mongoid/association/nested/nested_buildable.rb +0 -9
  32. data/lib/mongoid/association/nested/one.rb +1 -16
  33. data/lib/mongoid/association/nested.rb +0 -3
  34. data/lib/mongoid/association/one.rb +1 -10
  35. data/lib/mongoid/association/options.rb +0 -33
  36. data/lib/mongoid/association/proxy.rb +0 -21
  37. data/lib/mongoid/association/referenced/auto_save.rb +0 -9
  38. data/lib/mongoid/association/referenced/belongs_to/binding.rb +0 -7
  39. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +4 -5
  40. data/lib/mongoid/association/referenced/belongs_to/eager.rb +0 -1
  41. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +0 -13
  42. data/lib/mongoid/association/referenced/belongs_to.rb +9 -34
  43. data/lib/mongoid/association/referenced/counter_cache.rb +2 -15
  44. data/lib/mongoid/association/referenced/eager.rb +3 -24
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +0 -5
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +0 -3
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +0 -1
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +12 -39
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +11 -38
  50. data/lib/mongoid/association/referenced/has_many/binding.rb +0 -5
  51. data/lib/mongoid/association/referenced/has_many/buildable.rb +0 -3
  52. data/lib/mongoid/association/referenced/has_many/eager.rb +0 -1
  53. data/lib/mongoid/association/referenced/has_many/enumerable.rb +11 -63
  54. data/lib/mongoid/association/referenced/has_many/proxy.rb +18 -61
  55. data/lib/mongoid/association/referenced/has_many.rb +12 -39
  56. data/lib/mongoid/association/referenced/has_one/binding.rb +0 -7
  57. data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -4
  58. data/lib/mongoid/association/referenced/has_one/eager.rb +0 -1
  59. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +0 -15
  60. data/lib/mongoid/association/referenced/has_one/proxy.rb +0 -9
  61. data/lib/mongoid/association/referenced/has_one.rb +9 -32
  62. data/lib/mongoid/association/referenced/syncable.rb +0 -17
  63. data/lib/mongoid/association/referenced.rb +0 -1
  64. data/lib/mongoid/association/reflections.rb +0 -1
  65. data/lib/mongoid/association/relatable.rb +2 -61
  66. data/lib/mongoid/association.rb +0 -17
  67. data/lib/mongoid/atomic/modifiers.rb +4 -51
  68. data/lib/mongoid/atomic/paths/embedded/many.rb +0 -5
  69. data/lib/mongoid/atomic/paths/embedded/one.rb +0 -5
  70. data/lib/mongoid/atomic/paths/embedded.rb +0 -3
  71. data/lib/mongoid/atomic/paths/root.rb +0 -5
  72. data/lib/mongoid/atomic/paths.rb +0 -1
  73. data/lib/mongoid/atomic.rb +27 -44
  74. data/lib/mongoid/attributes/dynamic.rb +0 -17
  75. data/lib/mongoid/attributes/nested.rb +0 -5
  76. data/lib/mongoid/attributes/processing.rb +1 -18
  77. data/lib/mongoid/attributes/projector.rb +0 -1
  78. data/lib/mongoid/attributes/readonly.rb +0 -5
  79. data/lib/mongoid/attributes.rb +0 -33
  80. data/lib/mongoid/cacheable.rb +1 -6
  81. data/lib/mongoid/changeable.rb +3 -59
  82. data/lib/mongoid/clients/factory.rb +0 -7
  83. data/lib/mongoid/clients/options.rb +0 -5
  84. data/lib/mongoid/clients/sessions.rb +0 -7
  85. data/lib/mongoid/clients/storage_options.rb +0 -7
  86. data/lib/mongoid/clients/validators/storage.rb +0 -9
  87. data/lib/mongoid/clients/validators.rb +0 -1
  88. data/lib/mongoid/clients.rb +0 -9
  89. data/lib/mongoid/composable.rb +0 -7
  90. data/lib/mongoid/config/environment.rb +13 -6
  91. data/lib/mongoid/config/options.rb +0 -11
  92. data/lib/mongoid/config/validators/client.rb +0 -17
  93. data/lib/mongoid/config/validators/option.rb +0 -3
  94. data/lib/mongoid/config/validators.rb +0 -1
  95. data/lib/mongoid/config.rb +37 -29
  96. data/lib/mongoid/contextual/aggregable/memory.rb +14 -11
  97. data/lib/mongoid/contextual/aggregable/mongo.rb +15 -20
  98. data/lib/mongoid/contextual/aggregable/none.rb +65 -0
  99. data/lib/mongoid/contextual/aggregable.rb +17 -0
  100. data/lib/mongoid/contextual/atomic.rb +7 -27
  101. data/lib/mongoid/contextual/command.rb +0 -5
  102. data/lib/mongoid/contextual/geo_near.rb +1 -34
  103. data/lib/mongoid/contextual/map_reduce.rb +0 -31
  104. data/lib/mongoid/contextual/memory.rb +4 -59
  105. data/lib/mongoid/contextual/mongo.rb +132 -78
  106. data/lib/mongoid/contextual/none.rb +42 -28
  107. data/lib/mongoid/contextual/queryable.rb +0 -3
  108. data/lib/mongoid/contextual.rb +0 -5
  109. data/lib/mongoid/copyable.rb +0 -5
  110. data/lib/mongoid/criteria/findable.rb +0 -13
  111. data/lib/mongoid/criteria/includable.rb +0 -9
  112. data/lib/mongoid/criteria/inspectable.rb +0 -3
  113. data/lib/mongoid/criteria/marshalable.rb +0 -5
  114. data/lib/mongoid/criteria/modifiable.rb +0 -19
  115. data/lib/mongoid/criteria/options.rb +0 -3
  116. data/lib/mongoid/criteria/permission.rb +0 -1
  117. data/lib/mongoid/criteria/queryable/aggregable.rb +0 -13
  118. data/lib/mongoid/criteria/queryable/expandable.rb +0 -1
  119. data/lib/mongoid/criteria/queryable/extensions/array.rb +1 -26
  120. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +0 -3
  121. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +0 -3
  122. data/lib/mongoid/criteria/queryable/extensions/date.rb +0 -7
  123. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +0 -5
  124. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -25
  125. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +0 -13
  126. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +0 -11
  127. data/lib/mongoid/criteria/queryable/extensions/object.rb +1 -28
  128. data/lib/mongoid/criteria/queryable/extensions/range.rb +38 -16
  129. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +0 -9
  130. data/lib/mongoid/criteria/queryable/extensions/set.rb +0 -3
  131. data/lib/mongoid/criteria/queryable/extensions/string.rb +0 -17
  132. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +0 -9
  133. data/lib/mongoid/criteria/queryable/extensions/time.rb +0 -7
  134. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +0 -7
  135. data/lib/mongoid/criteria/queryable/extensions.rb +0 -1
  136. data/lib/mongoid/criteria/queryable/key.rb +1 -14
  137. data/lib/mongoid/criteria/queryable/macroable.rb +0 -3
  138. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -30
  139. data/lib/mongoid/criteria/queryable/optional.rb +0 -45
  140. data/lib/mongoid/criteria/queryable/options.rb +0 -19
  141. data/lib/mongoid/criteria/queryable/pipeline.rb +0 -13
  142. data/lib/mongoid/criteria/queryable/selectable.rb +22 -69
  143. data/lib/mongoid/criteria/queryable/selector.rb +0 -17
  144. data/lib/mongoid/criteria/queryable/smash.rb +0 -11
  145. data/lib/mongoid/criteria/queryable/storable.rb +11 -7
  146. data/lib/mongoid/criteria/queryable.rb +0 -7
  147. data/lib/mongoid/criteria/scopable.rb +25 -19
  148. data/lib/mongoid/criteria.rb +0 -57
  149. data/lib/mongoid/document.rb +3 -53
  150. data/lib/mongoid/equality.rb +26 -10
  151. data/lib/mongoid/errors/ambiguous_relationship.rb +2 -5
  152. data/lib/mongoid/errors/callback.rb +0 -3
  153. data/lib/mongoid/errors/criteria_argument_required.rb +0 -1
  154. data/lib/mongoid/errors/delete_restriction.rb +0 -3
  155. data/lib/mongoid/errors/document_not_destroyed.rb +2 -7
  156. data/lib/mongoid/errors/document_not_found.rb +0 -9
  157. data/lib/mongoid/errors/eager_load.rb +0 -3
  158. data/lib/mongoid/errors/empty_config_file.rb +25 -0
  159. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -3
  160. data/lib/mongoid/errors/invalid_collection.rb +0 -1
  161. data/lib/mongoid/errors/invalid_config_file.rb +25 -0
  162. data/lib/mongoid/errors/invalid_config_option.rb +0 -3
  163. data/lib/mongoid/errors/invalid_dependent_strategy.rb +0 -3
  164. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +0 -1
  165. data/lib/mongoid/errors/invalid_elem_match_operator.rb +0 -1
  166. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +0 -1
  167. data/lib/mongoid/errors/invalid_expression_operator.rb +0 -1
  168. data/lib/mongoid/errors/invalid_field.rb +0 -5
  169. data/lib/mongoid/errors/invalid_field_operator.rb +0 -1
  170. data/lib/mongoid/errors/invalid_field_option.rb +0 -3
  171. data/lib/mongoid/errors/invalid_find.rb +0 -3
  172. data/lib/mongoid/errors/invalid_includes.rb +0 -3
  173. data/lib/mongoid/errors/invalid_index.rb +0 -3
  174. data/lib/mongoid/errors/invalid_options.rb +0 -3
  175. data/lib/mongoid/errors/invalid_path.rb +0 -3
  176. data/lib/mongoid/errors/invalid_persistence_option.rb +0 -5
  177. data/lib/mongoid/errors/invalid_query.rb +0 -1
  178. data/lib/mongoid/errors/invalid_relation.rb +0 -7
  179. data/lib/mongoid/errors/invalid_relation_option.rb +0 -3
  180. data/lib/mongoid/errors/invalid_scope.rb +0 -3
  181. data/lib/mongoid/errors/invalid_session_use.rb +1 -6
  182. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +0 -1
  183. data/lib/mongoid/errors/invalid_storage_options.rb +0 -3
  184. data/lib/mongoid/errors/invalid_storage_parent.rb +0 -3
  185. data/lib/mongoid/errors/invalid_time.rb +0 -3
  186. data/lib/mongoid/errors/invalid_value.rb +0 -1
  187. data/lib/mongoid/errors/inverse_not_found.rb +0 -3
  188. data/lib/mongoid/errors/mixed_client_configuration.rb +0 -3
  189. data/lib/mongoid/errors/mixed_relations.rb +0 -3
  190. data/lib/mongoid/errors/mongoid_error.rb +0 -9
  191. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +0 -3
  192. data/lib/mongoid/errors/no_client_config.rb +0 -3
  193. data/lib/mongoid/errors/no_client_database.rb +0 -3
  194. data/lib/mongoid/errors/no_client_hosts.rb +0 -3
  195. data/lib/mongoid/errors/no_clients_config.rb +0 -3
  196. data/lib/mongoid/errors/no_default_client.rb +0 -3
  197. data/lib/mongoid/errors/no_environment.rb +0 -3
  198. data/lib/mongoid/errors/no_map_reduce_output.rb +0 -3
  199. data/lib/mongoid/errors/no_metadata.rb +0 -3
  200. data/lib/mongoid/errors/no_parent.rb +0 -3
  201. data/lib/mongoid/errors/readonly_attribute.rb +0 -3
  202. data/lib/mongoid/errors/readonly_document.rb +1 -6
  203. data/lib/mongoid/errors/scope_overwrite.rb +0 -1
  204. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +0 -1
  205. data/lib/mongoid/errors/unknown_attribute.rb +0 -3
  206. data/lib/mongoid/errors/unknown_model.rb +0 -3
  207. data/lib/mongoid/errors/unsaved_document.rb +1 -2
  208. data/lib/mongoid/errors/unsupported_javascript.rb +0 -3
  209. data/lib/mongoid/errors/validations.rb +0 -1
  210. data/lib/mongoid/errors.rb +2 -1
  211. data/lib/mongoid/evolvable.rb +0 -3
  212. data/lib/mongoid/extensions/array.rb +3 -29
  213. data/lib/mongoid/extensions/big_decimal.rb +0 -11
  214. data/lib/mongoid/extensions/boolean.rb +0 -3
  215. data/lib/mongoid/extensions/date.rb +0 -9
  216. data/lib/mongoid/extensions/date_time.rb +0 -9
  217. data/lib/mongoid/extensions/decimal128.rb +0 -5
  218. data/lib/mongoid/extensions/false_class.rb +1 -6
  219. data/lib/mongoid/extensions/float.rb +0 -7
  220. data/lib/mongoid/extensions/hash.rb +0 -27
  221. data/lib/mongoid/extensions/integer.rb +0 -9
  222. data/lib/mongoid/extensions/module.rb +0 -3
  223. data/lib/mongoid/extensions/nil_class.rb +0 -5
  224. data/lib/mongoid/extensions/object.rb +1 -40
  225. data/lib/mongoid/extensions/object_id.rb +0 -7
  226. data/lib/mongoid/extensions/range.rb +0 -11
  227. data/lib/mongoid/extensions/regexp.rb +0 -3
  228. data/lib/mongoid/extensions/set.rb +0 -7
  229. data/lib/mongoid/extensions/string.rb +1 -30
  230. data/lib/mongoid/extensions/symbol.rb +0 -7
  231. data/lib/mongoid/extensions/time.rb +0 -11
  232. data/lib/mongoid/extensions/time_with_zone.rb +13 -9
  233. data/lib/mongoid/extensions/true_class.rb +1 -6
  234. data/lib/mongoid/extensions.rb +15 -3
  235. data/lib/mongoid/factory.rb +1 -2
  236. data/lib/mongoid/fields/foreign_key.rb +0 -21
  237. data/lib/mongoid/fields/localized.rb +0 -11
  238. data/lib/mongoid/fields/standard.rb +0 -33
  239. data/lib/mongoid/fields/validators/macro.rb +0 -9
  240. data/lib/mongoid/fields/validators.rb +0 -1
  241. data/lib/mongoid/fields.rb +64 -57
  242. data/lib/mongoid/findable.rb +0 -5
  243. data/lib/mongoid/indexable/specification.rb +0 -15
  244. data/lib/mongoid/indexable/validators/options.rb +0 -7
  245. data/lib/mongoid/indexable.rb +1 -18
  246. data/lib/mongoid/inspectable.rb +1 -10
  247. data/lib/mongoid/interceptable.rb +0 -25
  248. data/lib/mongoid/loggable.rb +0 -9
  249. data/lib/mongoid/matchable.rb +0 -5
  250. data/lib/mongoid/matcher/eq_impl.rb +37 -2
  251. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
  252. data/lib/mongoid/persistable/creatable.rb +1 -20
  253. data/lib/mongoid/persistable/deletable.rb +0 -17
  254. data/lib/mongoid/persistable/destroyable.rb +0 -7
  255. data/lib/mongoid/persistable/incrementable.rb +0 -5
  256. data/lib/mongoid/persistable/logical.rb +0 -5
  257. data/lib/mongoid/persistable/poppable.rb +0 -5
  258. data/lib/mongoid/persistable/pullable.rb +0 -7
  259. data/lib/mongoid/persistable/pushable.rb +0 -7
  260. data/lib/mongoid/persistable/renamable.rb +0 -5
  261. data/lib/mongoid/persistable/savable.rb +0 -7
  262. data/lib/mongoid/persistable/settable.rb +0 -5
  263. data/lib/mongoid/persistable/unsettable.rb +0 -5
  264. data/lib/mongoid/persistable/updatable.rb +2 -17
  265. data/lib/mongoid/persistable/upsertable.rb +0 -7
  266. data/lib/mongoid/persistable.rb +0 -23
  267. data/lib/mongoid/persistence_context.rb +3 -28
  268. data/lib/mongoid/positional.rb +0 -5
  269. data/lib/mongoid/query_cache.rb +11 -34
  270. data/lib/mongoid/railtie.rb +0 -15
  271. data/lib/mongoid/railties/controller_runtime.rb +0 -1
  272. data/lib/mongoid/reloadable.rb +4 -16
  273. data/lib/mongoid/scopable.rb +6 -34
  274. data/lib/mongoid/selectable.rb +0 -9
  275. data/lib/mongoid/serializable.rb +0 -15
  276. data/lib/mongoid/shardable.rb +0 -7
  277. data/lib/mongoid/stateful.rb +0 -9
  278. data/lib/mongoid/stringified_symbol.rb +2 -3
  279. data/lib/mongoid/tasks/database.rb +1 -6
  280. data/lib/mongoid/threaded/lifecycle.rb +0 -21
  281. data/lib/mongoid/threaded.rb +0 -55
  282. data/lib/mongoid/timestamps/created/short.rb +0 -1
  283. data/lib/mongoid/timestamps/created.rb +0 -1
  284. data/lib/mongoid/timestamps/short.rb +0 -1
  285. data/lib/mongoid/timestamps/timeless.rb +0 -7
  286. data/lib/mongoid/timestamps/updated/short.rb +0 -1
  287. data/lib/mongoid/timestamps/updated.rb +0 -3
  288. data/lib/mongoid/timestamps.rb +0 -1
  289. data/lib/mongoid/touchable.rb +10 -7
  290. data/lib/mongoid/traversable.rb +64 -53
  291. data/lib/mongoid/validatable/associated.rb +0 -3
  292. data/lib/mongoid/validatable/format.rb +0 -1
  293. data/lib/mongoid/validatable/length.rb +0 -1
  294. data/lib/mongoid/validatable/localizable.rb +0 -3
  295. data/lib/mongoid/validatable/macros.rb +0 -7
  296. data/lib/mongoid/validatable/presence.rb +1 -8
  297. data/lib/mongoid/validatable/queryable.rb +0 -3
  298. data/lib/mongoid/validatable/uniqueness.rb +15 -30
  299. data/lib/mongoid/validatable.rb +1 -22
  300. data/lib/mongoid/version.rb +1 -2
  301. data/lib/mongoid.rb +0 -15
  302. data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
  303. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  304. data/lib/rails/generators/mongoid_generator.rb +0 -1
  305. data/lib/rails/mongoid.rb +0 -3
  306. data/spec/integration/app_spec.rb +0 -1
  307. data/spec/integration/associations/belongs_to_spec.rb +0 -1
  308. data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
  309. data/spec/integration/associations/embedded_spec.rb +0 -1
  310. data/spec/integration/associations/embeds_many_spec.rb +139 -1
  311. data/spec/integration/associations/embeds_one_spec.rb +0 -1
  312. data/spec/integration/associations/foreign_key_spec.rb +0 -1
  313. data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
  314. data/spec/integration/associations/has_many_spec.rb +0 -1
  315. data/spec/integration/associations/has_one_spec.rb +0 -1
  316. data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
  317. data/spec/integration/associations/reverse_population_spec.rb +0 -1
  318. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  319. data/spec/integration/associations/scope_option_spec.rb +101 -0
  320. data/spec/integration/atomic/modifiers_spec.rb +0 -1
  321. data/spec/integration/bson_regexp_raw_spec.rb +0 -1
  322. data/spec/integration/callbacks_models.rb +12 -0
  323. data/spec/integration/callbacks_spec.rb +18 -6
  324. data/spec/integration/contextual/empty_spec.rb +141 -0
  325. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  326. data/spec/integration/criteria/date_field_spec.rb +0 -1
  327. data/spec/integration/criteria/default_scope_spec.rb +51 -0
  328. data/spec/integration/criteria/logical_spec.rb +30 -0
  329. data/spec/integration/criteria/range_spec.rb +265 -0
  330. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  331. data/spec/integration/discriminator_key_spec.rb +0 -1
  332. data/spec/integration/discriminator_value_spec.rb +0 -1
  333. data/spec/integration/document_spec.rb +0 -1
  334. data/spec/integration/i18n_fallbacks_spec.rb +0 -1
  335. data/spec/integration/matcher_examples_spec.rb +0 -1
  336. data/spec/integration/matcher_operator_spec.rb +27 -3
  337. data/spec/integration/matcher_spec.rb +95 -1
  338. data/spec/integration/server_query_spec.rb +0 -1
  339. data/spec/integration/shardable_spec.rb +0 -1
  340. data/spec/integration/stringified_symbol_field_spec.rb +16 -3
  341. data/spec/lite_spec_helper.rb +8 -2
  342. data/spec/mongoid/association/accessors_spec.rb +44 -15
  343. data/spec/mongoid/association/auto_save_spec.rb +72 -34
  344. data/spec/mongoid/association/builders_spec.rb +1 -2
  345. data/spec/mongoid/association/constrainable_spec.rb +0 -1
  346. data/spec/mongoid/association/counter_cache_spec.rb +32 -33
  347. data/spec/mongoid/association/depending_spec.rb +12 -13
  348. data/spec/mongoid/association/eager_spec.rb +4 -5
  349. data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
  350. data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
  351. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
  352. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
  353. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
  354. data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
  355. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
  356. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
  357. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -135
  358. data/spec/mongoid/association/embedded/embeds_many_models.rb +16 -1
  359. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
  360. data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
  361. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
  362. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
  363. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
  364. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  365. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  366. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
  367. data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
  368. data/spec/mongoid/association/macros_spec.rb +9 -10
  369. data/spec/mongoid/association/nested/many_spec.rb +0 -1
  370. data/spec/mongoid/association/nested/one_spec.rb +0 -1
  371. data/spec/mongoid/association/options_spec.rb +0 -1
  372. data/spec/mongoid/association/polymorphic_spec.rb +0 -1
  373. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
  374. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
  375. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
  376. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
  377. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +20 -1
  378. data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
  379. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
  380. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
  381. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
  382. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
  383. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -154
  384. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
  385. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
  386. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
  387. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
  388. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
  389. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
  390. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +303 -125
  391. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
  392. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +227 -164
  393. data/spec/mongoid/association/referenced/has_many_models.rb +35 -1
  394. data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
  395. data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
  396. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
  397. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
  398. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
  399. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
  400. data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
  401. data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
  402. data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
  403. data/spec/mongoid/association/reflections_spec.rb +0 -1
  404. data/spec/mongoid/association/syncable_spec.rb +31 -32
  405. data/spec/mongoid/association_spec.rb +0 -1
  406. data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
  407. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
  408. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
  409. data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
  410. data/spec/mongoid/atomic/paths_spec.rb +0 -1
  411. data/spec/mongoid/atomic_spec.rb +6 -7
  412. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  413. data/spec/mongoid/attributes/nested_spec.rb +66 -67
  414. data/spec/mongoid/attributes/projector_spec.rb +5 -2
  415. data/spec/mongoid/attributes/readonly_spec.rb +22 -23
  416. data/spec/mongoid/attributes_spec.rb +32 -33
  417. data/spec/mongoid/cacheable_spec.rb +1 -2
  418. data/spec/mongoid/changeable_spec.rb +35 -36
  419. data/spec/mongoid/clients/factory_spec.rb +9 -4
  420. data/spec/mongoid/clients/options_spec.rb +15 -10
  421. data/spec/mongoid/clients/sessions_spec.rb +22 -23
  422. data/spec/mongoid/clients/transactions_spec.rb +49 -27
  423. data/spec/mongoid/clients_spec.rb +6 -7
  424. data/spec/mongoid/composable_spec.rb +0 -1
  425. data/spec/mongoid/config/environment_spec.rb +86 -9
  426. data/spec/mongoid/config/options_spec.rb +0 -1
  427. data/spec/mongoid/config_spec.rb +194 -17
  428. data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
  429. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
  430. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  431. data/spec/mongoid/contextual/atomic_spec.rb +109 -71
  432. data/spec/mongoid/contextual/geo_near_spec.rb +18 -19
  433. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
  434. data/spec/mongoid/contextual/memory_spec.rb +23 -24
  435. data/spec/mongoid/contextual/mongo_spec.rb +339 -77
  436. data/spec/mongoid/contextual/none_spec.rb +7 -82
  437. data/spec/mongoid/copyable_spec.rb +11 -12
  438. data/spec/mongoid/copyable_spec_models.rb +0 -1
  439. data/spec/mongoid/criteria/findable_spec.rb +23 -24
  440. data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
  441. data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
  442. data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
  443. data/spec/mongoid/criteria/options_spec.rb +0 -1
  444. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
  445. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
  446. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
  447. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
  448. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
  449. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
  450. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
  451. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
  452. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
  453. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
  454. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
  455. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
  456. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
  457. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
  458. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
  459. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
  460. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
  461. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
  462. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
  463. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
  464. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
  465. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
  466. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
  467. data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
  468. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
  469. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
  470. data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
  471. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
  472. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
  473. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
  474. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
  475. data/spec/mongoid/criteria/queryable/selectable_spec.rb +15 -16
  476. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
  477. data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
  478. data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
  479. data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
  480. data/spec/mongoid/criteria/scopable_spec.rb +127 -1
  481. data/spec/mongoid/criteria_projection_spec.rb +3 -4
  482. data/spec/mongoid/criteria_spec.rb +546 -186
  483. data/spec/mongoid/document_fields_spec.rb +0 -1
  484. data/spec/mongoid/document_persistence_context_spec.rb +0 -1
  485. data/spec/mongoid/document_query_spec.rb +0 -1
  486. data/spec/mongoid/document_spec.rb +32 -34
  487. data/spec/mongoid/equality_spec.rb +142 -41
  488. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
  489. data/spec/mongoid/errors/callback_spec.rb +0 -1
  490. data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
  491. data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
  492. data/spec/mongoid/errors/document_not_found_spec.rb +0 -1
  493. data/spec/mongoid/errors/eager_load_spec.rb +0 -1
  494. data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
  495. data/spec/mongoid/errors/invalid_config_file_spec.rb +31 -0
  496. data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
  497. data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
  498. data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
  499. data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
  500. data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
  501. data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
  502. data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
  503. data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
  504. data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
  505. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
  506. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
  507. data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
  508. data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
  509. data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
  510. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
  511. data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
  512. data/spec/mongoid/errors/mongoid_error_spec.rb +0 -1
  513. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
  514. data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
  515. data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
  516. data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
  517. data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
  518. data/spec/mongoid/errors/no_environment_spec.rb +0 -1
  519. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
  520. data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
  521. data/spec/mongoid/errors/no_parent_spec.rb +0 -1
  522. data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
  523. data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
  524. data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
  525. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
  526. data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
  527. data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
  528. data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
  529. data/spec/mongoid/errors/validations_spec.rb +0 -1
  530. data/spec/mongoid/extensions/array_spec.rb +0 -1
  531. data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
  532. data/spec/mongoid/extensions/binary_spec.rb +0 -1
  533. data/spec/mongoid/extensions/boolean_spec.rb +0 -1
  534. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
  535. data/spec/mongoid/extensions/date_spec.rb +0 -1
  536. data/spec/mongoid/extensions/date_time_spec.rb +0 -1
  537. data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
  538. data/spec/mongoid/extensions/false_class_spec.rb +0 -1
  539. data/spec/mongoid/extensions/float_spec.rb +0 -1
  540. data/spec/mongoid/extensions/hash_spec.rb +0 -1
  541. data/spec/mongoid/extensions/integer_spec.rb +0 -1
  542. data/spec/mongoid/extensions/module_spec.rb +0 -1
  543. data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
  544. data/spec/mongoid/extensions/object_id_spec.rb +0 -1
  545. data/spec/mongoid/extensions/object_spec.rb +0 -1
  546. data/spec/mongoid/extensions/range_spec.rb +0 -1
  547. data/spec/mongoid/extensions/regexp_spec.rb +0 -1
  548. data/spec/mongoid/extensions/set_spec.rb +0 -1
  549. data/spec/mongoid/extensions/string_spec.rb +2 -3
  550. data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
  551. data/spec/mongoid/extensions/symbol_spec.rb +0 -1
  552. data/spec/mongoid/extensions/time_spec.rb +0 -1
  553. data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
  554. data/spec/mongoid/extensions/true_class_spec.rb +0 -1
  555. data/spec/mongoid/extensions_spec.rb +14 -3
  556. data/spec/mongoid/factory_spec.rb +1 -1
  557. data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
  558. data/spec/mongoid/fields/localized_spec.rb +0 -1
  559. data/spec/mongoid/fields/standard_spec.rb +0 -1
  560. data/spec/mongoid/fields_spec.rb +326 -31
  561. data/spec/mongoid/findable_spec.rb +21 -22
  562. data/spec/mongoid/indexable/specification_spec.rb +0 -1
  563. data/spec/mongoid/indexable_spec.rb +0 -1
  564. data/spec/mongoid/inspectable_spec.rb +0 -1
  565. data/spec/mongoid/interceptable_spec.rb +102 -95
  566. data/spec/mongoid/loggable_spec.rb +0 -1
  567. data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
  568. data/spec/mongoid/persistable/creatable_spec.rb +2 -3
  569. data/spec/mongoid/persistable/deletable_spec.rb +18 -19
  570. data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
  571. data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
  572. data/spec/mongoid/persistable/logical_spec.rb +4 -5
  573. data/spec/mongoid/persistable/poppable_spec.rb +4 -5
  574. data/spec/mongoid/persistable/pullable_spec.rb +8 -9
  575. data/spec/mongoid/persistable/pushable_spec.rb +8 -9
  576. data/spec/mongoid/persistable/renamable_spec.rb +3 -4
  577. data/spec/mongoid/persistable/savable_spec.rb +15 -11
  578. data/spec/mongoid/persistable/settable_spec.rb +9 -10
  579. data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
  580. data/spec/mongoid/persistable/updatable_spec.rb +43 -24
  581. data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
  582. data/spec/mongoid/persistable_spec.rb +1 -2
  583. data/spec/mongoid/persistence_context_spec.rb +0 -1
  584. data/spec/mongoid/positional_spec.rb +0 -1
  585. data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
  586. data/spec/mongoid/query_cache_spec.rb +56 -10
  587. data/spec/mongoid/relations/proxy_spec.rb +6 -7
  588. data/spec/mongoid/reloadable_spec.rb +209 -23
  589. data/spec/mongoid/scopable_spec.rb +65 -22
  590. data/spec/mongoid/selectable_spec.rb +6 -7
  591. data/spec/mongoid/serializable_spec.rb +9 -10
  592. data/spec/mongoid/shardable_spec.rb +2 -3
  593. data/spec/mongoid/stateful_spec.rb +1 -2
  594. data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
  595. data/spec/mongoid/tasks/database_spec.rb +0 -1
  596. data/spec/mongoid/threaded_spec.rb +2 -3
  597. data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
  598. data/spec/mongoid/timestamps/created_spec.rb +1 -2
  599. data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
  600. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
  601. data/spec/mongoid/timestamps/updated_spec.rb +3 -4
  602. data/spec/mongoid/timestamps_spec.rb +6 -7
  603. data/spec/mongoid/touchable_spec.rb +33 -20
  604. data/spec/mongoid/touchable_spec_models.rb +2 -1
  605. data/spec/mongoid/traversable_spec.rb +65 -2
  606. data/spec/mongoid/validatable/associated_spec.rb +0 -1
  607. data/spec/mongoid/validatable/format_spec.rb +0 -1
  608. data/spec/mongoid/validatable/length_spec.rb +0 -1
  609. data/spec/mongoid/validatable/numericality_spec.rb +0 -1
  610. data/spec/mongoid/validatable/presence_spec.rb +26 -23
  611. data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
  612. data/spec/mongoid/validatable_spec.rb +2 -3
  613. data/spec/mongoid_spec.rb +0 -1
  614. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
  615. data/spec/rails/mongoid_spec.rb +0 -1
  616. data/spec/shared/lib/mrss/cluster_config.rb +6 -1
  617. data/spec/shared/lib/mrss/constraints.rb +23 -5
  618. data/spec/shared/lib/mrss/docker_runner.rb +1 -1
  619. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  620. data/spec/shared/lib/mrss/lite_constraints.rb +8 -0
  621. data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
  622. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  623. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  624. data/spec/shared/share/Dockerfile.erb +27 -10
  625. data/spec/shared/shlib/distro.sh +2 -1
  626. data/spec/shared/shlib/server.sh +85 -23
  627. data/spec/shared/shlib/set_env.sh +6 -5
  628. data/spec/spec_helper.rb +12 -22
  629. data/spec/support/authorization.rb +0 -1
  630. data/spec/support/constraints.rb +0 -1
  631. data/spec/support/expectations.rb +0 -1
  632. data/spec/support/macros.rb +22 -1
  633. data/spec/support/models/account.rb +1 -2
  634. data/spec/support/models/acolyte.rb +0 -1
  635. data/spec/support/models/actor.rb +0 -1
  636. data/spec/support/models/actress.rb +0 -1
  637. data/spec/support/models/address.rb +0 -1
  638. data/spec/support/models/address_component.rb +0 -1
  639. data/spec/support/models/address_number.rb +0 -1
  640. data/spec/support/models/agency.rb +0 -1
  641. data/spec/support/models/agent.rb +0 -1
  642. data/spec/support/models/album.rb +0 -1
  643. data/spec/support/models/alert.rb +0 -1
  644. data/spec/support/models/animal.rb +0 -1
  645. data/spec/support/models/answer.rb +0 -1
  646. data/spec/support/models/appointment.rb +0 -1
  647. data/spec/support/models/armrest.rb +0 -1
  648. data/spec/support/models/array_field.rb +0 -1
  649. data/spec/support/models/article.rb +0 -1
  650. data/spec/support/models/artist.rb +2 -1
  651. data/spec/support/models/artwork.rb +0 -1
  652. data/spec/support/models/audible_sound.rb +3 -0
  653. data/spec/support/models/audio.rb +0 -1
  654. data/spec/support/models/augmentation.rb +0 -1
  655. data/spec/support/models/author.rb +0 -1
  656. data/spec/support/models/baby.rb +0 -1
  657. data/spec/support/models/band.rb +4 -1
  658. data/spec/support/models/bar.rb +0 -1
  659. data/spec/support/models/basic.rb +0 -1
  660. data/spec/support/models/bed.rb +0 -1
  661. data/spec/support/models/big_palette.rb +0 -1
  662. data/spec/support/models/birthday.rb +0 -1
  663. data/spec/support/models/bolt.rb +0 -1
  664. data/spec/support/models/bomb.rb +0 -1
  665. data/spec/support/models/book.rb +0 -1
  666. data/spec/support/models/breed.rb +0 -1
  667. data/spec/support/models/browser.rb +0 -1
  668. data/spec/support/models/building.rb +0 -1
  669. data/spec/support/models/building_address.rb +0 -1
  670. data/spec/support/models/bus.rb +0 -1
  671. data/spec/support/models/business.rb +0 -1
  672. data/spec/support/models/callback_test.rb +0 -1
  673. data/spec/support/models/canvas.rb +0 -1
  674. data/spec/support/models/car.rb +0 -1
  675. data/spec/support/models/cat.rb +0 -1
  676. data/spec/support/models/category.rb +0 -1
  677. data/spec/support/models/child.rb +0 -1
  678. data/spec/support/models/child_doc.rb +3 -4
  679. data/spec/support/models/church.rb +0 -1
  680. data/spec/support/models/circle.rb +0 -1
  681. data/spec/support/models/circuit.rb +0 -1
  682. data/spec/support/models/circus.rb +0 -1
  683. data/spec/support/models/code.rb +0 -1
  684. data/spec/support/models/coding/pull_request.rb +0 -1
  685. data/spec/support/models/coding.rb +0 -1
  686. data/spec/support/models/comment.rb +0 -1
  687. data/spec/support/models/company.rb +0 -1
  688. data/spec/support/models/consumption_period.rb +0 -1
  689. data/spec/support/models/contextable_item.rb +0 -1
  690. data/spec/support/models/contractor.rb +0 -1
  691. data/spec/support/models/cookie.rb +0 -1
  692. data/spec/support/models/country_code.rb +2 -1
  693. data/spec/support/models/courier_job.rb +0 -1
  694. data/spec/support/models/crate.rb +0 -1
  695. data/spec/support/models/customer.rb +0 -1
  696. data/spec/support/models/customer_address.rb +0 -1
  697. data/spec/support/models/deed.rb +0 -1
  698. data/spec/support/models/definition.rb +0 -1
  699. data/spec/support/models/delegating_patient.rb +0 -1
  700. data/spec/support/models/description.rb +0 -1
  701. data/spec/support/models/dictionary.rb +0 -1
  702. data/spec/support/models/division.rb +0 -1
  703. data/spec/support/models/doctor.rb +0 -1
  704. data/spec/support/models/dog.rb +0 -1
  705. data/spec/support/models/dokument.rb +0 -1
  706. data/spec/support/models/draft.rb +0 -1
  707. data/spec/support/models/dragon.rb +0 -1
  708. data/spec/support/models/driver.rb +0 -1
  709. data/spec/support/models/drug.rb +0 -1
  710. data/spec/support/models/dungeon.rb +0 -1
  711. data/spec/support/models/edit.rb +0 -1
  712. data/spec/support/models/email.rb +0 -1
  713. data/spec/support/models/employer.rb +0 -1
  714. data/spec/support/models/entry.rb +0 -1
  715. data/spec/support/models/eraser.rb +0 -1
  716. data/spec/support/models/even.rb +0 -1
  717. data/spec/support/models/event.rb +0 -1
  718. data/spec/support/models/exhibition.rb +0 -1
  719. data/spec/support/models/exhibitor.rb +0 -1
  720. data/spec/support/models/explosion.rb +0 -1
  721. data/spec/support/models/eye.rb +0 -1
  722. data/spec/support/models/eye_bowl.rb +0 -1
  723. data/spec/support/models/face.rb +0 -1
  724. data/spec/support/models/favorite.rb +0 -1
  725. data/spec/support/models/filesystem.rb +0 -1
  726. data/spec/support/models/fire_hydrant.rb +0 -1
  727. data/spec/support/models/firefox.rb +0 -1
  728. data/spec/support/models/fish.rb +0 -1
  729. data/spec/support/models/folder.rb +0 -1
  730. data/spec/support/models/folder_item.rb +0 -1
  731. data/spec/support/models/fruits.rb +0 -1
  732. data/spec/support/models/game.rb +0 -1
  733. data/spec/support/models/ghost.rb +0 -1
  734. data/spec/support/models/guitar.rb +0 -1
  735. data/spec/support/models/hole.rb +0 -1
  736. data/spec/support/models/home.rb +0 -1
  737. data/spec/support/models/house.rb +0 -1
  738. data/spec/support/models/html_writer.rb +0 -1
  739. data/spec/support/models/id_key.rb +0 -1
  740. data/spec/support/models/idnodef.rb +0 -1
  741. data/spec/support/models/image.rb +0 -1
  742. data/spec/support/models/implant.rb +0 -1
  743. data/spec/support/models/instrument.rb +0 -1
  744. data/spec/support/models/item.rb +0 -1
  745. data/spec/support/models/jar.rb +0 -1
  746. data/spec/support/models/kaleidoscope.rb +0 -1
  747. data/spec/support/models/kangaroo.rb +0 -1
  748. data/spec/support/models/label.rb +2 -2
  749. data/spec/support/models/language.rb +0 -1
  750. data/spec/support/models/lat_lng.rb +0 -1
  751. data/spec/support/models/league.rb +0 -1
  752. data/spec/support/models/learner.rb +0 -1
  753. data/spec/support/models/line_item.rb +0 -1
  754. data/spec/support/models/location.rb +0 -1
  755. data/spec/support/models/login.rb +0 -1
  756. data/spec/support/models/manufacturer.rb +0 -1
  757. data/spec/support/models/meat.rb +0 -1
  758. data/spec/support/models/membership.rb +0 -1
  759. data/spec/support/models/message.rb +0 -1
  760. data/spec/support/models/minim.rb +0 -1
  761. data/spec/support/models/mixed_drink.rb +0 -1
  762. data/spec/support/models/mop.rb +0 -1
  763. data/spec/support/models/movie.rb +0 -1
  764. data/spec/support/models/my_hash.rb +0 -1
  765. data/spec/support/models/name.rb +0 -1
  766. data/spec/support/models/name_only.rb +0 -1
  767. data/spec/support/models/node.rb +0 -1
  768. data/spec/support/models/note.rb +0 -1
  769. data/spec/support/models/nut.rb +0 -1
  770. data/spec/support/models/odd.rb +0 -1
  771. data/spec/support/models/order.rb +2 -1
  772. data/spec/support/models/ordered_post.rb +1 -2
  773. data/spec/support/models/ordered_preference.rb +0 -1
  774. data/spec/support/models/oscar.rb +0 -1
  775. data/spec/support/models/other_owner_object.rb +0 -1
  776. data/spec/support/models/override.rb +0 -1
  777. data/spec/support/models/ownable.rb +0 -1
  778. data/spec/support/models/owner.rb +0 -1
  779. data/spec/support/models/pack.rb +0 -1
  780. data/spec/support/models/page.rb +0 -1
  781. data/spec/support/models/page_question.rb +0 -1
  782. data/spec/support/models/palette.rb +0 -1
  783. data/spec/support/models/parent.rb +0 -1
  784. data/spec/support/models/parent_doc.rb +0 -1
  785. data/spec/support/models/passport.rb +5 -1
  786. data/spec/support/models/patient.rb +0 -1
  787. data/spec/support/models/pdf_writer.rb +0 -1
  788. data/spec/support/models/pencil.rb +0 -1
  789. data/spec/support/models/person.rb +1 -1
  790. data/spec/support/models/pet.rb +0 -1
  791. data/spec/support/models/pet_owner.rb +0 -1
  792. data/spec/support/models/phone.rb +2 -2
  793. data/spec/support/models/piano.rb +0 -1
  794. data/spec/support/models/pizza.rb +0 -1
  795. data/spec/support/models/player.rb +0 -1
  796. data/spec/support/models/post.rb +0 -1
  797. data/spec/support/models/post_genre.rb +0 -1
  798. data/spec/support/models/powerup.rb +0 -1
  799. data/spec/support/models/preference.rb +0 -1
  800. data/spec/support/models/princess.rb +0 -1
  801. data/spec/support/models/product.rb +0 -1
  802. data/spec/support/models/profile.rb +0 -1
  803. data/spec/support/models/pronunciation.rb +0 -1
  804. data/spec/support/models/pub.rb +0 -1
  805. data/spec/support/models/publication/encyclopedia.rb +0 -1
  806. data/spec/support/models/publication/review.rb +0 -1
  807. data/spec/support/models/publication.rb +0 -1
  808. data/spec/support/models/purchase.rb +0 -1
  809. data/spec/support/models/purchased_item.rb +10 -0
  810. data/spec/support/models/question.rb +0 -1
  811. data/spec/support/models/quiz.rb +0 -1
  812. data/spec/support/models/rating.rb +0 -1
  813. data/spec/support/models/record.rb +0 -1
  814. data/spec/support/models/registry.rb +0 -1
  815. data/spec/support/models/role.rb +0 -1
  816. data/spec/support/models/root_category.rb +0 -1
  817. data/spec/support/models/sandwich.rb +0 -1
  818. data/spec/support/models/scheduler.rb +0 -1
  819. data/spec/support/models/scribe.rb +0 -1
  820. data/spec/support/models/sealer.rb +0 -1
  821. data/spec/support/models/seat.rb +0 -1
  822. data/spec/support/models/seo.rb +0 -1
  823. data/spec/support/models/series.rb +0 -1
  824. data/spec/support/models/server.rb +0 -1
  825. data/spec/support/models/service.rb +0 -1
  826. data/spec/support/models/shape.rb +0 -1
  827. data/spec/support/models/shelf.rb +0 -1
  828. data/spec/support/models/shipment_address.rb +0 -1
  829. data/spec/support/models/shipping_container.rb +0 -1
  830. data/spec/support/models/shipping_pack.rb +0 -1
  831. data/spec/support/models/shirt.rb +0 -1
  832. data/spec/support/models/shop.rb +0 -1
  833. data/spec/support/models/short_agent.rb +0 -1
  834. data/spec/support/models/short_quiz.rb +0 -1
  835. data/spec/support/models/simple.rb +0 -1
  836. data/spec/support/models/slave.rb +0 -1
  837. data/spec/support/models/song.rb +0 -1
  838. data/spec/support/models/sound.rb +0 -1
  839. data/spec/support/models/spacer.rb +0 -1
  840. data/spec/support/models/square.rb +0 -1
  841. data/spec/support/models/staff.rb +0 -1
  842. data/spec/support/models/store_as_dup_test1.rb +0 -1
  843. data/spec/support/models/store_as_dup_test2.rb +0 -1
  844. data/spec/support/models/store_as_dup_test3.rb +0 -1
  845. data/spec/support/models/store_as_dup_test4.rb +0 -1
  846. data/spec/support/models/strategy.rb +0 -1
  847. data/spec/support/models/sub_item.rb +0 -1
  848. data/spec/support/models/subscription.rb +0 -1
  849. data/spec/support/models/survey.rb +0 -1
  850. data/spec/support/models/symptom.rb +0 -1
  851. data/spec/support/models/tag.rb +0 -1
  852. data/spec/support/models/target.rb +0 -1
  853. data/spec/support/models/template.rb +0 -1
  854. data/spec/support/models/thing.rb +0 -1
  855. data/spec/support/models/threadlocker.rb +0 -1
  856. data/spec/support/models/title.rb +0 -1
  857. data/spec/support/models/tool.rb +0 -1
  858. data/spec/support/models/topping.rb +0 -1
  859. data/spec/support/models/toy.rb +0 -1
  860. data/spec/support/models/track.rb +0 -1
  861. data/spec/support/models/translation.rb +0 -1
  862. data/spec/support/models/tree.rb +0 -1
  863. data/spec/support/models/truck.rb +0 -1
  864. data/spec/support/models/updatable.rb +0 -1
  865. data/spec/support/models/user.rb +0 -1
  866. data/spec/support/models/user_account.rb +0 -1
  867. data/spec/support/models/validation_callback.rb +0 -1
  868. data/spec/support/models/vehicle.rb +0 -1
  869. data/spec/support/models/version.rb +0 -1
  870. data/spec/support/models/vertex.rb +0 -1
  871. data/spec/support/models/vet_visit.rb +0 -1
  872. data/spec/support/models/video.rb +0 -1
  873. data/spec/support/models/video_game.rb +0 -1
  874. data/spec/support/models/washer.rb +0 -1
  875. data/spec/support/models/weapon.rb +0 -1
  876. data/spec/support/models/wiki_page.rb +0 -1
  877. data/spec/support/models/word.rb +0 -1
  878. data/spec/support/models/word_origin.rb +0 -1
  879. data/spec/support/models/writer.rb +0 -1
  880. data/spec/support/shared/time.rb +0 -1
  881. data/spec/support/spec_config.rb +3 -1
  882. data.tar.gz.sig +0 -0
  883. metadata +642 -610
  884. metadata.gz.sig +0 -0
  885. data/lib/support/ruby_version.rb +0 -29
  886. data/spec/support/session_registry.rb +0 -50
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -41,7 +40,7 @@ describe Mongoid::Criteria do
41
40
  context "when the entries are the same" do
42
41
 
43
42
  let!(:band) do
44
- Band.create(name: "Depeche Mode")
43
+ Band.create!(name: "Depeche Mode")
45
44
  end
46
45
 
47
46
  let(:other) do
@@ -56,11 +55,11 @@ describe Mongoid::Criteria do
56
55
  context "when the entries are not the same" do
57
56
 
58
57
  let!(:band) do
59
- Band.create(name: "Depeche Mode")
58
+ Band.create!(name: "Depeche Mode")
60
59
  end
61
60
 
62
61
  let!(:other_band) do
63
- Band.create(name: "Tool")
62
+ Band.create!(name: "Tool")
64
63
  end
65
64
 
66
65
  let(:other) do
@@ -105,21 +104,21 @@ describe Mongoid::Criteria do
105
104
  describe "#asc" do
106
105
 
107
106
  let(:person) do
108
- Person.create
107
+ Person.create!
109
108
  end
110
109
 
111
110
  context "when the documents are embedded" do
112
111
 
113
112
  let!(:hobrecht) do
114
- person.addresses.create(street: "hobrecht", name: "hobrecht")
113
+ person.addresses.create!(street: "hobrecht", name: "hobrecht")
115
114
  end
116
115
 
117
116
  let!(:friedel) do
118
- person.addresses.create(street: "friedel", name: "friedel")
117
+ person.addresses.create!(street: "friedel", name: "friedel")
119
118
  end
120
119
 
121
120
  let!(:pfluger) do
122
- person.addresses.create(street: "pfluger", name: "pfluger")
121
+ person.addresses.create!(street: "pfluger", name: "pfluger")
123
122
  end
124
123
 
125
124
  let(:criteria) do
@@ -135,7 +134,7 @@ describe Mongoid::Criteria do
135
134
  describe "#batch_size" do
136
135
 
137
136
  let(:person) do
138
- Person.create
137
+ Person.create!
139
138
  end
140
139
 
141
140
  let(:criteria) do
@@ -154,7 +153,7 @@ describe Mongoid::Criteria do
154
153
  describe "#read" do
155
154
 
156
155
  let(:person) do
157
- Person.create
156
+ Person.create!
158
157
  end
159
158
 
160
159
  let(:criteria) do
@@ -171,11 +170,11 @@ describe Mongoid::Criteria do
171
170
  context "when provided a single field" do
172
171
 
173
172
  let!(:depeche) do
174
- Band.create(name: "Depeche Mode", likes: 1000)
173
+ Band.create!(name: "Depeche Mode", likes: 1000)
175
174
  end
176
175
 
177
176
  let!(:tool) do
178
- Band.create(name: "Tool", likes: 500)
177
+ Band.create!(name: "Tool", likes: 500)
179
178
  end
180
179
 
181
180
  let(:criteria) do
@@ -213,11 +212,11 @@ describe Mongoid::Criteria do
213
212
  context "when provided a single field" do
214
213
 
215
214
  let!(:depeche) do
216
- Band.create(name: "Depeche Mode", likes: 1000)
215
+ Band.create!(name: "Depeche Mode", likes: 1000)
217
216
  end
218
217
 
219
218
  let!(:tool) do
220
- Band.create(name: "Tool", likes: 500)
219
+ Band.create!(name: "Tool", likes: 500)
221
220
  end
222
221
 
223
222
  let(:criteria) do
@@ -239,11 +238,11 @@ describe Mongoid::Criteria do
239
238
  describe "\##{method}" do
240
239
 
241
240
  let!(:match) do
242
- Band.create(genres: [ "electro", "dub" ])
241
+ Band.create!(genres: [ "electro", "dub" ])
243
242
  end
244
243
 
245
244
  let!(:non_match) do
246
- Band.create(genres: [ "house" ])
245
+ Band.create!(genres: [ "house" ])
247
246
  end
248
247
 
249
248
  let(:criteria) do
@@ -261,11 +260,11 @@ describe Mongoid::Criteria do
261
260
  describe "\##{method}" do
262
261
 
263
262
  let!(:match) do
264
- Band.create(name: "Depeche Mode", genres: [ "electro" ])
263
+ Band.create!(name: "Depeche Mode", genres: [ "electro" ])
265
264
  end
266
265
 
267
266
  let!(:non_match) do
268
- Band.create(genres: [ "house" ])
267
+ Band.create!(genres: [ "house" ])
269
268
  end
270
269
 
271
270
  let(:criteria) do
@@ -281,7 +280,7 @@ describe Mongoid::Criteria do
281
280
  describe "#as_json" do
282
281
 
283
282
  let!(:band) do
284
- Band.create(name: "Depeche Mode")
283
+ Band.create!(name: "Depeche Mode")
285
284
  end
286
285
 
287
286
  let(:criteria) do
@@ -311,11 +310,11 @@ describe Mongoid::Criteria do
311
310
  describe "#between" do
312
311
 
313
312
  let!(:match) do
314
- Band.create(member_count: 3)
313
+ Band.create!(member_count: 3)
315
314
  end
316
315
 
317
316
  let!(:non_match) do
318
- Band.create(member_count: 10)
317
+ Band.create!(member_count: 10)
319
318
  end
320
319
 
321
320
  let(:criteria) do
@@ -381,7 +380,7 @@ describe Mongoid::Criteria do
381
380
  describe "#cache" do
382
381
 
383
382
  let!(:person) do
384
- Person.create
383
+ Person.create!
385
384
  end
386
385
 
387
386
  context "when no eager loading is involved" do
@@ -533,11 +532,11 @@ describe Mongoid::Criteria do
533
532
  describe "#delete" do
534
533
 
535
534
  let(:depeche) do
536
- Band.create(name: "Depeche Mode")
535
+ Band.create!(name: "Depeche Mode")
537
536
  end
538
537
 
539
538
  let(:tool) do
540
- Band.create(name: "Tool")
539
+ Band.create!(name: "Tool")
541
540
  end
542
541
 
543
542
  context "when no selector is provided" do
@@ -591,7 +590,7 @@ describe Mongoid::Criteria do
591
590
  describe "#each" do
592
591
 
593
592
  let!(:band) do
594
- Band.create(name: "Depeche Mode")
593
+ Band.create!(name: "Depeche Mode")
595
594
  end
596
595
 
597
596
  context "when provided a block" do
@@ -611,14 +610,14 @@ describe Mongoid::Criteria do
611
610
  describe "#elem_match" do
612
611
 
613
612
  let!(:match) do
614
- Band.create(name: "Depeche Mode").tap do |band|
613
+ Band.create!(name: "Depeche Mode").tap do |band|
615
614
  r = band.records
616
- r.create(name: "101")
615
+ r.create!(name: "101")
617
616
  end
618
617
  end
619
618
 
620
619
  let!(:non_match) do
621
- Band.create(genres: [ "house" ])
620
+ Band.create!(genres: [ "house" ])
622
621
  end
623
622
 
624
623
  let(:criteria) do
@@ -664,7 +663,7 @@ describe Mongoid::Criteria do
664
663
  context "when matching documents exist" do
665
664
 
666
665
  let!(:match) do
667
- Band.create(name: "Depeche Mode")
666
+ Band.create!(name: "Depeche Mode")
668
667
  end
669
668
 
670
669
  let(:criteria) do
@@ -679,7 +678,7 @@ describe Mongoid::Criteria do
679
678
  context "when no matching documents exist" do
680
679
 
681
680
  let!(:nonmatch) do
682
- Band.create(name: "New Order")
681
+ Band.create!(name: "New Order")
683
682
  end
684
683
 
685
684
  let(:criteria) do
@@ -695,11 +694,11 @@ describe Mongoid::Criteria do
695
694
  describe "#exists" do
696
695
 
697
696
  let!(:match) do
698
- Band.create(name: "Depeche Mode")
697
+ Band.create!(name: "Depeche Mode")
699
698
  end
700
699
 
701
700
  let!(:non_match) do
702
- Band.create
701
+ Band.create!
703
702
  end
704
703
 
705
704
  let(:criteria) do
@@ -716,7 +715,7 @@ describe Mongoid::Criteria do
716
715
  context "when matching documents exist" do
717
716
 
718
717
  let!(:match) do
719
- Band.create(name: "Depeche Mode")
718
+ Band.create!(name: "Depeche Mode")
720
719
  end
721
720
 
722
721
  let(:criteria) do
@@ -858,11 +857,11 @@ describe Mongoid::Criteria do
858
857
  describe "#find_one_and_update" do
859
858
 
860
859
  let!(:depeche) do
861
- Band.create(name: "Depeche Mode")
860
+ Band.create!(name: "Depeche Mode")
862
861
  end
863
862
 
864
863
  let!(:tool) do
865
- Band.create(name: "Tool")
864
+ Band.create!(name: "Tool")
866
865
  end
867
866
 
868
867
  context "when the selector matches" do
@@ -1060,7 +1059,7 @@ describe Mongoid::Criteria do
1060
1059
  end
1061
1060
 
1062
1061
  let!(:match) do
1063
- Bar.create(location: [ 52.30, 13.25 ])
1062
+ Bar.create!(location: [ 52.30, 13.25 ])
1064
1063
  end
1065
1064
 
1066
1065
  let(:criteria) do
@@ -1072,7 +1071,7 @@ describe Mongoid::Criteria do
1072
1071
  end
1073
1072
  end
1074
1073
 
1075
- describe "#gt" do
1074
+ describe "#eq" do
1076
1075
 
1077
1076
  let!(:match) do
1078
1077
  Band.create(member_count: 5)
@@ -1082,6 +1081,25 @@ describe Mongoid::Criteria do
1082
1081
  Band.create(member_count: 1)
1083
1082
  end
1084
1083
 
1084
+ let(:criteria) do
1085
+ Band.eq(member_count: 5)
1086
+ end
1087
+
1088
+ it "returns the matching documents" do
1089
+ expect(criteria).to eq([ match ])
1090
+ end
1091
+ end
1092
+
1093
+ describe "#gt" do
1094
+
1095
+ let!(:match) do
1096
+ Band.create!(member_count: 5)
1097
+ end
1098
+
1099
+ let!(:non_match) do
1100
+ Band.create!(member_count: 1)
1101
+ end
1102
+
1085
1103
  let(:criteria) do
1086
1104
  Band.gt(member_count: 4)
1087
1105
  end
@@ -1094,11 +1112,11 @@ describe Mongoid::Criteria do
1094
1112
  describe "#gte" do
1095
1113
 
1096
1114
  let!(:match) do
1097
- Band.create(member_count: 5)
1115
+ Band.create!(member_count: 5)
1098
1116
  end
1099
1117
 
1100
1118
  let!(:non_match) do
1101
- Band.create(member_count: 1)
1119
+ Band.create!(member_count: 1)
1102
1120
  end
1103
1121
 
1104
1122
  let(:criteria) do
@@ -1117,11 +1135,11 @@ describe Mongoid::Criteria do
1117
1135
  context "when querying on a normal field" do
1118
1136
 
1119
1137
  let!(:match) do
1120
- Band.create(genres: [ "electro", "dub" ])
1138
+ Band.create!(genres: [ "electro", "dub" ])
1121
1139
  end
1122
1140
 
1123
1141
  let!(:non_match) do
1124
- Band.create(genres: [ "house" ])
1142
+ Band.create!(genres: [ "house" ])
1125
1143
  end
1126
1144
 
1127
1145
  let(:criteria) do
@@ -1140,7 +1158,7 @@ describe Mongoid::Criteria do
1140
1158
  end
1141
1159
 
1142
1160
  let!(:match_one) do
1143
- Person.create(preference_ids: [ id ])
1161
+ Person.create!(preference_ids: [ id ])
1144
1162
  end
1145
1163
 
1146
1164
  context "when providing valid ids" do
@@ -1181,7 +1199,7 @@ describe Mongoid::Criteria do
1181
1199
  context "when the relation is a one to one" do
1182
1200
 
1183
1201
  let!(:game) do
1184
- Game.create
1202
+ Game.create!
1185
1203
  end
1186
1204
 
1187
1205
  let(:criteria) do
@@ -1219,7 +1237,7 @@ describe Mongoid::Criteria do
1219
1237
  describe "#includes" do
1220
1238
 
1221
1239
  let!(:person) do
1222
- Person.create(age: 1)
1240
+ Person.create!(age: 1)
1223
1241
  end
1224
1242
 
1225
1243
  context "when providing a name that is not a relation" do
@@ -1234,11 +1252,11 @@ describe Mongoid::Criteria do
1234
1252
  context "when providing one association" do
1235
1253
 
1236
1254
  let!(:user) do
1237
- User.create(posts: [ post1 ])
1255
+ User.create!(posts: [ post1 ])
1238
1256
  end
1239
1257
 
1240
1258
  let!(:post1) do
1241
- Post.create
1259
+ Post.create!
1242
1260
  end
1243
1261
 
1244
1262
  let(:result) do
@@ -1257,15 +1275,15 @@ describe Mongoid::Criteria do
1257
1275
  context "when providing a list of associations" do
1258
1276
 
1259
1277
  let!(:user) do
1260
- User.create(posts: [ post1 ], descriptions: [ description1 ])
1278
+ User.create!(posts: [ post1 ], descriptions: [ description1 ])
1261
1279
  end
1262
1280
 
1263
1281
  let!(:post1) do
1264
- Post.create
1282
+ Post.create!
1265
1283
  end
1266
1284
 
1267
1285
  let!(:description1) do
1268
- Description.create(details: 1)
1286
+ Description.create!(details: 1)
1269
1287
  end
1270
1288
 
1271
1289
  let(:result) do
@@ -1285,13 +1303,13 @@ describe Mongoid::Criteria do
1285
1303
  context "when providing a nested association" do
1286
1304
 
1287
1305
  let!(:user) do
1288
- User.create
1306
+ User.create!
1289
1307
  end
1290
1308
 
1291
1309
  before do
1292
- p = Post.create(alerts: [ Alert.create ])
1310
+ p = Post.create!(alerts: [ Alert.create! ])
1293
1311
  user.posts = [ p ]
1294
- user.save
1312
+ user.save!
1295
1313
  end
1296
1314
 
1297
1315
  let(:result) do
@@ -1311,7 +1329,7 @@ describe Mongoid::Criteria do
1311
1329
  context "when providing a deeply nested association" do
1312
1330
 
1313
1331
  let!(:user) do
1314
- User.create
1332
+ User.create!
1315
1333
  end
1316
1334
 
1317
1335
  let(:results) do
@@ -1349,15 +1367,15 @@ describe Mongoid::Criteria do
1349
1367
  context "when the includes is on the subclass" do
1350
1368
 
1351
1369
  let!(:c_one) do
1352
- C.create
1370
+ C.create!
1353
1371
  end
1354
1372
 
1355
1373
  let!(:c_two) do
1356
- C.create
1374
+ C.create!
1357
1375
  end
1358
1376
 
1359
1377
  let!(:b) do
1360
- B.create(c: c_two)
1378
+ B.create!(c: c_two)
1361
1379
  end
1362
1380
 
1363
1381
  let!(:results) do
@@ -1412,19 +1430,19 @@ describe Mongoid::Criteria do
1412
1430
  context "when the includes is on the several relations" do
1413
1431
 
1414
1432
  let!(:d_one) do
1415
- D.create
1433
+ D.create!
1416
1434
  end
1417
1435
 
1418
1436
  let!(:d_two) do
1419
- D.create
1437
+ D.create!
1420
1438
  end
1421
1439
 
1422
1440
  let!(:b) do
1423
- B.create(d: d_two)
1441
+ B.create!(d: d_two)
1424
1442
  end
1425
1443
 
1426
1444
  let!(:c) do
1427
- C.create(d: d_two)
1445
+ C.create!(d: d_two)
1428
1446
  end
1429
1447
 
1430
1448
  let!(:results) do
@@ -1483,19 +1501,19 @@ describe Mongoid::Criteria do
1483
1501
  context "when the includes is on the several relations" do
1484
1502
 
1485
1503
  let!(:d_one) do
1486
- D.create
1504
+ D.create!
1487
1505
  end
1488
1506
 
1489
1507
  let!(:d_two) do
1490
- D.create
1508
+ D.create!
1491
1509
  end
1492
1510
 
1493
1511
  let!(:bs) do
1494
- 2.times.map { B.create(d: d_two) }
1512
+ 2.times.map { B.create!(d: d_two) }
1495
1513
  end
1496
1514
 
1497
1515
  let!(:cs) do
1498
- 2.times.map { C.create(d: d_two) }
1516
+ 2.times.map { C.create!(d: d_two) }
1499
1517
  end
1500
1518
 
1501
1519
  let!(:results) do
@@ -1541,7 +1559,7 @@ describe Mongoid::Criteria do
1541
1559
  context "when mapping the results more than once" do
1542
1560
 
1543
1561
  let!(:post) do
1544
- person.posts.create(title: "one")
1562
+ person.posts.create!(title: "one")
1545
1563
  end
1546
1564
 
1547
1565
  let(:criteria) do
@@ -1563,15 +1581,15 @@ describe Mongoid::Criteria do
1563
1581
  context "when the criteria is from the root" do
1564
1582
 
1565
1583
  let!(:person_two) do
1566
- Person.create(age: 2)
1584
+ Person.create!(age: 2)
1567
1585
  end
1568
1586
 
1569
1587
  let!(:post_one) do
1570
- person.posts.create(title: "one")
1588
+ person.posts.create!(title: "one")
1571
1589
  end
1572
1590
 
1573
1591
  let!(:post_two) do
1574
- person_two.posts.create(title: "two")
1592
+ person_two.posts.create!(title: "two")
1575
1593
  end
1576
1594
 
1577
1595
  context "when calling first" do
@@ -1620,15 +1638,15 @@ describe Mongoid::Criteria do
1620
1638
  context "when the criteria is from an embedded relation" do
1621
1639
 
1622
1640
  let(:peep) do
1623
- Person.create
1641
+ Person.create!
1624
1642
  end
1625
1643
 
1626
1644
  let!(:address_one) do
1627
- peep.addresses.create(street: "rosenthaler")
1645
+ peep.addresses.create!(street: "rosenthaler")
1628
1646
  end
1629
1647
 
1630
1648
  let!(:address_two) do
1631
- peep.addresses.create(street: "weinmeister")
1649
+ peep.addresses.create!(street: "weinmeister")
1632
1650
  end
1633
1651
 
1634
1652
  let!(:depeche) do
@@ -1642,8 +1660,8 @@ describe Mongoid::Criteria do
1642
1660
  before do
1643
1661
  address_one.band = depeche
1644
1662
  address_two.band = tool
1645
- address_one.save
1646
- address_two.save
1663
+ address_one.save!
1664
+ address_two.save!
1647
1665
  end
1648
1666
 
1649
1667
  context "when calling first" do
@@ -1740,11 +1758,11 @@ describe Mongoid::Criteria do
1740
1758
  end
1741
1759
 
1742
1760
  let!(:post_one) do
1743
- person.posts.create(title: "one")
1761
+ person.posts.create!(title: "one")
1744
1762
  end
1745
1763
 
1746
1764
  let!(:post_two) do
1747
- person.posts.create(title: "two")
1765
+ person.posts.create!(title: "two")
1748
1766
  end
1749
1767
 
1750
1768
  context "when the criteria has no options" do
@@ -1862,11 +1880,11 @@ describe Mongoid::Criteria do
1862
1880
  context "when the criteria has limiting options" do
1863
1881
 
1864
1882
  let!(:person_two) do
1865
- Person.create
1883
+ Person.create!
1866
1884
  end
1867
1885
 
1868
1886
  let!(:post_three) do
1869
- person_two.posts.create(title: "three")
1887
+ person_two.posts.create!(title: "three")
1870
1888
  end
1871
1889
 
1872
1890
  let!(:criteria) do
@@ -1898,11 +1916,11 @@ describe Mongoid::Criteria do
1898
1916
  context "when including a has and belongs to many" do
1899
1917
 
1900
1918
  let!(:preference_one) do
1901
- person.preferences.create(name: "one")
1919
+ person.preferences.create!(name: "one")
1902
1920
  end
1903
1921
 
1904
1922
  let!(:preference_two) do
1905
- person.preferences.create(name: "two")
1923
+ person.preferences.create!(name: "two")
1906
1924
  end
1907
1925
 
1908
1926
  context "when one of the related items is deleted" do
@@ -2006,11 +2024,11 @@ describe Mongoid::Criteria do
2006
2024
  context "when including a has many" do
2007
2025
 
2008
2026
  let!(:post_one) do
2009
- person.posts.create(title: "one")
2027
+ person.posts.create!(title: "one")
2010
2028
  end
2011
2029
 
2012
2030
  let!(:post_two) do
2013
- person.posts.create(title: "two")
2031
+ person.posts.create!(title: "two")
2014
2032
  end
2015
2033
 
2016
2034
  context "when the criteria has no options" do
@@ -2095,11 +2113,11 @@ describe Mongoid::Criteria do
2095
2113
  context "when the criteria has limiting options" do
2096
2114
 
2097
2115
  let!(:person_two) do
2098
- Person.create
2116
+ Person.create!
2099
2117
  end
2100
2118
 
2101
2119
  let!(:post_three) do
2102
- person_two.posts.create(title: "three")
2120
+ person_two.posts.create!(title: "three")
2103
2121
  end
2104
2122
 
2105
2123
  let!(:criteria) do
@@ -2160,7 +2178,7 @@ describe Mongoid::Criteria do
2160
2178
  context "when the criteria has limiting options" do
2161
2179
 
2162
2180
  let!(:person_two) do
2163
- Person.create(age: 2)
2181
+ Person.create!(age: 2)
2164
2182
  end
2165
2183
 
2166
2184
  let!(:game_three) do
@@ -2192,7 +2210,7 @@ describe Mongoid::Criteria do
2192
2210
  context "when including a belongs to" do
2193
2211
 
2194
2212
  let(:person_two) do
2195
- Person.create(age: 2)
2213
+ Person.create!(age: 2)
2196
2214
  end
2197
2215
 
2198
2216
  let!(:game_one) do
@@ -2253,11 +2271,11 @@ describe Mongoid::Criteria do
2253
2271
  context "when including multiples in the same criteria" do
2254
2272
 
2255
2273
  let!(:post_one) do
2256
- person.posts.create(title: "one")
2274
+ person.posts.create!(title: "one")
2257
2275
  end
2258
2276
 
2259
2277
  let!(:post_two) do
2260
- person.posts.create(title: "two")
2278
+ person.posts.create!(title: "two")
2261
2279
  end
2262
2280
 
2263
2281
  let!(:game_one) do
@@ -2327,11 +2345,11 @@ describe Mongoid::Criteria do
2327
2345
  describe "#lt" do
2328
2346
 
2329
2347
  let!(:match) do
2330
- Band.create(member_count: 1)
2348
+ Band.create!(member_count: 1)
2331
2349
  end
2332
2350
 
2333
2351
  let!(:non_match) do
2334
- Band.create(member_count: 5)
2352
+ Band.create!(member_count: 5)
2335
2353
  end
2336
2354
 
2337
2355
  let(:criteria) do
@@ -2346,11 +2364,11 @@ describe Mongoid::Criteria do
2346
2364
  describe "#lte" do
2347
2365
 
2348
2366
  let!(:match) do
2349
- Band.create(member_count: 4)
2367
+ Band.create!(member_count: 4)
2350
2368
  end
2351
2369
 
2352
2370
  let!(:non_match) do
2353
- Band.create(member_count: 5)
2371
+ Band.create!(member_count: 5)
2354
2372
  end
2355
2373
 
2356
2374
  let(:criteria) do
@@ -2383,11 +2401,11 @@ describe Mongoid::Criteria do
2383
2401
  end
2384
2402
 
2385
2403
  let!(:depeche_mode) do
2386
- Band.create(name: "Depeche Mode", likes: 200)
2404
+ Band.create!(name: "Depeche Mode", likes: 200)
2387
2405
  end
2388
2406
 
2389
2407
  let!(:tool) do
2390
- Band.create(name: "Tool", likes: 100)
2408
+ Band.create!(name: "Tool", likes: 100)
2391
2409
  end
2392
2410
 
2393
2411
  context "when no timeout options are provided" do
@@ -2410,11 +2428,11 @@ describe Mongoid::Criteria do
2410
2428
  context "when provided a single field" do
2411
2429
 
2412
2430
  let!(:depeche) do
2413
- Band.create(name: "Depeche Mode", likes: 1000)
2431
+ Band.create!(name: "Depeche Mode", likes: 1000)
2414
2432
  end
2415
2433
 
2416
2434
  let!(:tool) do
2417
- Band.create(name: "Tool", likes: 500)
2435
+ Band.create!(name: "Tool", likes: 500)
2418
2436
  end
2419
2437
 
2420
2438
  let(:criteria) do
@@ -2454,11 +2472,11 @@ describe Mongoid::Criteria do
2454
2472
  end
2455
2473
 
2456
2474
  let!(:match) do
2457
- Bar.create(location: [ 52.30, 13.25 ])
2475
+ Bar.create!(location: [ 52.30, 13.25 ])
2458
2476
  end
2459
2477
 
2460
2478
  let!(:non_match) do
2461
- Bar.create(location: [ 19.26, 99.70 ])
2479
+ Bar.create!(location: [ 19.26, 99.70 ])
2462
2480
  end
2463
2481
 
2464
2482
  let(:criteria) do
@@ -2611,11 +2629,11 @@ describe Mongoid::Criteria do
2611
2629
  context "when provided a single field" do
2612
2630
 
2613
2631
  let!(:depeche) do
2614
- Band.create(name: "Depeche Mode", likes: 1000)
2632
+ Band.create!(name: "Depeche Mode", likes: 1000)
2615
2633
  end
2616
2634
 
2617
2635
  let!(:tool) do
2618
- Band.create(name: "Tool", likes: 500)
2636
+ Band.create!(name: "Tool", likes: 500)
2619
2637
  end
2620
2638
 
2621
2639
  let(:criteria) do
@@ -2651,11 +2669,11 @@ describe Mongoid::Criteria do
2651
2669
  describe "#mod" do
2652
2670
 
2653
2671
  let!(:match) do
2654
- Band.create(member_count: 5)
2672
+ Band.create!(member_count: 5)
2655
2673
  end
2656
2674
 
2657
2675
  let!(:non_match) do
2658
- Band.create(member_count: 2)
2676
+ Band.create!(member_count: 2)
2659
2677
  end
2660
2678
 
2661
2679
  let(:criteria) do
@@ -2670,11 +2688,11 @@ describe Mongoid::Criteria do
2670
2688
  describe "#ne" do
2671
2689
 
2672
2690
  let!(:match) do
2673
- Band.create(name: "Depeche Mode")
2691
+ Band.create!(name: "Depeche Mode")
2674
2692
  end
2675
2693
 
2676
2694
  let!(:non_match) do
2677
- Band.create(name: "Tool")
2695
+ Band.create!(name: "Tool")
2678
2696
  end
2679
2697
 
2680
2698
  let(:criteria) do
@@ -2693,7 +2711,7 @@ describe Mongoid::Criteria do
2693
2711
  end
2694
2712
 
2695
2713
  let!(:match) do
2696
- Bar.create(location: [ 52.30, 13.25 ])
2714
+ Bar.create!(location: [ 52.30, 13.25 ])
2697
2715
  end
2698
2716
 
2699
2717
  let(:criteria) do
@@ -2712,7 +2730,7 @@ describe Mongoid::Criteria do
2712
2730
  end
2713
2731
 
2714
2732
  let!(:match) do
2715
- Bar.create(location: [ 52.30, 13.25 ])
2733
+ Bar.create!(location: [ 52.30, 13.25 ])
2716
2734
  end
2717
2735
 
2718
2736
  let(:criteria) do
@@ -2727,11 +2745,11 @@ describe Mongoid::Criteria do
2727
2745
  describe "#nin" do
2728
2746
 
2729
2747
  let!(:match) do
2730
- Band.create(name: "Depeche Mode")
2748
+ Band.create!(name: "Depeche Mode")
2731
2749
  end
2732
2750
 
2733
2751
  let!(:non_match) do
2734
- Band.create(name: "Tool")
2752
+ Band.create!(name: "Tool")
2735
2753
  end
2736
2754
 
2737
2755
  let(:criteria) do
@@ -2746,11 +2764,11 @@ describe Mongoid::Criteria do
2746
2764
  describe "#nor" do
2747
2765
 
2748
2766
  let!(:match) do
2749
- Band.create(name: "Depeche Mode")
2767
+ Band.create!(name: "Depeche Mode")
2750
2768
  end
2751
2769
 
2752
2770
  let!(:non_match) do
2753
- Band.create(name: "Tool")
2771
+ Band.create!(name: "Tool")
2754
2772
  end
2755
2773
 
2756
2774
  let(:criteria) do
@@ -2767,11 +2785,11 @@ describe Mongoid::Criteria do
2767
2785
  describe "\##{method}" do
2768
2786
 
2769
2787
  let!(:match) do
2770
- Band.create(name: "Depeche Mode")
2788
+ Band.create!(name: "Depeche Mode")
2771
2789
  end
2772
2790
 
2773
2791
  let!(:non_match) do
2774
- Band.create(name: "Tool")
2792
+ Band.create!(name: "Tool")
2775
2793
  end
2776
2794
 
2777
2795
  context "when sending a normal $or criterion" do
@@ -2801,25 +2819,29 @@ describe Mongoid::Criteria do
2801
2819
  describe "#pluck" do
2802
2820
 
2803
2821
  let!(:depeche) do
2804
- Band.create(name: "Depeche Mode", likes: 3)
2822
+ Band.create!(name: "Depeche Mode", likes: 3)
2805
2823
  end
2806
2824
 
2807
2825
  let!(:tool) do
2808
- Band.create(name: "Tool", likes: 3)
2826
+ Band.create!(name: "Tool", likes: 3)
2809
2827
  end
2810
2828
 
2811
2829
  let!(:photek) do
2812
- Band.create(name: "Photek", likes: 1)
2830
+ Band.create!(name: "Photek", likes: 1)
2831
+ end
2832
+
2833
+ let(:maniacs) do
2834
+ Band.create!(name: "10,000 Maniacs", likes: 1, sales: "1E2")
2813
2835
  end
2814
2836
 
2815
2837
  context "when the field is aliased" do
2816
2838
 
2817
2839
  let!(:expensive) do
2818
- Product.create(price: 100000)
2840
+ Product.create!(price: 100000)
2819
2841
  end
2820
2842
 
2821
2843
  let!(:cheap) do
2822
- Product.create(price: 1)
2844
+ Product.create!(price: 1)
2823
2845
  end
2824
2846
 
2825
2847
  context "when using alias_attribute" do
@@ -2828,8 +2850,10 @@ describe Mongoid::Criteria do
2828
2850
  Product.pluck(:price)
2829
2851
  end
2830
2852
 
2831
- it "uses the aliases" do
2832
- expect(plucked).to eq([ 100000, 1 ])
2853
+ with_config_values :legacy_pluck_distinct, true, false do
2854
+ it "uses the aliases" do
2855
+ expect(plucked).to eq([ 100000, 1 ])
2856
+ end
2833
2857
  end
2834
2858
  end
2835
2859
  end
@@ -2846,14 +2870,18 @@ describe Mongoid::Criteria do
2846
2870
  criteria.pluck(:name)
2847
2871
  end
2848
2872
 
2849
- it "returns the values" do
2850
- expect(plucked).to contain_exactly("Depeche Mode", "Tool", "Photek")
2873
+ with_config_values :legacy_pluck_distinct, true, false do
2874
+ it "returns the values" do
2875
+ expect(plucked).to contain_exactly("Depeche Mode", "Tool", "Photek")
2876
+ end
2851
2877
  end
2852
2878
 
2853
2879
  context "when subsequently executing the criteria without a pluck" do
2854
2880
 
2855
- it "does not limit the fields" do
2856
- expect(criteria.first.likes).to eq(3)
2881
+ with_config_values :legacy_pluck_distinct, true, false do
2882
+ it "does not limit the fields" do
2883
+ expect(criteria.first.likes).to eq(3)
2884
+ end
2857
2885
  end
2858
2886
  end
2859
2887
 
@@ -2864,51 +2892,83 @@ describe Mongoid::Criteria do
2864
2892
  end
2865
2893
 
2866
2894
  context 'when a top-level field and a subdocument field are plucked' do
2867
-
2868
2895
  before do
2869
- Band.create(name: 'FKA Twigs')
2870
- Band.create(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
2896
+ Band.create!(name: 'FKA Twigs')
2897
+ Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
2871
2898
  end
2872
2899
 
2873
2900
  let(:embedded_pluck) do
2874
2901
  criteria.pluck(:name, 'records.name')
2875
2902
  end
2876
2903
 
2877
- let(:expected) do
2878
- [
2879
- ["FKA Twigs", nil],
2880
- ['FKA Twigs', [{ "name" => "LP1" }]]
2881
- ]
2904
+ context "when legacy_pluck_distinct is set" do
2905
+ config_override :legacy_pluck_distinct, true
2906
+ let(:expected) do
2907
+ [
2908
+ ["FKA Twigs", nil],
2909
+ ['FKA Twigs', [{ "name" => "LP1" }]]
2910
+ ]
2911
+ end
2912
+
2913
+ it 'returns the list of top-level field and subdocument values' do
2914
+ expect(embedded_pluck).to eq(expected)
2915
+ end
2882
2916
  end
2883
2917
 
2884
- it 'returns the list of top-level field and subdocument values' do
2885
- expect(embedded_pluck). to eq(expected)
2918
+ context "when legacy_pluck_distinct is not set" do
2919
+ config_override :legacy_pluck_distinct, false
2920
+ let(:expected) do
2921
+ [
2922
+ ["FKA Twigs", nil],
2923
+ ['FKA Twigs', ["LP1"]]
2924
+ ]
2925
+ end
2926
+
2927
+ it 'returns the list of top-level field and subdocument values' do
2928
+ expect(embedded_pluck).to eq(expected)
2929
+ end
2886
2930
  end
2887
2931
  end
2888
2932
 
2889
2933
  context 'when only a subdocument field is plucked' do
2890
2934
 
2891
2935
  before do
2892
- Band.create(name: 'FKA Twigs')
2893
- Band.create(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
2936
+ Band.create!(name: 'FKA Twigs')
2937
+ Band.create!(name: 'FKA Twigs', records: [ Record.new(name: 'LP1') ])
2894
2938
  end
2895
2939
 
2896
2940
  let(:embedded_pluck) do
2897
2941
  criteria.pluck('records.name')
2898
2942
  end
2899
2943
 
2900
- let(:expected) do
2901
- [
2902
- nil,
2903
- [{ "name" => "LP1" }]
2904
- ]
2944
+ context "when legacy_pluck_distinct is set" do
2945
+ config_override :legacy_pluck_distinct, true
2946
+ let(:expected) do
2947
+ [
2948
+ nil,
2949
+ [{ "name" => "LP1" }]
2950
+ ]
2951
+ end
2952
+
2953
+ it 'returns the list of subdocument values' do
2954
+ expect(embedded_pluck).to eq(expected)
2955
+ end
2905
2956
  end
2906
2957
 
2907
- it 'returns the list of subdocument values' do
2908
- expect(embedded_pluck). to eq(expected)
2958
+ context "when legacy_pluck_distinct is not set" do
2959
+ config_override :legacy_pluck_distinct, false
2960
+ let(:expected) do
2961
+ [
2962
+ nil,
2963
+ ["LP1"]
2964
+ ]
2965
+ end
2966
+
2967
+ it 'returns the list of subdocument values' do
2968
+ expect(embedded_pluck).to eq(expected)
2969
+ end
2909
2970
  end
2910
2971
  end
2911
-
2912
2972
  end
2913
2973
  end
2914
2974
 
@@ -2918,8 +2978,10 @@ describe Mongoid::Criteria do
2918
2978
  Band.where(:name.exists => true).pluck(:name, :likes)
2919
2979
  end
2920
2980
 
2921
- it "returns the values" do
2922
- expect(plucked).to contain_exactly(["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
2981
+ with_config_values :legacy_pluck_distinct, true, false do
2982
+ it "returns the values" do
2983
+ expect(plucked).to contain_exactly(["Depeche Mode", 3], ["Tool", 3], ["Photek", 1])
2984
+ end
2923
2985
  end
2924
2986
  end
2925
2987
 
@@ -2929,8 +2991,10 @@ describe Mongoid::Criteria do
2929
2991
  Band.where(:name.exists => true).pluck(:likes)
2930
2992
  end
2931
2993
 
2932
- it "returns the duplicates" do
2933
- expect(plucked).to contain_exactly(3, 3, 1)
2994
+ with_config_values :legacy_pluck_distinct, true, false do
2995
+ it "returns the duplicates" do
2996
+ expect(plucked).to contain_exactly(3, 3, 1)
2997
+ end
2934
2998
  end
2935
2999
  end
2936
3000
  end
@@ -2941,8 +3005,10 @@ describe Mongoid::Criteria do
2941
3005
  Band.where(name: "New Order").pluck(:_id)
2942
3006
  end
2943
3007
 
2944
- it "returns an empty array" do
2945
- expect(plucked).to be_empty
3008
+ with_config_values :legacy_pluck_distinct, true, false do
3009
+ it "returns an empty array" do
3010
+ expect(plucked).to be_empty
3011
+ end
2946
3012
  end
2947
3013
  end
2948
3014
 
@@ -2952,8 +3018,10 @@ describe Mongoid::Criteria do
2952
3018
  Band.all.pluck(:id)
2953
3019
  end
2954
3020
 
2955
- it "returns the field values" do
2956
- expect(plucked).to eq([ depeche.id, tool.id, photek.id ])
3021
+ with_config_values :legacy_pluck_distinct, true, false do
3022
+ it "returns the field values" do
3023
+ expect(plucked).to eq([ depeche.id, tool.id, photek.id ])
3024
+ end
2957
3025
  end
2958
3026
  end
2959
3027
 
@@ -2963,8 +3031,10 @@ describe Mongoid::Criteria do
2963
3031
  Band.all.pluck(:id, :fooz)
2964
3032
  end
2965
3033
 
2966
- it "returns nil for the field that doesnt exist" do
2967
- expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil] ])
3034
+ with_config_values :legacy_pluck_distinct, true, false do
3035
+ it "returns nil for the field that doesnt exist" do
3036
+ expect(plucked).to eq([[depeche.id, nil], [tool.id, nil], [photek.id, nil] ])
3037
+ end
2968
3038
  end
2969
3039
  end
2970
3040
 
@@ -2976,8 +3046,10 @@ describe Mongoid::Criteria do
2976
3046
  Band.all.pluck(:foo)
2977
3047
  end
2978
3048
 
2979
- it "returns a array with nil values" do
2980
- expect(plucked).to eq([nil, nil, nil])
3049
+ with_config_values :legacy_pluck_distinct, true, false do
3050
+ it "returns a array with nil values" do
3051
+ expect(plucked).to eq([nil, nil, nil])
3052
+ end
2981
3053
  end
2982
3054
  end
2983
3055
 
@@ -2987,8 +3059,10 @@ describe Mongoid::Criteria do
2987
3059
  Band.all.pluck(:foo, :bar)
2988
3060
  end
2989
3061
 
2990
- it "returns a nil arrays" do
2991
- expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil]])
3062
+ with_config_values :legacy_pluck_distinct, true, false do
3063
+ it "returns a nil arrays" do
3064
+ expect(plucked).to eq([[nil, nil], [nil, nil], [nil, nil]])
3065
+ end
2992
3066
  end
2993
3067
  end
2994
3068
  end
@@ -2997,10 +3071,10 @@ describe Mongoid::Criteria do
2997
3071
 
2998
3072
  before do
2999
3073
  I18n.locale = :en
3000
- d = Dictionary.create(description: 'english-text')
3074
+ d = Dictionary.create!(description: 'english-text')
3001
3075
  I18n.locale = :de
3002
3076
  d.description = 'deutsch-text'
3003
- d.save
3077
+ d.save!
3004
3078
  end
3005
3079
 
3006
3080
  after do
@@ -3008,13 +3082,48 @@ describe Mongoid::Criteria do
3008
3082
  end
3009
3083
 
3010
3084
  context 'when plucking the entire field' do
3011
-
3012
3085
  let(:plucked) do
3013
3086
  Dictionary.all.pluck(:description)
3014
3087
  end
3015
3088
 
3016
- it 'returns all translations' do
3017
- expect(plucked.first).to eq({'en' => 'english-text', 'de' => 'deutsch-text'})
3089
+ let(:plucked_translations) do
3090
+ Dictionary.all.pluck(:description_translations)
3091
+ end
3092
+
3093
+ let(:plucked_translations_both) do
3094
+ Dictionary.all.pluck(:description_translations, :description)
3095
+ end
3096
+
3097
+ context "when legacy_pluck_distinct is set" do
3098
+ config_override :legacy_pluck_distinct, true
3099
+
3100
+ it 'returns the non-demongoized translations' do
3101
+ expect(plucked.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
3102
+ end
3103
+
3104
+ it 'returns nil' do
3105
+ expect(plucked_translations.first).to eq(nil)
3106
+ end
3107
+
3108
+ it 'returns nil for _translations' do
3109
+ expect(plucked_translations_both.first).to eq([nil, {"de"=>"deutsch-text", "en"=>"english-text"}])
3110
+ end
3111
+ end
3112
+
3113
+ context "when legacy_pluck_distinct is not set" do
3114
+ config_override :legacy_pluck_distinct, false
3115
+
3116
+ it 'returns the demongoized translations' do
3117
+ expect(plucked.first).to eq('deutsch-text')
3118
+ end
3119
+
3120
+ it 'returns the full translations hash to _translations' do
3121
+ expect(plucked_translations.first).to eq({"de"=>"deutsch-text", "en"=>"english-text"})
3122
+ end
3123
+
3124
+ it 'returns both' do
3125
+ expect(plucked_translations_both.first).to eq([{"de"=>"deutsch-text", "en"=>"english-text"}, "deutsch-text"])
3126
+ end
3018
3127
  end
3019
3128
  end
3020
3129
 
@@ -3024,8 +3133,227 @@ describe Mongoid::Criteria do
3024
3133
  Dictionary.all.pluck(:'description.de')
3025
3134
  end
3026
3135
 
3027
- it 'returns the specific translations' do
3028
- expect(plucked.first).to eq({'de' => 'deutsch-text'})
3136
+ context "when legacy_pluck_distinct is set" do
3137
+ config_override :legacy_pluck_distinct, true
3138
+
3139
+ it 'returns the specific translations' do
3140
+ expect(plucked.first).to eq({'de' => 'deutsch-text'})
3141
+ end
3142
+ end
3143
+
3144
+ context "when legacy_pluck_distinct is not set" do
3145
+ config_override :legacy_pluck_distinct, false
3146
+
3147
+ it 'returns the specific translations' do
3148
+ expect(plucked.first).to eq('deutsch-text')
3149
+ end
3150
+ end
3151
+ end
3152
+
3153
+ context 'when plucking a specific locale from _translations field' do
3154
+
3155
+ let(:plucked) do
3156
+ Dictionary.all.pluck(:'description_translations.de')
3157
+ end
3158
+
3159
+ context "when legacy_pluck_distinct is set" do
3160
+ config_override :legacy_pluck_distinct, true
3161
+
3162
+ it 'returns the specific translations' do
3163
+ expect(plucked.first).to eq(nil)
3164
+ end
3165
+ end
3166
+
3167
+ context "when legacy_pluck_distinct is not set" do
3168
+ config_override :legacy_pluck_distinct, false
3169
+
3170
+ it 'returns the specific translations' do
3171
+ expect(plucked.first).to eq('deutsch-text')
3172
+ end
3173
+ end
3174
+ end
3175
+
3176
+ context 'when fallbacks are enabled with a locale list' do
3177
+ require_fallbacks
3178
+
3179
+ around(:all) do |example|
3180
+ prev_fallbacks = I18n.fallbacks.dup
3181
+ I18n.fallbacks[:he] = [ :en ]
3182
+ example.run
3183
+ I18n.fallbacks = prev_fallbacks
3184
+ end
3185
+
3186
+ let(:plucked) do
3187
+ Dictionary.all.pluck(:description).first
3188
+ end
3189
+
3190
+ context "when legacy_pluck_distinct is set" do
3191
+ config_override :legacy_pluck_distinct, true
3192
+
3193
+ it "does not correctly use the fallback" do
3194
+ plucked.should == {"de"=>"deutsch-text", "en"=>"english-text"}
3195
+ end
3196
+ end
3197
+
3198
+ context "when legacy_pluck_distinct is not set" do
3199
+ config_override :legacy_pluck_distinct, false
3200
+
3201
+ it "correctly uses the fallback" do
3202
+ I18n.locale = :en
3203
+ d = Dictionary.create!(description: 'english-text')
3204
+ I18n.locale = :he
3205
+ plucked.should == "english-text"
3206
+ end
3207
+ end
3208
+ end
3209
+
3210
+ context "when the localized field is embedded" do
3211
+ before do
3212
+ p = Passport.new
3213
+ I18n.locale = :en
3214
+ p.name = "Neil"
3215
+ I18n.locale = :he
3216
+ p.name = "Nissim"
3217
+
3218
+ Person.create!(passport: p, employer_id: 12345)
3219
+ end
3220
+
3221
+ let(:plucked) do
3222
+ Person.where(employer_id: 12345).pluck("pass.name").first
3223
+ end
3224
+
3225
+ let(:plucked_translations) do
3226
+ Person.where(employer_id: 12345).pluck("pass.name_translations").first
3227
+ end
3228
+
3229
+ let(:plucked_translations_field) do
3230
+ Person.where(employer_id: 12345).pluck("pass.name_translations.en").first
3231
+ end
3232
+
3233
+ context "when legacy_pluck_distinct is set" do
3234
+ config_override :legacy_pluck_distinct, true
3235
+
3236
+ it "returns the full hash embedded" do
3237
+ expect(plucked).to eq({ "name" => { "en" => "Neil", "he" => "Nissim" } })
3238
+ end
3239
+
3240
+ it "returns the empty hash" do
3241
+ expect(plucked_translations).to eq({})
3242
+ end
3243
+
3244
+ it "returns the empty hash" do
3245
+ expect(plucked_translations_field).to eq({})
3246
+ end
3247
+ end
3248
+
3249
+ context "when legacy_pluck_distinct is not set" do
3250
+ config_override :legacy_pluck_distinct, false
3251
+
3252
+ it "returns the translation for the current locale" do
3253
+ expect(plucked).to eq("Nissim")
3254
+ end
3255
+
3256
+ it "returns the full _translation hash" do
3257
+ expect(plucked_translations).to eq({ "en" => "Neil", "he" => "Nissim" })
3258
+ end
3259
+
3260
+ it "returns the translation for the requested locale" do
3261
+ expect(plucked_translations_field).to eq("Neil")
3262
+ end
3263
+ end
3264
+ end
3265
+ end
3266
+
3267
+ context 'when plucking a field to be demongoized' do
3268
+
3269
+ let(:plucked) do
3270
+ Band.where(name: maniacs.name).pluck(:sales)
3271
+ end
3272
+
3273
+ context "when legacy_pluck_distinct is set" do
3274
+ config_override :legacy_pluck_distinct, true
3275
+
3276
+ it "does not demongoize the field" do
3277
+ expect(plucked.first).to be_a(String)
3278
+ expect(plucked.first).to eq("1E2")
3279
+ end
3280
+ end
3281
+
3282
+ context "when legacy_pluck_distinct is not set" do
3283
+ config_override :legacy_pluck_distinct, false
3284
+
3285
+ it "demongoizes the field" do
3286
+ expect(plucked.first).to be_a(BigDecimal)
3287
+ expect(plucked.first).to eq(BigDecimal("1E2"))
3288
+ end
3289
+ end
3290
+ end
3291
+
3292
+ context "when plucking an embedded field" do
3293
+ let(:label) { Label.new(sales: "1E2") }
3294
+ let!(:band) { Band.create!(label: label) }
3295
+
3296
+ let(:plucked) { Band.where(_id: band.id).pluck("label.sales") }
3297
+
3298
+ context "when legacy_pluck_distinct is set" do
3299
+ config_override :legacy_pluck_distinct, true
3300
+
3301
+ it "returns a hash with a non-demongoized field" do
3302
+ expect(plucked.first).to eq({ 'sales' => "1E2" })
3303
+ end
3304
+ end
3305
+
3306
+ context "when legacy_pluck_distinct is not set" do
3307
+ config_override :legacy_pluck_distinct, false
3308
+
3309
+ it "demongoizes the field" do
3310
+ expect(plucked.first).to eq(BigDecimal("1E2"))
3311
+ end
3312
+ end
3313
+ end
3314
+
3315
+ context "when plucking an embeds_many field" do
3316
+ let(:label) { Label.new(sales: "1E2") }
3317
+ let!(:band) { Band.create!(labels: [label]) }
3318
+
3319
+ let(:plucked) { Band.where(_id: band.id).pluck("labels.sales") }
3320
+
3321
+ context "when legacy_pluck_distinct is set" do
3322
+ config_override :legacy_pluck_distinct, true
3323
+
3324
+ it "returns a hash with a non-demongoized field" do
3325
+ expect(plucked.first).to eq([{ 'sales' => "1E2" }])
3326
+ end
3327
+ end
3328
+
3329
+ context "when legacy_pluck_distinct is not set" do
3330
+ config_override :legacy_pluck_distinct, false
3331
+
3332
+ it "demongoizes the field" do
3333
+ expect(plucked.first).to eq([BigDecimal("1E2")])
3334
+ end
3335
+ end
3336
+ end
3337
+
3338
+ context "when plucking a nonexistent embedded field" do
3339
+ let(:label) { Label.new(sales: "1E2") }
3340
+ let!(:band) { Band.create!(label: label) }
3341
+
3342
+ let(:plucked) { Band.where(_id: band.id).pluck("label.qwerty") }
3343
+
3344
+ context "when legacy_pluck_distinct is set" do
3345
+ config_override :legacy_pluck_distinct, true
3346
+
3347
+ it "returns an empty hash" do
3348
+ expect(plucked.first).to eq({})
3349
+ end
3350
+ end
3351
+
3352
+ context "when legacy_pluck_distinct is not set" do
3353
+ config_override :legacy_pluck_distinct, false
3354
+
3355
+ it "returns nil" do
3356
+ expect(plucked.first).to eq(nil)
3029
3357
  end
3030
3358
  end
3031
3359
  end
@@ -3112,11 +3440,11 @@ describe Mongoid::Criteria do
3112
3440
  describe "#sort" do
3113
3441
 
3114
3442
  let!(:depeche) do
3115
- Band.create(name: "Depeche Mode", likes: 1000)
3443
+ Band.create!(name: "Depeche Mode", likes: 1000)
3116
3444
  end
3117
3445
 
3118
3446
  let!(:tool) do
3119
- Band.create(name: "Tool", likes: 500)
3447
+ Band.create!(name: "Tool", likes: 500)
3120
3448
  end
3121
3449
 
3122
3450
  let(:sorted) do
@@ -3135,11 +3463,11 @@ describe Mongoid::Criteria do
3135
3463
  context "when provided a single field" do
3136
3464
 
3137
3465
  let!(:depeche) do
3138
- Band.create(name: "Depeche Mode", likes: 1000)
3466
+ Band.create!(name: "Depeche Mode", likes: 1000)
3139
3467
  end
3140
3468
 
3141
3469
  let!(:tool) do
3142
- Band.create(name: "Tool", likes: 500)
3470
+ Band.create!(name: "Tool", likes: 500)
3143
3471
  end
3144
3472
 
3145
3473
  let(:criteria) do
@@ -3173,7 +3501,7 @@ describe Mongoid::Criteria do
3173
3501
  describe "#to_ary" do
3174
3502
 
3175
3503
  let!(:band) do
3176
- Band.create(name: "Depeche Mode")
3504
+ Band.create!(name: "Depeche Mode")
3177
3505
  end
3178
3506
 
3179
3507
  let(:criteria) do
@@ -3189,11 +3517,11 @@ describe Mongoid::Criteria do
3189
3517
  max_server_version '4.0'
3190
3518
 
3191
3519
  let!(:band) do
3192
- Band.create(name: "Depeche Mode")
3520
+ Band.create!(name: "Depeche Mode")
3193
3521
  end
3194
3522
 
3195
3523
  let!(:band2) do
3196
- Band.create(name: "Tool")
3524
+ Band.create!(name: "Tool")
3197
3525
  end
3198
3526
 
3199
3527
  let(:criteria) do
@@ -3236,7 +3564,7 @@ describe Mongoid::Criteria do
3236
3564
  context "when the type is a string" do
3237
3565
 
3238
3566
  let!(:browser) do
3239
- Browser.create
3567
+ Browser.create!
3240
3568
  end
3241
3569
 
3242
3570
  let(:criteria) do
@@ -3251,7 +3579,7 @@ describe Mongoid::Criteria do
3251
3579
  context "when the type is an Array of type" do
3252
3580
 
3253
3581
  let!(:browser) do
3254
- Firefox.create
3582
+ Firefox.create!
3255
3583
  end
3256
3584
 
3257
3585
  let(:criteria) do
@@ -3276,7 +3604,7 @@ describe Mongoid::Criteria do
3276
3604
  context "when the type is a string" do
3277
3605
 
3278
3606
  let!(:browser) do
3279
- Browser.create
3607
+ Browser.create!
3280
3608
  end
3281
3609
 
3282
3610
  let(:criteria) do
@@ -3291,7 +3619,7 @@ describe Mongoid::Criteria do
3291
3619
  context "when the type is an Array of type" do
3292
3620
 
3293
3621
  let!(:browser) do
3294
- Firefox.create
3622
+ Firefox.create!
3295
3623
  end
3296
3624
 
3297
3625
  let(:criteria) do
@@ -3308,11 +3636,11 @@ describe Mongoid::Criteria do
3308
3636
  describe "#where" do
3309
3637
 
3310
3638
  let!(:match) do
3311
- Band.create(name: "Depeche Mode")
3639
+ Band.create!(name: "Depeche Mode")
3312
3640
  end
3313
3641
 
3314
3642
  let!(:non_match) do
3315
- Band.create(name: "Tool")
3643
+ Band.create!(name: "Tool")
3316
3644
  end
3317
3645
 
3318
3646
  context 'when provided no arguments' do
@@ -3409,7 +3737,7 @@ describe Mongoid::Criteria do
3409
3737
  end
3410
3738
 
3411
3739
  let!(:band) do
3412
- Band.create(name: "Boards of Canada", sales: sales)
3740
+ Band.create!(name: "Boards of Canada", sales: sales)
3413
3741
  end
3414
3742
 
3415
3743
  let(:from_db) do
@@ -3429,7 +3757,7 @@ describe Mongoid::Criteria do
3429
3757
  end
3430
3758
 
3431
3759
  let!(:band) do
3432
- Band.create(name: "Boards of Canada", decimal: decimal)
3760
+ Band.create!(name: "Boards of Canada", decimal: decimal)
3433
3761
  end
3434
3762
 
3435
3763
  let(:from_db) do
@@ -3444,7 +3772,7 @@ describe Mongoid::Criteria do
3444
3772
  context 'when querying on a polymorphic relation' do
3445
3773
 
3446
3774
  let(:movie) do
3447
- Movie.create
3775
+ Movie.create!
3448
3776
  end
3449
3777
 
3450
3778
  let(:selector) do
@@ -3490,12 +3818,44 @@ describe Mongoid::Criteria do
3490
3818
  'foo' => 1, '$and' => [{'foo' => 2}], 'bar' => 3)
3491
3819
  end
3492
3820
  end
3821
+
3822
+ context "when duplicating where conditions" do
3823
+ let(:criteria) { Sound.where(active: true).where(active: true) }
3824
+
3825
+ it 'does not duplicate criteria' do
3826
+ expect(criteria.selector).to eq('active' => true)
3827
+ end
3828
+ end
3829
+
3830
+ context "when duplicating where conditions with different values" do
3831
+ let(:criteria) { Sound.where(active: true).where(active: false).where(active: true).where(active: false) }
3832
+
3833
+ it 'does not duplicate criteria' do
3834
+ expect(criteria.selector).to eq(
3835
+ 'active' => true, '$and' => [{'active' => false}])
3836
+ end
3837
+ end
3838
+
3839
+ # Used to test MONGOID-5251 where the find command was adding unnecessary
3840
+ # and clauses. Since the find command creates the criteria and executes it,
3841
+ # it is difficult to analyze the criteria used. For this reason, I have
3842
+ # extracted the crux of the issue, adding an _id to the the criteria twice,
3843
+ # and used that for the test case.
3844
+ context "when searching by _id twice" do
3845
+ let(:_id) { BSON::ObjectId.new }
3846
+ let(:criteria) { Band.where(_id: _id) }
3847
+ let(:dup_criteria) { criteria.where(_id: _id)}
3848
+
3849
+ it "does not duplicate the criteria" do
3850
+ expect(dup_criteria.selector).to eq({ "_id" => _id })
3851
+ end
3852
+ end
3493
3853
  end
3494
3854
 
3495
3855
  describe "#for_js" do
3496
3856
 
3497
3857
  let!(:match) do
3498
- Band.create(name: "Depeche Mode")
3858
+ Band.create!(name: "Depeche Mode")
3499
3859
  end
3500
3860
 
3501
3861
  context "when the code has no scope" do
@@ -3582,11 +3942,11 @@ describe Mongoid::Criteria do
3582
3942
  describe "#uniq" do
3583
3943
 
3584
3944
  let!(:band_one) do
3585
- Band.create(name: "New Order")
3945
+ Band.create!(name: "New Order")
3586
3946
  end
3587
3947
 
3588
3948
  let!(:band_two) do
3589
- Band.create(name: "New Order")
3949
+ Band.create!(name: "New Order")
3590
3950
  end
3591
3951
 
3592
3952
  let(:criteria) do
@@ -3635,7 +3995,7 @@ describe Mongoid::Criteria do
3635
3995
  end
3636
3996
 
3637
3997
  let!(:match) do
3638
- Bar.create(location: [ 52.30, 13.25 ])
3998
+ Bar.create!(location: [ 52.30, 13.25 ])
3639
3999
  end
3640
4000
 
3641
4001
  let(:criteria) do
@@ -3653,11 +4013,11 @@ describe Mongoid::Criteria do
3653
4013
  describe "#with_size" do
3654
4014
 
3655
4015
  let!(:match) do
3656
- Band.create(genres: [ "electro", "dub" ])
4016
+ Band.create!(genres: [ "electro", "dub" ])
3657
4017
  end
3658
4018
 
3659
4019
  let!(:non_match) do
3660
- Band.create(genres: [ "house" ])
4020
+ Band.create!(genres: [ "house" ])
3661
4021
  end
3662
4022
 
3663
4023
  let(:criteria) do
@@ -3672,7 +4032,7 @@ describe Mongoid::Criteria do
3672
4032
  describe "#with_type" do
3673
4033
 
3674
4034
  let!(:match) do
3675
- Band.create(name: "Depeche Mode")
4035
+ Band.create!(name: "Depeche Mode")
3676
4036
  end
3677
4037
 
3678
4038
  let(:criteria) do