mongoid 7.1.5 → 7.2.1

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 (461) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +9 -2
  5. data/Rakefile +33 -7
  6. data/lib/config/locales/en.yml +37 -1
  7. data/lib/mongoid.rb +23 -0
  8. data/lib/mongoid/association/depending.rb +1 -6
  9. data/lib/mongoid/association/many.rb +3 -3
  10. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  11. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  12. data/lib/mongoid/association/referenced/has_many/enumerable.rb +36 -1
  13. data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
  14. data/lib/mongoid/association/referenced/has_one/buildable.rb +9 -1
  15. data/lib/mongoid/association/referenced/has_one/proxy.rb +6 -1
  16. data/lib/mongoid/atomic/modifiers.rb +1 -1
  17. data/lib/mongoid/attributes/dynamic.rb +1 -1
  18. data/lib/mongoid/clients/factory.rb +17 -0
  19. data/lib/mongoid/composable.rb +1 -0
  20. data/lib/mongoid/config.rb +3 -0
  21. data/lib/mongoid/contextual/mongo.rb +23 -4
  22. data/lib/mongoid/copyable.rb +7 -3
  23. data/lib/mongoid/criteria.rb +57 -7
  24. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  25. data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
  26. data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
  27. data/lib/mongoid/criteria/queryable/selector.rb +3 -7
  28. data/lib/mongoid/criteria/queryable/storable.rb +3 -3
  29. data/lib/mongoid/document.rb +18 -5
  30. data/lib/mongoid/errors.rb +7 -0
  31. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  32. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  33. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  34. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  35. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  36. data/lib/mongoid/errors/invalid_query.rb +41 -0
  37. data/lib/mongoid/extensions.rb +1 -0
  38. data/lib/mongoid/factory.rb +27 -10
  39. data/lib/mongoid/fields.rb +3 -0
  40. data/lib/mongoid/fields/validators/macro.rb +22 -9
  41. data/lib/mongoid/findable.rb +50 -14
  42. data/lib/mongoid/indexable.rb +2 -2
  43. data/lib/mongoid/interceptable.rb +3 -1
  44. data/lib/mongoid/matchable.rb +1 -149
  45. data/lib/mongoid/matcher.rb +127 -0
  46. data/lib/mongoid/matcher/all.rb +22 -0
  47. data/lib/mongoid/matcher/and.rb +21 -0
  48. data/lib/mongoid/matcher/elem_match.rb +35 -0
  49. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  50. data/lib/mongoid/matcher/eq.rb +11 -0
  51. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  52. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  53. data/lib/mongoid/matcher/exists.rb +15 -0
  54. data/lib/mongoid/matcher/expression.rb +40 -0
  55. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  56. data/lib/mongoid/matcher/field_expression.rb +63 -0
  57. data/lib/mongoid/matcher/field_operator.rb +48 -0
  58. data/lib/mongoid/matcher/gt.rb +17 -0
  59. data/lib/mongoid/matcher/gte.rb +17 -0
  60. data/lib/mongoid/matcher/in.rb +25 -0
  61. data/lib/mongoid/matcher/lt.rb +17 -0
  62. data/lib/mongoid/matcher/lte.rb +17 -0
  63. data/lib/mongoid/matcher/ne.rb +16 -0
  64. data/lib/mongoid/matcher/nin.rb +11 -0
  65. data/lib/mongoid/matcher/nor.rb +25 -0
  66. data/lib/mongoid/matcher/not.rb +29 -0
  67. data/lib/mongoid/matcher/or.rb +21 -0
  68. data/lib/mongoid/matcher/regex.rb +41 -0
  69. data/lib/mongoid/matcher/size.rb +26 -0
  70. data/lib/mongoid/persistable/deletable.rb +1 -1
  71. data/lib/mongoid/query_cache.rb +64 -62
  72. data/lib/mongoid/reloadable.rb +2 -2
  73. data/lib/mongoid/serializable.rb +1 -1
  74. data/lib/mongoid/stringified_symbol.rb +53 -0
  75. data/lib/mongoid/traversable.rb +111 -4
  76. data/lib/mongoid/version.rb +1 -1
  77. data/spec/README.md +19 -4
  78. data/spec/integration/app_spec.rb +46 -13
  79. data/spec/integration/associations/embedded_spec.rb +94 -0
  80. data/spec/integration/associations/embeds_many_spec.rb +24 -0
  81. data/spec/integration/associations/embeds_one_spec.rb +24 -0
  82. data/spec/integration/associations/has_many_spec.rb +108 -13
  83. data/spec/integration/associations/has_one_spec.rb +108 -13
  84. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  85. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  86. data/spec/integration/callbacks_models.rb +49 -0
  87. data/spec/integration/callbacks_spec.rb +216 -0
  88. data/spec/integration/discriminator_key_spec.rb +354 -0
  89. data/spec/integration/discriminator_value_spec.rb +207 -0
  90. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  91. data/spec/integration/matcher_operator_data/all.yml +140 -0
  92. data/spec/integration/matcher_operator_data/and.yml +93 -0
  93. data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
  94. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  95. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  96. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  97. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  98. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  99. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  100. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  101. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  102. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  103. data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
  104. data/spec/integration/matcher_operator_data/in.yml +194 -0
  105. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  106. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  107. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  108. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  109. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  110. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  111. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  112. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  113. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  114. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  115. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  116. data/spec/integration/matcher_operator_data/not.yml +196 -0
  117. data/spec/integration/matcher_operator_data/or.yml +137 -0
  118. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  119. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  120. data/spec/integration/matcher_operator_data/size.yml +174 -0
  121. data/spec/integration/matcher_operator_spec.rb +100 -0
  122. data/spec/integration/matcher_spec.rb +189 -0
  123. data/spec/integration/server_query_spec.rb +142 -0
  124. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  125. data/spec/lite_spec_helper.rb +4 -3
  126. data/spec/mongoid/association/depending_spec.rb +78 -26
  127. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +50 -0
  128. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
  129. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  130. data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
  131. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
  132. data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
  133. data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
  134. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
  135. data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
  136. data/spec/mongoid/atomic/paths_spec.rb +41 -0
  137. data/spec/mongoid/atomic_spec.rb +23 -0
  138. data/spec/mongoid/attributes/nested_spec.rb +1 -1
  139. data/spec/mongoid/clients/factory_spec.rb +37 -0
  140. data/spec/mongoid/clients/sessions_spec.rb +1 -6
  141. data/spec/mongoid/config_spec.rb +28 -0
  142. data/spec/mongoid/contextual/mongo_spec.rb +70 -16
  143. data/spec/mongoid/copyable_spec.rb +197 -18
  144. data/spec/mongoid/copyable_spec_models.rb +28 -0
  145. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +36 -0
  146. data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
  147. data/spec/mongoid/criteria_spec.rb +204 -39
  148. data/spec/mongoid/document_spec.rb +89 -15
  149. data/spec/mongoid/equality_spec.rb +0 -1
  150. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  151. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  152. data/spec/mongoid/factory_spec.rb +261 -28
  153. data/spec/mongoid/fields_spec.rb +48 -2
  154. data/spec/mongoid/findable_spec.rb +32 -0
  155. data/spec/mongoid/indexable_spec.rb +28 -2
  156. data/spec/mongoid/inspectable_spec.rb +29 -2
  157. data/spec/mongoid/interceptable_spec.rb +2 -2
  158. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
  159. data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
  160. data/spec/mongoid/persistable/creatable_spec.rb +108 -25
  161. data/spec/mongoid/persistable/deletable_spec.rb +86 -0
  162. data/spec/mongoid/persistable/savable_spec.rb +174 -16
  163. data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
  164. data/spec/mongoid/query_cache_spec.rb +442 -41
  165. data/spec/mongoid/reloadable_spec.rb +72 -0
  166. data/spec/mongoid/serializable_spec.rb +21 -3
  167. data/spec/mongoid/traversable_spec.rb +1100 -0
  168. data/spec/shared/LICENSE +20 -0
  169. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  170. data/spec/shared/lib/mrss/cluster_config.rb +211 -0
  171. data/spec/shared/lib/mrss/constraints.rb +330 -0
  172. data/spec/shared/lib/mrss/docker_runner.rb +262 -0
  173. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  174. data/spec/shared/lib/mrss/server_version_registry.rb +69 -0
  175. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  176. data/spec/shared/share/Dockerfile.erb +229 -0
  177. data/spec/shared/shlib/distro.sh +73 -0
  178. data/spec/shared/shlib/server.sh +270 -0
  179. data/spec/shared/shlib/set_env.sh +128 -0
  180. data/spec/spec_helper.rb +4 -2
  181. data/spec/support/constraints.rb +20 -222
  182. data/spec/support/helpers.rb +1 -1
  183. data/spec/{app → support}/models/account.rb +0 -0
  184. data/spec/{app → support}/models/acolyte.rb +0 -0
  185. data/spec/{app → support}/models/actor.rb +1 -1
  186. data/spec/{app → support}/models/actress.rb +0 -0
  187. data/spec/{app → support}/models/address.rb +0 -0
  188. data/spec/{app → support}/models/address_component.rb +0 -0
  189. data/spec/{app → support}/models/address_number.rb +0 -0
  190. data/spec/{app → support}/models/agency.rb +0 -0
  191. data/spec/{app → support}/models/agent.rb +0 -0
  192. data/spec/{app → support}/models/album.rb +0 -0
  193. data/spec/{app → support}/models/alert.rb +0 -0
  194. data/spec/{app → support}/models/animal.rb +0 -0
  195. data/spec/{app → support}/models/answer.rb +0 -0
  196. data/spec/{app → support}/models/appointment.rb +0 -0
  197. data/spec/support/models/armrest.rb +10 -0
  198. data/spec/{app → support}/models/array_field.rb +0 -0
  199. data/spec/{app → support}/models/article.rb +0 -0
  200. data/spec/{app → support}/models/artist.rb +0 -0
  201. data/spec/{app → support}/models/artwork.rb +0 -0
  202. data/spec/{app → support}/models/audio.rb +0 -0
  203. data/spec/{app → support}/models/augmentation.rb +0 -0
  204. data/spec/{app → support}/models/author.rb +0 -0
  205. data/spec/{app → support}/models/baby.rb +0 -0
  206. data/spec/{app → support}/models/band.rb +0 -0
  207. data/spec/{app → support}/models/bar.rb +0 -0
  208. data/spec/{app → support}/models/basic.rb +0 -0
  209. data/spec/{app → support}/models/bed.rb +0 -0
  210. data/spec/{app → support}/models/big_palette.rb +0 -0
  211. data/spec/{app → support}/models/birthday.rb +0 -0
  212. data/spec/{app → support}/models/bomb.rb +0 -0
  213. data/spec/{app → support}/models/book.rb +0 -0
  214. data/spec/{app → support}/models/breed.rb +0 -0
  215. data/spec/{app → support}/models/browser.rb +1 -1
  216. data/spec/{app → support}/models/building.rb +0 -0
  217. data/spec/{app → support}/models/building_address.rb +0 -0
  218. data/spec/{app → support}/models/bus.rb +0 -0
  219. data/spec/{app → support}/models/business.rb +0 -0
  220. data/spec/{app → support}/models/callback_test.rb +0 -0
  221. data/spec/{app → support}/models/canvas.rb +1 -1
  222. data/spec/{app → support}/models/car.rb +0 -0
  223. data/spec/{app → support}/models/cat.rb +0 -0
  224. data/spec/{app → support}/models/category.rb +0 -0
  225. data/spec/{app → support}/models/child.rb +0 -0
  226. data/spec/{app → support}/models/child_doc.rb +0 -0
  227. data/spec/{app → support}/models/church.rb +0 -0
  228. data/spec/{app → support}/models/circle.rb +0 -0
  229. data/spec/{app → support}/models/circuit.rb +0 -0
  230. data/spec/{app → support}/models/circus.rb +0 -0
  231. data/spec/{app → support}/models/code.rb +0 -0
  232. data/spec/{app → support}/models/coding.rb +1 -1
  233. data/spec/{app → support}/models/coding/pull_request.rb +0 -0
  234. data/spec/{app → support}/models/comment.rb +0 -0
  235. data/spec/{app → support}/models/company.rb +0 -0
  236. data/spec/{app → support}/models/consumption_period.rb +0 -0
  237. data/spec/{app → support}/models/contextable_item.rb +0 -0
  238. data/spec/{app → support}/models/contractor.rb +0 -0
  239. data/spec/{app → support}/models/cookie.rb +0 -0
  240. data/spec/{app → support}/models/country_code.rb +0 -0
  241. data/spec/{app → support}/models/courier_job.rb +0 -0
  242. data/spec/support/models/crate.rb +13 -0
  243. data/spec/support/models/customer.rb +11 -0
  244. data/spec/support/models/customer_address.rb +12 -0
  245. data/spec/support/models/deed.rb +8 -0
  246. data/spec/{app → support}/models/definition.rb +0 -0
  247. data/spec/{app → support}/models/delegating_patient.rb +0 -0
  248. data/spec/{app → support}/models/description.rb +0 -0
  249. data/spec/{app → support}/models/dictionary.rb +6 -0
  250. data/spec/{app → support}/models/division.rb +0 -0
  251. data/spec/{app → support}/models/doctor.rb +0 -0
  252. data/spec/{app → support}/models/dog.rb +0 -0
  253. data/spec/{app → support}/models/dokument.rb +0 -0
  254. data/spec/{app → support}/models/draft.rb +0 -0
  255. data/spec/{app → support}/models/dragon.rb +0 -0
  256. data/spec/{app → support}/models/driver.rb +1 -1
  257. data/spec/{app → support}/models/drug.rb +0 -0
  258. data/spec/{app → support}/models/dungeon.rb +0 -0
  259. data/spec/{app → support}/models/edit.rb +0 -0
  260. data/spec/{app → support}/models/email.rb +0 -0
  261. data/spec/{app → support}/models/employer.rb +0 -0
  262. data/spec/{app → support}/models/entry.rb +0 -0
  263. data/spec/{app → support}/models/eraser.rb +0 -0
  264. data/spec/{app → support}/models/even.rb +0 -0
  265. data/spec/{app → support}/models/event.rb +0 -0
  266. data/spec/{app → support}/models/exhibition.rb +0 -0
  267. data/spec/{app → support}/models/exhibitor.rb +0 -0
  268. data/spec/{app → support}/models/explosion.rb +0 -0
  269. data/spec/{app → support}/models/eye.rb +0 -0
  270. data/spec/{app → support}/models/eye_bowl.rb +0 -0
  271. data/spec/{app → support}/models/face.rb +0 -0
  272. data/spec/{app → support}/models/favorite.rb +0 -0
  273. data/spec/{app → support}/models/filesystem.rb +0 -0
  274. data/spec/{app → support}/models/fire_hydrant.rb +0 -0
  275. data/spec/{app → support}/models/firefox.rb +0 -0
  276. data/spec/{app → support}/models/fish.rb +0 -0
  277. data/spec/{app → support}/models/folder.rb +0 -0
  278. data/spec/{app → support}/models/folder_item.rb +0 -0
  279. data/spec/{app → support}/models/fruits.rb +0 -0
  280. data/spec/{app → support}/models/game.rb +0 -0
  281. data/spec/{app → support}/models/ghost.rb +0 -0
  282. data/spec/support/models/guitar.rb +5 -0
  283. data/spec/{app → support}/models/home.rb +0 -0
  284. data/spec/{app → support}/models/house.rb +0 -0
  285. data/spec/{app → support}/models/html_writer.rb +0 -0
  286. data/spec/{app → support}/models/id_key.rb +0 -0
  287. data/spec/support/models/idnodef.rb +8 -0
  288. data/spec/{app → support}/models/image.rb +0 -0
  289. data/spec/{app → support}/models/implant.rb +0 -0
  290. data/spec/support/models/instrument.rb +9 -0
  291. data/spec/{app → support}/models/item.rb +1 -1
  292. data/spec/{app → support}/models/jar.rb +0 -0
  293. data/spec/{app → support}/models/kaleidoscope.rb +0 -0
  294. data/spec/{app → support}/models/kangaroo.rb +0 -0
  295. data/spec/{app → support}/models/label.rb +0 -0
  296. data/spec/{app → support}/models/language.rb +0 -0
  297. data/spec/{app → support}/models/lat_lng.rb +0 -0
  298. data/spec/{app → support}/models/league.rb +0 -0
  299. data/spec/{app → support}/models/learner.rb +0 -0
  300. data/spec/{app → support}/models/line_item.rb +0 -0
  301. data/spec/{app → support}/models/location.rb +0 -0
  302. data/spec/{app → support}/models/login.rb +0 -0
  303. data/spec/{app → support}/models/manufacturer.rb +0 -0
  304. data/spec/{app → support}/models/meat.rb +0 -0
  305. data/spec/{app → support}/models/membership.rb +0 -0
  306. data/spec/{app → support}/models/message.rb +0 -0
  307. data/spec/{app → support}/models/minim.rb +0 -0
  308. data/spec/{app → support}/models/mixed_drink.rb +0 -0
  309. data/spec/support/models/mop.rb +16 -0
  310. data/spec/{app → support}/models/movie.rb +0 -0
  311. data/spec/{app → support}/models/my_hash.rb +0 -0
  312. data/spec/{app → support}/models/name.rb +0 -0
  313. data/spec/{app → support}/models/name_only.rb +0 -0
  314. data/spec/{app → support}/models/node.rb +0 -0
  315. data/spec/{app → support}/models/note.rb +0 -0
  316. data/spec/{app → support}/models/odd.rb +0 -0
  317. data/spec/support/models/order.rb +11 -0
  318. data/spec/{app → support}/models/ordered_post.rb +0 -0
  319. data/spec/{app → support}/models/ordered_preference.rb +0 -0
  320. data/spec/{app → support}/models/oscar.rb +0 -0
  321. data/spec/{app → support}/models/other_owner_object.rb +0 -0
  322. data/spec/{app → support}/models/override.rb +0 -0
  323. data/spec/{app → support}/models/ownable.rb +0 -0
  324. data/spec/{app → support}/models/owner.rb +2 -0
  325. data/spec/{app → support}/models/pack.rb +0 -0
  326. data/spec/{app → support}/models/page.rb +0 -0
  327. data/spec/{app → support}/models/page_question.rb +0 -0
  328. data/spec/{app → support}/models/palette.rb +1 -1
  329. data/spec/{app → support}/models/parent.rb +0 -0
  330. data/spec/{app → support}/models/parent_doc.rb +0 -0
  331. data/spec/{app → support}/models/passport.rb +0 -0
  332. data/spec/{app → support}/models/patient.rb +0 -0
  333. data/spec/{app → support}/models/pdf_writer.rb +0 -0
  334. data/spec/{app → support}/models/pencil.rb +0 -0
  335. data/spec/{app → support}/models/person.rb +3 -1
  336. data/spec/{app → support}/models/pet.rb +0 -0
  337. data/spec/{app → support}/models/pet_owner.rb +0 -0
  338. data/spec/{app → support}/models/phone.rb +0 -0
  339. data/spec/support/models/piano.rb +5 -0
  340. data/spec/{app → support}/models/pizza.rb +0 -0
  341. data/spec/{app → support}/models/player.rb +0 -0
  342. data/spec/{app → support}/models/post.rb +0 -0
  343. data/spec/{app → support}/models/post_genre.rb +0 -0
  344. data/spec/{app → support}/models/powerup.rb +0 -0
  345. data/spec/{app → support}/models/preference.rb +0 -0
  346. data/spec/{app → support}/models/princess.rb +0 -0
  347. data/spec/{app → support}/models/product.rb +0 -0
  348. data/spec/support/models/profile.rb +18 -0
  349. data/spec/{app → support}/models/pronunciation.rb +0 -0
  350. data/spec/{app → support}/models/pub.rb +0 -0
  351. data/spec/support/models/publication.rb +5 -0
  352. data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
  353. data/spec/{app → support}/models/publication/review.rb +0 -0
  354. data/spec/{app → support}/models/purchase.rb +0 -0
  355. data/spec/{app → support}/models/question.rb +0 -0
  356. data/spec/{app → support}/models/quiz.rb +0 -0
  357. data/spec/{app → support}/models/rating.rb +0 -0
  358. data/spec/{app → support}/models/record.rb +0 -0
  359. data/spec/{app → support}/models/registry.rb +0 -0
  360. data/spec/{app → support}/models/role.rb +0 -0
  361. data/spec/{app → support}/models/root_category.rb +0 -0
  362. data/spec/{app → support}/models/sandwich.rb +0 -0
  363. data/spec/{app → support}/models/scheduler.rb +0 -0
  364. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
  365. data/spec/support/models/seat.rb +25 -0
  366. data/spec/{app → support}/models/seo.rb +0 -0
  367. data/spec/{app → support}/models/series.rb +1 -0
  368. data/spec/{app → support}/models/server.rb +0 -0
  369. data/spec/{app → support}/models/service.rb +0 -0
  370. data/spec/{app → support}/models/shape.rb +2 -2
  371. data/spec/{app → support}/models/shelf.rb +0 -0
  372. data/spec/{app → support}/models/shipment_address.rb +0 -0
  373. data/spec/{app → support}/models/shipping_container.rb +0 -0
  374. data/spec/{app → support}/models/shipping_pack.rb +0 -0
  375. data/spec/{app → support}/models/shop.rb +0 -0
  376. data/spec/{app → support}/models/short_agent.rb +0 -0
  377. data/spec/{app → support}/models/short_quiz.rb +0 -0
  378. data/spec/{app → support}/models/simple.rb +0 -0
  379. data/spec/{app → support}/models/slave.rb +0 -0
  380. data/spec/{app → support}/models/song.rb +0 -0
  381. data/spec/{app → support}/models/sound.rb +0 -0
  382. data/spec/{app → support}/models/square.rb +0 -0
  383. data/spec/{app → support}/models/staff.rb +0 -0
  384. data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
  385. data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
  386. data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  387. data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  388. data/spec/{app → support}/models/strategy.rb +0 -0
  389. data/spec/{app → support}/models/sub_item.rb +0 -0
  390. data/spec/{app → support}/models/subscription.rb +0 -0
  391. data/spec/{app → support}/models/survey.rb +0 -0
  392. data/spec/{app → support}/models/symptom.rb +0 -0
  393. data/spec/support/models/system_role.rb +7 -0
  394. data/spec/{app → support}/models/tag.rb +0 -0
  395. data/spec/{app → support}/models/target.rb +0 -0
  396. data/spec/{app → support}/models/template.rb +0 -0
  397. data/spec/{app → support}/models/thing.rb +0 -0
  398. data/spec/{app → support}/models/title.rb +0 -0
  399. data/spec/{app → support}/models/tool.rb +2 -2
  400. data/spec/{app → support}/models/topping.rb +0 -0
  401. data/spec/support/models/toy.rb +10 -0
  402. data/spec/{app → support}/models/track.rb +0 -0
  403. data/spec/{app → support}/models/translation.rb +0 -0
  404. data/spec/{app → support}/models/tree.rb +0 -0
  405. data/spec/{app → support}/models/truck.rb +2 -0
  406. data/spec/{app → support}/models/updatable.rb +0 -0
  407. data/spec/{app → support}/models/user.rb +0 -0
  408. data/spec/{app → support}/models/user_account.rb +0 -0
  409. data/spec/{app → support}/models/validation_callback.rb +0 -0
  410. data/spec/{app → support}/models/vehicle.rb +7 -2
  411. data/spec/{app → support}/models/version.rb +0 -0
  412. data/spec/{app → support}/models/vertex.rb +0 -0
  413. data/spec/{app → support}/models/vet_visit.rb +0 -0
  414. data/spec/{app → support}/models/video.rb +0 -0
  415. data/spec/{app → support}/models/video_game.rb +0 -0
  416. data/spec/{app → support}/models/weapon.rb +0 -0
  417. data/spec/{app → support}/models/wiki_page.rb +1 -0
  418. data/spec/{app → support}/models/word.rb +0 -0
  419. data/spec/{app → support}/models/word_origin.rb +0 -0
  420. data/spec/{app → support}/models/writer.rb +2 -2
  421. data/spec/support/spec_config.rb +1 -1
  422. metadata +895 -755
  423. metadata.gz.sig +0 -0
  424. data/lib/mongoid/matchable/all.rb +0 -30
  425. data/lib/mongoid/matchable/and.rb +0 -32
  426. data/lib/mongoid/matchable/default.rb +0 -121
  427. data/lib/mongoid/matchable/elem_match.rb +0 -36
  428. data/lib/mongoid/matchable/eq.rb +0 -23
  429. data/lib/mongoid/matchable/exists.rb +0 -25
  430. data/lib/mongoid/matchable/gt.rb +0 -25
  431. data/lib/mongoid/matchable/gte.rb +0 -25
  432. data/lib/mongoid/matchable/in.rb +0 -26
  433. data/lib/mongoid/matchable/lt.rb +0 -25
  434. data/lib/mongoid/matchable/lte.rb +0 -25
  435. data/lib/mongoid/matchable/ne.rb +0 -23
  436. data/lib/mongoid/matchable/nin.rb +0 -24
  437. data/lib/mongoid/matchable/nor.rb +0 -38
  438. data/lib/mongoid/matchable/or.rb +0 -35
  439. data/lib/mongoid/matchable/regexp.rb +0 -30
  440. data/lib/mongoid/matchable/size.rb +0 -23
  441. data/spec/app/models/publication.rb +0 -5
  442. data/spec/mongoid/matchable/all_spec.rb +0 -34
  443. data/spec/mongoid/matchable/and_spec.rb +0 -190
  444. data/spec/mongoid/matchable/default_spec.rb +0 -140
  445. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  446. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  447. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  448. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  449. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  450. data/spec/mongoid/matchable/in_spec.rb +0 -52
  451. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  452. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  453. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  454. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  455. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  456. data/spec/mongoid/matchable/or_spec.rb +0 -134
  457. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  458. data/spec/mongoid/matchable/size_spec.rb +0 -28
  459. data/spec/mongoid/matchable_spec.rb +0 -856
  460. data/spec/support/child_process_helper.rb +0 -76
  461. data/spec/support/lite_constraints.rb +0 -22
