mongoid 7.0.12 → 7.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1039) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +13 -13
  4. data/README.md +32 -19
  5. data/Rakefile +49 -0
  6. data/lib/config/locales/en.yml +113 -55
  7. data/lib/mongoid/association/accessors.rb +143 -53
  8. data/lib/mongoid/association/bindable.rb +7 -5
  9. data/lib/mongoid/association/builders.rb +4 -3
  10. data/lib/mongoid/association/constrainable.rb +5 -3
  11. data/lib/mongoid/association/depending.rb +10 -12
  12. data/lib/mongoid/association/eager_loadable.rb +2 -0
  13. data/lib/mongoid/association/embedded/batchable.rb +5 -3
  14. data/lib/mongoid/association/embedded/cyclic.rb +8 -6
  15. data/lib/mongoid/association/embedded/embedded_in/binding.rb +4 -1
  16. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +8 -2
  17. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +15 -12
  18. data/lib/mongoid/association/embedded/embedded_in.rb +7 -4
  19. data/lib/mongoid/association/embedded/embeds_many/binding.rb +5 -2
  20. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +9 -3
  21. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +60 -50
  22. data/lib/mongoid/association/embedded/embeds_many.rb +7 -4
  23. data/lib/mongoid/association/embedded/embeds_one/binding.rb +5 -2
  24. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +10 -4
  25. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +17 -14
  26. data/lib/mongoid/association/embedded/embeds_one.rb +7 -4
  27. data/lib/mongoid/association/embedded.rb +3 -0
  28. data/lib/mongoid/association/macros.rb +38 -36
  29. data/lib/mongoid/association/many.rb +16 -13
  30. data/lib/mongoid/association/marshalable.rb +3 -1
  31. data/lib/mongoid/association/nested/many.rb +18 -16
  32. data/lib/mongoid/association/nested/nested_buildable.rb +6 -3
  33. data/lib/mongoid/association/nested/one.rb +15 -11
  34. data/lib/mongoid/association/nested.rb +4 -1
  35. data/lib/mongoid/association/one.rb +3 -1
  36. data/lib/mongoid/association/options.rb +9 -6
  37. data/lib/mongoid/association/proxy.rb +37 -15
  38. data/lib/mongoid/association/referenced/auto_save.rb +6 -3
  39. data/lib/mongoid/association/referenced/belongs_to/binding.rb +4 -2
  40. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +7 -4
  41. data/lib/mongoid/association/referenced/belongs_to/eager.rb +40 -2
  42. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +16 -14
  43. data/lib/mongoid/association/referenced/belongs_to.rb +6 -3
  44. data/lib/mongoid/association/referenced/counter_cache.rb +2 -0
  45. data/lib/mongoid/association/referenced/eager.rb +37 -15
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +12 -6
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +5 -2
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +2 -0
  49. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +26 -19
  50. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +13 -6
  51. data/lib/mongoid/association/referenced/has_many/binding.rb +3 -1
  52. data/lib/mongoid/association/referenced/has_many/buildable.rb +5 -2
  53. data/lib/mongoid/association/referenced/has_many/eager.rb +2 -0
  54. data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -457
  55. data/lib/mongoid/association/referenced/has_many/proxy.rb +57 -47
  56. data/lib/mongoid/association/referenced/has_many.rb +7 -4
  57. data/lib/mongoid/association/referenced/has_one/binding.rb +4 -2
  58. data/lib/mongoid/association/referenced/has_one/buildable.rb +17 -2
  59. data/lib/mongoid/association/referenced/has_one/eager.rb +2 -0
  60. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +13 -11
  61. data/lib/mongoid/association/referenced/has_one/proxy.rb +23 -16
  62. data/lib/mongoid/association/referenced/has_one.rb +5 -2
  63. data/lib/mongoid/association/referenced/syncable.rb +7 -5
  64. data/lib/mongoid/association/referenced.rb +3 -0
  65. data/lib/mongoid/association/reflections.rb +7 -5
  66. data/lib/mongoid/association/relatable.rb +19 -14
  67. data/lib/mongoid/association.rb +9 -6
  68. data/lib/mongoid/atomic/modifiers.rb +25 -2
  69. data/lib/mongoid/atomic/paths/embedded/many.rb +4 -2
  70. data/lib/mongoid/atomic/paths/embedded/one.rb +4 -2
  71. data/lib/mongoid/atomic/paths/embedded.rb +2 -0
  72. data/lib/mongoid/atomic/paths/root.rb +4 -2
  73. data/lib/mongoid/atomic/paths.rb +2 -0
  74. data/lib/mongoid/atomic.rb +28 -2
  75. data/lib/mongoid/attributes/dynamic.rb +3 -1
  76. data/lib/mongoid/attributes/nested.rb +7 -5
  77. data/lib/mongoid/attributes/processing.rb +8 -6
  78. data/lib/mongoid/attributes/projector.rb +120 -0
  79. data/lib/mongoid/attributes/readonly.rb +3 -1
  80. data/lib/mongoid/attributes.rb +46 -27
  81. data/lib/mongoid/cacheable.rb +5 -3
  82. data/lib/mongoid/changeable.rb +3 -1
  83. data/lib/mongoid/clients/factory.rb +42 -10
  84. data/lib/mongoid/clients/options.rb +10 -8
  85. data/lib/mongoid/clients/sessions.rb +3 -0
  86. data/lib/mongoid/clients/storage_options.rb +7 -5
  87. data/lib/mongoid/clients/validators/storage.rb +2 -0
  88. data/lib/mongoid/clients/validators.rb +2 -0
  89. data/lib/mongoid/clients.rb +3 -1
  90. data/lib/mongoid/composable.rb +5 -2
  91. data/lib/mongoid/config/environment.rb +11 -1
  92. data/lib/mongoid/config/options.rb +20 -12
  93. data/lib/mongoid/config/validators/client.rb +2 -0
  94. data/lib/mongoid/config/validators/option.rb +2 -0
  95. data/lib/mongoid/config/validators.rb +2 -0
  96. data/lib/mongoid/config.rb +75 -12
  97. data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
  98. data/lib/mongoid/contextual/aggregable/mongo.rb +13 -9
  99. data/lib/mongoid/contextual/atomic.rb +31 -8
  100. data/lib/mongoid/contextual/command.rb +2 -0
  101. data/lib/mongoid/contextual/geo_near.rb +5 -3
  102. data/lib/mongoid/contextual/map_reduce.rb +5 -2
  103. data/lib/mongoid/contextual/memory.rb +4 -2
  104. data/lib/mongoid/contextual/mongo.rb +29 -5
  105. data/lib/mongoid/contextual/none.rb +5 -0
  106. data/lib/mongoid/contextual/queryable.rb +2 -0
  107. data/lib/mongoid/contextual.rb +7 -4
  108. data/lib/mongoid/copyable.rb +11 -5
  109. data/lib/mongoid/criteria/findable.rb +12 -2
  110. data/lib/mongoid/criteria/includable.rb +8 -6
  111. data/lib/mongoid/criteria/inspectable.rb +2 -0
  112. data/lib/mongoid/criteria/marshalable.rb +2 -0
  113. data/lib/mongoid/criteria/modifiable.rb +2 -0
  114. data/lib/mongoid/criteria/options.rb +2 -0
  115. data/lib/mongoid/criteria/permission.rb +2 -0
  116. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
  117. data/lib/mongoid/criteria/queryable/expandable.rb +69 -0
  118. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
  119. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
  120. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +3 -1
  121. data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
  122. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
  123. data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
  124. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
  125. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +3 -1
  126. data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
  127. data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
  128. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +6 -4
  129. data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
  130. data/lib/mongoid/criteria/queryable/extensions/string.rb +3 -1
  131. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  132. data/lib/mongoid/criteria/queryable/extensions/time.rb +3 -1
  133. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +3 -1
  134. data/lib/mongoid/criteria/queryable/extensions.rb +1 -3
  135. data/lib/mongoid/criteria/queryable/key.rb +35 -7
  136. data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
  137. data/lib/mongoid/criteria/queryable/mergeable.rb +179 -11
  138. data/lib/mongoid/criteria/queryable/optional.rb +5 -3
  139. data/lib/mongoid/criteria/queryable/options.rb +2 -0
  140. data/lib/mongoid/criteria/queryable/pipeline.rb +5 -2
  141. data/lib/mongoid/criteria/queryable/selectable.rb +397 -98
  142. data/lib/mongoid/criteria/queryable/selector.rb +37 -8
  143. data/lib/mongoid/criteria/queryable/smash.rb +2 -0
  144. data/lib/mongoid/criteria/queryable/storable.rb +233 -0
  145. data/lib/mongoid/criteria/queryable.rb +7 -2
  146. data/lib/mongoid/criteria/scopable.rb +2 -0
  147. data/lib/mongoid/criteria.rb +79 -15
  148. data/lib/mongoid/document.rb +21 -20
  149. data/lib/mongoid/equality.rb +3 -2
  150. data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
  151. data/lib/mongoid/errors/callback.rb +2 -0
  152. data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
  153. data/lib/mongoid/errors/delete_restriction.rb +10 -10
  154. data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
  155. data/lib/mongoid/errors/document_not_found.rb +2 -0
  156. data/lib/mongoid/errors/eager_load.rb +6 -2
  157. data/lib/mongoid/errors/empty_config_file.rb +26 -0
  158. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
  159. data/lib/mongoid/errors/invalid_collection.rb +2 -0
  160. data/lib/mongoid/errors/invalid_config_file.rb +26 -0
  161. data/lib/mongoid/errors/invalid_config_option.rb +2 -0
  162. data/lib/mongoid/errors/invalid_dependent_strategy.rb +2 -0
  163. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  164. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  165. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  166. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  167. data/lib/mongoid/errors/invalid_field.rb +2 -0
  168. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  169. data/lib/mongoid/errors/invalid_field_option.rb +2 -0
  170. data/lib/mongoid/errors/invalid_find.rb +2 -0
  171. data/lib/mongoid/errors/invalid_includes.rb +2 -0
  172. data/lib/mongoid/errors/invalid_index.rb +2 -0
  173. data/lib/mongoid/errors/invalid_options.rb +4 -2
  174. data/lib/mongoid/errors/invalid_path.rb +2 -0
  175. data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
  176. data/lib/mongoid/errors/invalid_query.rb +41 -0
  177. data/lib/mongoid/errors/invalid_relation.rb +4 -2
  178. data/lib/mongoid/errors/invalid_relation_option.rb +4 -2
  179. data/lib/mongoid/errors/invalid_scope.rb +2 -0
  180. data/lib/mongoid/errors/invalid_session_use.rb +2 -0
  181. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
  182. data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
  183. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  184. data/lib/mongoid/errors/invalid_time.rb +2 -0
  185. data/lib/mongoid/errors/invalid_value.rb +2 -0
  186. data/lib/mongoid/errors/inverse_not_found.rb +3 -1
  187. data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
  188. data/lib/mongoid/errors/mixed_relations.rb +2 -0
  189. data/lib/mongoid/errors/mongoid_error.rb +3 -1
  190. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
  191. data/lib/mongoid/errors/no_client_config.rb +4 -2
  192. data/lib/mongoid/errors/no_client_database.rb +2 -0
  193. data/lib/mongoid/errors/no_client_hosts.rb +2 -0
  194. data/lib/mongoid/errors/no_clients_config.rb +2 -0
  195. data/lib/mongoid/errors/no_default_client.rb +3 -1
  196. data/lib/mongoid/errors/no_environment.rb +2 -0
  197. data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
  198. data/lib/mongoid/errors/no_metadata.rb +2 -0
  199. data/lib/mongoid/errors/no_parent.rb +2 -0
  200. data/lib/mongoid/errors/readonly_attribute.rb +2 -0
  201. data/lib/mongoid/errors/readonly_document.rb +2 -0
  202. data/lib/mongoid/errors/scope_overwrite.rb +2 -0
  203. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
  204. data/lib/mongoid/errors/unknown_attribute.rb +2 -0
  205. data/lib/mongoid/errors/unknown_model.rb +2 -0
  206. data/lib/mongoid/errors/unsaved_document.rb +2 -0
  207. data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
  208. data/lib/mongoid/errors/validations.rb +2 -0
  209. data/lib/mongoid/errors.rb +12 -0
  210. data/lib/mongoid/evolvable.rb +4 -2
  211. data/lib/mongoid/extensions/array.rb +23 -6
  212. data/lib/mongoid/extensions/big_decimal.rb +2 -0
  213. data/lib/mongoid/extensions/boolean.rb +3 -2
  214. data/lib/mongoid/extensions/date.rb +13 -3
  215. data/lib/mongoid/extensions/date_time.rb +4 -3
  216. data/lib/mongoid/extensions/decimal128.rb +2 -0
  217. data/lib/mongoid/extensions/false_class.rb +3 -1
  218. data/lib/mongoid/extensions/float.rb +5 -3
  219. data/lib/mongoid/extensions/hash.rb +49 -9
  220. data/lib/mongoid/extensions/integer.rb +5 -3
  221. data/lib/mongoid/extensions/module.rb +2 -0
  222. data/lib/mongoid/extensions/nil_class.rb +2 -0
  223. data/lib/mongoid/extensions/object.rb +16 -4
  224. data/lib/mongoid/extensions/object_id.rb +2 -0
  225. data/lib/mongoid/extensions/range.rb +2 -0
  226. data/lib/mongoid/extensions/regexp.rb +2 -0
  227. data/lib/mongoid/extensions/set.rb +2 -0
  228. data/lib/mongoid/extensions/string.rb +18 -9
  229. data/lib/mongoid/extensions/symbol.rb +2 -0
  230. data/lib/mongoid/extensions/time.rb +14 -0
  231. data/lib/mongoid/extensions/time_with_zone.rb +14 -0
  232. data/lib/mongoid/extensions/true_class.rb +3 -1
  233. data/lib/mongoid/extensions.rb +3 -0
  234. data/lib/mongoid/factory.rb +52 -12
  235. data/lib/mongoid/fields/foreign_key.rb +3 -1
  236. data/lib/mongoid/fields/localized.rb +2 -0
  237. data/lib/mongoid/fields/standard.rb +6 -3
  238. data/lib/mongoid/fields/validators/macro.rb +38 -11
  239. data/lib/mongoid/fields/validators.rb +2 -0
  240. data/lib/mongoid/fields.rb +49 -6
  241. data/lib/mongoid/findable.rb +59 -18
  242. data/lib/mongoid/indexable/specification.rb +3 -1
  243. data/lib/mongoid/indexable/validators/options.rb +2 -0
  244. data/lib/mongoid/indexable.rb +5 -3
  245. data/lib/mongoid/inspectable.rb +4 -2
  246. data/lib/mongoid/interceptable.rb +10 -4
  247. data/lib/mongoid/loggable.rb +13 -7
  248. data/lib/mongoid/matchable.rb +2 -148
  249. data/lib/mongoid/matcher/all.rb +22 -0
  250. data/lib/mongoid/matcher/and.rb +21 -0
  251. data/lib/mongoid/matcher/bits.rb +41 -0
  252. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  253. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  254. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  255. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  256. data/lib/mongoid/matcher/elem_match.rb +36 -0
  257. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  258. data/lib/mongoid/matcher/eq.rb +11 -0
  259. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  260. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  261. data/lib/mongoid/matcher/exists.rb +15 -0
  262. data/lib/mongoid/matcher/expression.rb +35 -0
  263. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  264. data/lib/mongoid/matcher/field_expression.rb +62 -0
  265. data/lib/mongoid/matcher/field_operator.rb +54 -0
  266. data/lib/mongoid/matcher/gt.rb +17 -0
  267. data/lib/mongoid/matcher/gte.rb +17 -0
  268. data/lib/mongoid/matcher/in.rb +25 -0
  269. data/lib/mongoid/matcher/lt.rb +17 -0
  270. data/lib/mongoid/matcher/lte.rb +17 -0
  271. data/lib/mongoid/matcher/mod.rb +17 -0
  272. data/lib/mongoid/matcher/ne.rb +16 -0
  273. data/lib/mongoid/matcher/nin.rb +11 -0
  274. data/lib/mongoid/matcher/nor.rb +25 -0
  275. data/lib/mongoid/matcher/not.rb +29 -0
  276. data/lib/mongoid/matcher/or.rb +21 -0
  277. data/lib/mongoid/matcher/regex.rb +41 -0
  278. data/lib/mongoid/matcher/size.rb +26 -0
  279. data/lib/mongoid/matcher/type.rb +99 -0
  280. data/lib/mongoid/matcher.rb +110 -0
  281. data/lib/mongoid/persistable/creatable.rb +3 -1
  282. data/lib/mongoid/persistable/deletable.rb +5 -4
  283. data/lib/mongoid/persistable/destroyable.rb +11 -3
  284. data/lib/mongoid/persistable/incrementable.rb +6 -2
  285. data/lib/mongoid/persistable/logical.rb +4 -1
  286. data/lib/mongoid/persistable/poppable.rb +3 -1
  287. data/lib/mongoid/persistable/pullable.rb +3 -1
  288. data/lib/mongoid/persistable/pushable.rb +3 -1
  289. data/lib/mongoid/persistable/renamable.rb +10 -3
  290. data/lib/mongoid/persistable/savable.rb +3 -1
  291. data/lib/mongoid/persistable/settable.rb +3 -1
  292. data/lib/mongoid/persistable/unsettable.rb +8 -3
  293. data/lib/mongoid/persistable/updatable.rb +30 -3
  294. data/lib/mongoid/persistable/upsertable.rb +3 -1
  295. data/lib/mongoid/persistable.rb +133 -15
  296. data/lib/mongoid/persistence_context.rb +24 -10
  297. data/lib/mongoid/positional.rb +2 -0
  298. data/lib/mongoid/query_cache.rb +118 -100
  299. data/lib/mongoid/railtie.rb +3 -1
  300. data/lib/mongoid/railties/controller_runtime.rb +4 -1
  301. data/lib/mongoid/railties/database.rake +9 -0
  302. data/lib/mongoid/reloadable.rb +11 -4
  303. data/lib/mongoid/scopable.rb +2 -1
  304. data/lib/mongoid/selectable.rb +8 -8
  305. data/lib/mongoid/serializable.rb +24 -14
  306. data/lib/mongoid/shardable.rb +80 -10
  307. data/lib/mongoid/stateful.rb +3 -1
  308. data/lib/mongoid/stringified_symbol.rb +53 -0
  309. data/lib/mongoid/tasks/database.rake +12 -5
  310. data/lib/mongoid/tasks/database.rb +85 -0
  311. data/lib/mongoid/threaded/lifecycle.rb +2 -0
  312. data/lib/mongoid/threaded.rb +2 -0
  313. data/lib/mongoid/timestamps/created/short.rb +2 -0
  314. data/lib/mongoid/timestamps/created.rb +3 -1
  315. data/lib/mongoid/timestamps/short.rb +2 -0
  316. data/lib/mongoid/timestamps/timeless.rb +6 -2
  317. data/lib/mongoid/timestamps/updated/short.rb +2 -0
  318. data/lib/mongoid/timestamps/updated.rb +3 -1
  319. data/lib/mongoid/timestamps.rb +3 -1
  320. data/lib/mongoid/touchable.rb +53 -16
  321. data/lib/mongoid/traversable.rb +115 -6
  322. data/lib/mongoid/validatable/associated.rb +5 -3
  323. data/lib/mongoid/validatable/format.rb +2 -0
  324. data/lib/mongoid/validatable/length.rb +2 -0
  325. data/lib/mongoid/validatable/localizable.rb +2 -0
  326. data/lib/mongoid/validatable/macros.rb +2 -0
  327. data/lib/mongoid/validatable/presence.rb +7 -5
  328. data/lib/mongoid/validatable/queryable.rb +2 -0
  329. data/lib/mongoid/validatable/uniqueness.rb +5 -3
  330. data/lib/mongoid/validatable.rb +7 -5
  331. data/lib/mongoid/version.rb +2 -1
  332. data/lib/mongoid.rb +34 -2
  333. data/lib/rails/generators/mongoid/config/config_generator.rb +10 -1
  334. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +45 -30
  335. data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
  336. data/lib/rails/generators/mongoid_generator.rb +2 -0
  337. data/lib/rails/mongoid.rb +4 -2
  338. data/lib/support/ruby_version.rb +3 -0
  339. data/spec/README.md +19 -4
  340. data/spec/config/mongoid.yml +1 -0
  341. data/spec/integration/app_spec.rb +246 -94
  342. data/spec/integration/associations/belongs_to_spec.rb +3 -0
  343. data/spec/integration/associations/embedded_spec.rb +207 -0
  344. data/spec/integration/associations/embeds_many_spec.rb +68 -0
  345. data/spec/integration/associations/embeds_one_spec.rb +24 -0
  346. data/spec/integration/associations/foreign_key_spec.rb +99 -0
  347. data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
  348. data/spec/integration/associations/has_many_spec.rb +129 -0
  349. data/spec/integration/associations/has_one_spec.rb +177 -0
  350. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  351. data/spec/integration/associations/reverse_population_spec.rb +35 -0
  352. data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
  353. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  354. data/spec/integration/bson_regexp_raw_spec.rb +20 -0
  355. data/spec/integration/contextual/empty_spec.rb +142 -0
  356. data/spec/integration/criteria/date_field_spec.rb +1 -1
  357. data/spec/integration/criteria/default_scope_spec.rb +21 -0
  358. data/spec/integration/criteria/logical_spec.rb +94 -0
  359. data/spec/integration/discriminator_key_spec.rb +354 -0
  360. data/spec/integration/discriminator_value_spec.rb +207 -0
  361. data/spec/integration/document_spec.rb +30 -0
  362. data/spec/integration/i18n_fallbacks_spec.rb +90 -0
  363. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  364. data/spec/integration/matcher_operator_data/all.yml +140 -0
  365. data/spec/integration/matcher_operator_data/and.yml +93 -0
  366. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  367. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  368. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  369. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  370. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  371. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  372. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  373. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  374. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  375. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  376. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  377. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  378. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  379. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  380. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  381. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  382. data/spec/integration/matcher_operator_data/in.yml +210 -0
  383. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  384. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  385. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  386. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  387. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  388. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  389. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  390. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  391. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  392. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  393. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  394. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  395. data/spec/integration/matcher_operator_data/not.yml +196 -0
  396. data/spec/integration/matcher_operator_data/or.yml +137 -0
  397. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  398. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  399. data/spec/integration/matcher_operator_data/size.yml +174 -0
  400. data/spec/integration/matcher_operator_data/type.yml +70 -0
  401. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  402. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  403. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  404. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  405. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  406. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  407. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  408. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  409. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  410. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  411. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  412. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  413. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  414. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  415. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  416. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  417. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  418. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  419. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  420. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  421. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  422. data/spec/integration/matcher_operator_spec.rb +100 -0
  423. data/spec/integration/matcher_spec.rb +189 -0
  424. data/spec/integration/server_query_spec.rb +142 -0
  425. data/spec/integration/shardable_spec.rb +149 -0
  426. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  427. data/spec/lite_spec_helper.rb +15 -5
  428. data/spec/mongoid/association/accessors_spec.rb +241 -63
  429. data/spec/mongoid/association/auto_save_spec.rb +3 -0
  430. data/spec/mongoid/association/builders_spec.rb +3 -0
  431. data/spec/mongoid/association/constrainable_spec.rb +3 -0
  432. data/spec/mongoid/association/counter_cache_spec.rb +3 -0
  433. data/spec/mongoid/association/depending_spec.rb +427 -333
  434. data/spec/mongoid/association/eager_spec.rb +3 -0
  435. data/spec/mongoid/association/embedded/cyclic_spec.rb +3 -0
  436. data/spec/mongoid/association/embedded/dirty_spec.rb +3 -0
  437. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +3 -0
  438. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +3 -0
  439. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +3 -0
  440. data/spec/mongoid/association/embedded/embedded_in_spec.rb +4 -1
  441. data/spec/mongoid/association/embedded/embeds_many/binding_spec.rb +3 -0
  442. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +3 -0
  443. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +53 -4
  444. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  445. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
  446. data/spec/mongoid/association/embedded/embeds_many_spec.rb +4 -1
  447. data/spec/mongoid/association/embedded/embeds_one/binding_spec.rb +3 -0
  448. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +3 -0
  449. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +3 -0
  450. data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +3 -0
  451. data/spec/mongoid/association/embedded/embeds_one_models.rb +4 -0
  452. data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
  453. data/spec/mongoid/association/embedded/embeds_one_spec.rb +4 -1
  454. data/spec/mongoid/association/macros_spec.rb +3 -0
  455. data/spec/mongoid/association/nested/many_spec.rb +3 -0
  456. data/spec/mongoid/association/nested/one_spec.rb +19 -12
  457. data/spec/mongoid/association/options_spec.rb +3 -0
  458. data/spec/mongoid/association/polymorphic_spec.rb +3 -0
  459. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +3 -0
  460. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +3 -0
  461. data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +205 -10
  462. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +45 -8
  463. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +58 -0
  464. data/spec/mongoid/association/referenced/belongs_to_spec.rb +3 -0
  465. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +4 -1
  466. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +3 -0
  467. data/spec/mongoid/association/referenced/has_and_belongs_to_many/eager_spec.rb +16 -0
  468. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +26 -5
  469. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +37 -14
  470. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -2
  471. data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
  472. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +26 -2
  473. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +4 -1
  474. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +3 -0
  475. data/spec/mongoid/association/referenced/has_many/eager_spec.rb +18 -3
  476. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +248 -93
  477. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +1 -0
  478. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +463 -186
  479. data/spec/mongoid/association/referenced/has_many_models.rb +41 -0
  480. data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
  481. data/spec/mongoid/association/referenced/has_many_spec.rb +3 -0
  482. data/spec/mongoid/association/referenced/has_one/binding_spec.rb +3 -0
  483. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +3 -0
  484. data/spec/mongoid/association/referenced/has_one/eager_spec.rb +18 -3
  485. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +3 -0
  486. data/spec/mongoid/association/referenced/has_one_models.rb +32 -0
  487. data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
  488. data/spec/mongoid/association/referenced/has_one_spec.rb +4 -1
  489. data/spec/mongoid/association/reflections_spec.rb +3 -0
  490. data/spec/mongoid/association/syncable_spec.rb +3 -0
  491. data/spec/mongoid/association_spec.rb +3 -0
  492. data/spec/mongoid/atomic/modifiers_spec.rb +50 -0
  493. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
  494. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
  495. data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
  496. data/spec/mongoid/atomic/paths_spec.rb +67 -12
  497. data/spec/mongoid/atomic_spec.rb +26 -0
  498. data/spec/mongoid/attributes/nested_spec.rb +4 -1
  499. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  500. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  501. data/spec/mongoid/attributes/projector_spec.rb +41 -0
  502. data/spec/mongoid/attributes/readonly_spec.rb +3 -0
  503. data/spec/mongoid/attributes_spec.rb +336 -0
  504. data/spec/mongoid/cacheable_spec.rb +3 -0
  505. data/spec/mongoid/changeable_spec.rb +26 -0
  506. data/spec/mongoid/clients/factory_spec.rb +137 -28
  507. data/spec/mongoid/clients/options_spec.rb +42 -23
  508. data/spec/mongoid/clients/sessions_spec.rb +4 -6
  509. data/spec/mongoid/clients/transactions_spec.rb +6 -3
  510. data/spec/mongoid/clients_spec.rb +3 -0
  511. data/spec/mongoid/composable_spec.rb +3 -0
  512. data/spec/mongoid/config/environment_spec.rb +89 -8
  513. data/spec/mongoid/config/options_spec.rb +23 -3
  514. data/spec/mongoid/config_spec.rb +172 -0
  515. data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
  516. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
  517. data/spec/mongoid/contextual/atomic_spec.rb +181 -29
  518. data/spec/mongoid/contextual/geo_near_spec.rb +4 -1
  519. data/spec/mongoid/contextual/map_reduce_spec.rb +3 -0
  520. data/spec/mongoid/contextual/memory_spec.rb +3 -0
  521. data/spec/mongoid/contextual/mongo_spec.rb +77 -18
  522. data/spec/mongoid/contextual/none_spec.rb +3 -0
  523. data/spec/mongoid/copyable_spec.rb +200 -18
  524. data/spec/mongoid/copyable_spec_models.rb +31 -0
  525. data/spec/mongoid/criteria/findable_spec.rb +58 -0
  526. data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
  527. data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
  528. data/spec/mongoid/criteria/modifiable_spec.rb +8 -4
  529. data/spec/mongoid/criteria/options_spec.rb +3 -0
  530. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
  531. data/spec/mongoid/criteria/queryable/expandable_spec.rb +62 -0
  532. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
  533. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
  534. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
  535. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +4 -1
  536. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
  537. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
  538. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
  539. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
  540. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
  541. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
  542. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
  543. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
  544. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
  545. data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
  546. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +3 -0
  547. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
  548. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +3 -0
  549. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
  550. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +24 -16
  551. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +3 -0
  552. data/spec/mongoid/criteria/queryable/key_spec.rb +3 -0
  553. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +146 -12
  554. data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
  555. data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
  556. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +3 -0
  557. data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
  558. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1593 -285
  559. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  560. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1048 -2773
  561. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  562. data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -0
  563. data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
  564. data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
  565. data/spec/mongoid/criteria/scopable_spec.rb +3 -0
  566. data/spec/mongoid/criteria_projection_spec.rb +411 -0
  567. data/spec/mongoid/criteria_spec.rb +241 -278
  568. data/spec/mongoid/document_fields_spec.rb +26 -0
  569. data/spec/mongoid/document_query_spec.rb +90 -0
  570. data/spec/mongoid/document_spec.rb +113 -16
  571. data/spec/mongoid/equality_spec.rb +3 -1
  572. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
  573. data/spec/mongoid/errors/callback_spec.rb +3 -0
  574. data/spec/mongoid/errors/delete_restriction_spec.rb +5 -2
  575. data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
  576. data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
  577. data/spec/mongoid/errors/eager_load_spec.rb +3 -0
  578. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
  579. data/spec/mongoid/errors/invalid_config_file_spec.rb +32 -0
  580. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
  581. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
  582. data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
  583. data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
  584. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
  585. data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
  586. data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
  587. data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
  588. data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
  589. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
  590. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
  591. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
  592. data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
  593. data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
  594. data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
  595. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
  596. data/spec/mongoid/errors/mongoid_error_spec.rb +23 -8
  597. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
  598. data/spec/mongoid/errors/no_client_config_spec.rb +5 -2
  599. data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
  600. data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
  601. data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
  602. data/spec/mongoid/errors/no_environment_spec.rb +3 -0
  603. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
  604. data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
  605. data/spec/mongoid/errors/no_parent_spec.rb +4 -1
  606. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
  607. data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
  608. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
  609. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
  610. data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
  611. data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
  612. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
  613. data/spec/mongoid/errors/validations_spec.rb +3 -0
  614. data/spec/mongoid/extensions/array_spec.rb +26 -43
  615. data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
  616. data/spec/mongoid/extensions/binary_spec.rb +3 -0
  617. data/spec/mongoid/extensions/boolean_spec.rb +3 -0
  618. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
  619. data/spec/mongoid/extensions/date_spec.rb +9 -160
  620. data/spec/mongoid/extensions/date_time_spec.rb +18 -60
  621. data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
  622. data/spec/mongoid/extensions/false_class_spec.rb +4 -1
  623. data/spec/mongoid/extensions/float_spec.rb +18 -3
  624. data/spec/mongoid/extensions/hash_spec.rb +106 -0
  625. data/spec/mongoid/extensions/integer_spec.rb +15 -2
  626. data/spec/mongoid/extensions/module_spec.rb +3 -0
  627. data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
  628. data/spec/mongoid/extensions/object_id_spec.rb +3 -0
  629. data/spec/mongoid/extensions/object_spec.rb +14 -24
  630. data/spec/mongoid/extensions/range_spec.rb +3 -0
  631. data/spec/mongoid/extensions/regexp_spec.rb +3 -0
  632. data/spec/mongoid/extensions/set_spec.rb +3 -0
  633. data/spec/mongoid/extensions/string_spec.rb +59 -25
  634. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  635. data/spec/mongoid/extensions/symbol_spec.rb +3 -0
  636. data/spec/mongoid/extensions/time_spec.rb +30 -0
  637. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
  638. data/spec/mongoid/extensions/true_class_spec.rb +4 -1
  639. data/spec/mongoid/extensions_spec.rb +3 -0
  640. data/spec/mongoid/factory_spec.rb +287 -27
  641. data/spec/mongoid/fields/foreign_key_spec.rb +3 -0
  642. data/spec/mongoid/fields/localized_spec.rb +7 -4
  643. data/spec/mongoid/fields/standard_spec.rb +3 -0
  644. data/spec/mongoid/fields_spec.rb +93 -6
  645. data/spec/mongoid/findable_spec.rb +35 -0
  646. data/spec/mongoid/indexable/specification_spec.rb +3 -0
  647. data/spec/mongoid/indexable_spec.rb +31 -2
  648. data/spec/mongoid/inspectable_spec.rb +40 -2
  649. data/spec/mongoid/interceptable_spec.rb +67 -2
  650. data/spec/mongoid/interceptable_spec_models.rb +76 -0
  651. data/spec/mongoid/loggable_spec.rb +3 -0
  652. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  653. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  654. data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
  655. data/spec/mongoid/persistable/creatable_spec.rb +111 -25
  656. data/spec/mongoid/persistable/deletable_spec.rb +264 -1
  657. data/spec/mongoid/persistable/destroyable_spec.rb +194 -3
  658. data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
  659. data/spec/mongoid/persistable/logical_spec.rb +17 -0
  660. data/spec/mongoid/persistable/poppable_spec.rb +17 -0
  661. data/spec/mongoid/persistable/pullable_spec.rb +31 -0
  662. data/spec/mongoid/persistable/pushable_spec.rb +31 -0
  663. data/spec/mongoid/persistable/renamable_spec.rb +17 -0
  664. data/spec/mongoid/persistable/savable_spec.rb +175 -16
  665. data/spec/mongoid/persistable/settable_spec.rb +47 -0
  666. data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
  667. data/spec/mongoid/persistable/updatable_spec.rb +5 -0
  668. data/spec/mongoid/persistable/upsertable_spec.rb +4 -1
  669. data/spec/mongoid/persistable_spec.rb +85 -8
  670. data/spec/mongoid/persistence_context_spec.rb +3 -0
  671. data/spec/mongoid/positional_spec.rb +3 -0
  672. data/spec/mongoid/query_cache_middleware_spec.rb +69 -0
  673. data/spec/mongoid/query_cache_spec.rb +466 -82
  674. data/spec/mongoid/relations/proxy_spec.rb +3 -0
  675. data/spec/mongoid/reloadable_spec.rb +93 -1
  676. data/spec/mongoid/scopable_spec.rb +3 -0
  677. data/spec/mongoid/selectable_spec.rb +3 -0
  678. data/spec/mongoid/serializable_spec.rb +152 -20
  679. data/spec/mongoid/shardable_models.rb +61 -0
  680. data/spec/mongoid/shardable_spec.rb +116 -16
  681. data/spec/mongoid/stateful_spec.rb +3 -0
  682. data/spec/mongoid/tasks/database_rake_spec.rb +3 -0
  683. data/spec/mongoid/tasks/database_spec.rb +3 -0
  684. data/spec/mongoid/threaded_spec.rb +3 -0
  685. data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
  686. data/spec/mongoid/timestamps/created_spec.rb +3 -0
  687. data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
  688. data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
  689. data/spec/mongoid/timestamps/updated_spec.rb +3 -0
  690. data/spec/mongoid/timestamps_spec.rb +3 -0
  691. data/spec/mongoid/touchable_spec.rb +171 -19
  692. data/spec/mongoid/touchable_spec_models.rb +54 -0
  693. data/spec/mongoid/traversable_spec.rb +1103 -0
  694. data/spec/mongoid/validatable/associated_spec.rb +3 -0
  695. data/spec/mongoid/validatable/format_spec.rb +3 -0
  696. data/spec/mongoid/validatable/length_spec.rb +3 -0
  697. data/spec/mongoid/validatable/numericality_spec.rb +3 -0
  698. data/spec/mongoid/validatable/presence_spec.rb +3 -0
  699. data/spec/mongoid/validatable/uniqueness_spec.rb +3 -0
  700. data/spec/mongoid/validatable_spec.rb +4 -1
  701. data/spec/mongoid_spec.rb +3 -0
  702. data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
  703. data/spec/rails/mongoid_spec.rb +5 -2
  704. data/spec/shared/bin/get-mongodb-download-url +17 -0
  705. data/spec/shared/bin/s3-copy +45 -0
  706. data/spec/shared/bin/s3-upload +69 -0
  707. data/spec/shared/lib/mrss/cluster_config.rb +19 -4
  708. data/spec/shared/lib/mrss/constraints.rb +67 -12
  709. data/spec/shared/lib/mrss/docker_runner.rb +10 -1
  710. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  711. data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
  712. data/spec/shared/lib/mrss/server_version_registry.rb +84 -33
  713. data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
  714. data/spec/shared/lib/mrss/utils.rb +15 -0
  715. data/spec/shared/share/Dockerfile.erb +126 -32
  716. data/spec/shared/share/haproxy-1.conf +16 -0
  717. data/spec/shared/share/haproxy-2.conf +17 -0
  718. data/spec/shared/shlib/server.sh +123 -26
  719. data/spec/shared/shlib/set_env.sh +4 -1
  720. data/spec/spec_helper.rb +31 -17
  721. data/spec/support/authorization.rb +3 -0
  722. data/spec/support/client_registry.rb +9 -0
  723. data/spec/support/constraints.rb +15 -233
  724. data/spec/support/expectations.rb +6 -1
  725. data/spec/support/helpers.rb +11 -0
  726. data/spec/support/macros.rb +1 -0
  727. data/spec/{app → support}/models/account.rb +3 -0
  728. data/spec/{app → support}/models/acolyte.rb +3 -0
  729. data/spec/{app → support}/models/actor.rb +4 -1
  730. data/spec/support/models/actress.rb +5 -0
  731. data/spec/{app → support}/models/address.rb +7 -0
  732. data/spec/{app → support}/models/address_component.rb +3 -0
  733. data/spec/{app → support}/models/address_number.rb +3 -0
  734. data/spec/{app → support}/models/agency.rb +3 -0
  735. data/spec/{app → support}/models/agent.rb +3 -0
  736. data/spec/{app → support}/models/album.rb +3 -0
  737. data/spec/{app → support}/models/alert.rb +3 -0
  738. data/spec/{app → support}/models/animal.rb +3 -0
  739. data/spec/{app → support}/models/answer.rb +3 -0
  740. data/spec/{app → support}/models/appointment.rb +3 -0
  741. data/spec/support/models/armrest.rb +10 -0
  742. data/spec/{app → support}/models/array_field.rb +1 -0
  743. data/spec/{app → support}/models/article.rb +3 -0
  744. data/spec/{app → support}/models/artist.rb +3 -0
  745. data/spec/{app → support}/models/artwork.rb +3 -0
  746. data/spec/{app → support}/models/audio.rb +3 -0
  747. data/spec/{app → support}/models/augmentation.rb +3 -0
  748. data/spec/{app → support}/models/author.rb +3 -0
  749. data/spec/{app → support}/models/baby.rb +3 -0
  750. data/spec/{app → support}/models/band.rb +3 -0
  751. data/spec/{app → support}/models/bar.rb +3 -0
  752. data/spec/{app → support}/models/basic.rb +3 -0
  753. data/spec/support/models/bed.rb +4 -0
  754. data/spec/support/models/big_palette.rb +5 -0
  755. data/spec/{app → support}/models/birthday.rb +3 -0
  756. data/spec/support/models/bolt.rb +8 -0
  757. data/spec/{app → support}/models/bomb.rb +3 -0
  758. data/spec/{app → support}/models/book.rb +3 -0
  759. data/spec/{app → support}/models/breed.rb +3 -0
  760. data/spec/support/models/browser.rb +9 -0
  761. data/spec/{app → support}/models/building.rb +3 -0
  762. data/spec/{app → support}/models/building_address.rb +3 -0
  763. data/spec/{app → support}/models/bus.rb +3 -0
  764. data/spec/{app → support}/models/business.rb +3 -0
  765. data/spec/{app → support}/models/callback_test.rb +3 -0
  766. data/spec/{app → support}/models/canvas.rb +4 -1
  767. data/spec/support/models/car.rb +4 -0
  768. data/spec/{app → support}/models/cat.rb +3 -0
  769. data/spec/{app → support}/models/category.rb +3 -0
  770. data/spec/{app → support}/models/child.rb +3 -0
  771. data/spec/{app → support}/models/child_doc.rb +3 -0
  772. data/spec/{app → support}/models/church.rb +3 -0
  773. data/spec/{app → support}/models/circle.rb +3 -0
  774. data/spec/{app → support}/models/circuit.rb +3 -0
  775. data/spec/{app → support}/models/circus.rb +3 -0
  776. data/spec/{app → support}/models/code.rb +3 -0
  777. data/spec/support/models/coding/pull_request.rb +12 -0
  778. data/spec/support/models/coding.rb +4 -0
  779. data/spec/{app → support}/models/comment.rb +3 -0
  780. data/spec/{app → support}/models/company.rb +3 -0
  781. data/spec/{app → support}/models/consumption_period.rb +3 -0
  782. data/spec/{app → support}/models/contextable_item.rb +3 -0
  783. data/spec/{app → support}/models/contractor.rb +3 -0
  784. data/spec/{app → support}/models/cookie.rb +3 -0
  785. data/spec/{app → support}/models/country_code.rb +3 -0
  786. data/spec/{app → support}/models/courier_job.rb +3 -0
  787. data/spec/support/models/crate.rb +13 -0
  788. data/spec/{app → support}/models/customer.rb +0 -0
  789. data/spec/{app → support}/models/customer_address.rb +0 -0
  790. data/spec/support/models/deed.rb +8 -0
  791. data/spec/{app → support}/models/definition.rb +3 -0
  792. data/spec/{app → support}/models/delegating_patient.rb +0 -0
  793. data/spec/{app → support}/models/description.rb +3 -0
  794. data/spec/{app → support}/models/dictionary.rb +9 -0
  795. data/spec/{app → support}/models/division.rb +3 -0
  796. data/spec/{app → support}/models/doctor.rb +3 -0
  797. data/spec/{app → support}/models/dog.rb +3 -0
  798. data/spec/{app → support}/models/dokument.rb +3 -0
  799. data/spec/{app → support}/models/draft.rb +3 -0
  800. data/spec/{app → support}/models/dragon.rb +3 -0
  801. data/spec/{app → support}/models/driver.rb +4 -1
  802. data/spec/{app → support}/models/drug.rb +3 -0
  803. data/spec/{app → support}/models/dungeon.rb +3 -0
  804. data/spec/{app → support}/models/edit.rb +3 -0
  805. data/spec/{app → support}/models/email.rb +3 -0
  806. data/spec/support/models/employer.rb +8 -0
  807. data/spec/{app → support}/models/entry.rb +3 -0
  808. data/spec/support/models/eraser.rb +4 -0
  809. data/spec/{app → support}/models/even.rb +3 -0
  810. data/spec/{app → support}/models/event.rb +3 -0
  811. data/spec/{app → support}/models/exhibition.rb +3 -0
  812. data/spec/{app → support}/models/exhibitor.rb +3 -0
  813. data/spec/{app → support}/models/explosion.rb +3 -0
  814. data/spec/{app → support}/models/eye.rb +3 -0
  815. data/spec/{app → support}/models/eye_bowl.rb +3 -0
  816. data/spec/{app → support}/models/face.rb +3 -0
  817. data/spec/{app → support}/models/favorite.rb +3 -0
  818. data/spec/{app → support}/models/filesystem.rb +3 -0
  819. data/spec/{app → support}/models/fire_hydrant.rb +3 -0
  820. data/spec/{app → support}/models/firefox.rb +3 -0
  821. data/spec/{app → support}/models/fish.rb +3 -0
  822. data/spec/{app → support}/models/folder.rb +3 -0
  823. data/spec/{app → support}/models/folder_item.rb +3 -0
  824. data/spec/{app → support}/models/fruits.rb +3 -0
  825. data/spec/{app → support}/models/game.rb +3 -0
  826. data/spec/{app → support}/models/ghost.rb +3 -0
  827. data/spec/support/models/guitar.rb +5 -0
  828. data/spec/support/models/hole.rb +13 -0
  829. data/spec/{app → support}/models/home.rb +3 -0
  830. data/spec/{app → support}/models/house.rb +3 -0
  831. data/spec/support/models/html_writer.rb +6 -0
  832. data/spec/{app → support}/models/id_key.rb +3 -0
  833. data/spec/support/models/idnodef.rb +8 -0
  834. data/spec/{app → support}/models/image.rb +3 -0
  835. data/spec/{app → support}/models/implant.rb +3 -0
  836. data/spec/support/models/instrument.rb +9 -0
  837. data/spec/{app → support}/models/item.rb +4 -1
  838. data/spec/{app → support}/models/jar.rb +3 -0
  839. data/spec/{app → support}/models/kaleidoscope.rb +3 -0
  840. data/spec/{app → support}/models/kangaroo.rb +4 -1
  841. data/spec/{app → support}/models/label.rb +3 -0
  842. data/spec/{app → support}/models/language.rb +3 -0
  843. data/spec/{app → support}/models/lat_lng.rb +3 -0
  844. data/spec/{app → support}/models/league.rb +3 -0
  845. data/spec/support/models/learner.rb +5 -0
  846. data/spec/{app → support}/models/line_item.rb +3 -0
  847. data/spec/{app → support}/models/location.rb +3 -0
  848. data/spec/{app → support}/models/login.rb +3 -0
  849. data/spec/{app → support}/models/manufacturer.rb +3 -0
  850. data/spec/{app → support}/models/meat.rb +3 -0
  851. data/spec/{app → support}/models/membership.rb +3 -0
  852. data/spec/{app → support}/models/message.rb +3 -0
  853. data/spec/{app → support}/models/minim.rb +1 -1
  854. data/spec/{app → support}/models/mixed_drink.rb +3 -0
  855. data/spec/support/models/mop.rb +25 -0
  856. data/spec/{app → support}/models/movie.rb +3 -0
  857. data/spec/support/models/my_hash.rb +5 -0
  858. data/spec/{app → support}/models/name.rb +3 -0
  859. data/spec/support/models/name_only.rb +9 -0
  860. data/spec/{app → support}/models/node.rb +3 -0
  861. data/spec/{app → support}/models/note.rb +3 -0
  862. data/spec/support/models/nut.rb +8 -0
  863. data/spec/{app → support}/models/odd.rb +3 -0
  864. data/spec/support/models/order.rb +11 -0
  865. data/spec/{app → support}/models/ordered_post.rb +3 -0
  866. data/spec/{app → support}/models/ordered_preference.rb +3 -0
  867. data/spec/{app → support}/models/oscar.rb +3 -0
  868. data/spec/support/models/other_owner_object.rb +5 -0
  869. data/spec/{app → support}/models/override.rb +3 -0
  870. data/spec/{app → support}/models/ownable.rb +3 -0
  871. data/spec/{app → support}/models/owner.rb +5 -0
  872. data/spec/support/models/pack.rb +6 -0
  873. data/spec/{app → support}/models/page.rb +3 -0
  874. data/spec/{app → support}/models/page_question.rb +3 -0
  875. data/spec/{app → support}/models/palette.rb +4 -1
  876. data/spec/{app → support}/models/parent.rb +3 -0
  877. data/spec/{app → support}/models/parent_doc.rb +3 -0
  878. data/spec/{app → support}/models/passport.rb +4 -0
  879. data/spec/{app → support}/models/patient.rb +3 -0
  880. data/spec/support/models/pdf_writer.rb +6 -0
  881. data/spec/support/models/pencil.rb +4 -0
  882. data/spec/{app → support}/models/person.rb +21 -1
  883. data/spec/{app → support}/models/pet.rb +3 -0
  884. data/spec/{app → support}/models/pet_owner.rb +3 -0
  885. data/spec/{app → support}/models/phone.rb +4 -0
  886. data/spec/support/models/piano.rb +5 -0
  887. data/spec/{app → support}/models/pizza.rb +3 -0
  888. data/spec/{app → support}/models/player.rb +3 -0
  889. data/spec/{app → support}/models/post.rb +3 -0
  890. data/spec/{app → support}/models/post_genre.rb +3 -0
  891. data/spec/{app → support}/models/powerup.rb +3 -0
  892. data/spec/{app → support}/models/preference.rb +3 -0
  893. data/spec/{app → support}/models/princess.rb +3 -0
  894. data/spec/{app → support}/models/product.rb +3 -0
  895. data/spec/support/models/profile.rb +18 -0
  896. data/spec/{app → support}/models/pronunciation.rb +3 -0
  897. data/spec/{app → support}/models/pub.rb +3 -0
  898. data/spec/support/models/publication/encyclopedia.rb +12 -0
  899. data/spec/support/models/publication/review.rb +14 -0
  900. data/spec/support/models/publication.rb +5 -0
  901. data/spec/{app → support}/models/purchase.rb +3 -0
  902. data/spec/{app → support}/models/question.rb +3 -0
  903. data/spec/{app → support}/models/quiz.rb +3 -0
  904. data/spec/{app → support}/models/rating.rb +3 -0
  905. data/spec/{app → support}/models/record.rb +3 -0
  906. data/spec/{app → support}/models/registry.rb +3 -0
  907. data/spec/{app → support}/models/role.rb +3 -0
  908. data/spec/{app → support}/models/root_category.rb +3 -0
  909. data/spec/{app → support}/models/sandwich.rb +3 -0
  910. data/spec/{app → support}/models/scheduler.rb +3 -0
  911. data/spec/support/models/scribe.rb +8 -0
  912. data/spec/support/models/sealer.rb +8 -0
  913. data/spec/support/models/seat.rb +25 -0
  914. data/spec/{app → support}/models/seo.rb +3 -0
  915. data/spec/support/models/series.rb +8 -0
  916. data/spec/{app → support}/models/server.rb +3 -0
  917. data/spec/{app → support}/models/service.rb +3 -0
  918. data/spec/{app → support}/models/shape.rb +5 -2
  919. data/spec/{app → support}/models/shelf.rb +3 -0
  920. data/spec/{app → support}/models/shipment_address.rb +3 -0
  921. data/spec/{app → support}/models/shipping_container.rb +3 -0
  922. data/spec/{app → support}/models/shipping_pack.rb +3 -0
  923. data/spec/support/models/shirt.rb +12 -0
  924. data/spec/{app → support}/models/shop.rb +3 -0
  925. data/spec/{app → support}/models/short_agent.rb +3 -0
  926. data/spec/{app → support}/models/short_quiz.rb +3 -0
  927. data/spec/{app → support}/models/simple.rb +3 -0
  928. data/spec/{app → support}/models/slave.rb +3 -0
  929. data/spec/{app → support}/models/song.rb +3 -0
  930. data/spec/{app → support}/models/sound.rb +3 -0
  931. data/spec/support/models/spacer.rb +8 -0
  932. data/spec/{app → support}/models/square.rb +3 -0
  933. data/spec/{app → support}/models/staff.rb +3 -0
  934. data/spec/{app → support}/models/store_as_dup_test1.rb +3 -0
  935. data/spec/{app → support}/models/store_as_dup_test2.rb +3 -0
  936. data/spec/{app → support}/models/store_as_dup_test3.rb +1 -0
  937. data/spec/{app → support}/models/store_as_dup_test4.rb +1 -0
  938. data/spec/support/models/strategy.rb +6 -0
  939. data/spec/support/models/sub_item.rb +6 -0
  940. data/spec/{app → support}/models/subscription.rb +3 -0
  941. data/spec/{app → support}/models/survey.rb +3 -0
  942. data/spec/{app → support}/models/symptom.rb +3 -0
  943. data/spec/support/models/system_role.rb +7 -0
  944. data/spec/{app → support}/models/tag.rb +3 -0
  945. data/spec/{app → support}/models/target.rb +3 -0
  946. data/spec/{app → support}/models/template.rb +3 -0
  947. data/spec/{app → support}/models/thing.rb +3 -0
  948. data/spec/support/models/threadlocker.rb +8 -0
  949. data/spec/support/models/title.rb +6 -0
  950. data/spec/support/models/tool.rb +11 -0
  951. data/spec/{app → support}/models/topping.rb +3 -0
  952. data/spec/support/models/toy.rb +10 -0
  953. data/spec/{app → support}/models/track.rb +3 -0
  954. data/spec/{app → support}/models/translation.rb +3 -0
  955. data/spec/{app → support}/models/tree.rb +3 -0
  956. data/spec/support/models/truck.rb +8 -0
  957. data/spec/{app → support}/models/updatable.rb +1 -0
  958. data/spec/{app → support}/models/user.rb +3 -0
  959. data/spec/{app → support}/models/user_account.rb +3 -0
  960. data/spec/{app → support}/models/validation_callback.rb +3 -0
  961. data/spec/support/models/vehicle.rb +19 -0
  962. data/spec/{app → support}/models/version.rb +3 -0
  963. data/spec/{app → support}/models/vertex.rb +4 -1
  964. data/spec/{app → support}/models/vet_visit.rb +3 -0
  965. data/spec/{app → support}/models/video.rb +3 -0
  966. data/spec/support/models/video_game.rb +4 -0
  967. data/spec/support/models/washer.rb +8 -0
  968. data/spec/{app → support}/models/weapon.rb +3 -0
  969. data/spec/{app → support}/models/wiki_page.rb +4 -0
  970. data/spec/{app → support}/models/word.rb +3 -0
  971. data/spec/{app → support}/models/word_origin.rb +3 -0
  972. data/spec/{app → support}/models/writer.rb +5 -2
  973. data/spec/support/shared/time.rb +54 -0
  974. data/spec/support/spec_config.rb +14 -3
  975. data.tar.gz.sig +0 -0
  976. metadata +1035 -732
  977. metadata.gz.sig +2 -2
  978. data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
  979. data/lib/mongoid/matchable/all.rb +0 -28
  980. data/lib/mongoid/matchable/and.rb +0 -30
  981. data/lib/mongoid/matchable/default.rb +0 -119
  982. data/lib/mongoid/matchable/elem_match.rb +0 -34
  983. data/lib/mongoid/matchable/eq.rb +0 -22
  984. data/lib/mongoid/matchable/exists.rb +0 -23
  985. data/lib/mongoid/matchable/gt.rb +0 -23
  986. data/lib/mongoid/matchable/gte.rb +0 -23
  987. data/lib/mongoid/matchable/in.rb +0 -24
  988. data/lib/mongoid/matchable/lt.rb +0 -23
  989. data/lib/mongoid/matchable/lte.rb +0 -23
  990. data/lib/mongoid/matchable/ne.rb +0 -21
  991. data/lib/mongoid/matchable/nin.rb +0 -22
  992. data/lib/mongoid/matchable/nor.rb +0 -37
  993. data/lib/mongoid/matchable/or.rb +0 -33
  994. data/lib/mongoid/matchable/regexp.rb +0 -27
  995. data/lib/mongoid/matchable/size.rb +0 -21
  996. data/spec/app/models/actress.rb +0 -2
  997. data/spec/app/models/bed.rb +0 -1
  998. data/spec/app/models/big_palette.rb +0 -2
  999. data/spec/app/models/browser.rb +0 -6
  1000. data/spec/app/models/car.rb +0 -1
  1001. data/spec/app/models/employer.rb +0 -5
  1002. data/spec/app/models/eraser.rb +0 -1
  1003. data/spec/app/models/html_writer.rb +0 -3
  1004. data/spec/app/models/learner.rb +0 -2
  1005. data/spec/app/models/my_hash.rb +0 -2
  1006. data/spec/app/models/other_owner_object.rb +0 -2
  1007. data/spec/app/models/pack.rb +0 -3
  1008. data/spec/app/models/pdf_writer.rb +0 -3
  1009. data/spec/app/models/pencil.rb +0 -1
  1010. data/spec/app/models/profile.rb +0 -5
  1011. data/spec/app/models/series.rb +0 -4
  1012. data/spec/app/models/strategy.rb +0 -3
  1013. data/spec/app/models/sub_item.rb +0 -3
  1014. data/spec/app/models/title.rb +0 -3
  1015. data/spec/app/models/tool.rb +0 -8
  1016. data/spec/app/models/truck.rb +0 -3
  1017. data/spec/app/models/vehicle.rb +0 -11
  1018. data/spec/app/models/video_game.rb +0 -1
  1019. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
  1020. data/spec/mongoid/matchable/all_spec.rb +0 -31
  1021. data/spec/mongoid/matchable/and_spec.rb +0 -187
  1022. data/spec/mongoid/matchable/default_spec.rb +0 -137
  1023. data/spec/mongoid/matchable/elem_match_spec.rb +0 -106
  1024. data/spec/mongoid/matchable/eq_spec.rb +0 -48
  1025. data/spec/mongoid/matchable/exists_spec.rb +0 -57
  1026. data/spec/mongoid/matchable/gt_spec.rb +0 -86
  1027. data/spec/mongoid/matchable/gte_spec.rb +0 -84
  1028. data/spec/mongoid/matchable/in_spec.rb +0 -49
  1029. data/spec/mongoid/matchable/lt_spec.rb +0 -85
  1030. data/spec/mongoid/matchable/lte_spec.rb +0 -85
  1031. data/spec/mongoid/matchable/ne_spec.rb +0 -46
  1032. data/spec/mongoid/matchable/nin_spec.rb +0 -48
  1033. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  1034. data/spec/mongoid/matchable/or_spec.rb +0 -131
  1035. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
  1036. data/spec/mongoid/matchable/size_spec.rb +0 -25
  1037. data/spec/mongoid/matchable_spec.rb +0 -853
  1038. data/spec/support/child_process_helper.rb +0 -76
  1039. data/spec/support/cluster_config.rb +0 -158
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
4
+ require "mongoid/fields/validators/macro"
5
+
2
6
  module Mongoid
