mongoid 7.3.5 → 7.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (895) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +17 -17
  4. data/README.md +3 -3
  5. data/lib/config/locales/en.yml +28 -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 +26 -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 +20 -64
  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 +21 -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 +43 -30
  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 +147 -70
  105. data/lib/mongoid/contextual/mongo.rb +249 -103
  106. data/lib/mongoid/contextual/none.rb +83 -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 +2 -25
  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 +1 -24
  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 +22 -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 +45 -76
  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 +2 -57
  149. data/lib/mongoid/document.rb +1 -50
  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 +23 -15
  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 +191 -60
  242. data/lib/mongoid/findable.rb +20 -10
  243. data/lib/mongoid/indexable/specification.rb +0 -15
  244. data/lib/mongoid/indexable/validators/options.rb +0 -7
  245. data/lib/mongoid/indexable.rb +1 -18
  246. data/lib/mongoid/inspectable.rb +1 -10
  247. data/lib/mongoid/interceptable.rb +0 -25
  248. data/lib/mongoid/loggable.rb +0 -9
  249. data/lib/mongoid/matchable.rb +0 -5
  250. data/lib/mongoid/matcher/eq_impl.rb +37 -2
  251. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +6 -1
  252. data/lib/mongoid/persistable/creatable.rb +1 -20
  253. data/lib/mongoid/persistable/deletable.rb +0 -17
  254. data/lib/mongoid/persistable/destroyable.rb +0 -7
  255. data/lib/mongoid/persistable/incrementable.rb +0 -5
  256. data/lib/mongoid/persistable/logical.rb +0 -5
  257. data/lib/mongoid/persistable/poppable.rb +0 -5
  258. data/lib/mongoid/persistable/pullable.rb +0 -7
  259. data/lib/mongoid/persistable/pushable.rb +0 -7
  260. data/lib/mongoid/persistable/renamable.rb +0 -5
  261. data/lib/mongoid/persistable/savable.rb +0 -7
  262. data/lib/mongoid/persistable/settable.rb +0 -5
  263. data/lib/mongoid/persistable/unsettable.rb +0 -5
  264. data/lib/mongoid/persistable/updatable.rb +2 -17
  265. data/lib/mongoid/persistable/upsertable.rb +0 -7
  266. data/lib/mongoid/persistable.rb +0 -23
  267. data/lib/mongoid/persistence_context.rb +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 +67 -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/warnings.rb +29 -0
  302. data/lib/mongoid.rb +1 -15
  303. data/lib/rails/generators/mongoid/config/config_generator.rb +0 -1
  304. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -3
  305. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  306. data/lib/rails/generators/mongoid_generator.rb +0 -1
  307. data/lib/rails/mongoid.rb +0 -3
  308. data/spec/config/mongoid_with_schema_map_uuid.yml +27 -0
  309. data/spec/integration/app_spec.rb +20 -15
  310. data/spec/integration/associations/belongs_to_spec.rb +0 -1
  311. data/spec/integration/associations/embedded_dirty_spec.rb +57 -0
  312. data/spec/integration/associations/embedded_spec.rb +0 -1
  313. data/spec/integration/associations/embeds_many_spec.rb +0 -1
  314. data/spec/integration/associations/embeds_one_spec.rb +0 -1
  315. data/spec/integration/associations/foreign_key_spec.rb +0 -1
  316. data/spec/integration/associations/foreign_key_spec_models.rb +0 -1
  317. data/spec/integration/associations/has_many_spec.rb +0 -1
  318. data/spec/integration/associations/has_one_spec.rb +0 -1
  319. data/spec/integration/associations/nested_attributes_assignment_spec.rb +0 -1
  320. data/spec/integration/associations/reverse_population_spec.rb +0 -1
  321. data/spec/integration/associations/reverse_population_spec_models.rb +0 -1
  322. data/spec/integration/associations/scope_option_spec.rb +101 -0
  323. data/spec/integration/atomic/modifiers_spec.rb +0 -1
  324. data/spec/integration/bson_regexp_raw_spec.rb +0 -1
  325. data/spec/integration/callbacks_models.rb +12 -0
  326. data/spec/integration/callbacks_spec.rb +18 -6
  327. data/spec/integration/contextual/empty_spec.rb +0 -1
  328. data/spec/integration/criteria/alias_query_spec.rb +161 -0
  329. data/spec/integration/criteria/date_field_spec.rb +0 -1
  330. data/spec/integration/criteria/default_scope_spec.rb +51 -0
  331. data/spec/integration/criteria/logical_spec.rb +30 -0
  332. data/spec/integration/criteria/range_spec.rb +265 -0
  333. data/spec/integration/criteria/time_with_zone_spec.rb +125 -15
  334. data/spec/integration/discriminator_key_spec.rb +0 -1
  335. data/spec/integration/discriminator_value_spec.rb +0 -1
  336. data/spec/integration/document_spec.rb +0 -1
  337. data/spec/integration/i18n_fallbacks_spec.rb +15 -2
  338. data/spec/integration/matcher_examples_spec.rb +0 -1
  339. data/spec/integration/matcher_operator_spec.rb +27 -3
  340. data/spec/integration/matcher_spec.rb +95 -1
  341. data/spec/integration/server_query_spec.rb +0 -1
  342. data/spec/integration/shardable_spec.rb +0 -1
  343. data/spec/integration/stringified_symbol_field_spec.rb +14 -1
  344. data/spec/lite_spec_helper.rb +1 -2
  345. data/spec/mongoid/association/accessors_spec.rb +44 -15
  346. data/spec/mongoid/association/auto_save_spec.rb +72 -34
  347. data/spec/mongoid/association/builders_spec.rb +1 -2
  348. data/spec/mongoid/association/constrainable_spec.rb +0 -1
  349. data/spec/mongoid/association/counter_cache_spec.rb +32 -33
  350. data/spec/mongoid/association/depending_spec.rb +12 -13
  351. data/spec/mongoid/association/eager_spec.rb +4 -5
  352. data/spec/mongoid/association/embedded/cyclic_spec.rb +2 -3
  353. data/spec/mongoid/association/embedded/dirty_spec.rb +2 -3
  354. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +0 -1
  355. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +0 -1
  356. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +13 -14
  357. data/spec/mongoid/association/embedded/embedded_in_spec.rb +0 -1
  358. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +0 -1
  359. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +0 -1
  360. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +384 -156
  361. data/spec/mongoid/association/embedded/embeds_many_models.rb +0 -122
  362. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -1
  363. data/spec/mongoid/association/embedded/embeds_many_spec.rb +0 -1
  364. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +0 -1
  365. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +0 -1
  366. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +21 -22
  367. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +0 -1
  368. data/spec/mongoid/association/embedded/embeds_one_models.rb +0 -1
  369. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +0 -1
  370. data/spec/mongoid/association/embedded/embeds_one_spec.rb +0 -1
  371. data/spec/mongoid/association/macros_spec.rb +9 -10
  372. data/spec/mongoid/association/nested/many_spec.rb +0 -1
  373. data/spec/mongoid/association/nested/one_spec.rb +0 -1
  374. data/spec/mongoid/association/options_spec.rb +0 -1
  375. data/spec/mongoid/association/polymorphic_spec.rb +0 -1
  376. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +0 -1
  377. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +55 -17
  378. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +50 -15
  379. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +57 -53
  380. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -1
  381. data/spec/mongoid/association/referenced/belongs_to_spec.rb +22 -2
  382. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +0 -1
  383. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +26 -2
  384. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +31 -3
  385. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +0 -1
  386. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +179 -162
  387. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +18 -1
  388. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +0 -1
  389. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +21 -1
  390. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +0 -1
  391. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +21 -1
  392. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +23 -7
  393. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +113 -33
  394. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +0 -1
  395. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +225 -178
  396. data/spec/mongoid/association/referenced/has_many_models.rb +18 -1
  397. data/spec/mongoid/association/referenced/has_many_query_spec.rb +0 -1
  398. data/spec/mongoid/association/referenced/has_many_spec.rb +21 -1
  399. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +0 -1
  400. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +51 -8
  401. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +17 -2
  402. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +26 -27
  403. data/spec/mongoid/association/referenced/has_one_models.rb +18 -1
  404. data/spec/mongoid/association/referenced/has_one_query_spec.rb +0 -1
  405. data/spec/mongoid/association/referenced/has_one_spec.rb +21 -1
  406. data/spec/mongoid/association/reflections_spec.rb +0 -1
  407. data/spec/mongoid/association/syncable_spec.rb +31 -32
  408. data/spec/mongoid/association_spec.rb +0 -1
  409. data/spec/mongoid/atomic/modifiers_spec.rb +0 -1
  410. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +0 -1
  411. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +0 -1
  412. data/spec/mongoid/atomic/paths/root_spec.rb +0 -1
  413. data/spec/mongoid/atomic/paths_spec.rb +0 -1
  414. data/spec/mongoid/atomic_spec.rb +28 -7
  415. data/spec/mongoid/attributes/dynamic_spec.rb +0 -1
  416. data/spec/mongoid/attributes/nested_spec.rb +66 -67
  417. data/spec/mongoid/attributes/projector_spec.rb +5 -2
  418. data/spec/mongoid/attributes/readonly_spec.rb +22 -23
  419. data/spec/mongoid/attributes_spec.rb +32 -33
  420. data/spec/mongoid/cacheable_spec.rb +1 -2
  421. data/spec/mongoid/changeable_spec.rb +35 -36
  422. data/spec/mongoid/clients/factory_spec.rb +11 -13
  423. data/spec/mongoid/clients/options_spec.rb +5 -5
  424. data/spec/mongoid/clients/sessions_spec.rb +22 -23
  425. data/spec/mongoid/clients/transactions_spec.rb +49 -27
  426. data/spec/mongoid/clients_spec.rb +6 -7
  427. data/spec/mongoid/composable_spec.rb +0 -1
  428. data/spec/mongoid/config/environment_spec.rb +39 -2
  429. data/spec/mongoid/config/options_spec.rb +0 -1
  430. data/spec/mongoid/config_spec.rb +154 -4
  431. data/spec/mongoid/contextual/aggregable/memory_spec.rb +51 -12
  432. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +120 -21
  433. data/spec/mongoid/contextual/aggregable/none_spec.rb +60 -0
  434. data/spec/mongoid/contextual/atomic_spec.rb +46 -47
  435. data/spec/mongoid/contextual/geo_near_spec.rb +17 -18
  436. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -3
  437. data/spec/mongoid/contextual/memory_spec.rb +849 -89
  438. data/spec/mongoid/contextual/mongo_spec.rb +1185 -160
  439. data/spec/mongoid/contextual/none_spec.rb +43 -72
  440. data/spec/mongoid/copyable_spec.rb +12 -13
  441. data/spec/mongoid/copyable_spec_models.rb +0 -1
  442. data/spec/mongoid/criteria/findable_spec.rb +23 -24
  443. data/spec/mongoid/criteria/inspectable_spec.rb +0 -1
  444. data/spec/mongoid/criteria/marshalable_spec.rb +0 -1
  445. data/spec/mongoid/criteria/modifiable_spec.rb +36 -37
  446. data/spec/mongoid/criteria/options_spec.rb +0 -1
  447. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +1 -2
  448. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -1
  449. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +0 -1
  450. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +0 -1
  451. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -1
  452. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +0 -1
  453. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +0 -1
  454. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +0 -1
  455. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -1
  456. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +0 -1
  457. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -1
  458. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +0 -1
  459. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +0 -1
  460. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +0 -1
  461. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +0 -1
  462. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +237 -179
  463. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +0 -1
  464. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +0 -1
  465. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +0 -1
  466. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +0 -1
  467. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -1
  468. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +0 -1
  469. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +0 -1
  470. data/spec/mongoid/criteria/queryable/key_spec.rb +0 -1
  471. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +0 -1
  472. data/spec/mongoid/criteria/queryable/optional_spec.rb +1 -2
  473. data/spec/mongoid/criteria/queryable/options_spec.rb +0 -1
  474. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +0 -1
  475. data/spec/mongoid/criteria/queryable/queryable_spec.rb +1 -2
  476. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -1
  477. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +0 -1
  478. data/spec/mongoid/criteria/queryable/selectable_spec.rb +227 -55
  479. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +0 -1
  480. data/spec/mongoid/criteria/queryable/selector_spec.rb +0 -1
  481. data/spec/mongoid/criteria/queryable/smash_spec.rb +0 -1
  482. data/spec/mongoid/criteria/queryable/storable_spec.rb +37 -1
  483. data/spec/mongoid/criteria/scopable_spec.rb +127 -1
  484. data/spec/mongoid/criteria_projection_spec.rb +3 -4
  485. data/spec/mongoid/criteria_spec.rb +523 -187
  486. data/spec/mongoid/document_fields_spec.rb +0 -1
  487. data/spec/mongoid/document_persistence_context_spec.rb +0 -1
  488. data/spec/mongoid/document_query_spec.rb +0 -1
  489. data/spec/mongoid/document_spec.rb +11 -33
  490. data/spec/mongoid/equality_spec.rb +142 -41
  491. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +0 -1
  492. data/spec/mongoid/errors/callback_spec.rb +0 -1
  493. data/spec/mongoid/errors/delete_restriction_spec.rb +0 -1
  494. data/spec/mongoid/errors/document_not_destroyed_spec.rb +0 -1
  495. data/spec/mongoid/errors/document_not_found_spec.rb +49 -1
  496. data/spec/mongoid/errors/eager_load_spec.rb +0 -1
  497. data/spec/mongoid/errors/invalid_collection_spec.rb +0 -1
  498. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -1
  499. data/spec/mongoid/errors/invalid_config_option_spec.rb +0 -1
  500. data/spec/mongoid/errors/invalid_field_option_spec.rb +0 -1
  501. data/spec/mongoid/errors/invalid_field_spec.rb +0 -1
  502. data/spec/mongoid/errors/invalid_find_spec.rb +0 -1
  503. data/spec/mongoid/errors/invalid_includes_spec.rb +0 -1
  504. data/spec/mongoid/errors/invalid_index_spec.rb +0 -1
  505. data/spec/mongoid/errors/invalid_options_spec.rb +0 -1
  506. data/spec/mongoid/errors/invalid_path_spec.rb +0 -1
  507. data/spec/mongoid/errors/invalid_relation_spec.rb +0 -1
  508. data/spec/mongoid/errors/invalid_scope_spec.rb +1 -2
  509. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +0 -1
  510. data/spec/mongoid/errors/invalid_storage_options_spec.rb +0 -1
  511. data/spec/mongoid/errors/invalid_time_spec.rb +0 -1
  512. data/spec/mongoid/errors/inverse_not_found_spec.rb +0 -1
  513. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +0 -1
  514. data/spec/mongoid/errors/mixed_relations_spec.rb +0 -1
  515. data/spec/mongoid/errors/mongoid_error_spec.rb +1 -2
  516. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +0 -1
  517. data/spec/mongoid/errors/no_client_config_spec.rb +0 -1
  518. data/spec/mongoid/errors/no_client_database_spec.rb +0 -1
  519. data/spec/mongoid/errors/no_client_hosts_spec.rb +0 -1
  520. data/spec/mongoid/errors/no_clients_config_spec.rb +0 -1
  521. data/spec/mongoid/errors/no_environment_spec.rb +0 -1
  522. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +0 -1
  523. data/spec/mongoid/errors/no_metadata_spec.rb +0 -1
  524. data/spec/mongoid/errors/no_parent_spec.rb +0 -1
  525. data/spec/mongoid/errors/readonly_attribute_spec.rb +0 -1
  526. data/spec/mongoid/errors/readonly_document_spec.rb +0 -1
  527. data/spec/mongoid/errors/scope_overwrite_spec.rb +0 -1
  528. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +0 -1
  529. data/spec/mongoid/errors/unknown_attribute_spec.rb +2 -3
  530. data/spec/mongoid/errors/unsaved_document_spec.rb +0 -1
  531. data/spec/mongoid/errors/unsupported_javascript_spec.rb +0 -1
  532. data/spec/mongoid/errors/validations_spec.rb +0 -1
  533. data/spec/mongoid/extensions/array_spec.rb +0 -1
  534. data/spec/mongoid/extensions/big_decimal_spec.rb +0 -1
  535. data/spec/mongoid/extensions/binary_spec.rb +0 -1
  536. data/spec/mongoid/extensions/boolean_spec.rb +0 -1
  537. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +0 -1
  538. data/spec/mongoid/extensions/date_spec.rb +0 -1
  539. data/spec/mongoid/extensions/date_time_spec.rb +0 -1
  540. data/spec/mongoid/extensions/decimal128_spec.rb +0 -1
  541. data/spec/mongoid/extensions/false_class_spec.rb +0 -1
  542. data/spec/mongoid/extensions/float_spec.rb +0 -1
  543. data/spec/mongoid/extensions/hash_spec.rb +0 -1
  544. data/spec/mongoid/extensions/integer_spec.rb +0 -1
  545. data/spec/mongoid/extensions/module_spec.rb +0 -1
  546. data/spec/mongoid/extensions/nil_class_spec.rb +0 -1
  547. data/spec/mongoid/extensions/object_id_spec.rb +0 -1
  548. data/spec/mongoid/extensions/object_spec.rb +0 -1
  549. data/spec/mongoid/extensions/range_spec.rb +0 -1
  550. data/spec/mongoid/extensions/regexp_spec.rb +0 -1
  551. data/spec/mongoid/extensions/set_spec.rb +0 -1
  552. data/spec/mongoid/extensions/string_spec.rb +2 -3
  553. data/spec/mongoid/extensions/stringified_symbol_spec.rb +0 -1
  554. data/spec/mongoid/extensions/symbol_spec.rb +0 -1
  555. data/spec/mongoid/extensions/time_spec.rb +0 -1
  556. data/spec/mongoid/extensions/time_with_zone_spec.rb +0 -1
  557. data/spec/mongoid/extensions/true_class_spec.rb +0 -1
  558. data/spec/mongoid/extensions_spec.rb +14 -3
  559. data/spec/mongoid/factory_spec.rb +1 -1
  560. data/spec/mongoid/fields/foreign_key_spec.rb +0 -1
  561. data/spec/mongoid/fields/localized_spec.rb +0 -1
  562. data/spec/mongoid/fields/standard_spec.rb +0 -1
  563. data/spec/mongoid/fields_spec.rb +326 -31
  564. data/spec/mongoid/findable_spec.rb +51 -22
  565. data/spec/mongoid/indexable/specification_spec.rb +0 -1
  566. data/spec/mongoid/indexable_spec.rb +0 -1
  567. data/spec/mongoid/inspectable_spec.rb +0 -1
  568. data/spec/mongoid/interceptable_spec.rb +102 -95
  569. data/spec/mongoid/loggable_spec.rb +0 -1
  570. data/spec/mongoid/matcher/extract_attribute_spec.rb +5 -2
  571. data/spec/mongoid/persistable/creatable_spec.rb +2 -3
  572. data/spec/mongoid/persistable/deletable_spec.rb +18 -19
  573. data/spec/mongoid/persistable/destroyable_spec.rb +8 -9
  574. data/spec/mongoid/persistable/incrementable_spec.rb +8 -9
  575. data/spec/mongoid/persistable/logical_spec.rb +4 -5
  576. data/spec/mongoid/persistable/poppable_spec.rb +4 -5
  577. data/spec/mongoid/persistable/pullable_spec.rb +8 -9
  578. data/spec/mongoid/persistable/pushable_spec.rb +8 -9
  579. data/spec/mongoid/persistable/renamable_spec.rb +3 -4
  580. data/spec/mongoid/persistable/savable_spec.rb +15 -11
  581. data/spec/mongoid/persistable/settable_spec.rb +9 -10
  582. data/spec/mongoid/persistable/unsettable_spec.rb +4 -5
  583. data/spec/mongoid/persistable/updatable_spec.rb +41 -24
  584. data/spec/mongoid/persistable/upsertable_spec.rb +1 -2
  585. data/spec/mongoid/persistable_spec.rb +1 -2
  586. data/spec/mongoid/persistence_context_spec.rb +0 -1
  587. data/spec/mongoid/positional_spec.rb +0 -1
  588. data/spec/mongoid/query_cache_middleware_spec.rb +1 -2
  589. data/spec/mongoid/query_cache_spec.rb +30 -8
  590. data/spec/mongoid/relations/proxy_spec.rb +6 -7
  591. data/spec/mongoid/reloadable_spec.rb +209 -23
  592. data/spec/mongoid/scopable_spec.rb +54 -22
  593. data/spec/mongoid/selectable_spec.rb +6 -7
  594. data/spec/mongoid/serializable_spec.rb +9 -10
  595. data/spec/mongoid/shardable_spec.rb +2 -3
  596. data/spec/mongoid/stateful_spec.rb +1 -2
  597. data/spec/mongoid/tasks/database_rake_spec.rb +0 -1
  598. data/spec/mongoid/tasks/database_spec.rb +0 -1
  599. data/spec/mongoid/threaded_spec.rb +2 -3
  600. data/spec/mongoid/timestamps/created/short_spec.rb +1 -2
  601. data/spec/mongoid/timestamps/created_spec.rb +1 -2
  602. data/spec/mongoid/timestamps/timeless_spec.rb +2 -3
  603. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -4
  604. data/spec/mongoid/timestamps/updated_spec.rb +3 -4
  605. data/spec/mongoid/timestamps_spec.rb +6 -7
  606. data/spec/mongoid/touchable_spec.rb +15 -20
  607. data/spec/mongoid/touchable_spec_models.rb +0 -1
  608. data/spec/mongoid/traversable_spec.rb +65 -2
  609. data/spec/mongoid/validatable/associated_spec.rb +0 -1
  610. data/spec/mongoid/validatable/format_spec.rb +0 -1
  611. data/spec/mongoid/validatable/length_spec.rb +0 -1
  612. data/spec/mongoid/validatable/numericality_spec.rb +0 -1
  613. data/spec/mongoid/validatable/presence_spec.rb +26 -23
  614. data/spec/mongoid/validatable/uniqueness_spec.rb +67 -68
  615. data/spec/mongoid/validatable_spec.rb +2 -3
  616. data/spec/mongoid_spec.rb +0 -1
  617. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -1
  618. data/spec/rails/mongoid_spec.rb +0 -1
  619. data/spec/shared/lib/mrss/constraints.rb +10 -17
  620. data/spec/shared/lib/mrss/docker_runner.rb +23 -3
  621. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  622. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  623. data/spec/shared/lib/mrss/lite_constraints.rb +40 -1
  624. data/spec/shared/share/Dockerfile.erb +56 -54
  625. data/spec/shared/shlib/config.sh +27 -0
  626. data/spec/shared/shlib/distro.sh +2 -1
  627. data/spec/shared/shlib/server.sh +46 -21
  628. data/spec/shared/shlib/set_env.sh +43 -5
  629. data/spec/spec_helper.rb +12 -22
  630. data/spec/support/authorization.rb +0 -1
  631. data/spec/support/constraints.rb +0 -1
  632. data/spec/support/expectations.rb +0 -1
  633. data/spec/support/macros.rb +31 -1
  634. data/spec/support/models/account.rb +1 -2
  635. data/spec/support/models/acolyte.rb +0 -1
  636. data/spec/support/models/actor.rb +0 -1
  637. data/spec/support/models/actress.rb +0 -1
  638. data/spec/support/models/address.rb +0 -1
  639. data/spec/support/models/address_component.rb +0 -1
  640. data/spec/support/models/address_number.rb +0 -1
  641. data/spec/support/models/agency.rb +0 -1
  642. data/spec/support/models/agent.rb +0 -1
  643. data/spec/support/models/album.rb +0 -1
  644. data/spec/support/models/alert.rb +0 -1
  645. data/spec/support/models/animal.rb +0 -1
  646. data/spec/support/models/answer.rb +0 -1
  647. data/spec/support/models/appointment.rb +0 -1
  648. data/spec/support/models/armrest.rb +0 -1
  649. data/spec/support/models/array_field.rb +0 -1
  650. data/spec/support/models/article.rb +0 -1
  651. data/spec/support/models/artist.rb +2 -1
  652. data/spec/support/models/artwork.rb +0 -1
  653. data/spec/support/models/audio.rb +0 -1
  654. data/spec/support/models/augmentation.rb +0 -1
  655. data/spec/support/models/author.rb +0 -1
  656. data/spec/support/models/baby.rb +0 -1
  657. data/spec/support/models/band.rb +4 -1
  658. data/spec/support/models/bar.rb +0 -1
  659. data/spec/support/models/basic.rb +0 -1
  660. data/spec/support/models/bed.rb +0 -1
  661. data/spec/support/models/big_palette.rb +0 -1
  662. data/spec/support/models/birthday.rb +0 -1
  663. data/spec/support/models/bolt.rb +0 -1
  664. data/spec/support/models/bomb.rb +0 -1
  665. data/spec/support/models/book.rb +0 -1
  666. data/spec/support/models/breed.rb +0 -1
  667. data/spec/support/models/browser.rb +0 -1
  668. data/spec/support/models/building.rb +0 -1
  669. data/spec/support/models/building_address.rb +0 -1
  670. data/spec/support/models/bus.rb +0 -1
  671. data/spec/support/models/business.rb +0 -1
  672. data/spec/support/models/callback_test.rb +0 -1
  673. data/spec/support/models/canvas.rb +0 -1
  674. data/spec/support/models/car.rb +0 -1
  675. data/spec/support/models/cat.rb +0 -1
  676. data/spec/support/models/category.rb +0 -1
  677. data/spec/support/models/child.rb +0 -1
  678. data/spec/support/models/child_doc.rb +3 -4
  679. data/spec/support/models/church.rb +0 -1
  680. data/spec/support/models/circle.rb +0 -1
  681. data/spec/support/models/circuit.rb +0 -1
  682. data/spec/support/models/circus.rb +0 -1
  683. data/spec/support/models/code.rb +2 -1
  684. data/spec/support/models/coding/pull_request.rb +0 -1
  685. data/spec/support/models/coding.rb +0 -1
  686. data/spec/support/models/comment.rb +0 -1
  687. data/spec/support/models/company.rb +0 -1
  688. data/spec/support/models/consumption_period.rb +0 -1
  689. data/spec/support/models/contextable_item.rb +0 -1
  690. data/spec/support/models/contractor.rb +0 -1
  691. data/spec/support/models/cookie.rb +0 -1
  692. data/spec/support/models/country_code.rb +2 -1
  693. data/spec/support/models/courier_job.rb +0 -1
  694. data/spec/support/models/crate.rb +0 -1
  695. data/spec/support/models/customer.rb +0 -1
  696. data/spec/support/models/customer_address.rb +0 -1
  697. data/spec/support/models/deed.rb +0 -1
  698. data/spec/support/models/definition.rb +0 -1
  699. data/spec/support/models/delegating_patient.rb +0 -1
  700. data/spec/support/models/description.rb +0 -1
  701. data/spec/support/models/dictionary.rb +0 -1
  702. data/spec/support/models/division.rb +0 -1
  703. data/spec/support/models/doctor.rb +0 -1
  704. data/spec/support/models/dog.rb +0 -1
  705. data/spec/support/models/dokument.rb +0 -1
  706. data/spec/support/models/draft.rb +0 -1
  707. data/spec/support/models/dragon.rb +0 -1
  708. data/spec/support/models/driver.rb +0 -1
  709. data/spec/support/models/drug.rb +0 -1
  710. data/spec/support/models/dungeon.rb +0 -1
  711. data/spec/support/models/edit.rb +0 -1
  712. data/spec/support/models/email.rb +0 -1
  713. data/spec/support/models/employer.rb +0 -1
  714. data/spec/support/models/entry.rb +0 -1
  715. data/spec/support/models/eraser.rb +0 -1
  716. data/spec/support/models/even.rb +0 -1
  717. data/spec/support/models/event.rb +0 -1
  718. data/spec/support/models/exhibition.rb +0 -1
  719. data/spec/support/models/exhibitor.rb +0 -1
  720. data/spec/support/models/explosion.rb +0 -1
  721. data/spec/support/models/eye.rb +0 -1
  722. data/spec/support/models/eye_bowl.rb +0 -1
  723. data/spec/support/models/face.rb +0 -1
  724. data/spec/support/models/favorite.rb +0 -1
  725. data/spec/support/models/filesystem.rb +0 -1
  726. data/spec/support/models/fire_hydrant.rb +0 -1
  727. data/spec/support/models/firefox.rb +0 -1
  728. data/spec/support/models/fish.rb +0 -1
  729. data/spec/support/models/folder.rb +0 -1
  730. data/spec/support/models/folder_item.rb +0 -1
  731. data/spec/support/models/fruits.rb +0 -1
  732. data/spec/support/models/game.rb +0 -1
  733. data/spec/support/models/ghost.rb +0 -1
  734. data/spec/support/models/guitar.rb +0 -1
  735. data/spec/support/models/hole.rb +0 -1
  736. data/spec/support/models/home.rb +0 -1
  737. data/spec/support/models/house.rb +0 -1
  738. data/spec/support/models/html_writer.rb +0 -1
  739. data/spec/support/models/id_key.rb +0 -1
  740. data/spec/support/models/idnodef.rb +0 -1
  741. data/spec/support/models/image.rb +0 -1
  742. data/spec/support/models/implant.rb +0 -1
  743. data/spec/support/models/instrument.rb +0 -1
  744. data/spec/support/models/item.rb +0 -1
  745. data/spec/support/models/jar.rb +0 -1
  746. data/spec/support/models/kaleidoscope.rb +0 -1
  747. data/spec/support/models/kangaroo.rb +0 -1
  748. data/spec/support/models/label.rb +2 -2
  749. data/spec/support/models/language.rb +0 -1
  750. data/spec/support/models/lat_lng.rb +0 -1
  751. data/spec/support/models/league.rb +0 -1
  752. data/spec/support/models/learner.rb +0 -1
  753. data/spec/support/models/line_item.rb +0 -1
  754. data/spec/support/models/location.rb +0 -1
  755. data/spec/support/models/login.rb +0 -1
  756. data/spec/support/models/manufacturer.rb +0 -1
  757. data/spec/support/models/meat.rb +0 -1
  758. data/spec/support/models/membership.rb +1 -1
  759. data/spec/support/models/message.rb +0 -1
  760. data/spec/support/models/minim.rb +0 -1
  761. data/spec/support/models/mixed_drink.rb +0 -1
  762. data/spec/support/models/mop.rb +0 -1
  763. data/spec/support/models/movie.rb +0 -1
  764. data/spec/support/models/my_hash.rb +0 -1
  765. data/spec/support/models/name.rb +0 -1
  766. data/spec/support/models/name_only.rb +0 -1
  767. data/spec/support/models/node.rb +0 -1
  768. data/spec/support/models/note.rb +0 -1
  769. data/spec/support/models/nut.rb +0 -1
  770. data/spec/support/models/odd.rb +0 -1
  771. data/spec/support/models/order.rb +2 -1
  772. data/spec/support/models/ordered_post.rb +1 -2
  773. data/spec/support/models/ordered_preference.rb +0 -1
  774. data/spec/support/models/oscar.rb +0 -1
  775. data/spec/support/models/other_owner_object.rb +0 -1
  776. data/spec/support/models/override.rb +0 -1
  777. data/spec/support/models/ownable.rb +0 -1
  778. data/spec/support/models/owner.rb +0 -1
  779. data/spec/support/models/pack.rb +0 -1
  780. data/spec/support/models/page.rb +0 -1
  781. data/spec/support/models/page_question.rb +0 -1
  782. data/spec/support/models/palette.rb +0 -1
  783. data/spec/support/models/parent.rb +0 -1
  784. data/spec/support/models/parent_doc.rb +0 -1
  785. data/spec/support/models/passport.rb +5 -1
  786. data/spec/support/models/patient.rb +0 -1
  787. data/spec/support/models/pdf_writer.rb +0 -1
  788. data/spec/support/models/pencil.rb +0 -1
  789. data/spec/support/models/person.rb +1 -1
  790. data/spec/support/models/pet.rb +0 -1
  791. data/spec/support/models/pet_owner.rb +0 -1
  792. data/spec/support/models/phone.rb +2 -2
  793. data/spec/support/models/piano.rb +0 -1
  794. data/spec/support/models/pizza.rb +0 -1
  795. data/spec/support/models/player.rb +0 -1
  796. data/spec/support/models/post.rb +0 -1
  797. data/spec/support/models/post_genre.rb +0 -1
  798. data/spec/support/models/powerup.rb +0 -1
  799. data/spec/support/models/preference.rb +0 -1
  800. data/spec/support/models/princess.rb +0 -1
  801. data/spec/support/models/product.rb +0 -1
  802. data/spec/support/models/profile.rb +0 -1
  803. data/spec/support/models/pronunciation.rb +0 -1
  804. data/spec/support/models/pub.rb +0 -1
  805. data/spec/support/models/publication/encyclopedia.rb +0 -1
  806. data/spec/support/models/publication/review.rb +0 -1
  807. data/spec/support/models/publication.rb +0 -1
  808. data/spec/support/models/purchase.rb +0 -1
  809. data/spec/support/models/purchased_item.rb +10 -0
  810. data/spec/support/models/question.rb +0 -1
  811. data/spec/support/models/quiz.rb +0 -1
  812. data/spec/support/models/rating.rb +0 -1
  813. data/spec/support/models/record.rb +0 -1
  814. data/spec/support/models/registry.rb +0 -1
  815. data/spec/support/models/role.rb +0 -1
  816. data/spec/support/models/root_category.rb +0 -1
  817. data/spec/support/models/sandwich.rb +0 -1
  818. data/spec/support/models/scheduler.rb +0 -1
  819. data/spec/support/models/scribe.rb +0 -1
  820. data/spec/support/models/sealer.rb +0 -1
  821. data/spec/support/models/seat.rb +0 -1
  822. data/spec/support/models/seo.rb +0 -1
  823. data/spec/support/models/series.rb +0 -1
  824. data/spec/support/models/server.rb +0 -1
  825. data/spec/support/models/service.rb +0 -1
  826. data/spec/support/models/shape.rb +0 -1
  827. data/spec/support/models/shelf.rb +0 -1
  828. data/spec/support/models/shipment_address.rb +0 -1
  829. data/spec/support/models/shipping_container.rb +0 -1
  830. data/spec/support/models/shipping_pack.rb +0 -1
  831. data/spec/support/models/shirt.rb +0 -1
  832. data/spec/support/models/shop.rb +0 -1
  833. data/spec/support/models/short_agent.rb +0 -1
  834. data/spec/support/models/short_quiz.rb +0 -1
  835. data/spec/support/models/simple.rb +0 -1
  836. data/spec/support/models/slave.rb +0 -1
  837. data/spec/support/models/song.rb +0 -1
  838. data/spec/support/models/sound.rb +0 -1
  839. data/spec/support/models/spacer.rb +0 -1
  840. data/spec/support/models/square.rb +0 -1
  841. data/spec/support/models/staff.rb +0 -1
  842. data/spec/support/models/store_as_dup_test1.rb +0 -1
  843. data/spec/support/models/store_as_dup_test2.rb +0 -1
  844. data/spec/support/models/store_as_dup_test3.rb +0 -1
  845. data/spec/support/models/store_as_dup_test4.rb +0 -1
  846. data/spec/support/models/strategy.rb +0 -1
  847. data/spec/support/models/sub_item.rb +0 -1
  848. data/spec/support/models/subscription.rb +0 -1
  849. data/spec/support/models/survey.rb +0 -1
  850. data/spec/support/models/symptom.rb +0 -1
  851. data/spec/support/models/tag.rb +0 -1
  852. data/spec/support/models/target.rb +0 -1
  853. data/spec/support/models/template.rb +0 -1
  854. data/spec/support/models/thing.rb +0 -1
  855. data/spec/support/models/threadlocker.rb +0 -1
  856. data/spec/support/models/title.rb +0 -1
  857. data/spec/support/models/tool.rb +0 -1
  858. data/spec/support/models/topping.rb +0 -1
  859. data/spec/support/models/toy.rb +0 -1
  860. data/spec/support/models/track.rb +0 -1
  861. data/spec/support/models/translation.rb +0 -1
  862. data/spec/support/models/tree.rb +0 -1
  863. data/spec/support/models/truck.rb +0 -1
  864. data/spec/support/models/updatable.rb +0 -1
  865. data/spec/support/models/user.rb +0 -1
  866. data/spec/support/models/user_account.rb +0 -1
  867. data/spec/support/models/validation_callback.rb +0 -1
  868. data/spec/support/models/vehicle.rb +0 -1
  869. data/spec/support/models/version.rb +0 -1
  870. data/spec/support/models/vertex.rb +0 -1
  871. data/spec/support/models/vet_visit.rb +0 -1
  872. data/spec/support/models/video.rb +0 -1
  873. data/spec/support/models/video_game.rb +0 -1
  874. data/spec/support/models/washer.rb +0 -1
  875. data/spec/support/models/weapon.rb +0 -1
  876. data/spec/support/models/wiki_page.rb +0 -1
  877. data/spec/support/models/word.rb +0 -1
  878. data/spec/support/models/word_origin.rb +0 -1
  879. data/spec/support/models/writer.rb +0 -1
  880. data/spec/support/schema_maps/schema_map_aws.json +17 -0
  881. data/spec/support/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  882. data/spec/support/schema_maps/schema_map_azure.json +17 -0
  883. data/spec/support/schema_maps/schema_map_azure_key_alt_names.json +12 -0
  884. data/spec/support/schema_maps/schema_map_gcp.json +17 -0
  885. data/spec/support/schema_maps/schema_map_gcp_key_alt_names.json +12 -0
  886. data/spec/support/schema_maps/schema_map_kmip.json +17 -0
  887. data/spec/support/schema_maps/schema_map_kmip_key_alt_names.json +12 -0
  888. data/spec/support/schema_maps/schema_map_local.json +18 -0
  889. data/spec/support/schema_maps/schema_map_local_key_alt_names.json +12 -0
  890. data/spec/support/shared/time.rb +0 -1
  891. data/spec/support/spec_config.rb +7 -1
  892. data.tar.gz.sig +0 -0
  893. metadata +51 -11
  894. metadata.gz.sig +0 -0
  895. 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
  require_relative './selectable_shared_examples'