@@ -786,12 +786,72 @@ describe Mongoid::Criteria do
786
786
 
787
787
  describe "#field_list" do
788
788
 
789
+ context "when using the default discriminator key" do
790
+ let(:criteria) do
791
+ Doctor.only(:_id)
792
+ end
793
+
794
+ it "returns the fields with required _id minus type" do
795
+ expect(criteria.field_list).to eq([ "_id" ])
796
+ end
797
+ end
798
+
799
+ context "when using a custom discriminator key" do
800
+ before do
801
+ Person.discriminator_key = "dkey"
802
+ end
803
+
804
+ after do
805
+ Person.discriminator_key = nil
806
+ end
807
+
808
+ let(:criteria) do
809
+ Doctor.only(:_id, :_type)
810
+ end
811
+
812
+ it "returns the fields with type without dkey" do
813
+ expect(criteria.field_list).to eq([ "_id", "_type" ])
814
+ end
815
+ end
816
+ end
817
+
818
+ describe "#find" do
819
+ let!(:depeche) do
820
+ Band.create!(name: "Depeche Mode")
821
+ end
822
+
789
823
  let(:criteria) do
790
- Band.only(:name)
824
+ Band.where(name: "Depeche Mode")
791
825
  end
792
826
 
793
- it "returns the fields with required _id minus type" do
794
- expect(criteria.field_list).to eq([ "_id", "name" ])
827
+ context "when given a block" do
828
+ it "behaves as Enumerable" do
829
+ result = criteria.find { |c| c.name == "Depeche Mode" }
830
+ expect(result).to eq(depeche)
831
+ end
832
+ end
833
+
834
+ context "when given a Proc and a block" do
835
+ it "behaves as Enumerable" do
836
+ result = criteria.find(-> {"default"}) { |c| c.name == "Not Depeche Mode" }
837
+ expect(result).to eq("default")
838
+ end
839
+ end
840
+
841
+ context "when given a Proc" do
842
+ it "behaves as Enumerable" do
843
+ lambda do
844
+ criteria.find(-> {"default"})
845
+ # Proc is not serializable to a BSON type
846
+ end.should raise_error(BSON::Error::UnserializableClass)
847
+ end
848
+ end
849
+
850
+ context "when given an id" do
851
+ it "behaves as Findable" do
852
+ result = criteria.find(depeche.id)
853
+ expect(result).to eq(depeche)
854
+ end
795
855
  end