3
7
 
4
- # Provides behaviour around traversing the document graph.
8
+ # Provides behavior around traversing the document graph.
5
9
  #
6
10
  # @since 4.0.0
7
11
  module Traversable
@@ -15,6 +19,105 @@ module Mongoid
15
19
  @__parent = p
16
20
  end
17
21
 
22
+ # Module used for prepending to the various discriminator_*= methods
23
+ #
24
+ # @api private
25
+ module DiscriminatorAssignment
26
+ def discriminator_key=(value)
27
+ if hereditary?
28
+ raise Errors::InvalidDiscriminatorKeyTarget.new(self, self.superclass)
29
+ end
30
+
31
+ _mongoid_clear_types
32
+
33
+ if value
34
+ Mongoid::Fields::Validators::Macro.validate_field_name(self, value)
35
+ value = value.to_s
36
+ super
37
+ else
38
+ # When discriminator key is set to nil, replace the class's definition
39
+ # of the discriminator key reader (provided by class_attribute earlier)
40
+ # and re-delegate to Mongoid.
41
+ class << self
42
+ delegate :discriminator_key, to: ::Mongoid
43
+ end
44
+ end
45
+
46
+ # This condition checks if the new discriminator key would overwrite
47
+ # an existing field.
48
+ # This condition also checks if the class has any descendants, because
49
+ # if it doesn't then it doesn't need a discriminator key.
50
+ if !fields.has_key?(self.discriminator_key) && !descendants.empty?
51
+ default_proc = lambda { self.class.discriminator_value }
52
+ field(self.discriminator_key, default: default_proc, type: String)
53
+ end
54
+ end
55
+
56
+ def discriminator_value=(value)
57
+ value ||= self.name
58
+ _mongoid_clear_types
59
+ add_discriminator_mapping(value)
60
+ @discriminator_value = value
61
+ end
62
+ end
63
+
64
+ # Module used for prepending the discriminator_value method.
65
+ #
66
+ # A separate module was needed because the subclasses of this class
67
+ # need to be manually prepended with the discriminator_value and can't
68
+ # rely on being a class_attribute because the .discriminator_value
69
+ # method is overriden by every subclass in the inherited method.
70
+ #
71
+ # @api private
72
+ module DiscriminatorRetrieval
73
+
74
+ # Get the name on the reading side if the discriminator_value is nil
75
+ def discriminator_value
76
+ @discriminator_value || self.name
77
+ end
78
+ end
79
+
80
+ included do
81
+ class_attribute :discriminator_key, instance_accessor: false
82
+
83
+ class << self
84
+ delegate :discriminator_key, to: ::Mongoid
85
+ prepend DiscriminatorAssignment
86
+ include DiscriminatorRetrieval
87
+
88
+ # @api private
89
+ #
90
+ # @return [ Hash<String, Class> ] The current mapping of discriminator_values to classes
91
+ attr_accessor :discriminator_mapping
92
+ end
93
+
94
+ # Add a discriminator mapping to the parent class. This mapping is used when
95
+ # receiving a document to identify its class.
96
+ #
97
+ # @param [ String ] value The discriminator_value that was just set
98
+ # @param [ Class ] The class the discriminator_value was set on
99
+ #
100
+ # @api private
101
+ def self.add_discriminator_mapping(value, klass=self)
102
+ self.discriminator_mapping ||= {}
103
+ self.discriminator_mapping[value] = klass
104
+ superclass.add_discriminator_mapping(value, klass) if hereditary?
105
+ end
106
+
107
+ # Get the discriminator mapping from the parent class. This method returns nil if there
108
+ # is no mapping for the given value.
109
+ #
110
+ # @param [ String ] value The discriminator_value to retrieve
111
+ #
112
+ # @return [ Class | nil ] klass The class corresponding to the given discriminator_value. If
113
+ # the value is not in the mapping, this method returns nil.
114
+ #
115
+ # @api private
116
+ def self.get_discriminator_mapping(value)
117
+ self.discriminator_mapping[value] if self.discriminator_mapping
118
+ end
119
+ end
120
+
18
121
  # Get all child +Documents+ to this +Document+, going n levels deep if