@@ -480,10 +479,24 @@ describe Mongoid::Criteria::Queryable::Selectable do
480
479
  query.elem_match(users: { name: "value" })
481
480
  end
482
481
 
483
- it "adds the $elemMatch expression" do
484
- expect(selection.selector).to eq({
485
- "users" => { "$elemMatch" => { name: "value" }}
486
- })
482
+ context "when overwrite_chained_operators is false" do
483
+ config_override :overwrite_chained_operators, false
484
+
485
+ it "adds the $elemMatch expression" do
486
+ expect(selection.selector).to eq({
487
+ "users" => { "$elemMatch" => { "name" => "value" }}
488
+ })
489
+ end
490
+ end
491
+
492
+ context "when overwrite_chained_operators is true" do
493
+ config_override :overwrite_chained_operators, true
494
+
495
+ it "adds the $elemMatch expression" do
496
+ expect(selection.selector).to eq({
497
+ "users" => { "$elemMatch" => { name: "value" }}
498
+ })
499
+ end
487
500
  end
488
501
 
489
502
  it "returns a cloned query" do
@@ -524,11 +537,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
524
537
  )
525
538
  end
526
539
 
527
- it "adds the $elemMatch expression" do
528
- expect(selection.selector).to eq({
529
- "users" => { "$elemMatch" => { name: "value" }},
530
- "comments" => { "$elemMatch" => { text: "value" }}
531
- })
540
+ context "when overwrite_chained_operators is false" do
541
+ config_override :overwrite_chained_operators, false
542
+
543
+ it "adds the $elemMatch expression" do
544
+ expect(selection.selector).to eq({
545
+ "users" => { "$elemMatch" => { "name" => "value" }},
546
+ "comments" => { "$elemMatch" => { "text" => "value" }}
547
+ })
548
+ end
549
+ end
550
+
551
+ context "when overwrite_chained_operators is true" do
552
+ config_override :overwrite_chained_operators, true
553
+
554
+ it "adds the $elemMatch expression" do
555
+ expect(selection.selector).to eq({
556
+ "users" => { "$elemMatch" => { name: "value" }},
557
+ "comments" => { "$elemMatch" => { text: "value" }}
558
+ })
559
+ end
532
560
  end
