mongoid 7.3.5 → 7.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (880) 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 +21 -20
  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 +12 -59
  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 +8 -56
  54. data/lib/mongoid/association/referenced/has_many/proxy.rb +20 -63
  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 +0 -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 -24
  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 +1 -42
  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 +5 -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 +0 -25
  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 +39 -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 +20 -67
  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 +6 -2
  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 +0 -51
  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 +0 -1
  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 +0 -1
  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 +0 -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 +1 -8
  266. data/lib/mongoid/persistable.rb +0 -23
  267. data/lib/mongoid/persistence_context.rb +0 -27
  268. data/lib/mongoid/positional.rb +0 -5
  269. data/lib/mongoid/query_cache.rb +0 -33
  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 +0 -5
  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 +0 -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/config/templates/mongoid.yml +2 -7
  304. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  305. data/lib/rails/generators/mongoid_generator.rb +0 -1
  306. data/lib/rails/mongoid.rb +0 -3
  307. data/spec/integration/app_spec.rb +0 -1
  308. data/spec/integration/associations/belongs_to_spec.rb +0 -1
  309. data/spec/integration/associations/embedded_dirty_spec.rb +29 -0
  310. data/spec/integration/associations/embedded_spec.rb +0 -1
  311. data/spec/integration/associations/embeds_many_spec.rb +0 -1
  312. data/spec/integration/associations/embeds_one_spec.rb +0 -1
  313. data/spec/integration/associations/foreign_key_spec.rb +0 -1
  314. data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
  315. data/spec/integration/associations/has_many_spec.rb +0 -1
  316. data/spec/integration/associations/has_one_spec.rb +0 -1
  317. data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
  318. data/spec/integration/associations/reverse_population_spec.rb +0 -1
  319. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  320. data/spec/integration/associations/scope_option_spec.rb +101 -0
  321. data/spec/integration/atomic/modifiers_spec.rb +0 -1
  322. data/spec/integration/bson_regexp_raw_spec.rb +0 -1
  323. data/spec/integration/callbacks_models.rb +12 -0
  324. data/spec/integration/callbacks_spec.rb +18 -6
  325. data/spec/integration/contextual/empty_spec.rb +0 -1
  326. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  327. data/spec/integration/criteria/date_field_spec.rb +0 -1
  328. data/spec/integration/criteria/default_scope_spec.rb +51 -0
  329. data/spec/integration/criteria/logical_spec.rb +30 -0
  330. data/spec/integration/criteria/range_spec.rb +265 -0
  331. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  332. data/spec/integration/discriminator_key_spec.rb +0 -1
  333. data/spec/integration/discriminator_value_spec.rb +0 -1
  334. data/spec/integration/document_spec.rb +0 -1
  335. data/spec/integration/i18n_fallbacks_spec.rb +0 -1
  336. data/spec/integration/matcher_examples_spec.rb +0 -1
  337. data/spec/integration/matcher_operator_spec.rb +27 -3
  338. data/spec/integration/matcher_spec.rb +95 -1
  339. data/spec/integration/server_query_spec.rb +0 -1
  340. data/spec/integration/shardable_spec.rb +0 -1
  341. data/spec/integration/stringified_symbol_field_spec.rb +14 -1
  342. data/spec/lite_spec_helper.rb +0 -1
  343. data/spec/mongoid/association/accessors_spec.rb +44 -15
  344. data/spec/mongoid/association/auto_save_spec.rb +72 -34
  345. data/spec/mongoid/association/builders_spec.rb +1 -2
  346. data/spec/mongoid/association/constrainable_spec.rb +0 -1
  347. data/spec/mongoid/association/counter_cache_spec.rb +32 -33
  348. data/spec/mongoid/association/depending_spec.rb +12 -13
  349. data/spec/mongoid/association/eager_spec.rb +4 -5
  350. data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
  351. data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
  352. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
  353. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
  354. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
  355. data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
  356. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
  357. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
  358. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
  359. data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
  360. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
  361. data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
  362. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
  363. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
  364. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
  365. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  366. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  367. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
  368. data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
  369. data/spec/mongoid/association/macros_spec.rb +9 -10
  370. data/spec/mongoid/association/nested/many_spec.rb +0 -1
  371. data/spec/mongoid/association/nested/one_spec.rb +0 -1
  372. data/spec/mongoid/association/options_spec.rb +0 -1
  373. data/spec/mongoid/association/polymorphic_spec.rb +0 -1
  374. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
  375. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
  376. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
  377. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
  378. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
  379. data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
  380. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
  381. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
  382. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
  383. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
  384. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
  385. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
  386. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
  387. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
  388. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
  389. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
  390. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
  391. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +59 -33
  392. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
  393. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
  394. data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
  395. data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
  396. data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
  397. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
  398. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
  399. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
  400. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
  401. data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
  402. data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
  403. data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
  404. data/spec/mongoid/association/reflections_spec.rb +0 -1
  405. data/spec/mongoid/association/syncable_spec.rb +31 -32
  406. data/spec/mongoid/association_spec.rb +0 -1
  407. data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
  408. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
  409. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
  410. data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
  411. data/spec/mongoid/atomic/paths_spec.rb +0 -1
  412. data/spec/mongoid/atomic_spec.rb +6 -7
  413. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  414. data/spec/mongoid/attributes/nested_spec.rb +66 -67
  415. data/spec/mongoid/attributes/projector_spec.rb +5 -2
  416. data/spec/mongoid/attributes/readonly_spec.rb +22 -23
  417. data/spec/mongoid/attributes_spec.rb +32 -33
  418. data/spec/mongoid/cacheable_spec.rb +1 -2
  419. data/spec/mongoid/changeable_spec.rb +35 -36
  420. data/spec/mongoid/clients/factory_spec.rb +0 -1
  421. data/spec/mongoid/clients/options_spec.rb +4 -5
  422. data/spec/mongoid/clients/sessions_spec.rb +22 -23
  423. data/spec/mongoid/clients/transactions_spec.rb +49 -27
  424. data/spec/mongoid/clients_spec.rb +6 -7
  425. data/spec/mongoid/composable_spec.rb +0 -1
  426. data/spec/mongoid/config/environment_spec.rb +0 -1
  427. data/spec/mongoid/config/options_spec.rb +0 -1
  428. data/spec/mongoid/config_spec.rb +105 -1
  429. data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
  430. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
  431. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  432. data/spec/mongoid/contextual/atomic_spec.rb +46 -47
  433. data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
  434. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
  435. data/spec/mongoid/contextual/memory_spec.rb +23 -24
  436. data/spec/mongoid/contextual/mongo_spec.rb +339 -77
  437. data/spec/mongoid/contextual/none_spec.rb +7 -82
  438. data/spec/mongoid/copyable_spec.rb +12 -13
  439. data/spec/mongoid/copyable_spec_models.rb +0 -1
  440. data/spec/mongoid/criteria/findable_spec.rb +23 -24
  441. data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
  442. data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
  443. data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
  444. data/spec/mongoid/criteria/options_spec.rb +0 -1
  445. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
  446. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
  447. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
  448. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
  449. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
  450. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
  451. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
  452. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
  453. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
  454. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
  455. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
  456. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
  457. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
  458. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
  459. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
  460. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
  461. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
  462. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
  463. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
  464. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
  465. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
  466. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
  467. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
  468. data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
  469. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
  470. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
  471. data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
  472. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
  473. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
  474. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
  475. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
  476. data/spec/mongoid/criteria/queryable/selectable_spec.rb +15 -16
  477. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
  478. data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
  479. data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
  480. data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
  481. data/spec/mongoid/criteria/scopable_spec.rb +127 -1
  482. data/spec/mongoid/criteria_projection_spec.rb +3 -4
  483. data/spec/mongoid/criteria_spec.rb +515 -187
  484. data/spec/mongoid/document_fields_spec.rb +0 -1
  485. data/spec/mongoid/document_persistence_context_spec.rb +0 -1
  486. data/spec/mongoid/document_query_spec.rb +0 -1
  487. data/spec/mongoid/document_spec.rb +11 -33
  488. data/spec/mongoid/equality_spec.rb +142 -41
  489. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
  490. data/spec/mongoid/errors/callback_spec.rb +0 -1
  491. data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
  492. data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
  493. data/spec/mongoid/errors/document_not_found_spec.rb +0 -1
  494. data/spec/mongoid/errors/eager_load_spec.rb +0 -1
  495. data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
  496. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
  497. data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
  498. data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
  499. data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
  500. data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
  501. data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
  502. data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
  503. data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
  504. data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
  505. data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
  506. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
  507. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
  508. data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
  509. data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
  510. data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
  511. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
  512. data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
  513. data/spec/mongoid/errors/mongoid_error_spec.rb +0 -1
  514. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
  515. data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
  516. data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
  517. data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
  518. data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
  519. data/spec/mongoid/errors/no_environment_spec.rb +0 -1
  520. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
  521. data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
  522. data/spec/mongoid/errors/no_parent_spec.rb +0 -1
  523. data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
  524. data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
  525. data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
  526. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
  527. data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
  528. data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
  529. data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
  530. data/spec/mongoid/errors/validations_spec.rb +0 -1
  531. data/spec/mongoid/extensions/array_spec.rb +0 -1
  532. data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
  533. data/spec/mongoid/extensions/binary_spec.rb +0 -1
  534. data/spec/mongoid/extensions/boolean_spec.rb +0 -1
  535. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
  536. data/spec/mongoid/extensions/date_spec.rb +0 -1
  537. data/spec/mongoid/extensions/date_time_spec.rb +0 -1
  538. data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
  539. data/spec/mongoid/extensions/false_class_spec.rb +0 -1
  540. data/spec/mongoid/extensions/float_spec.rb +0 -1
  541. data/spec/mongoid/extensions/hash_spec.rb +0 -1
  542. data/spec/mongoid/extensions/integer_spec.rb +0 -1
  543. data/spec/mongoid/extensions/module_spec.rb +0 -1
  544. data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
  545. data/spec/mongoid/extensions/object_id_spec.rb +0 -1
  546. data/spec/mongoid/extensions/object_spec.rb +0 -1
  547. data/spec/mongoid/extensions/range_spec.rb +0 -1
  548. data/spec/mongoid/extensions/regexp_spec.rb +0 -1
  549. data/spec/mongoid/extensions/set_spec.rb +0 -1
  550. data/spec/mongoid/extensions/string_spec.rb +2 -3
  551. data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
  552. data/spec/mongoid/extensions/symbol_spec.rb +0 -1
  553. data/spec/mongoid/extensions/time_spec.rb +0 -1
  554. data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
  555. data/spec/mongoid/extensions/true_class_spec.rb +0 -1
  556. data/spec/mongoid/extensions_spec.rb +14 -3
  557. data/spec/mongoid/factory_spec.rb +1 -1
  558. data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
  559. data/spec/mongoid/fields/localized_spec.rb +0 -1
  560. data/spec/mongoid/fields/standard_spec.rb +0 -1
  561. data/spec/mongoid/fields_spec.rb +326 -31
  562. data/spec/mongoid/findable_spec.rb +21 -22
  563. data/spec/mongoid/indexable/specification_spec.rb +0 -1
  564. data/spec/mongoid/indexable_spec.rb +0 -1
  565. data/spec/mongoid/inspectable_spec.rb +0 -1
  566. data/spec/mongoid/interceptable_spec.rb +102 -95
  567. data/spec/mongoid/loggable_spec.rb +0 -1
  568. data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
  569. data/spec/mongoid/persistable/creatable_spec.rb +2 -3
  570. data/spec/mongoid/persistable/deletable_spec.rb +18 -19
  571. data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
  572. data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
  573. data/spec/mongoid/persistable/logical_spec.rb +4 -5
  574. data/spec/mongoid/persistable/poppable_spec.rb +4 -5
  575. data/spec/mongoid/persistable/pullable_spec.rb +8 -9
  576. data/spec/mongoid/persistable/pushable_spec.rb +8 -9
  577. data/spec/mongoid/persistable/renamable_spec.rb +3 -4
  578. data/spec/mongoid/persistable/savable_spec.rb +15 -11
  579. data/spec/mongoid/persistable/settable_spec.rb +9 -10
  580. data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
  581. data/spec/mongoid/persistable/updatable_spec.rb +41 -24
  582. data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
  583. data/spec/mongoid/persistable_spec.rb +1 -2
  584. data/spec/mongoid/persistence_context_spec.rb +0 -1
  585. data/spec/mongoid/positional_spec.rb +0 -1
  586. data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
  587. data/spec/mongoid/query_cache_spec.rb +30 -8
  588. data/spec/mongoid/relations/proxy_spec.rb +6 -7
  589. data/spec/mongoid/reloadable_spec.rb +209 -23
  590. data/spec/mongoid/scopable_spec.rb +54 -22
  591. data/spec/mongoid/selectable_spec.rb +6 -7
  592. data/spec/mongoid/serializable_spec.rb +9 -10
  593. data/spec/mongoid/shardable_spec.rb +2 -3
  594. data/spec/mongoid/stateful_spec.rb +1 -2
  595. data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
  596. data/spec/mongoid/tasks/database_spec.rb +0 -1
  597. data/spec/mongoid/threaded_spec.rb +2 -3
  598. data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
  599. data/spec/mongoid/timestamps/created_spec.rb +1 -2
  600. data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
  601. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
  602. data/spec/mongoid/timestamps/updated_spec.rb +3 -4
  603. data/spec/mongoid/timestamps_spec.rb +6 -7
  604. data/spec/mongoid/touchable_spec.rb +15 -20
  605. data/spec/mongoid/touchable_spec_models.rb +0 -1
  606. data/spec/mongoid/traversable_spec.rb +65 -2
  607. data/spec/mongoid/validatable/associated_spec.rb +0 -1
  608. data/spec/mongoid/validatable/format_spec.rb +0 -1
  609. data/spec/mongoid/validatable/length_spec.rb +0 -1
  610. data/spec/mongoid/validatable/numericality_spec.rb +0 -1
  611. data/spec/mongoid/validatable/presence_spec.rb +26 -23
  612. data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
  613. data/spec/mongoid/validatable_spec.rb +2 -3
  614. data/spec/mongoid_spec.rb +0 -1
  615. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
  616. data/spec/rails/mongoid_spec.rb +0 -1
  617. data/spec/shared/lib/mrss/constraints.rb +2 -1
  618. data/spec/shared/lib/mrss/docker_runner.rb +1 -1
  619. data/spec/shared/lib/mrss/lite_constraints.rb +8 -0
  620. data/spec/shared/share/Dockerfile.erb +25 -9
  621. data/spec/shared/shlib/distro.sh +2 -1
  622. data/spec/shared/shlib/server.sh +16 -4
  623. data/spec/shared/shlib/set_env.sh +6 -5
  624. data/spec/spec_helper.rb +12 -22
  625. data/spec/support/authorization.rb +0 -1
  626. data/spec/support/constraints.rb +0 -1
  627. data/spec/support/expectations.rb +0 -1
  628. data/spec/support/macros.rb +22 -1
  629. data/spec/support/models/account.rb +1 -2
  630. data/spec/support/models/acolyte.rb +0 -1
  631. data/spec/support/models/actor.rb +0 -1
  632. data/spec/support/models/actress.rb +0 -1
  633. data/spec/support/models/address.rb +0 -1
  634. data/spec/support/models/address_component.rb +0 -1
  635. data/spec/support/models/address_number.rb +0 -1
  636. data/spec/support/models/agency.rb +0 -1
  637. data/spec/support/models/agent.rb +0 -1
  638. data/spec/support/models/album.rb +0 -1
  639. data/spec/support/models/alert.rb +0 -1
  640. data/spec/support/models/animal.rb +0 -1
  641. data/spec/support/models/answer.rb +0 -1
  642. data/spec/support/models/appointment.rb +0 -1
  643. data/spec/support/models/armrest.rb +0 -1
  644. data/spec/support/models/array_field.rb +0 -1
  645. data/spec/support/models/article.rb +0 -1
  646. data/spec/support/models/artist.rb +2 -1
  647. data/spec/support/models/artwork.rb +0 -1
  648. data/spec/support/models/audio.rb +0 -1
  649. data/spec/support/models/augmentation.rb +0 -1
  650. data/spec/support/models/author.rb +0 -1
  651. data/spec/support/models/baby.rb +0 -1
  652. data/spec/support/models/band.rb +4 -1
  653. data/spec/support/models/bar.rb +0 -1
  654. data/spec/support/models/basic.rb +0 -1
  655. data/spec/support/models/bed.rb +0 -1
  656. data/spec/support/models/big_palette.rb +0 -1
  657. data/spec/support/models/birthday.rb +0 -1
  658. data/spec/support/models/bolt.rb +0 -1
  659. data/spec/support/models/bomb.rb +0 -1
  660. data/spec/support/models/book.rb +0 -1
  661. data/spec/support/models/breed.rb +0 -1
  662. data/spec/support/models/browser.rb +0 -1
  663. data/spec/support/models/building.rb +0 -1
  664. data/spec/support/models/building_address.rb +0 -1
  665. data/spec/support/models/bus.rb +0 -1
  666. data/spec/support/models/business.rb +0 -1
  667. data/spec/support/models/callback_test.rb +0 -1
  668. data/spec/support/models/canvas.rb +0 -1
  669. data/spec/support/models/car.rb +0 -1
  670. data/spec/support/models/cat.rb +0 -1
  671. data/spec/support/models/category.rb +0 -1
  672. data/spec/support/models/child.rb +0 -1
  673. data/spec/support/models/child_doc.rb +3 -4
  674. data/spec/support/models/church.rb +0 -1
  675. data/spec/support/models/circle.rb +0 -1
  676. data/spec/support/models/circuit.rb +0 -1
  677. data/spec/support/models/circus.rb +0 -1
  678. data/spec/support/models/code.rb +0 -1
  679. data/spec/support/models/coding/pull_request.rb +0 -1
  680. data/spec/support/models/coding.rb +0 -1
  681. data/spec/support/models/comment.rb +0 -1
  682. data/spec/support/models/company.rb +0 -1
  683. data/spec/support/models/consumption_period.rb +0 -1
  684. data/spec/support/models/contextable_item.rb +0 -1
  685. data/spec/support/models/contractor.rb +0 -1
  686. data/spec/support/models/cookie.rb +0 -1
  687. data/spec/support/models/country_code.rb +2 -1
  688. data/spec/support/models/courier_job.rb +0 -1
  689. data/spec/support/models/crate.rb +0 -1
  690. data/spec/support/models/customer.rb +0 -1
  691. data/spec/support/models/customer_address.rb +0 -1
  692. data/spec/support/models/deed.rb +0 -1
  693. data/spec/support/models/definition.rb +0 -1
  694. data/spec/support/models/delegating_patient.rb +0 -1
  695. data/spec/support/models/description.rb +0 -1
  696. data/spec/support/models/dictionary.rb +0 -1
  697. data/spec/support/models/division.rb +0 -1
  698. data/spec/support/models/doctor.rb +0 -1
  699. data/spec/support/models/dog.rb +0 -1
  700. data/spec/support/models/dokument.rb +0 -1
  701. data/spec/support/models/draft.rb +0 -1
  702. data/spec/support/models/dragon.rb +0 -1
  703. data/spec/support/models/driver.rb +0 -1
  704. data/spec/support/models/drug.rb +0 -1
  705. data/spec/support/models/dungeon.rb +0 -1
  706. data/spec/support/models/edit.rb +0 -1
  707. data/spec/support/models/email.rb +0 -1
  708. data/spec/support/models/employer.rb +0 -1
  709. data/spec/support/models/entry.rb +0 -1
  710. data/spec/support/models/eraser.rb +0 -1
  711. data/spec/support/models/even.rb +0 -1
  712. data/spec/support/models/event.rb +0 -1
  713. data/spec/support/models/exhibition.rb +0 -1
  714. data/spec/support/models/exhibitor.rb +0 -1
  715. data/spec/support/models/explosion.rb +0 -1
  716. data/spec/support/models/eye.rb +0 -1
  717. data/spec/support/models/eye_bowl.rb +0 -1
  718. data/spec/support/models/face.rb +0 -1
  719. data/spec/support/models/favorite.rb +0 -1
  720. data/spec/support/models/filesystem.rb +0 -1
  721. data/spec/support/models/fire_hydrant.rb +0 -1
  722. data/spec/support/models/firefox.rb +0 -1
  723. data/spec/support/models/fish.rb +0 -1
  724. data/spec/support/models/folder.rb +0 -1
  725. data/spec/support/models/folder_item.rb +0 -1
  726. data/spec/support/models/fruits.rb +0 -1
  727. data/spec/support/models/game.rb +0 -1
  728. data/spec/support/models/ghost.rb +0 -1
  729. data/spec/support/models/guitar.rb +0 -1
  730. data/spec/support/models/hole.rb +0 -1
  731. data/spec/support/models/home.rb +0 -1
  732. data/spec/support/models/house.rb +0 -1
  733. data/spec/support/models/html_writer.rb +0 -1
  734. data/spec/support/models/id_key.rb +0 -1
  735. data/spec/support/models/idnodef.rb +0 -1
  736. data/spec/support/models/image.rb +0 -1
  737. data/spec/support/models/implant.rb +0 -1
  738. data/spec/support/models/instrument.rb +0 -1
  739. data/spec/support/models/item.rb +0 -1
  740. data/spec/support/models/jar.rb +0 -1
  741. data/spec/support/models/kaleidoscope.rb +0 -1
  742. data/spec/support/models/kangaroo.rb +0 -1
  743. data/spec/support/models/label.rb +2 -2
  744. data/spec/support/models/language.rb +0 -1
  745. data/spec/support/models/lat_lng.rb +0 -1
  746. data/spec/support/models/league.rb +0 -1
  747. data/spec/support/models/learner.rb +0 -1
  748. data/spec/support/models/line_item.rb +0 -1
  749. data/spec/support/models/location.rb +0 -1
  750. data/spec/support/models/login.rb +0 -1
  751. data/spec/support/models/manufacturer.rb +0 -1
  752. data/spec/support/models/meat.rb +0 -1
  753. data/spec/support/models/membership.rb +0 -1
  754. data/spec/support/models/message.rb +0 -1
  755. data/spec/support/models/minim.rb +0 -1
  756. data/spec/support/models/mixed_drink.rb +0 -1
  757. data/spec/support/models/mop.rb +0 -1
  758. data/spec/support/models/movie.rb +0 -1
  759. data/spec/support/models/my_hash.rb +0 -1
  760. data/spec/support/models/name.rb +0 -1
  761. data/spec/support/models/name_only.rb +0 -1
  762. data/spec/support/models/node.rb +0 -1
  763. data/spec/support/models/note.rb +0 -1
  764. data/spec/support/models/nut.rb +0 -1
  765. data/spec/support/models/odd.rb +0 -1
  766. data/spec/support/models/order.rb +2 -1
  767. data/spec/support/models/ordered_post.rb +1 -2
  768. data/spec/support/models/ordered_preference.rb +0 -1
  769. data/spec/support/models/oscar.rb +0 -1
  770. data/spec/support/models/other_owner_object.rb +0 -1
  771. data/spec/support/models/override.rb +0 -1
  772. data/spec/support/models/ownable.rb +0 -1
  773. data/spec/support/models/owner.rb +0 -1
  774. data/spec/support/models/pack.rb +0 -1
  775. data/spec/support/models/page.rb +0 -1
  776. data/spec/support/models/page_question.rb +0 -1
  777. data/spec/support/models/palette.rb +0 -1
  778. data/spec/support/models/parent.rb +0 -1
  779. data/spec/support/models/parent_doc.rb +0 -1
  780. data/spec/support/models/passport.rb +5 -1
  781. data/spec/support/models/patient.rb +0 -1
  782. data/spec/support/models/pdf_writer.rb +0 -1
  783. data/spec/support/models/pencil.rb +0 -1
  784. data/spec/support/models/person.rb +1 -1
  785. data/spec/support/models/pet.rb +0 -1
  786. data/spec/support/models/pet_owner.rb +0 -1
  787. data/spec/support/models/phone.rb +2 -2
  788. data/spec/support/models/piano.rb +0 -1
  789. data/spec/support/models/pizza.rb +0 -1
  790. data/spec/support/models/player.rb +0 -1
  791. data/spec/support/models/post.rb +0 -1
  792. data/spec/support/models/post_genre.rb +0 -1
  793. data/spec/support/models/powerup.rb +0 -1
  794. data/spec/support/models/preference.rb +0 -1
  795. data/spec/support/models/princess.rb +0 -1
  796. data/spec/support/models/product.rb +0 -1
  797. data/spec/support/models/profile.rb +0 -1
  798. data/spec/support/models/pronunciation.rb +0 -1
  799. data/spec/support/models/pub.rb +0 -1
  800. data/spec/support/models/publication/encyclopedia.rb +0 -1
  801. data/spec/support/models/publication/review.rb +0 -1
  802. data/spec/support/models/publication.rb +0 -1
  803. data/spec/support/models/purchase.rb +0 -1
  804. data/spec/support/models/purchased_item.rb +10 -0
  805. data/spec/support/models/question.rb +0 -1
  806. data/spec/support/models/quiz.rb +0 -1
  807. data/spec/support/models/rating.rb +0 -1
  808. data/spec/support/models/record.rb +0 -1
  809. data/spec/support/models/registry.rb +0 -1
  810. data/spec/support/models/role.rb +0 -1
  811. data/spec/support/models/root_category.rb +0 -1
  812. data/spec/support/models/sandwich.rb +0 -1
  813. data/spec/support/models/scheduler.rb +0 -1
  814. data/spec/support/models/scribe.rb +0 -1
  815. data/spec/support/models/sealer.rb +0 -1
  816. data/spec/support/models/seat.rb +0 -1
  817. data/spec/support/models/seo.rb +0 -1
  818. data/spec/support/models/series.rb +0 -1
  819. data/spec/support/models/server.rb +0 -1
  820. data/spec/support/models/service.rb +0 -1
  821. data/spec/support/models/shape.rb +0 -1
  822. data/spec/support/models/shelf.rb +0 -1
  823. data/spec/support/models/shipment_address.rb +0 -1
  824. data/spec/support/models/shipping_container.rb +0 -1
  825. data/spec/support/models/shipping_pack.rb +0 -1
  826. data/spec/support/models/shirt.rb +0 -1
  827. data/spec/support/models/shop.rb +0 -1
  828. data/spec/support/models/short_agent.rb +0 -1
  829. data/spec/support/models/short_quiz.rb +0 -1
  830. data/spec/support/models/simple.rb +0 -1
  831. data/spec/support/models/slave.rb +0 -1
  832. data/spec/support/models/song.rb +0 -1
  833. data/spec/support/models/sound.rb +0 -1
  834. data/spec/support/models/spacer.rb +0 -1
  835. data/spec/support/models/square.rb +0 -1
  836. data/spec/support/models/staff.rb +0 -1
  837. data/spec/support/models/store_as_dup_test1.rb +0 -1
  838. data/spec/support/models/store_as_dup_test2.rb +0 -1
  839. data/spec/support/models/store_as_dup_test3.rb +0 -1
  840. data/spec/support/models/store_as_dup_test4.rb +0 -1
  841. data/spec/support/models/strategy.rb +0 -1
  842. data/spec/support/models/sub_item.rb +0 -1
  843. data/spec/support/models/subscription.rb +0 -1
  844. data/spec/support/models/survey.rb +0 -1
  845. data/spec/support/models/symptom.rb +0 -1
  846. data/spec/support/models/tag.rb +0 -1
  847. data/spec/support/models/target.rb +0 -1
  848. data/spec/support/models/template.rb +0 -1
  849. data/spec/support/models/thing.rb +0 -1
  850. data/spec/support/models/threadlocker.rb +0 -1
  851. data/spec/support/models/title.rb +0 -1
  852. data/spec/support/models/tool.rb +0 -1
  853. data/spec/support/models/topping.rb +0 -1
  854. data/spec/support/models/toy.rb +0 -1
  855. data/spec/support/models/track.rb +0 -1
  856. data/spec/support/models/translation.rb +0 -1
  857. data/spec/support/models/tree.rb +0 -1
  858. data/spec/support/models/truck.rb +0 -1
  859. data/spec/support/models/updatable.rb +0 -1
  860. data/spec/support/models/user.rb +0 -1
  861. data/spec/support/models/user_account.rb +0 -1
  862. data/spec/support/models/validation_callback.rb +0 -1
  863. data/spec/support/models/vehicle.rb +0 -1
  864. data/spec/support/models/version.rb +0 -1
  865. data/spec/support/models/vertex.rb +0 -1
  866. data/spec/support/models/vet_visit.rb +0 -1
  867. data/spec/support/models/video.rb +0 -1
  868. data/spec/support/models/video_game.rb +0 -1
  869. data/spec/support/models/washer.rb +0 -1
  870. data/spec/support/models/weapon.rb +0 -1
  871. data/spec/support/models/wiki_page.rb +0 -1
  872. data/spec/support/models/word.rb +0 -1
  873. data/spec/support/models/word_origin.rb +0 -1
  874. data/spec/support/models/writer.rb +0 -1
  875. data/spec/support/shared/time.rb +0 -1
  876. data/spec/support/spec_config.rb +3 -1
  877. data.tar.gz.sig +0 -0
  878. metadata +25 -12
  879. metadata.gz.sig +0 -0
  880. data/lib/support/ruby_version.rb +0 -29