19
122
  # necessary. This is used when calling update persistence operations from
20
123
  # the root document, where changes in the entire tree need to be
@@ -181,7 +284,7 @@ module Mongoid
181
284
  end
182
285
 
183
286
  # When inheriting, we want to copy the fields from the parent class and
184
- # set the on the child to start, mimicking the behaviour of the old
287
+ # set the on the child to start, mimicking the behavior of the old
185
288
  # class_inheritable_accessor that was deprecated in Rails edge.
186
289
  #
187
290
  # @example Inherit from this class.
@@ -199,14 +302,20 @@ module Mongoid
199
302
  subclass.pre_processed_defaults = pre_processed_defaults.dup
200
303
  subclass.post_processed_defaults = post_processed_defaults.dup
201
304
  subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
305
+ subclass.discriminator_value = subclass.name
306
+
307
+ # We need to do this here because the discriminator_value method is
308
+ # overriden in the subclass above.
309
+ class << subclass
310
+ include DiscriminatorRetrieval
311
+ end
202
312
 
203
313
  # We only need the _type field if inheritance is in play, but need to
204
314
  # add to the root class as well for backwards compatibility.
205
- unless fields.has_key?("_type")
206
- field(:_type, default: self.name, type: String)
315
+ unless fields.has_key?(self.discriminator_key)
316
+ default_proc = lambda { self.class.discriminator_value }
317
+ field(self.discriminator_key, default: default_proc, type: String)
207
318
  end