533
561
 
534
562
  it "returns a cloned query" do
@@ -547,11 +575,26 @@ describe Mongoid::Criteria::Queryable::Selectable do
547
575
  elem_match(comments: { text: "value" })
548
576
  end
549
577
 
550
- it "adds the $elemMatch expression" do
551
- expect(selection.selector).to eq({
552
- "users" => { "$elemMatch" => { name: "value" }},
553
- "comments" => { "$elemMatch" => { text: "value" }}
554
- })
578
+ context "when overwrite_chained_operators is false" do
579
+ config_override :overwrite_chained_operators, false
580
+
581
+ it "adds the $elemMatch expression" do
582
+ expect(selection.selector).to eq({
583
+ "users" => { "$elemMatch" => { "name" => "value" }},
584
+ "comments" => { "$elemMatch" => { "text" => "value" }}
585
+ })
586
+ end
587
+ end
588
+
589
+ context "when overwrite_chained_operators is true" do
590
+ config_override :overwrite_chained_operators, true
591
+
592
+ it "adds the $elemMatch expression" do
593
+ expect(selection.selector).to eq({
594
+ "users" => { "$elemMatch" => { name: "value" }},
595
+ "comments" => { "$elemMatch" => { text: "value" }}
596
+ })
597
+ end
555
598
  end