796
856
  end
797
857
 
@@ -2804,13 +2864,36 @@ describe Mongoid::Criteria do
2804
2864
  end
2805
2865
 
2806
2866
  context "when using inheritance" do
2867
+ context "when using the default discriminator key" do
2868
+ let(:criteria) do
2869
+ Doctor.only(:_id)
2870
+ end
2807
2871
 
2808
- let(:criteria) do
2809
- Doctor.only(:_id)
2872
+ it "adds _type to the fields" do
2873
+ expect(criteria.options[:fields]).to include("_type")
2874
+ end
2810
2875
  end
2811
2876
 
2812
- it "adds _type to the fields" do
2813
- expect(criteria.options[:fields]["_type"]).to eq(1)
2877
+ context "when setting a custom discriminator key" do
2878
+ before do
2879
+ Person.discriminator_key = "dkey"
2880
+ end
2881
+
2882
+ after do
2883
+ Person.discriminator_key = nil
2884
+ end
2885
+
2886
+ let(:criteria) do
2887
+ Doctor.only(:_id)
2888
+ end
2889
+
2890
+ it "adds custom discriminator key to the fields" do
2891
+ expect(criteria.options[:fields]).to include("dkey")
2892
+ end
2893
+
2894
+ it "does not add _type to the fields" do
2895
+ expect(criteria.options[:fields]).to_not include("_type")
2896
+ end
2814
2897
  end