208
- subclass_default = subclass.name || ->{ self.class.name }
209
- subclass.field(:_type, default: subclass_default, type: String, overwrite: true)
210
319
  end
211
320
  end
212
321
  end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -24,8 +26,8 @@ module Mongoid
24
26
  # validator.validate_each(document, :name, name)
25
27
  #
26
28
  # @param [ Document ] document The document to validate.
27
- # @param [ Symbol ] attribute The relation to validate.
28
- # @param [ Object ] value The value of the relation.
29
+ # @param [ Symbol ] attribute The association to validate.
30
+ # @param [ Object ] value The value of the association.
29
31
  #
30
32
  # @since 2.0.0
31
33
  def validate_each(document, attribute, value)
@@ -41,7 +43,7 @@ module Mongoid
41
43
  ensure
42
44
  document.exit_validate
43
45
  end
44
- document.errors.add(attribute, :invalid, options) unless valid
46
+ document.errors.add(attribute, :invalid, **options) unless valid
45
47
  end
46
48
  end
47
49
  end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
  module Macros
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -32,25 +34,25 @@ module Mongoid
32
34
  document.errors.add(
33
35
  attribute,
34
36
  :blank_in_locale,
35
- options.merge(location: _locale)
37
+ **options.merge(location: _locale)
36
38
  ) if not_present?(_value)