556
599
 
557
600
  it "returns a cloned query" do
@@ -567,10 +610,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
567
610
  elem_match(users: { state: "new" })
568
611
  end
569
612
 
570
- it "overrides the $elemMatch expression" do
571
- expect(selection.selector).to eq({
572
- "users" => { "$elemMatch" => { state: "new" }}
573
- })
613
+ context "when overwrite_chained_operators is false" do
614
+ config_override :overwrite_chained_operators, false
615
+
616
+ it "adds an $elemMatch expression" do
617
+ expect(selection.selector).to eq({
618
+ "users" => { "$elemMatch" => { "name" => "value" } },
619
+ "$and" => [ { "users" => { "$elemMatch" => { "state" => "new" } } } ],
620
+ })
621
+ end
622
+ end
623
+
624
+ context "when overwrite_chained_operators is true" do
625
+ config_override :overwrite_chained_operators, true
626
+
627
+ it "overrides the $elemMatch expression" do
628
+ expect(selection.selector).to eq({
629
+ "users" => { "$elemMatch" => { state: "new" }}
630
+ })
631
+ end
574
632
  end
575
633
 
576
634
  it "returns a cloned query" do
@@ -888,18 +946,40 @@ describe Mongoid::Criteria::Queryable::Selectable do
888
946
 