2815
2898
  end
2816
2899
 
@@ -3386,34 +3469,75 @@ describe Mongoid::Criteria do
3386
3469
  end
3387
3470
 
3388
3471
  describe "#type" do
3472
+ context "when using the default discriminator_key" do
3473
+ context "when the type is a string" do
3389
3474
 
3390
- context "when the type is a string" do
3475
+ let!(:browser) do
3476
+ Browser.create
3477
+ end
3391
3478
 
3392
- let!(:browser) do
3393
- Browser.create
3394
- end
3479
+ let(:criteria) do
3480
+ Canvas.all.type("Browser")
3481
+ end
3395
3482
 
3396
- let(:criteria) do
3397
- Canvas.all.type("Browser")
3483
+ it "returns documents with the provided type" do
3484
+ expect(criteria).to eq([ browser ])
3485
+ end
3398
3486
  end
3399
3487
 
3400
- it "returns documents with the provided type" do
3401
- expect(criteria).to eq([ browser ])
3488
+ context "when the type is an Array of type" do
3489
+
3490
+ let!(:browser) do
3491
+ Firefox.create
3492
+ end
3493
+
3494
+ let(:criteria) do
3495
+ Canvas.all.type([ "Browser", "Firefox" ])
3496
+ end
3497
+
3498
+ it "returns documents with the provided types" do
3499
+ expect(criteria).to eq([ browser ])
3500
+ end
3402
3501
  end