37
39
  end
38
40
  elsif document.relations.has_key?(attribute.to_s)
39
41
  if relation_or_fk_missing?(document, attribute, value)
40
- document.errors.add(attribute, :blank, options)
42
+ document.errors.add(attribute, :blank, **options)
41
43
  end
42
44
  else
43
- document.errors.add(attribute, :blank, options) if not_present?(value)
45
+ document.errors.add(attribute, :blank, **options) if not_present?(value)
44
46
  end
45
47
  end
46
48
 
47
49
  private
48
50
 
49
- # Returns true if the relation is blank or the foreign key is blank.
51
+ # Returns true if the association is blank or the foreign key is blank.
50
52
  #
51
53
  # @api private
52
54
  #
53
- # @example Check is the relation or fk is blank.
55
+ # @example Check is the association or fk is blank.
54
56
  # validator.relation_or_fk_mising(doc, :name, "")
55
57
  #
56
58
  # @param [ Document ] doc The document.
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
  module Queryable
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Mongoid
3
5
  module Validatable
4
6
 
@@ -66,7 +68,7 @@ module Mongoid
66
68
  # @since 2.4.10
67
69
  def add_error(document, attribute, value)
68
70
  document.errors.add(
69
- attribute, :taken, options.except(:case_sensitive, :scope).merge(value: value)
71
+ attribute, :taken, **options.except(:case_sensitive, :scope).merge(value: value)
70
72
  )