@@ -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
@@ -3511,7 +3839,7 @@ describe Mongoid::Criteria do
3511
3839
  # Used to test MONGOID-5251 where the find command was adding unnecessary
3512
3840
  # and clauses. Since the find command creates the criteria and executes it,
3513
3841
  # it is difficult to analyze the criteria used. For this reason, I have
3514
- # extracted the crux of the issue, adding an _id to the the criteria twice,
3842
+ # extracted the crux of the issue, adding an _id to the the criteria twice,
3515
3843
  # and used that for the test case.
3516
3844
  context "when searching by _id twice" do
3517
3845
  let(:_id) { BSON::ObjectId.new }
@@ -3527,7 +3855,7 @@ describe Mongoid::Criteria do
3527
3855
  describe "#for_js" do
3528
3856
 
3529
3857
  let!(:match) do
3530
- Band.create(name: "Depeche Mode")
3858
+ Band.create!(name: "Depeche Mode")
3531
3859
  end
3532
3860
 
3533
3861
  context "when the code has no scope" do
@@ -3614,11 +3942,11 @@ describe Mongoid::Criteria do
3614
3942
  describe "#uniq" do
3615
3943
 
3616
3944
  let!(:band_one) do
3617
- Band.create(name: "New Order")
3945
+ Band.create!(name: "New Order")
3618
3946
  end