889
947
  context "when the criterion are on the same field" do
890
948
 
891
- let(:selection) do
892
- query.gt(first: 10).gt(first: 15)
893
- end
949
+ context "when overwrite_chained_operators is true" do
950
+ config_override :overwrite_chained_operators, true
894
951
 
895
- it "overwrites the first $gt selector" do
896
- expect(selection.selector).to eq({
897
- "first" => { "$gt" => 15 }
898
- })
952
+ let(:selection) do
953
+ query.gt(first: 10).gt(first: 15)
954
+ end
955
+
956
+ it "overwrites the first $gt selector" do
957
+ expect(selection.selector).to eq({
958
+ "first" => { "$gt" => 15 },
959
+ })
960
+ end
961
+
962
+ it "returns a cloned query" do
963
+ expect(selection).to_not equal(query)
964
+ end
899
965
  end
900
966
 
901
- it "returns a cloned query" do
902
- expect(selection).to_not equal(query)
967
+ context "when overwrite_chained_operators is false" do
968
+ config_override :overwrite_chained_operators, false
969
+ let(:selection) do
970
+ query.gt(first: 10).gt(first: 15)
971
+ end
972
+
973
+ it "overwrites the first $gt selector" do
974
+ expect(selection.selector).to eq({
975
+ "first" => { "$gt" => 10 },
976
+ "$and" => [{ "first" => { "$gt" => 15 } }]
977
+ })
978
+ end
979
+
980
+ it "returns a cloned query" do
981
+ expect(selection).to_not equal(query)
982
+ end
903
983
  end