71
73
  end
72
74
 
@@ -207,8 +209,8 @@ module Mongoid
207
209
  end
208
210
 
209
211
  # Get the name of the field and the value to validate. This is for the
210
- # case when we validate a relation via the relation name and not the key,
211
- # we need to send the key name and value to the db, not the relation
212
+ # case when we validate an association via the association name and not the key,
213
+ # we need to send the key name and value to the db, not the association
212
214
  # object.
213
215
  #
214
216
  # @api private
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require "mongoid/validatable/macros"
3
5
  require "mongoid/validatable/localizable"
4
6
  require "mongoid/validatable/associated"
@@ -54,16 +56,16 @@ module Mongoid
54
56
  options[:validate].nil? ? true : options[:validate]
55
57
  end
56
58
 
57
- # Overrides the default ActiveModel behaviour since we need to handle
58
- # validations of relations slightly different than just calling the
59
+ # Overrides the default ActiveModel behavior since we need to handle
60
+ # validations of associations slightly different than just calling the
59
61
  # getter.
60
62
  #
61
63
  # @example Read the value.
62
64
  # person.read_attribute_for_validation(:addresses)
63
65
  #
64
- # @param [ Symbol ] attr The name of the field or relation.
66
+ # @param [ Symbol ] attr The name of the field or association.
65
67
  #