3403
3502
  end
3404
3503
 
3405
- context "when the type is an Array of type" do
3504
+ context "when using a custom discriminator_key" do
3505
+ before do
3506
+ Canvas.discriminator_key = "dkey"
3507
+ end
3406
3508
 
3407
- let!(:browser) do
3408
- Firefox.create
3509
+ after do
3510
+ Canvas.discriminator_key = nil
3409
3511
  end
3410
3512
 
3411
- let(:criteria) do
3412
- Canvas.all.type([ "Browser", "Firefox" ])
3513
+ context "when the type is a string" do
3514
+
3515
+ let!(:browser) do
3516
+ Browser.create
3517
+ end
3518
+
3519
+ let(:criteria) do
3520
+ Canvas.all.type("Browser")
3521
+ end
3522
+
3523
+ it "returns documents with the provided type" do
3524
+ expect(criteria).to eq([ browser ])
3525
+ end
3413
3526
  end
3414
3527
 
3415
- it "returns documents with the provided types" do
3416
- expect(criteria).to eq([ browser ])
3528
+ context "when the type is an Array of type" do
3529
+
3530
+ let!(:browser) do
3531
+ Firefox.create
3532
+ end
3533
+
3534
+ let(:criteria) do
3535
+ Canvas.all.type([ "Browser", "Firefox" ])
3536
+ end
3537
+
3538
+ it "returns documents with the provided types" do
3539
+ expect(criteria).to eq([ browser ])
3540
+ end
3417
3541
  end