904
984
  end
905
985
  end
@@ -976,10 +1056,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
976
1056
  query.gte(first: 10).gte(first: 15)
977
1057
  end
978
1058
 
979
- it "overwrites the first $gte selector" do
980
- expect(selection.selector).to eq({
981
- "first" => { "$gte" => 15 }
982
- })
1059
+ context "when overwrite_chained_operators is false" do
1060
+ config_override :overwrite_chained_operators, false
1061
+
1062
+ it "adds a second $gte selector" do
1063
+ expect(selection.selector).to eq({
1064
+ "first" => { "$gte" => 10 },
1065
+ "$and" => [ { "first" => { "$gte" => 15 } } ]
1066
+ })
1067
+ end
1068
+ end
1069
+
1070
+ context "when overwrite_chained_operators is true" do
1071
+ config_override :overwrite_chained_operators, true
1072
+
1073
+ it "overwrites the first $gte selector" do
1074
+ expect(selection.selector).to eq({
1075
+ "first" => { "$gte" => 15 }
1076
+ })
1077
+ end
983
1078
  end
984
1079
 
985
1080
  it "returns a cloned query" do
@@ -1153,10 +1248,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
1153
1248
  query.lt(first: 10).lt(first: 15)
1154
1249
  end
1155
1250
 
1156
- it "overwrites the first $lt selector" do
1157
- expect(selection.selector).to eq({
1158
- "first" => { "$lt" => 15 }
1159
- })
1251
+ context "when overwrite_chained_operators is false" do
1252
+ config_override :overwrite_chained_operators, false
1253
+
1254
+ it "adds a second $lt selector" do
1255
+ expect(selection.selector).to eq({
1256
+ "first" => { "$lt" => 10 },
1257
+ "$and" => [ { "first" => { "$lt" => 15 } } ]
1258
+ })
1259
+ end
1260
+ end
1261
+
1262
+ context "when overwrite_chained_operators is true" do
1263
+ config_override :overwrite_chained_operators, true
1264
+
1265
+ it "overwrites the first $lt selector" do
1266
+ expect(selection.selector).to eq({
1267
+ "first" => { "$lt" => 15 }
1268
+ })
1269
+ end
1160
1270
  end