66
- # @return [ Object ] The value of the field or the relation.
68
+ # @return [ Object ] The value of the field or the association.
67
69
  #
68
70
  # @since 2.0.0.rc.1
69
71
  def read_attribute_for_validation(attr)
@@ -123,7 +125,7 @@ module Mongoid
123
125
 
124
126
  module ClassMethods
125
127
 
126
- # Adds an associated validator for the relation if the validate option
128
+ # Adds an associated validator for the association if the validate option
127
129
  # was not provided or set to true.
128
130
  #
129
131
  # @example Set up validation.
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
2
3
 
3
4
  module Mongoid
4
- VERSION = "7.0.12"
5
+ VERSION = "7.3.3"
5
6
  end
data/lib/mongoid.rb CHANGED
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require "support/ruby_version"
3
5
 
4
- require "delegate"
6
+ require "forwardable"
5
7
  require "time"
6
8
  require "set"
9
+ require "ruby2_keywords"
7
10
 
8
11
  require "active_support"
9
12
  require "active_support/core_ext"
@@ -34,6 +37,7 @@ end
34
37
  I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
35
38
 
36
39
  module Mongoid
40
+ extend Forwardable
37
41
  extend Loggable
38
42
  extend self
39
43
 
@@ -50,6 +54,11 @@ module Mongoid
50
54
  # @example Set up configuration options.
51
55
  # Mongoid.configure do |config|
52
56
  # config.connect_to("mongoid_test")
57
+ #
58
+ # config.clients.default = {
59
+ # hosts: ["localhost:27017"],
60
+ # database: "mongoid_test",
61
+ # }
53
62
  # end
54
63
  #
55
64
  # @return [ Config ] The configuration object.
@@ -102,5 +111,28 @@ module Mongoid
102
111
  # Mongoid.database = Mongo::Connection.new.db("test")
103
112
  #
104
113
  # @since 1.0.0