3619
3947
 
3620
3948
  let!(:band_two) do
3621
- Band.create(name: "New Order")
3949
+ Band.create!(name: "New Order")
3622
3950
  end
3623
3951
 
3624
3952
  let(:criteria) do
@@ -3667,7 +3995,7 @@ describe Mongoid::Criteria do
3667
3995
  end
3668
3996
 
3669
3997
  let!(:match) do
3670
- Bar.create(location: [ 52.30, 13.25 ])
3998
+ Bar.create!(location: [ 52.30, 13.25 ])
3671
3999
  end
3672
4000
 
3673
4001
  let(:criteria) do
@@ -3685,11 +4013,11 @@ describe Mongoid::Criteria do
3685
4013
  describe "#with_size" do
3686
4014
 
3687
4015
  let!(:match) do
3688
- Band.create(genres: [ "electro", "dub" ])
4016
+ Band.create!(genres: [ "electro", "dub" ])
3689
4017
  end
3690
4018
 
3691
4019
  let!(:non_match) do
3692
- Band.create(genres: [ "house" ])
4020
+ Band.create!(genres: [ "house" ])
3693
4021
  end
3694
4022
 
3695
4023
  let(:criteria) do
@@ -3704,7 +4032,7 @@ describe Mongoid::Criteria do
3704
4032
  describe "#with_type" do
3705
4033
 
3706
4034
  let!(:match) do
3707
- Band.create(name: "Depeche Mode")
4035
+ Band.create!(name: "Depeche Mode")
3708
4036
  end
3709
4037
 
3710
4038
  let(:criteria) do