1161
1271
 
1162
1272
  it "returns a cloned query" do
@@ -1237,10 +1347,25 @@ describe Mongoid::Criteria::Queryable::Selectable do
1237
1347
  query.lte(first: 10).lte(first: 15)
1238
1348
  end
1239
1349
 
1240
- it "overwrites the first $lte selector" do
1241
- expect(selection.selector).to eq({
1242
- "first" => { "$lte" => 15 }
1243
- })
1350
+ context "when overwrite_chained_operators is false" do
1351
+ config_override :overwrite_chained_operators, false
1352
+
1353
+ it "adds a second $lte selector" do
1354
+ expect(selection.selector).to eq({
1355
+ "first" => { "$lte" => 10 },
1356
+ "$and" => [ { "first" => { "$lte" => 15 } } ]
1357
+ })
1358
+ end
1359
+ end
1360
+
1361
+ context "when overwrite_chained_operators is true" do
1362
+ config_override :overwrite_chained_operators, true
1363
+
1364
+ it "overwrites the first $lte selector" do
1365
+ expect(selection.selector).to eq({
1366
+ "first" => { "$lte" => 15 }
1367
+ })
1368
+ end
1244
1369
  end
1245
1370
 
1246
1371
  it "returns a cloned query" do
@@ -1950,7 +2075,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
1950
2075
  :field.all
1951
2076
  end
1952
2077
 
1953
- it "returns a selecton key" do
2078
+ it "returns a selection key" do
1954
2079
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
1955
2080
  end
1956
2081
 
@@ -1969,7 +2094,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
1969
2094
  :field.elem_match
1970
2095
  end
1971
2096
 
1972
- it "returns a selecton key" do
2097
+ it "returns a selection key" do
1973
2098
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
1974
2099
  end
1975
2100
 
@@ -1988,7 +2113,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
1988
2113
  :field.exists
1989
2114
  end
1990
2115
 
1991
- it "returns a selecton key" do
2116
+ it "returns a selection key" do
1992
2117
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
1993
2118
  end
1994
2119
 
@@ -2007,7 +2132,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2007
2132
  :field.gt
2008
2133
  end
2009
2134
 
2010
- it "returns a selecton key" do
2135
+ it "returns a selection key" do
2011
2136
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2012
2137
  end
2013
2138
 
@@ -2026,7 +2151,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2026
2151
  :field.gte
2027
2152
  end
2028
2153
 
2029
- it "returns a selecton key" do
2154
+ it "returns a selection key" do
2030
2155
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2031
2156
  end
2032
2157
 
@@ -2045,7 +2170,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2045
2170
  :field.in
2046
2171
  end
2047
2172
 
2048
- it "returns a selecton key" do
2173
+ it "returns a selection key" do
2049
2174
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2050
2175
  end
2051
2176
 
@@ -2064,7 +2189,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2064
2189
  :field.lt
2065
2190
  end
2066
2191
 
2067
- it "returns a selecton key" do
2192
+ it "returns a selection key" do
2068
2193
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2069
2194
  end
2070
2195
 
@@ -2083,7 +2208,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2083
2208
  :field.lte
2084
2209
  end
2085
2210
 
2086
- it "returns a selecton key" do
2211
+ it "returns a selection key" do
2087
2212
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2088
2213
  end
2089
2214
 
@@ -2102,7 +2227,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2102
2227
  :field.mod
2103
2228
  end
2104
2229
 
2105
- it "returns a selecton key" do
2230
+ it "returns a selection key" do
2106
2231
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2107
2232
  end
2108
2233
 
@@ -2121,7 +2246,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2121
2246
  :field.ne
2122
2247
  end
2123
2248
 
2124
- it "returns a selecton key" do
2249
+ it "returns a selection key" do
2125
2250
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2126
2251
  end
2127
2252
 
@@ -2140,7 +2265,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2140
2265
  :field.near
2141
2266
  end
2142
2267
 
2143
- it "returns a selecton key" do
2268
+ it "returns a selection key" do
2144
2269
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2145
2270
  end
2146
2271
 
@@ -2159,7 +2284,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2159
2284
  :field.near_sphere
2160
2285
  end
2161
2286
 
2162
- it "returns a selecton key" do
2287
+ it "returns a selection key" do
2163
2288
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2164
2289
  end
2165
2290
 
@@ -2178,7 +2303,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2178
2303
  :field.nin
2179
2304
  end
2180
2305
 
2181
- it "returns a selecton key" do
2306
+ it "returns a selection key" do
2182
2307
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2183
2308
  end
2184
2309
 
@@ -2217,7 +2342,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2217
2342
  :field.with_size
2218
2343
  end
2219
2344
 
2220
- it "returns a selecton key" do
2345
+ it "returns a selection key" do
2221
2346
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2222
2347
  end
2223
2348
 
@@ -2236,7 +2361,7 @@ describe Mongoid::Criteria::Queryable::Selectable do
2236
2361
  :field.with_type
2237
2362
  end
2238
2363
 
2239
- it "returns a selecton key" do
2364
+ it "returns a selection key" do
2240
2365
  expect(key).to be_a(Mongoid::Criteria::Queryable::Key)
2241
2366
  end
2242
2367
 
@@ -2295,4 +2420,51 @@ describe Mongoid::Criteria::Queryable::Selectable do
2295
2420
  end
2296
2421
  end
2297
2422
  end
2423
+
2424
+ describe "Mongoid.overwrite_chained_operators" do
2425
+ [ :eq, :elem_match, :gt, :gte, :lt, :lte, :mod, :ne, :near, :near_sphere ].each do |meth|
2426
+
2427
+ context "when chaining the #{meth} method when using the same field" do
2428
+ let(:op) do
2429
+ {
2430
+ eq: "$eq",
2431
+ elem_match: "$elemMatch",
2432
+ gt: "$gt",
2433
+ gte: "$gte",
2434
+ lt: "$lt",
2435
+ lte: "$lte",
2436
+ mod: "$mod",
2437
+ ne: "$ne",
2438
+ near: "$near",
2439
+ near_sphere: "$nearSphere"
2440
+ }[meth]
2441
+ end
2442
+
2443
+ let(:criteria) do
2444
+ Band.send(meth, {views: 1}).send(meth, {views:2})
2445
+ end
2446
+
2447
+ context "when overwrite_chained_operators is true" do
2448
+ config_override :overwrite_chained_operators, true
2449
+
2450
+ it "overrides the previous operators" do
2451
+ expect(criteria.selector).to eq({
2452
+ "views" => { op => 2 },
2453
+ })
2454
+ end
2455
+ end
2456
+
2457
+ context "when overwrite_chained_operators is false" do
2458
+ config_override :overwrite_chained_operators, false
2459
+
2460
+ it "overrides the previous operators" do
2461
+ expect(criteria.selector).to eq({
2462
+ "views" => { op => 1 },
2463
+ "$and" => [{ "views" => { op => 2 } }]
2464
+ })
2465
+ end
2466
+ end
2467
+ end
2468
+ end
2469
+ end
2298
2470
  end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
  require_relative './selectable_shared_examples'
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -68,6 +67,43 @@ describe Mongoid::Criteria::Queryable::Storable do
68
67
  end
