mongoid 7.1.11 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +10 -3
  4. data/lib/config/locales/en.yml +37 -14
  5. data/lib/mongoid/association/depending.rb +1 -6
  6. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  7. data/lib/mongoid/association/many.rb +3 -3
  8. data/lib/mongoid/association/proxy.rb +1 -1
  9. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  10. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  11. data/lib/mongoid/association/referenced/has_many/enumerable.rb +37 -2
  12. data/lib/mongoid/association/referenced/has_many/proxy.rb +9 -2
  13. data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
  14. data/lib/mongoid/atomic/modifiers.rb +1 -1
  15. data/lib/mongoid/attributes/dynamic.rb +1 -1
  16. data/lib/mongoid/attributes.rb +1 -8
  17. data/lib/mongoid/clients/factory.rb +17 -0
  18. data/lib/mongoid/composable.rb +1 -0
  19. data/lib/mongoid/config/environment.rb +1 -9
  20. data/lib/mongoid/config.rb +3 -0
  21. data/lib/mongoid/contextual/atomic.rb +2 -7
  22. data/lib/mongoid/contextual/mongo.rb +23 -4
  23. data/lib/mongoid/contextual/none.rb +0 -3
  24. data/lib/mongoid/copyable.rb +7 -3
  25. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  26. data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
  27. data/lib/mongoid/criteria/queryable/selectable.rb +23 -8
  28. data/lib/mongoid/criteria/queryable/selector.rb +7 -3
  29. data/lib/mongoid/criteria/queryable/storable.rb +7 -7
  30. data/lib/mongoid/criteria.rb +58 -8
  31. data/lib/mongoid/document.rb +19 -9
  32. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  33. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  34. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  35. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  36. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  37. data/lib/mongoid/errors/invalid_query.rb +41 -0
  38. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  39. data/lib/mongoid/errors.rb +7 -2
  40. data/lib/mongoid/extensions.rb +1 -0
  41. data/lib/mongoid/factory.rb +27 -10
  42. data/lib/mongoid/fields/validators/macro.rb +22 -9
  43. data/lib/mongoid/fields.rb +3 -0
  44. data/lib/mongoid/findable.rb +50 -14
  45. data/lib/mongoid/indexable.rb +2 -2
  46. data/lib/mongoid/interceptable.rb +2 -4
  47. data/lib/mongoid/matchable.rb +1 -149
  48. data/lib/mongoid/matcher/all.rb +22 -0
  49. data/lib/mongoid/matcher/and.rb +21 -0
  50. data/lib/mongoid/matcher/elem_match.rb +35 -0
  51. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  52. data/lib/mongoid/matcher/eq.rb +11 -0
  53. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  54. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  55. data/lib/mongoid/matcher/exists.rb +15 -0
  56. data/lib/mongoid/matcher/expression.rb +40 -0
  57. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  58. data/lib/mongoid/matcher/field_expression.rb +63 -0
  59. data/lib/mongoid/matcher/field_operator.rb +52 -0
  60. data/lib/mongoid/matcher/gt.rb +17 -0
  61. data/lib/mongoid/matcher/gte.rb +17 -0
  62. data/lib/mongoid/matcher/in.rb +25 -0
  63. data/lib/mongoid/matcher/lt.rb +17 -0
  64. data/lib/mongoid/matcher/lte.rb +17 -0
  65. data/lib/mongoid/matcher/ne.rb +16 -0
  66. data/lib/mongoid/matcher/nin.rb +11 -0
  67. data/lib/mongoid/matcher/nor.rb +25 -0
  68. data/lib/mongoid/matcher/not.rb +29 -0
  69. data/lib/mongoid/matcher/or.rb +21 -0
  70. data/lib/mongoid/matcher/regex.rb +41 -0
  71. data/lib/mongoid/matcher/size.rb +26 -0
  72. data/lib/mongoid/matcher.rb +127 -0
  73. data/lib/mongoid/persistable/deletable.rb +1 -1
  74. data/lib/mongoid/persistence_context.rb +1 -3
  75. data/lib/mongoid/query_cache.rb +64 -62
  76. data/lib/mongoid/reloadable.rb +2 -7
  77. data/lib/mongoid/serializable.rb +1 -1
  78. data/lib/mongoid/stringified_symbol.rb +53 -0
  79. data/lib/mongoid/tasks/database.rb +1 -1
  80. data/lib/mongoid/traversable.rb +111 -4
  81. data/lib/mongoid/validatable/associated.rb +1 -1
  82. data/lib/mongoid/validatable/presence.rb +3 -3
  83. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  84. data/lib/mongoid/version.rb +1 -1
  85. data/lib/mongoid.rb +23 -1
  86. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -8
  87. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  88. data/spec/README.md +19 -4
  89. data/spec/integration/app_spec.rb +84 -174
  90. data/spec/integration/associations/embedded_spec.rb +94 -0
  91. data/spec/integration/associations/has_many_spec.rb +67 -14
  92. data/spec/integration/associations/has_one_spec.rb +67 -14
  93. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  94. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  95. data/spec/integration/discriminator_key_spec.rb +354 -0
  96. data/spec/integration/discriminator_value_spec.rb +207 -0
  97. data/spec/integration/document_spec.rb +0 -21
  98. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  99. data/spec/integration/matcher_operator_data/all.yml +140 -0
  100. data/spec/integration/matcher_operator_data/and.yml +93 -0
  101. data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
  102. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  103. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  104. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  105. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  106. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  107. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  108. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  109. data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
  110. data/spec/integration/matcher_operator_data/in.yml +194 -0
  111. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  112. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  113. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  114. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  115. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  116. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  117. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  118. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  119. data/spec/integration/matcher_operator_data/not.yml +196 -0
  120. data/spec/integration/matcher_operator_data/or.yml +137 -0
  121. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  122. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  123. data/spec/integration/matcher_operator_data/size.yml +174 -0
  124. data/spec/integration/matcher_operator_spec.rb +100 -0
  125. data/spec/integration/matcher_spec.rb +189 -0
  126. data/spec/integration/server_query_spec.rb +142 -0
  127. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  128. data/spec/lite_spec_helper.rb +4 -3
  129. data/spec/mongoid/association/depending_spec.rb +78 -26
  130. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +0 -50
  131. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +37 -17
  132. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  133. data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
  134. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +0 -17
  135. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
  136. data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
  137. data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
  138. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
  139. data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
  140. data/spec/mongoid/atomic/paths_spec.rb +0 -41
  141. data/spec/mongoid/atomic_spec.rb +23 -0
  142. data/spec/mongoid/attributes/nested_spec.rb +1 -1
  143. data/spec/mongoid/attributes_spec.rb +0 -241
  144. data/spec/mongoid/clients/factory_spec.rb +35 -9
  145. data/spec/mongoid/clients/options_spec.rb +3 -11
  146. data/spec/mongoid/clients/sessions_spec.rb +1 -6
  147. data/spec/mongoid/config/environment_spec.rb +8 -86
  148. data/spec/mongoid/config_spec.rb +28 -0
  149. data/spec/mongoid/contextual/atomic_spec.rb +29 -81
  150. data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
  151. data/spec/mongoid/contextual/mongo_spec.rb +70 -16
  152. data/spec/mongoid/copyable_spec.rb +197 -18
  153. data/spec/mongoid/copyable_spec_models.rb +28 -0
  154. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -36
  155. data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
  156. data/spec/mongoid/criteria_spec.rb +204 -43
  157. data/spec/mongoid/document_query_spec.rb +0 -51
  158. data/spec/mongoid/document_spec.rb +90 -36
  159. data/spec/mongoid/equality_spec.rb +0 -1
  160. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  161. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
  162. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  163. data/spec/mongoid/factory_spec.rb +261 -28
  164. data/spec/mongoid/fields_spec.rb +48 -2
  165. data/spec/mongoid/findable_spec.rb +32 -0
  166. data/spec/mongoid/indexable_spec.rb +28 -2
  167. data/spec/mongoid/inspectable_spec.rb +29 -2
  168. data/spec/mongoid/interceptable_spec.rb +2 -2
  169. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
  170. data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
  171. data/spec/mongoid/persistable/creatable_spec.rb +108 -25
  172. data/spec/mongoid/persistable/deletable_spec.rb +86 -0
  173. data/spec/mongoid/persistable/savable_spec.rb +174 -16
  174. data/spec/mongoid/persistable/settable_spec.rb +0 -30
  175. data/spec/mongoid/persistable/updatable_spec.rb +0 -2
  176. data/spec/mongoid/persistable_spec.rb +2 -2
  177. data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
  178. data/spec/mongoid/query_cache_spec.rb +442 -41
  179. data/spec/mongoid/reloadable_spec.rb +72 -0
  180. data/spec/mongoid/serializable_spec.rb +21 -3
  181. data/spec/mongoid/traversable_spec.rb +1100 -0
  182. data/spec/shared/lib/mrss/constraints.rb +10 -92
  183. data/spec/shared/lib/mrss/lite_constraints.rb +0 -16
  184. data/spec/shared/lib/mrss/spec_organizer.rb +2 -32
  185. data/spec/spec_helper.rb +3 -3
  186. data/spec/support/constraints.rb +24 -0
  187. data/spec/support/helpers.rb +1 -1
  188. data/spec/{app → support}/models/actor.rb +1 -1
  189. data/spec/{app → support}/models/address.rb +0 -4
  190. data/spec/support/models/armrest.rb +10 -0
  191. data/spec/{app → support}/models/browser.rb +1 -1
  192. data/spec/{app → support}/models/canvas.rb +1 -1
  193. data/spec/{app → support}/models/coding.rb +1 -1
  194. data/spec/support/models/crate.rb +13 -0
  195. data/spec/support/models/deed.rb +8 -0
  196. data/spec/{app → support}/models/dictionary.rb +0 -6
  197. data/spec/{app → support}/models/driver.rb +1 -1
  198. data/spec/support/models/guitar.rb +5 -0
  199. data/spec/support/models/idnodef.rb +8 -0
  200. data/spec/support/models/instrument.rb +9 -0
  201. data/spec/{app → support}/models/item.rb +1 -1
  202. data/spec/{app → support}/models/mop.rb +0 -10
  203. data/spec/support/models/order.rb +11 -0
  204. data/spec/{app → support}/models/owner.rb +2 -0
  205. data/spec/{app → support}/models/palette.rb +1 -1
  206. data/spec/{app → support}/models/person.rb +1 -10
  207. data/spec/support/models/piano.rb +5 -0
  208. data/spec/support/models/profile.rb +18 -0
  209. data/spec/support/models/publication.rb +5 -0
  210. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
  211. data/spec/support/models/seat.rb +25 -0
  212. data/spec/{app → support}/models/shape.rb +2 -2
  213. data/spec/support/models/system_role.rb +7 -0
  214. data/spec/{app → support}/models/tool.rb +2 -2
  215. data/spec/support/models/toy.rb +10 -0
  216. data/spec/{app → support}/models/truck.rb +2 -0
  217. data/spec/{app → support}/models/vehicle.rb +7 -2
  218. data/spec/{app → support}/models/writer.rb +2 -2
  219. data/spec/support/spec_config.rb +1 -9
  220. data.tar.gz.sig +0 -0
  221. metadata +839 -820
  222. metadata.gz.sig +2 -2
  223. data/lib/mongoid/errors/empty_config_file.rb +0 -26
  224. data/lib/mongoid/errors/invalid_config_file.rb +0 -26
  225. data/lib/mongoid/matchable/all.rb +0 -30
  226. data/lib/mongoid/matchable/and.rb +0 -32
  227. data/lib/mongoid/matchable/default.rb +0 -121
  228. data/lib/mongoid/matchable/elem_match.rb +0 -36
  229. data/lib/mongoid/matchable/eq.rb +0 -23
  230. data/lib/mongoid/matchable/exists.rb +0 -25
  231. data/lib/mongoid/matchable/gt.rb +0 -25
  232. data/lib/mongoid/matchable/gte.rb +0 -25
  233. data/lib/mongoid/matchable/in.rb +0 -26
  234. data/lib/mongoid/matchable/lt.rb +0 -25
  235. data/lib/mongoid/matchable/lte.rb +0 -25
  236. data/lib/mongoid/matchable/ne.rb +0 -23
  237. data/lib/mongoid/matchable/nin.rb +0 -24
  238. data/lib/mongoid/matchable/nor.rb +0 -38
  239. data/lib/mongoid/matchable/or.rb +0 -35
  240. data/lib/mongoid/matchable/regexp.rb +0 -30
  241. data/lib/mongoid/matchable/size.rb +0 -23
  242. data/spec/app/models/customer.rb +0 -11
  243. data/spec/app/models/customer_address.rb +0 -12
  244. data/spec/app/models/publication.rb +0 -5
  245. data/spec/integration/callbacks_models.rb +0 -49
  246. data/spec/integration/callbacks_spec.rb +0 -216
  247. data/spec/integration/contextual/empty_spec.rb +0 -142
  248. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
  249. data/spec/mongoid/matchable/all_spec.rb +0 -34
  250. data/spec/mongoid/matchable/and_spec.rb +0 -190
  251. data/spec/mongoid/matchable/default_spec.rb +0 -140
  252. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  253. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  254. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  255. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  256. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  257. data/spec/mongoid/matchable/in_spec.rb +0 -52
  258. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  259. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  260. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  261. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  262. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  263. data/spec/mongoid/matchable/or_spec.rb +0 -134
  264. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  265. data/spec/mongoid/matchable/size_spec.rb +0 -28
  266. data/spec/mongoid/matchable_spec.rb +0 -856
  267. data/spec/shared/bin/get-mongodb-download-url +0 -17
  268. data/spec/shared/bin/s3-copy +0 -45
  269. data/spec/shared/bin/s3-upload +0 -69
  270. data/spec/shared/lib/mrss/cluster_config.rb +0 -226
  271. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  272. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  273. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  274. data/spec/shared/lib/mrss/utils.rb +0 -15
  275. data/spec/shared/share/Dockerfile.erb +0 -323
  276. data/spec/shared/share/haproxy-1.conf +0 -16
  277. data/spec/shared/share/haproxy-2.conf +0 -17
  278. data/spec/shared/shlib/distro.sh +0 -73
  279. data/spec/shared/shlib/server.sh +0 -367
  280. data/spec/shared/shlib/set_env.sh +0 -131
  281. /data/spec/{app → support}/models/account.rb +0 -0
  282. /data/spec/{app → support}/models/acolyte.rb +0 -0
  283. /data/spec/{app → support}/models/actress.rb +0 -0
  284. /data/spec/{app → support}/models/address_component.rb +0 -0
  285. /data/spec/{app → support}/models/address_number.rb +0 -0
  286. /data/spec/{app → support}/models/agency.rb +0 -0
  287. /data/spec/{app → support}/models/agent.rb +0 -0
  288. /data/spec/{app → support}/models/album.rb +0 -0
  289. /data/spec/{app → support}/models/alert.rb +0 -0
  290. /data/spec/{app → support}/models/animal.rb +0 -0
  291. /data/spec/{app → support}/models/answer.rb +0 -0
  292. /data/spec/{app → support}/models/appointment.rb +0 -0
  293. /data/spec/{app → support}/models/array_field.rb +0 -0
  294. /data/spec/{app → support}/models/article.rb +0 -0
  295. /data/spec/{app → support}/models/artist.rb +0 -0
  296. /data/spec/{app → support}/models/artwork.rb +0 -0
  297. /data/spec/{app → support}/models/audio.rb +0 -0
  298. /data/spec/{app → support}/models/augmentation.rb +0 -0
  299. /data/spec/{app → support}/models/author.rb +0 -0
  300. /data/spec/{app → support}/models/baby.rb +0 -0
  301. /data/spec/{app → support}/models/band.rb +0 -0
  302. /data/spec/{app → support}/models/bar.rb +0 -0
  303. /data/spec/{app → support}/models/basic.rb +0 -0
  304. /data/spec/{app → support}/models/bed.rb +0 -0
  305. /data/spec/{app → support}/models/big_palette.rb +0 -0
  306. /data/spec/{app → support}/models/birthday.rb +0 -0
  307. /data/spec/{app → support}/models/bomb.rb +0 -0
  308. /data/spec/{app → support}/models/book.rb +0 -0
  309. /data/spec/{app → support}/models/breed.rb +0 -0
  310. /data/spec/{app → support}/models/building.rb +0 -0
  311. /data/spec/{app → support}/models/building_address.rb +0 -0
  312. /data/spec/{app → support}/models/bus.rb +0 -0
  313. /data/spec/{app → support}/models/business.rb +0 -0
  314. /data/spec/{app → support}/models/callback_test.rb +0 -0
  315. /data/spec/{app → support}/models/car.rb +0 -0
  316. /data/spec/{app → support}/models/cat.rb +0 -0
  317. /data/spec/{app → support}/models/category.rb +0 -0
  318. /data/spec/{app → support}/models/child.rb +0 -0
  319. /data/spec/{app → support}/models/child_doc.rb +0 -0
  320. /data/spec/{app → support}/models/church.rb +0 -0
  321. /data/spec/{app → support}/models/circle.rb +0 -0
  322. /data/spec/{app → support}/models/circuit.rb +0 -0
  323. /data/spec/{app → support}/models/circus.rb +0 -0
  324. /data/spec/{app → support}/models/code.rb +0 -0
  325. /data/spec/{app → support}/models/coding/pull_request.rb +0 -0
  326. /data/spec/{app → support}/models/comment.rb +0 -0
  327. /data/spec/{app → support}/models/company.rb +0 -0
  328. /data/spec/{app → support}/models/consumption_period.rb +0 -0
  329. /data/spec/{app → support}/models/contextable_item.rb +0 -0
  330. /data/spec/{app → support}/models/contractor.rb +0 -0
  331. /data/spec/{app → support}/models/cookie.rb +0 -0
  332. /data/spec/{app → support}/models/country_code.rb +0 -0
  333. /data/spec/{app → support}/models/courier_job.rb +0 -0
  334. /data/spec/{app → support}/models/definition.rb +0 -0
  335. /data/spec/{app → support}/models/delegating_patient.rb +0 -0
  336. /data/spec/{app → support}/models/description.rb +0 -0
  337. /data/spec/{app → support}/models/division.rb +0 -0
  338. /data/spec/{app → support}/models/doctor.rb +0 -0
  339. /data/spec/{app → support}/models/dog.rb +0 -0
  340. /data/spec/{app → support}/models/dokument.rb +0 -0
  341. /data/spec/{app → support}/models/draft.rb +0 -0
  342. /data/spec/{app → support}/models/dragon.rb +0 -0
  343. /data/spec/{app → support}/models/drug.rb +0 -0
  344. /data/spec/{app → support}/models/dungeon.rb +0 -0
  345. /data/spec/{app → support}/models/edit.rb +0 -0
  346. /data/spec/{app → support}/models/email.rb +0 -0
  347. /data/spec/{app → support}/models/employer.rb +0 -0
  348. /data/spec/{app → support}/models/entry.rb +0 -0
  349. /data/spec/{app → support}/models/eraser.rb +0 -0
  350. /data/spec/{app → support}/models/even.rb +0 -0
  351. /data/spec/{app → support}/models/event.rb +0 -0
  352. /data/spec/{app → support}/models/exhibition.rb +0 -0
  353. /data/spec/{app → support}/models/exhibitor.rb +0 -0
  354. /data/spec/{app → support}/models/explosion.rb +0 -0
  355. /data/spec/{app → support}/models/eye.rb +0 -0
  356. /data/spec/{app → support}/models/eye_bowl.rb +0 -0
  357. /data/spec/{app → support}/models/face.rb +0 -0
  358. /data/spec/{app → support}/models/favorite.rb +0 -0
  359. /data/spec/{app → support}/models/filesystem.rb +0 -0
  360. /data/spec/{app → support}/models/fire_hydrant.rb +0 -0
  361. /data/spec/{app → support}/models/firefox.rb +0 -0
  362. /data/spec/{app → support}/models/fish.rb +0 -0
  363. /data/spec/{app → support}/models/folder.rb +0 -0
  364. /data/spec/{app → support}/models/folder_item.rb +0 -0
  365. /data/spec/{app → support}/models/fruits.rb +0 -0
  366. /data/spec/{app → support}/models/game.rb +0 -0
  367. /data/spec/{app → support}/models/ghost.rb +0 -0
  368. /data/spec/{app → support}/models/home.rb +0 -0
  369. /data/spec/{app → support}/models/house.rb +0 -0
  370. /data/spec/{app → support}/models/html_writer.rb +0 -0
  371. /data/spec/{app → support}/models/id_key.rb +0 -0
  372. /data/spec/{app → support}/models/image.rb +0 -0
  373. /data/spec/{app → support}/models/implant.rb +0 -0
  374. /data/spec/{app → support}/models/jar.rb +0 -0
  375. /data/spec/{app → support}/models/kaleidoscope.rb +0 -0
  376. /data/spec/{app → support}/models/kangaroo.rb +0 -0
  377. /data/spec/{app → support}/models/label.rb +0 -0
  378. /data/spec/{app → support}/models/language.rb +0 -0
  379. /data/spec/{app → support}/models/lat_lng.rb +0 -0
  380. /data/spec/{app → support}/models/league.rb +0 -0
  381. /data/spec/{app → support}/models/learner.rb +0 -0
  382. /data/spec/{app → support}/models/line_item.rb +0 -0
  383. /data/spec/{app → support}/models/location.rb +0 -0
  384. /data/spec/{app → support}/models/login.rb +0 -0
  385. /data/spec/{app → support}/models/manufacturer.rb +0 -0
  386. /data/spec/{app → support}/models/meat.rb +0 -0
  387. /data/spec/{app → support}/models/membership.rb +0 -0
  388. /data/spec/{app → support}/models/message.rb +0 -0
  389. /data/spec/{app → support}/models/minim.rb +0 -0
  390. /data/spec/{app → support}/models/mixed_drink.rb +0 -0
  391. /data/spec/{app → support}/models/movie.rb +0 -0
  392. /data/spec/{app → support}/models/my_hash.rb +0 -0
  393. /data/spec/{app → support}/models/name.rb +0 -0
  394. /data/spec/{app → support}/models/name_only.rb +0 -0
  395. /data/spec/{app → support}/models/node.rb +0 -0
  396. /data/spec/{app → support}/models/note.rb +0 -0
  397. /data/spec/{app → support}/models/odd.rb +0 -0
  398. /data/spec/{app → support}/models/ordered_post.rb +0 -0
  399. /data/spec/{app → support}/models/ordered_preference.rb +0 -0
  400. /data/spec/{app → support}/models/oscar.rb +0 -0
  401. /data/spec/{app → support}/models/other_owner_object.rb +0 -0
  402. /data/spec/{app → support}/models/override.rb +0 -0
  403. /data/spec/{app → support}/models/ownable.rb +0 -0
  404. /data/spec/{app → support}/models/pack.rb +0 -0
  405. /data/spec/{app → support}/models/page.rb +0 -0
  406. /data/spec/{app → support}/models/page_question.rb +0 -0
  407. /data/spec/{app → support}/models/parent.rb +0 -0
  408. /data/spec/{app → support}/models/parent_doc.rb +0 -0
  409. /data/spec/{app → support}/models/passport.rb +0 -0
  410. /data/spec/{app → support}/models/patient.rb +0 -0
  411. /data/spec/{app → support}/models/pdf_writer.rb +0 -0
  412. /data/spec/{app → support}/models/pencil.rb +0 -0
  413. /data/spec/{app → support}/models/pet.rb +0 -0
  414. /data/spec/{app → support}/models/pet_owner.rb +0 -0
  415. /data/spec/{app → support}/models/phone.rb +0 -0
  416. /data/spec/{app → support}/models/pizza.rb +0 -0
  417. /data/spec/{app → support}/models/player.rb +0 -0
  418. /data/spec/{app → support}/models/post.rb +0 -0
  419. /data/spec/{app → support}/models/post_genre.rb +0 -0
  420. /data/spec/{app → support}/models/powerup.rb +0 -0
  421. /data/spec/{app → support}/models/preference.rb +0 -0
  422. /data/spec/{app → support}/models/princess.rb +0 -0
  423. /data/spec/{app → support}/models/product.rb +0 -0
  424. /data/spec/{app → support}/models/pronunciation.rb +0 -0
  425. /data/spec/{app → support}/models/pub.rb +0 -0
  426. /data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
  427. /data/spec/{app → support}/models/publication/review.rb +0 -0
  428. /data/spec/{app → support}/models/purchase.rb +0 -0
  429. /data/spec/{app → support}/models/question.rb +0 -0
  430. /data/spec/{app → support}/models/quiz.rb +0 -0
  431. /data/spec/{app → support}/models/rating.rb +0 -0
  432. /data/spec/{app → support}/models/record.rb +0 -0
  433. /data/spec/{app → support}/models/registry.rb +0 -0
  434. /data/spec/{app → support}/models/role.rb +0 -0
  435. /data/spec/{app → support}/models/root_category.rb +0 -0
  436. /data/spec/{app → support}/models/sandwich.rb +0 -0
  437. /data/spec/{app → support}/models/scheduler.rb +0 -0
  438. /data/spec/{app → support}/models/seo.rb +0 -0
  439. /data/spec/{app → support}/models/series.rb +0 -0
  440. /data/spec/{app → support}/models/server.rb +0 -0
  441. /data/spec/{app → support}/models/service.rb +0 -0
  442. /data/spec/{app → support}/models/shelf.rb +0 -0
  443. /data/spec/{app → support}/models/shipment_address.rb +0 -0
  444. /data/spec/{app → support}/models/shipping_container.rb +0 -0
  445. /data/spec/{app → support}/models/shipping_pack.rb +0 -0
  446. /data/spec/{app → support}/models/shop.rb +0 -0
  447. /data/spec/{app → support}/models/short_agent.rb +0 -0
  448. /data/spec/{app → support}/models/short_quiz.rb +0 -0
  449. /data/spec/{app → support}/models/simple.rb +0 -0
  450. /data/spec/{app → support}/models/slave.rb +0 -0
  451. /data/spec/{app → support}/models/song.rb +0 -0
  452. /data/spec/{app → support}/models/sound.rb +0 -0
  453. /data/spec/{app → support}/models/square.rb +0 -0
  454. /data/spec/{app → support}/models/staff.rb +0 -0
  455. /data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
  456. /data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
  457. /data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  458. /data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  459. /data/spec/{app → support}/models/strategy.rb +0 -0
  460. /data/spec/{app → support}/models/sub_item.rb +0 -0
  461. /data/spec/{app → support}/models/subscription.rb +0 -0
  462. /data/spec/{app → support}/models/survey.rb +0 -0
  463. /data/spec/{app → support}/models/symptom.rb +0 -0
  464. /data/spec/{app → support}/models/tag.rb +0 -0
  465. /data/spec/{app → support}/models/target.rb +0 -0
  466. /data/spec/{app → support}/models/template.rb +0 -0
  467. /data/spec/{app → support}/models/thing.rb +0 -0
  468. /data/spec/{app → support}/models/title.rb +0 -0
  469. /data/spec/{app → support}/models/topping.rb +0 -0
  470. /data/spec/{app → support}/models/track.rb +0 -0
  471. /data/spec/{app → support}/models/translation.rb +0 -0
  472. /data/spec/{app → support}/models/tree.rb +0 -0
  473. /data/spec/{app → support}/models/updatable.rb +0 -0
  474. /data/spec/{app → support}/models/user.rb +0 -0
  475. /data/spec/{app → support}/models/user_account.rb +0 -0
  476. /data/spec/{app → support}/models/validation_callback.rb +0 -0
  477. /data/spec/{app → support}/models/version.rb +0 -0
  478. /data/spec/{app → support}/models/vertex.rb +0 -0
  479. /data/spec/{app → support}/models/vet_visit.rb +0 -0
  480. /data/spec/{app → support}/models/video.rb +0 -0
  481. /data/spec/{app → support}/models/video_game.rb +0 -0
  482. /data/spec/{app → support}/models/weapon.rb +0 -0
  483. /data/spec/{app → support}/models/wiki_page.rb +0 -0
  484. /data/spec/{app → support}/models/word.rb +0 -0
  485. /data/spec/{app → support}/models/word_origin.rb +0 -0