3418
3542
  end
3419
3543
  end
@@ -3735,7 +3859,7 @@ describe Mongoid::Criteria do
3735
3859
  end
3736
3860
  end
3737
3861
 
3738
- describe "#geo_spacial" do
3862
+ describe "#geo_spatial" do
3739
3863
 
3740
3864
  context "when checking within a polygon" do
3741
3865
 
@@ -3748,7 +3872,7 @@ describe Mongoid::Criteria do
3748
3872
  end
3749
3873
 
3750
3874
  let(:criteria) do
3751
- Bar.geo_spacial(
3875
+ Bar.geo_spatial(
3752
3876
  :location.within_polygon => [[[ 50, 10 ], [ 50, 20 ], [ 60, 20 ], [ 60, 10 ], [ 50, 10 ]]]
3753
3877
  )
3754
3878
  end
@@ -3832,34 +3956,75 @@ describe Mongoid::Criteria do
3832
3956
  end
3833
3957
 
3834
3958
  describe "#type_selection" do
3959
+ context "when using the default discriminator_key" do
3960
+ context "when only one subclass exists" do
3835
3961
 
3836
- context "when only one subclass exists" do
3962
+ let(:criteria) do
3963
+ described_class.new(Firefox)
3964
+ end
3837
3965
 
3838
- let(:criteria) do
3839
- described_class.new(Firefox)
3840
- end
3966
+ let(:selection) do
3967
+ criteria.send(:type_selection)
3968
+ end
3841
3969
 
3842
- let(:selection) do
3843
- criteria.send(:type_selection)
3970
+ it "does not use an $in query" do
3971
+ expect(selection).to eq({ _type: "Firefox" })
3972
+ end
3844
3973
  end
3845
3974
 
3846
- it "does not use an $in query" do
3847
- expect(selection).to eq({ _type: "Firefox" })
3975
+ context "when more than one subclass exists" do
3976
+
3977
+ let(:criteria) do
3978
+ described_class.new(Browser)
3979
+ end
3980
+
3981
+ let(:selection) do
3982
+ criteria.send(:type_selection)
3983
+ end
3984
+
3985
+ it "does not use an $in query" do
3986
+ expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
3987
+ end
3848
3988
  end
3849
3989
  end
3850
3990
 
3851
- context "when more than one subclass exists" do
3991
+ context "when using a custom discriminator_key" do
3992
+ before do
3993
+ Canvas.discriminator_key = "dkey"
3994
+ end
3852
3995
 
3853
- let(:criteria) do
3854
- described_class.new(Browser)
3996
+ after do
3997
+ Canvas.discriminator_key = nil
3855
3998
  end
3856
3999
 
3857
- let(:selection) do
3858
- criteria.send(:type_selection)
4000
+ context "when only one subclass exists" do
4001
+
4002
+ let(:criteria) do
4003
+ described_class.new(Firefox)
4004
+ end
4005
+
4006
+ let(:selection) do
4007
+ criteria.send(:type_selection)
4008
+ end
4009
+
4010
+ it "does not use an $in query" do
4011
+ expect(selection).to eq({ dkey: "Firefox" })
4012
+ end
3859
4013
  end
3860
4014
 
3861
- it "does not use an $in query" do
3862
- expect(selection).to eq({ _type: { "$in" => [ "Firefox", "Browser" ]}})
4015
+ context "when more than one subclass exists" do
4016
+
4017
+ let(:criteria) do
4018
+ described_class.new(Browser)
4019
+ end
4020
+
4021
+ let(:selection) do
4022
+ criteria.send(:type_selection)
4023
+ end
4024
+
4025
+ it "does not use an $in query" do
4026
+ expect(selection).to eq({ dkey: { "$in" => [ "Firefox", "Browser" ]}})
4027
+ end
3863
4028
  end
3864
4029
  end
3865
4030
  end
@@ -116,7 +116,50 @@ describe Mongoid::Document do
116
116
  end
117
117
 
118
118
  it "should clear descendants' cache" do
119
- expect(Person._types).to include(descendant.to_s)
119
+ expect(Person._types).to include(descendant.discriminator_value)
120
+ end
121
+ end
122
+ end
123
+
124
+ describe "._mongoid_clear_types" do
125
+
126
+ context "when changing the discriminator_value" do
127
+
128
+ before do
129
+ Kangaroo._types
130
+ Kangaroo.discriminator_value = "dvalue"
131
+ end
132
+
133
+ after do
134
+ Kangaroo.discriminator_value = nil
135
+ end
136
+
137
+ it "has the correct _types" do
138
+ expect(Kangaroo._types).to eq(["dvalue"])
139
+ end
140
+ end
141
+
142
+ context "when changing the discriminator_value in child" do
143
+
144
+ before do
145
+ Shape._types
146
+ Circle.discriminator_value = "dvalue"
147
+ end
148
+
149
+ after do
150
+ Circle.discriminator_value = nil
151
+ end
152
+
153
+ it "has the correct _types" do
154
+ expect(Circle._types).to eq(["dvalue"])
155
+ end
156
+
157
+ it "has the new Circle discriminator value" do
158
+ expect(Shape._types).to include("dvalue")
159
+ end
160
+
161
+ it "doesn't have the old Circle discriminator value" do
162
+ expect(Shape._types).to_not include("Cirlce")
120
163
  end
121
164
  end
122
165
  end
@@ -881,27 +924,58 @@ describe Mongoid::Document do
881
924
  end
882
925
 
883
926
  context "when no embedded documents are present" do
927
+ context "when using the default discriminator key" do
928
+ let(:person) do
929
+ manager.becomes(Person)
930
+ end
884
931
 
885
- let(:person) do
886
- manager.becomes(Person)
887
- end
932
+ it "copies attributes" do
933
+ expect(person.title).to eq('Sir')
934
+ end
888
935
 
889
- it "copies attributes" do
890
- expect(person.title).to eq('Sir')
891
- end
936
+ it "keeps the same object id" do
937
+ expect(person.id).to eq(manager.id)
938
+ end
892
939
 
893
- it "keeps the same object id" do
894
- expect(person.id).to eq(manager.id)
940
+ it "sets the class type" do
941
+ expect(person._type).to eq("Person")
942
+ end
943
+
944
+ it "raises an error when inappropriate class is provided" do
945
+ expect {
946
+ manager.becomes(String)
947
+ }.to raise_error(ArgumentError, /A class which includes Mongoid::Document is expected/)
948
+ end
895
949
  end
896
950
 
897
- it "sets the class type" do
898
- expect(person._type).to eq("Person")
951
+ context "when using a custom discriminator key" do
952
+ before do
953
+ Person.discriminator_key = "dkey"
954
+ end
955
+
956
+ after do
957
+ Person.discriminator_key = nil
958
+ end
959
+
960
+ it "sets the class type with new discriminator key" do
961
+ expect(person.dkey).to eq("Person")
962
+ end
899
963
  end
900
964
 
901
- it "raises an error when inappropriate class is provided" do
902
- expect {
903
- manager.becomes(String)
904
- }.to raise_error(ArgumentError)
965
+ context "when using a custom discriminator key and discriminator value" do
966
+ before do
967
+ Person.discriminator_key = "dkey"
968
+ Person.discriminator_value = "dvalue"
969
+ end
970
+
971
+ after do
972
+ Person.discriminator_key = nil
973
+ Person.discriminator_value = nil
974
+ end
975
+
976
+ it "sets the class type with new discriminator key" do
977
+ expect(person.dkey).to eq("dvalue")
978
+ end
905
979
  end
906
980
  end
907
981
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
- # -*- coding: utf-8 -*-
5
4
  require "spec_helper"
6
5
 
7
6
  describe Mongoid::Equality do
@@ -19,7 +19,7 @@ describe Mongoid::Errors::DeleteRestriction do
19
19
 
20
20
  it "contains the summary in the message" do
21
21
  expect(error.message).to include(
22
- "When defining 'drugs' with a :dependent => :restrict,"
22
+ "When defining 'drugs' with a :dependent => :restrict_with_error,"
23
23
  )
24
24
  end
25
25