69
68
  end
70
69
 
70
+ context "when broken_and feature flag is not set" do
71
+ config_override :broken_and, false
72
+
73
+ context '$and to query with $and onto query whose first one is not $and' do
74
+ let(:query) do
75
+ Mongoid::Query.new.where({'foo' => 'baz'}).where('$and' => [{zoom: 'zoom'}])
76
+ end
77
+
78
+ let(:modified) do
79
+ query.send(query_method, '$and', [{'foo' => 'bar'}])
80
+ end
81
+
82
+ it 'adds to existing $and' do
83
+ modified.selector.should == {
84
+ '$and' => [{'zoom' => 'zoom'}, {'foo' => 'bar'}], 'foo' => 'baz'}
85
+ end
86
+ end
87
+ end
88
+
89
+ context "when broken_and feature flag is set" do
90
+ config_override :broken_and, true
91
+
92
+ context '$and to query with $and onto query whose first one is not $and' do
93
+ let(:query) do
94
+ Mongoid::Query.new.where({'foo' => 'baz'}).where('$and' => [{zoom: 'zoom'}])
95
+ end
96
+
97
+ let(:modified) do
98
+ query.send(query_method, '$and', [{'foo' => 'bar'}])
99
+ end
100
+
101
+ it 'does not add to existing $and' do
102
+ modified.selector.should == {
103
+ '$and' => [{'foo' => 'bar'}], 'foo' => 'baz'}
104
+ end
105
+ end
106
+ end
71
107
  end
72
108
 
73
109
  context '$or operator' do
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -119,6 +118,133 @@ describe Mongoid::Criteria::Scopable do
119
118
  end
120
119
  end
121
120
 
121
+ describe "#apply_scope" do
122
+
123
+ let(:criteria) do
124
+ Band.skip(20).where(name: 'Black Sabbath').includes(:same_name)
125
+ end
126
+
127
+ let(:result) do
128
+ criteria.apply_scope(scope)
129
+ end
130
+
131
+ context "when the scope is a Criteria" do
132
+
133
+ context 'when standard scope' do
134
+ let(:scope) do
135
+ Band.gt(member_count: 3).limit(3).includes(:artists)
136
+ end
137
+
138
+ it 'merges the criteria' do
139
+ expect(result.selector).to eq("name" => "Black Sabbath", "member_count" => { "$gt"=>3 })
140
+ expect(result.options).to eq(skip: 20, limit: 3)
141
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name artists])
142
+ end
143
+ end
144
+
145
+ context 'when unscoped' do
146
+ let(:scope) do
147
+ Band.unscoped.gt(member_count: 3).limit(3).includes(:artists)
148
+ end
149
+
150
+ it 'unscoped has no effect' do
151
+ expect(result.selector).to eq("name" => "Black Sabbath", "member_count" => { "$gt"=>3 })
152
+ expect(result.options).to eq(skip: 20, limit: 3)
153
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name artists])
154
+ end
155
+ end
156
+ end
157
+
158
+ context "when the scope is a Proc" do
159
+
160
+ context 'when standard scope' do
161
+ let(:scope) do
162
+ -> { gt(member_count: 3).limit(3).includes(:artists) }
163
+ end
164
+
165
+ it 'adds the scope' do
166
+ expect(result.selector).to eq("name" => "Black Sabbath", "member_count" => { "$gt"=>3 })
167
+ expect(result.options).to eq(skip: 20, limit: 3)
168
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name artists])
169
+ end
170
+ end
171
+
172
+ context 'when unscoped' do
173
+ let(:scope) do
174
+ -> { unscoped.gt(member_count: 3).limit(3).includes(:artists) }
175
+ end
176
+
177
+ it 'removes existing scopes then adds the new scope' do
178
+ expect(result.selector).to eq("member_count" => { "$gt"=>3 })
179
+ expect(result.options).to eq(limit: 3)
180
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name artists])
181
+ end
182
+ end
183
+ end
184
+
185
+ context "when the scope is a Symbol" do
186
+
187
+ context 'when standard scope' do
188
+ let(:scope) do
189
+ :highly_rated
190
+ end
191
+
192
+ it 'adds the scope' do
193
+ expect(result.selector).to eq("name" => "Black Sabbath", "rating" => { "$gte" => 7 })
194
+ expect(result.options).to eq(skip: 20)
195
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name])
196
+ end
197
+ end
198
+
199
+ context 'when unscoped' do
200
+ let(:scope) do
201
+ :unscoped
202
+ end
203
+
204
+ it 'removes existing scopes then adds the new scope' do
205
+ expect(result.selector).to eq({})
206
+ expect(result.options).to eq({})
207
+ expect(result.inclusions.map(&:name)).to eq(%i[same_name])
208
+ end
209
+ end
210
+ end
211
+
212
+ context 'when model has default_scope' do
213
+
214
+ before do
215
+ Band.default_scope ->{ Band.where(active: true).includes(:records) }
216
+ end
217
+
218
+ after do
219
+ Band.default_scoping = nil
220
+ end
221
+
222
+ context 'when standard scope' do
223
+ let(:scope) do
224
+ -> { gt(member_count: 3).limit(3).includes(:artists) }
225
+ end
226
+
227
+ it 'merges the scope' do
228
+ expect(result.selector).to eq("active" => true, "name" => "Black Sabbath", "member_count" => { "$gt" => 3 })
229
+ expect(result.options).to eq(skip: 20, limit: 3)
230
+ expect(result.inclusions.map(&:name)).to eq(%i[records same_name artists])
231
+ end
232
+ end
233
+
234
+ context 'when unscoped' do
235
+ let(:scope) do
236
+ -> { unscoped.gt(member_count: 3).limit(3).includes(:artists) }
237
+ end
238
+
239
+ it 'removes existing scopes then adds the new scope' do
240
+ expect(result.selector).to eq("member_count" => { "$gt" => 3 })
241
+ expect(result.options).to eq(limit: 3)
242
+ expect(result.inclusions.map(&:name)).to eq(%i[records same_name artists])
243
+ end
244
+ end
245
+ end
246
+ end
247
+
122
248
  describe "#remove_scoping" do
123
249
 
124
250
  context "when the other has selection" do
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- # encoding: utf-8
3
2
 
4
3
  require "spec_helper"
5
4
 
@@ -8,7 +7,7 @@ describe Mongoid::Criteria do
8
7
  describe "#only" do
9
8
 
10
9
  let!(:band) do
11
- Band.create(name: "Depeche Mode", likes: 3, views: 10)
10
+ Band.create!(name: "Depeche Mode", likes: 3, views: 10)
12
11
  end
13
12
 
14
13
  context "when not using inheritance" do
@@ -158,10 +157,10 @@ describe Mongoid::Criteria do
158
157
 
159
158
  before do
160
159
  I18n.locale = :en
161
- d = Dictionary.create(description: 'english-text')
160
+ d = Dictionary.create!(description: 'english-text')
162
161
  I18n.locale = :de
163
162
  d.description = 'deutsch-text'
164
- d.save
163
+ d.save!
165
164
  end
166
165
 
167
166
  after do