@@ -0,0 +1,52 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module FieldOperator
6
+ MAP = {
7
+ '$all' => All,
8
+ '$elemMatch' => ElemMatch,
9
+ '$eq' => Eq,
10
+ '$exists' => Exists,
11
+ '$gt' => Gt,
12
+ '$gte' => Gte,
13
+ '$in' => In,
14
+ '$lt' => Lt,
15
+ '$lte' => Lte,
16
+ '$nin' => Nin,
17
+ '$ne' => Ne,
18
+ '$not' => Not,
19
+ '$regex' => Regex,
20
+ '$size' => Size,
21
+ }.freeze
22
+
23
+ module_function def get(op)
24
+ MAP.fetch(op)
25
+ rescue KeyError
26
+ raise Errors::InvalidFieldOperator.new(op)
27
+ end
28
+
29
+ module_function def apply_array_field_operator(exists, value, condition)
30
+ if Array === value
31
+ value.any? { |v| yield v }
32
+ else
33
+ yield value
34
+ end
35
+ end
36
+
37
+ module_function def apply_comparison_operator(operator, left, right)
38
+ case left
39
+ when Numeric
40
+ case right
41
+ when Numeric
42
+ left.send(operator, right)
43
+ else
44
+ false
45
+ end
46
+ else
47
+ false
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Gt
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when Range
9
+ raise Errors::InvalidQuery, "$gt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ end
11
+ FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
12
+ FieldOperator.apply_comparison_operator(:>, v, condition)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Gte
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when Range
9
+ raise Errors::InvalidQuery, "$gte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ end
11
+ FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
12
+ FieldOperator.apply_comparison_operator(:>=, v, condition)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module In
6
+ module_function def matches?(exists, value, condition)
7
+ unless Array === condition
8
+ raise Errors::InvalidQuery, "$in argument must be an array: #{Errors::InvalidQuery.truncate_expr(condition)}"
9
+ end
10
+ if Array === value
11
+ if value.any? { |v|
12
+ condition.any? do |c|
13
+ EqImplWithRegexp.matches?('$in', v, c)
14
+ end
15
+ } then
16
+ return true
17
+ end
18
+ end
19
+ condition.any? do |c|
20
+ EqImplWithRegexp.matches?('$in', value, c)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Lt
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when Range
9
+ raise Errors::InvalidQuery, "$lt argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ end
11
+ FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
12
+ FieldOperator.apply_comparison_operator(:<, v, condition)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Lte
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when Range
9
+ raise Errors::InvalidQuery, "$lte argument cannot be a Range: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ end
11
+ FieldOperator.apply_array_field_operator(exists, value, condition) do |v|
12
+ FieldOperator.apply_comparison_operator(:<=, v, condition)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Ne
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when ::Regexp, BSON::Regexp::Raw
9
+ raise Errors::InvalidQuery, "'$ne' operator does not allow Regexp arguments: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ end
11
+
12
+ !EqImpl.matches?(exists, value, condition, '$ne')
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Nin
6
+ module_function def matches?(exists, value, condition)
7
+ !In.matches?(exists, value, condition)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Nor
6
+ module_function def matches?(document, expr)
7
+ unless expr.is_a?(Array)
8
+ raise Errors::InvalidQuery, "$nor argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
9
+ end
10
+
11
+ if expr.empty?
12
+ raise Errors::InvalidQuery, "$nor argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
13
+ end
14
+
15
+ expr.each do |sub_expr|
16
+ if Expression.matches?(document, sub_expr)
17
+ return false
18
+ end
19
+ end
20
+
21
+ expr.any?
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Not
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when ::Regexp, BSON::Regexp::Raw
9
+ !Regex.matches?(exists, value, condition)
10
+ when Hash
11
+ if condition.empty?
12
+ raise Errors::InvalidQuery, "$not argument cannot be an empty hash: #{Errors::InvalidQuery.truncate_expr(condition)}"
13
+ end
14
+
15
+ condition.all? do |(k, cond_v)|
16
+ k = k.to_s
17
+ unless k.start_with?('$')
18
+ raise Errors::InvalidQuery, "$not arguments must be operators: #{Errors::InvalidQuery.truncate_expr(k)}"
19
+ end
20
+
21
+ !FieldOperator.get(k).matches?(exists, value, cond_v)
22
+ end
23
+ else
24
+ raise Errors::InvalidQuery, "$not argument must be a Hash or a regular expression: #{Errors::InvalidQuery.truncate_expr(condition)}"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Or
6
+ module_function def matches?(document, expr)
7
+ unless expr.is_a?(Array)
8
+ raise Errors::InvalidQuery, "$or argument must be an array: #{Errors::InvalidQuery.truncate_expr(expr)}"
9
+ end
10
+
11
+ if expr.empty?
12
+ raise Errors::InvalidQuery, "$or argument must be a non-empty array: #{Errors::InvalidQuery.truncate_expr(expr)}"
13
+ end
14
+
15
+ expr.any? do |sub_expr|
16
+ Expression.matches?(document, sub_expr)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,41 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Regex
6
+ module_function def matches?(exists, value, condition)
7
+ condition = case condition
8
+ when Regexp
9
+ condition
10
+ when BSON::Regexp::Raw
11
+ condition.compile
12
+ else
13
+ # Note that strings must have been converted to a regular expression
14
+ # instance already (with $options taken into account, if provided).
15
+ raise Errors::InvalidQuery, "$regex requires a regular expression argument: #{Errors::InvalidQuery.truncate_expr(condition)}"
16
+ end
17
+
18
+ case value
19
+ when Array
20
+ value.any? do |v|
21
+ v =~ condition
22
+ end
23
+ when String
24
+ value =~ condition
25
+ else
26
+ false
27
+ end
28
+ end
29
+
30
+ module_function def matches_array_or_scalar?(value, condition)
31
+ if Array === value
32
+ value.any? do |v|
33
+ matches?(true, v, condition)
34
+ end
35
+ else
36
+ matches?(true, value, condition)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,26 @@
1
+ module Mongoid
2
+ module Matcher
3
+
4
+ # @api private
5
+ module Size
6
+ module_function def matches?(exists, value, condition)
7
+ case condition
8
+ when Float
9
+ raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
10
+ when Numeric
11
+ if condition < 0
12
+ raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
13
+ end
14
+ else
15
+ raise Errors::InvalidQuery, "$size argument must be a non-negative integer: #{Errors::InvalidQuery.truncate_expr(condition)}"
16
+ end
17
+
18
+ if Array === value
19
+ value.length == condition
20
+ else
21
+ false
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,127 @@
1
+ module Mongoid
2
+
3
+ # @api private
4
+ module Matcher
5
+
6
+ # Extracts field values in the document at the specified key.
7
+ #
8
+ # The document can be a Hash or a model instance.
9
+ #
10
+ # The key is a valid MongoDB dot notation key. The following use cases are
11
+ # supported:
12
+ #
13
+ # - Simple field traversal (`foo`) - retrieves the field `foo` in the
14
+ # current document.
15
+ # - Hash/embedded document field traversal (`foo.bar`) - retrieves the
16
+ # field `foo` in the current document, then retrieves the field `bar`
17
+ # from the value of `foo`. Each path segment could descend into an
18
+ # embedded document or a hash field.
19
+ # - Array element retrieval (`foo.N`) - retrieves the Nth array element
20
+ # from the field `foo` which must be an array. N must be a non-negative
21
+ # integer.
22
+ # - Array traversal (`foo.bar`) - if `foo` is an array field, and
23
+ # the elements of `foo` are hashes or embedded documents, this returns
24
+ # an array of values of the `bar` field in each of the hashes in the
25
+ # `foo` array.
26
+ #
27
+ # The return value is a two-element array. The first element is the value
28
+ # retrieved, or an array of values. The second element is a boolean flag
29
+ # indicating whether an array was expanded at any point during the key
30
+ # traversal (because the respective document field was an array).
31
+ #
32
+ # @param [ Document | Hash ] document The document to extract from.
33
+ # @param [ String ] key The key path to extract.
34
+ #
35
+ # @return [ Array<true | false, Object | Array, true | false> ]
36
+ # Whether the value existed in the document, the extracted value
37
+ # and the array expansion flag.
38
+ module_function def extract_attribute(document, key)
39
+ if document.respond_to?(:as_attributes, true)
40
+ # If a document has hash fields, as_attributes would keep those fields
41
+ # as Hash instances which do not offer indifferent access.
42
+ # Convert to BSON::Document to get indifferent access on hash fields.
43
+ document = BSON::Document.new(document.send(:as_attributes))
44
+ end
45
+
46
+ src = document
47
+ expanded = false
48
+ exists = true
49
+
50
+ key.to_s.split('.').each do |field|
51
+ if (index = field.to_i).to_s == field
52
+ # Array indexing
53
+ if Array === src
54
+ exists = index < src.length
55
+ src = src[index]
56
+ else
57
+ # Trying to index something that is not an array
58
+ exists = false
59
+ src = nil
60
+ end
61
+ else
62
+ case src
63
+ when nil
64
+ exists = false
65
+ when Hash
66
+ exists = src.key?(field)
67
+ src = src[field]
68
+ when Array
69
+ expanded = true
70
+ exists = false
71
+ new = []
72
+ src.each do |doc|
73
+ case doc
74
+ when Hash
75
+ if doc.key?(field)
76
+ v = doc[field]
77
+ case v
78
+ when Array
79
+ new += v
80
+ else
81
+ new += [v]
82
+ end
83
+ exists = true
84
+ end
85
+ else
86
+ # Trying to hash index into a value that is not a hash
87
+ end
88
+ end
89
+ src = new
90
+ else
91
+ # Trying to descend into a field that is not a hash using
92
+ # dot notation.
93
+ exists = false
94
+ src = nil
95
+ end
96
+ end
97
+ end
98
+
99
+ [exists, src, expanded]
100
+ end
101
+ end
102
+ end
103
+
104
+ require 'mongoid/matcher/all'
105
+ require 'mongoid/matcher/and'
106
+ require 'mongoid/matcher/elem_match'
107
+ require 'mongoid/matcher/elem_match_expression'
108
+ require 'mongoid/matcher/eq'
109
+ require 'mongoid/matcher/eq_impl'
110
+ require 'mongoid/matcher/eq_impl_with_regexp'
111
+ require 'mongoid/matcher/exists'
112
+ require 'mongoid/matcher/expression'
113
+ require 'mongoid/matcher/field_expression'
114
+ require 'mongoid/matcher/gt'
115
+ require 'mongoid/matcher/gte'
116
+ require 'mongoid/matcher/in'
117
+ require 'mongoid/matcher/lt'
118
+ require 'mongoid/matcher/lte'
119
+ require 'mongoid/matcher/ne'
120
+ require 'mongoid/matcher/nin'
121
+ require 'mongoid/matcher/nor'
122
+ require 'mongoid/matcher/not'
123
+ require 'mongoid/matcher/or'
124
+ require 'mongoid/matcher/regex'
125
+ require 'mongoid/matcher/size'
126
+ require 'mongoid/matcher/expression_operator'
127
+ require 'mongoid/matcher/field_operator'
@@ -141,7 +141,7 @@ module Mongoid
141
141
  #
142
142
  # @since 1.0.0
143
143
  def delete_all(conditions = {})
144
- selector = hereditary? ? conditions.merge(_type: name) : conditions
144
+ selector = hereditary? ? conditions.merge(discriminator_key.to_sym => discriminator_value) : conditions
145
145
  where(selector).delete
146
146
  end
147
147
  end
@@ -237,9 +237,7 @@ module Mongoid
237
237
  # @since 6.0.0
238
238
  def clear(object, cluster = nil, original_context = nil)
239
239
  if context = get(object)
240
- unless cluster.nil? || context.cluster.equal?(cluster)
241
- context.client.close
242
- end
240
+ context.client.close unless (context.cluster.equal?(cluster) || cluster.nil?)
243
241
  end
244
242
  ensure
245
243
  Thread.current["[mongoid][#{object.object_id}]:context"] = original_context