105
- delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ]), to: Config)
114
+ def_delegators Config, *(Config.public_instance_methods(false) - [ :logger=, :logger ])
115
+
116
+
117
+ # Module used to prepend the discriminator key assignment function to change
118
+ # the value assigned to the discriminator key to a string.
119
+ #
120
+ # @api private
121
+ module GlobalDiscriminatorKeyAssignment
122
+ # This class is used for obtaining the method definition location for
123
+ # Mongoid methods.
124
+ class InvalidFieldHost
125
+ include Mongoid::Document
126
+ end
127
+
128
+ def discriminator_key=(value)
129
+ Mongoid::Fields::Validators::Macro.validate_field_name(InvalidFieldHost, value)
130
+ value = value.to_s
131
+ super
132
+ end
133
+ end
134
+
135
+ class << self
136
+ prepend GlobalDiscriminatorKeyAssignment
137
+ end
106
138
  end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require 'rails/generators/mongoid_generator'
3
5
 
4
6
  module Mongoid
@@ -13,7 +15,14 @@ module Mongoid
13
15
  end
14
16
 
15
17
  def app_name
16
- Rails::Application.subclasses.first.parent.to_s.underscore
18
+ app_cls = Rails.application.class
19
+ parent = begin
20
+ # Rails 6.1+
21
+ app_cls.module_parent_name
22
+ rescue NoMethodError
23
+ app_cls.parent.to_s
24
+ end
25
+ parent.underscore
17
26
  end
18
27
 
19
28
  def create_config_file
@@ -3,7 +3,11 @@ development:
3
3
  clients:
4
4
  # Defines the default client. (required)
5
5
  default:
6
- # Defines the name of the default database that Mongoid can connect to.
6
+ # Mongoid can connect to a URI accepted by the driver:
7
+ # uri: mongodb://user:password@mongodb.domain.com:27017/<%= database_name || app_name %>_development
8
+
9
+ # Otherwise define the parameters separately.
10
+ # This defines the name of the default database that Mongoid can connect to.
7
11
  # (required).
8
12
  database: <%= database_name || app_name %>_development
9
13
  # Provides the hosts the default client can connect to. Must be an array
@@ -53,7 +57,7 @@ development:
53
57
  # connect: :direct
54
58
 
55
59
  # Changes the default time in seconds the server monitors refresh their status
56
- # via ismaster commands. (default: 10)
60
+ # via hello commands. (default: 10)
57
61
  # heartbeat_frequency: 10
58
62
 
59
63
  # The time in seconds for selecting servers for a near read preference. (default: 0.015)
@@ -73,8 +77,8 @@ development:
73
77
  # wait_queue_timeout: 5
74
78
 
75
79
  # The time to wait to establish a connection before timing out, in seconds.
76
- # (default: 5)
77
- # connect_timeout: 5
80
+ # (default: 10)
81
+ # connect_timeout: 10
78
82
 
79
83
  # The timeout to wait to execute operations on a socket before raising an error.
80
84
  # (default: 5)
@@ -98,22 +102,49 @@ development:
98
102
  # A passphrase for the private key.
99
103
  # ssl_key_pass_phrase: password
100
104
 
101
- # Whether or not to do peer certification validation. (default: true)
105
+ # Whether to do peer certification validation. (default: true)
102
106
  # ssl_verify: true
103
107
 
104
- # The file containing a set of concatenated certification authority certifications
108
+ # The file containing concatenated certificate authority certificates
105
109
  # used to validate certs passed from the other end of the connection.
106
110
  # ssl_ca_cert: /path/to/ca.cert
107
-
111
+
112
+ # Whether to truncate long log lines. (default: true)
113
+ # truncate_logs: true
108
114
 
109
115
  # Configure Mongoid specific options. (optional)
110
116
  options:
111
- # Includes the root model name in json serialization. (default: false)
117
+ # Application name that is printed to the mongodb logs upon establishing
118
+ # a connection in server versions >= 3.4. Note that the name cannot
119
+ # exceed 128 bytes. It is also used as the database name if the
120
+ # database name is not explicitly defined. (default: nil)
121
+ # app_name: MyApplicationName
122
+
123
+ # Create indexes in background by default. (default: false)
124
+ # background_indexing: false
125
+
126
+ # Mark belongs_to associations as required by default, so that saving a
127
+ # model with a missing belongs_to association will trigger a validation
128
+ # error. (default: true)
129
+ # belongs_to_required_by_default: true
130
+
131
+ # Raise an exception when a field is redefined. (default: false)
132
+ # duplicate_fields_exception: false
133
+
134
+ # Include the root model name in json serialization. (default: false)
112
135
  # include_root_in_json: false
113
136
 
114
137
  # Include the _type field in serialization. (default: false)
115
138
  # include_type_for_serialization: false
116
139
 
140
+ # Whether to join nested persistence contexts for atomic operations
141
+ # to parent contexts by default. (default: false)
142
+ # join_contexts: false
143
+
144
+ # Set the Mongoid and Ruby driver log levels when Mongoid is not using
145
+ # Ruby on Rails logger instance. (default: :info)
146
+ # log_level: :info
147
+
117
148
  # Preload all models in development, needed when models use
118
149
  # inheritance. (default: false)
119
150
  # preload_models: false
@@ -126,32 +157,16 @@ development:
126
157
  # existing method. (default: false)
127
158
  # scope_overwrite_exception: false
128
159
 
129
- # Raise an error when defining a field with the same name as an
130
- # existing method. (default: false)
131
- # duplicate_fields_exception: false
132
-
133
- # Use Active Support's time zone in conversions. (default: true)
160
+ # Use ActiveSupport's time zone in time operations instead of
161
+ # the Ruby default time zone. See the time zone section below for
162
+ # further information. (default: true)
134
163
  # use_activesupport_time_zone: true
135
164
 
136
- # Ensure all times are UTC in the app side. (default: false)
165
+ # Return stored times as UTC. See the time zone section below for
166
+ # further information. Most applications should not use this option.
167
+ # (default: false)
137
168
  # use_utc: false
138
169
 
139
- # Set the Mongoid and Ruby driver log levels when not in a Rails
140
- # environment. The Mongoid logger will be set to the Rails logger
141
- # otherwise.(default: :info)
142
- # log_level: :info
143
-
144
- # Control whether `belongs_to` association is required. By default
145
- # `belongs_to` will trigger a validation error if the association
146
- # is not present. (default: true)
147
- # belongs_to_required_by_default: true
148
-
149
- # Application name that is printed to the mongodb logs upon establishing a
150
- # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
151
- # app_name: MyApplicationName
152
-
153
- # Use background indexes by default if `background` option not specified. (default: false)
154
- # background_indexing: false
155
170
  test:
156
171
  clients:
157
172
  default:
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require "rails/generators/mongoid_generator"
3
5
 
4
6
  module Mongoid
@@ -10,7 +12,7 @@ module Mongoid
10
12
 
11
13
  check_class_collision
12
14
 
13
- class_option :timestamps, type: :boolean
15
+ class_option :timestamps, type: :boolean, default: true
14
16
  class_option :parent, type: :string, desc: "The parent class for the generated model"
15
17
  class_option :collection, type: :string, desc: "The collection for storing model's documents"
16
18
 
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  require "rails/generators/named_base"
3
5
  require "rails/generators/active_model"
4
6
 
data/lib/rails/mongoid.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # encoding: utf-8
3
+
2
4
  module Rails
3
5
  module Mongoid
4
6
  extend self
@@ -40,7 +42,7 @@ module Rails
40
42
  # method as a convenience.
41
43
  #
42
44
  # @example Load the model.
43
- # Mongoid.load_model("/mongoid/behaviour")
45
+ # Mongoid.load_model("/mongoid/behavior")
44
46
  #
45
47
  # @param [ String ] file The base filename.
46
48
  #
@@ -49,7 +51,7 @@ module Rails
49
51
  begin
50
52
  require_dependency(file)
51
53
  rescue Exception => e
52
- Logger.new($stdout).warn(e.message)
54
+ Logger.new(STDERR).warn(e.message)
53
55
  end
54
56
  end
55
57
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  # Go ahead and fail if not using Ruby 1.9.3, no since in letting people
2
5
  # squarm for answers
3
6
  def raise_version_error(message)
data/spec/README.md CHANGED
@@ -1,8 +1,17 @@
1
1
  # Running Mongoid Tests
2
2
 
3
- ## Overview
4
- ### Quick Start
5
- Spin up a MongoDB deployment against which to run the Mongoid specs. Mongoid specs support a variety of MongoDB topologies, but the simplest is a single MongoDB instance:
3
+ ## Quick Start
4
+
5
+ The test suite requires shared tooling that is stored in a separate repository
6
+ and is referenced as a submodule. After checking out the desired driver
7
+ branch, check out the matching submodules:
8
+
9
+ git submodule init
10
+ git submodule update
11
+
12
+ Spin up a MongoDB deployment against which to run the Mongoid specs.
13
+ Mongoid specs support a variety of MongoDB topologies, but the simplest is
14
+ a single MongoDB instance:
6
15
 
7
16
  # Launch mongod in one terminal
8
17
  mkdir /tmp/mdb
@@ -14,5 +23,11 @@ Run the test suite in a separate terminal:
14
23
 
15
24
 
16
25
  ## Caveats
26
+
17
27
  ### "Too many open files" error
18
- On MacOS, you may encounter a "Too many open files" error on the MongoDB server when running the tests. If this happens, stop the server, run the command `ulimit -n 10000` in the same terminal session as the server, and restart the server. This will increase the number of files that can be opened. Then, re-run the tests.
28
+
29
+ On MacOS, you may encounter a "Too many open files" error on the MongoDB server
30
+ when running the tests. If this happens, stop the server, run the command
31
+ `ulimit -n 10000` in the same terminal session as the server, and restart
32
+ the server. This will increase the number of files that can be opened.
33
+ Then, re-run the tests.
@@ -39,6 +39,7 @@ test:
39
39
  belongs_to_required_by_default: false
40
40
  app_name: 'testing'
41
41
  background_indexing: false
42
+ join_contexts: false
42
43
  test_with_max_staleness:
43
44
  clients:
44
45
  default: