mongoid 7.1.8 → 7.2.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 (437) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -3
  3. data.tar.gz.sig +0 -0
  4. data/README.md +9 -2
  5. data/lib/config/locales/en.yml +37 -1
  6. data/lib/mongoid.rb +23 -0
  7. data/lib/mongoid/association/depending.rb +1 -6
  8. data/lib/mongoid/association/many.rb +3 -3
  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 +36 -1
  12. data/lib/mongoid/association/referenced/has_many/proxy.rb +8 -1
  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/clients/factory.rb +17 -0
  17. data/lib/mongoid/composable.rb +1 -0
  18. data/lib/mongoid/config.rb +3 -0
  19. data/lib/mongoid/contextual/mongo.rb +23 -4
  20. data/lib/mongoid/copyable.rb +7 -3
  21. data/lib/mongoid/criteria.rb +57 -7
  22. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  23. data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
  24. data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
  25. data/lib/mongoid/criteria/queryable/selector.rb +3 -3
  26. data/lib/mongoid/criteria/queryable/storable.rb +3 -3
  27. data/lib/mongoid/document.rb +15 -3
  28. data/lib/mongoid/errors.rb +7 -0
  29. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  30. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  31. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  32. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  33. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  34. data/lib/mongoid/errors/invalid_query.rb +41 -0
  35. data/lib/mongoid/extensions.rb +1 -0
  36. data/lib/mongoid/factory.rb +27 -10
  37. data/lib/mongoid/fields.rb +3 -0
  38. data/lib/mongoid/fields/validators/macro.rb +22 -9
  39. data/lib/mongoid/findable.rb +50 -14
  40. data/lib/mongoid/indexable.rb +2 -2
  41. data/lib/mongoid/matchable.rb +1 -149
  42. data/lib/mongoid/matcher.rb +103 -0
  43. data/lib/mongoid/matcher/all.rb +22 -0
  44. data/lib/mongoid/matcher/and.rb +21 -0
  45. data/lib/mongoid/matcher/elem_match.rb +36 -0
  46. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  47. data/lib/mongoid/matcher/eq.rb +11 -0
  48. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  49. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  50. data/lib/mongoid/matcher/exists.rb +15 -0
  51. data/lib/mongoid/matcher/expression.rb +31 -0
  52. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  53. data/lib/mongoid/matcher/field_expression.rb +62 -0
  54. data/lib/mongoid/matcher/field_operator.rb +48 -0
  55. data/lib/mongoid/matcher/gt.rb +17 -0
  56. data/lib/mongoid/matcher/gte.rb +17 -0
  57. data/lib/mongoid/matcher/in.rb +25 -0
  58. data/lib/mongoid/matcher/lt.rb +17 -0
  59. data/lib/mongoid/matcher/lte.rb +17 -0
  60. data/lib/mongoid/matcher/ne.rb +16 -0
  61. data/lib/mongoid/matcher/nin.rb +11 -0
  62. data/lib/mongoid/matcher/nor.rb +25 -0
  63. data/lib/mongoid/matcher/not.rb +29 -0
  64. data/lib/mongoid/matcher/or.rb +21 -0
  65. data/lib/mongoid/matcher/regex.rb +41 -0
  66. data/lib/mongoid/matcher/size.rb +26 -0
  67. data/lib/mongoid/persistable/deletable.rb +1 -1
  68. data/lib/mongoid/query_cache.rb +64 -62
  69. data/lib/mongoid/reloadable.rb +2 -2
  70. data/lib/mongoid/serializable.rb +1 -1
  71. data/lib/mongoid/stringified_symbol.rb +53 -0
  72. data/lib/mongoid/traversable.rb +111 -4
  73. data/lib/mongoid/version.rb +1 -1
  74. data/spec/README.md +19 -4
  75. data/spec/integration/associations/embedded_spec.rb +94 -0
  76. data/spec/integration/associations/has_many_spec.rb +67 -14
  77. data/spec/integration/associations/has_one_spec.rb +67 -14
  78. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  79. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  80. data/spec/integration/discriminator_key_spec.rb +354 -0
  81. data/spec/integration/discriminator_value_spec.rb +207 -0
  82. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  83. data/spec/integration/matcher_operator_data/all.yml +140 -0
  84. data/spec/integration/matcher_operator_data/and.yml +93 -0
  85. data/spec/integration/matcher_operator_data/elem_match.yml +409 -0
  86. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  87. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  88. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  89. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  90. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  91. data/spec/integration/matcher_operator_data/gt_types.yml +63 -0
  92. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  93. data/spec/integration/matcher_operator_data/gte_types.yml +15 -0
  94. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  95. data/spec/integration/matcher_operator_data/implicit_traversal.yml +112 -0
  96. data/spec/integration/matcher_operator_data/in.yml +194 -0
  97. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  98. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  99. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  100. data/spec/integration/matcher_operator_data/lt_types.yml +15 -0
  101. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  102. data/spec/integration/matcher_operator_data/lte_types.yml +15 -0
  103. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  104. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  105. data/spec/integration/matcher_operator_data/ne_types.yml +15 -0
  106. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  107. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  108. data/spec/integration/matcher_operator_data/not.yml +196 -0
  109. data/spec/integration/matcher_operator_data/or.yml +137 -0
  110. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  111. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  112. data/spec/integration/matcher_operator_data/size.yml +174 -0
  113. data/spec/integration/matcher_operator_spec.rb +100 -0
  114. data/spec/integration/matcher_spec.rb +189 -0
  115. data/spec/integration/server_query_spec.rb +142 -0
  116. data/spec/integration/stringified_symbol_field_spec.rb +190 -0
  117. data/spec/mongoid/association/depending_spec.rb +78 -26
  118. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +33 -0
  119. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  120. data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
  121. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
  122. data/spec/mongoid/association/referenced/has_many_models.rb +21 -0
  123. data/spec/mongoid/association/referenced/has_one_models.rb +21 -0
  124. data/spec/mongoid/association/referenced/has_one_spec.rb +1 -1
  125. data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
  126. data/spec/mongoid/atomic_spec.rb +23 -0
  127. data/spec/mongoid/attributes/nested_spec.rb +1 -1
  128. data/spec/mongoid/clients/factory_spec.rb +37 -0
  129. data/spec/mongoid/clients/sessions_spec.rb +1 -6
  130. data/spec/mongoid/config_spec.rb +28 -0
  131. data/spec/mongoid/contextual/mongo_spec.rb +70 -16
  132. data/spec/mongoid/copyable_spec.rb +197 -18
  133. data/spec/mongoid/copyable_spec_models.rb +28 -0
  134. data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
  135. data/spec/mongoid/criteria_spec.rb +204 -39
  136. data/spec/mongoid/document_fields_spec.rb +26 -0
  137. data/spec/mongoid/document_spec.rb +89 -15
  138. data/spec/mongoid/equality_spec.rb +0 -1
  139. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  140. data/spec/mongoid/extensions/stringified_symbol_spec.rb +85 -0
  141. data/spec/mongoid/factory_spec.rb +261 -28
  142. data/spec/mongoid/fields_spec.rb +48 -2
  143. data/spec/mongoid/findable_spec.rb +32 -0
  144. data/spec/mongoid/indexable_spec.rb +28 -2
  145. data/spec/mongoid/inspectable_spec.rb +29 -2
  146. data/spec/mongoid/interceptable_spec.rb +2 -2
  147. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  148. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +239 -0
  149. data/spec/mongoid/matcher/extract_attribute_spec.rb +37 -0
  150. data/spec/mongoid/persistable/creatable_spec.rb +108 -25
  151. data/spec/mongoid/persistable/deletable_spec.rb +86 -0
  152. data/spec/mongoid/persistable/savable_spec.rb +174 -16
  153. data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
  154. data/spec/mongoid/query_cache_spec.rb +442 -41
  155. data/spec/mongoid/reloadable_spec.rb +72 -0
  156. data/spec/mongoid/serializable_spec.rb +21 -3
  157. data/spec/mongoid/traversable_spec.rb +1100 -0
  158. data/spec/spec_helper.rb +2 -2
  159. data/spec/support/constraints.rb +24 -0
  160. data/spec/support/helpers.rb +1 -1
  161. data/spec/{app → support}/models/account.rb +0 -0
  162. data/spec/{app → support}/models/acolyte.rb +0 -0
  163. data/spec/{app → support}/models/actor.rb +1 -1
  164. data/spec/{app → support}/models/actress.rb +0 -0
  165. data/spec/{app → support}/models/address.rb +0 -0
  166. data/spec/{app → support}/models/address_component.rb +0 -0
  167. data/spec/{app → support}/models/address_number.rb +0 -0
  168. data/spec/{app → support}/models/agency.rb +0 -0
  169. data/spec/{app → support}/models/agent.rb +0 -0
  170. data/spec/{app → support}/models/album.rb +0 -0
  171. data/spec/{app → support}/models/alert.rb +0 -0
  172. data/spec/{app → support}/models/animal.rb +0 -0
  173. data/spec/{app → support}/models/answer.rb +0 -0
  174. data/spec/{app → support}/models/appointment.rb +0 -0
  175. data/spec/support/models/armrest.rb +10 -0
  176. data/spec/{app → support}/models/array_field.rb +0 -0
  177. data/spec/{app → support}/models/article.rb +0 -0
  178. data/spec/{app → support}/models/artist.rb +0 -0
  179. data/spec/{app → support}/models/artwork.rb +0 -0
  180. data/spec/{app → support}/models/audio.rb +0 -0
  181. data/spec/{app → support}/models/augmentation.rb +0 -0
  182. data/spec/{app → support}/models/author.rb +0 -0
  183. data/spec/{app → support}/models/baby.rb +0 -0
  184. data/spec/{app → support}/models/band.rb +0 -0
  185. data/spec/{app → support}/models/bar.rb +0 -0
  186. data/spec/{app → support}/models/basic.rb +0 -0
  187. data/spec/{app → support}/models/bed.rb +0 -0
  188. data/spec/{app → support}/models/big_palette.rb +0 -0
  189. data/spec/{app → support}/models/birthday.rb +0 -0
  190. data/spec/{app → support}/models/bomb.rb +0 -0
  191. data/spec/{app → support}/models/book.rb +0 -0
  192. data/spec/{app → support}/models/breed.rb +0 -0
  193. data/spec/{app → support}/models/browser.rb +1 -1
  194. data/spec/{app → support}/models/building.rb +0 -0
  195. data/spec/{app → support}/models/building_address.rb +0 -0
  196. data/spec/{app → support}/models/bus.rb +0 -0
  197. data/spec/{app → support}/models/business.rb +0 -0
  198. data/spec/{app → support}/models/callback_test.rb +0 -0
  199. data/spec/{app → support}/models/canvas.rb +1 -1
  200. data/spec/{app → support}/models/car.rb +0 -0
  201. data/spec/{app → support}/models/cat.rb +0 -0
  202. data/spec/{app → support}/models/category.rb +0 -0
  203. data/spec/{app → support}/models/child.rb +0 -0
  204. data/spec/{app → support}/models/child_doc.rb +0 -0
  205. data/spec/{app → support}/models/church.rb +0 -0
  206. data/spec/{app → support}/models/circle.rb +0 -0
  207. data/spec/{app → support}/models/circuit.rb +0 -0
  208. data/spec/{app → support}/models/circus.rb +0 -0
  209. data/spec/{app → support}/models/code.rb +0 -0
  210. data/spec/{app → support}/models/coding.rb +1 -1
  211. data/spec/{app → support}/models/coding/pull_request.rb +0 -0
  212. data/spec/{app → support}/models/comment.rb +0 -0
  213. data/spec/{app → support}/models/company.rb +0 -0
  214. data/spec/{app → support}/models/consumption_period.rb +0 -0
  215. data/spec/{app → support}/models/contextable_item.rb +0 -0
  216. data/spec/{app → support}/models/contractor.rb +0 -0
  217. data/spec/{app → support}/models/cookie.rb +0 -0
  218. data/spec/{app → support}/models/country_code.rb +0 -0
  219. data/spec/{app → support}/models/courier_job.rb +0 -0
  220. data/spec/support/models/crate.rb +13 -0
  221. data/spec/{app → support}/models/customer.rb +0 -0
  222. data/spec/{app → support}/models/customer_address.rb +0 -0
  223. data/spec/support/models/deed.rb +8 -0
  224. data/spec/{app → support}/models/definition.rb +0 -0
  225. data/spec/{app → support}/models/delegating_patient.rb +0 -0
  226. data/spec/{app → support}/models/description.rb +0 -0
  227. data/spec/{app → support}/models/dictionary.rb +0 -0
  228. data/spec/{app → support}/models/division.rb +0 -0
  229. data/spec/{app → support}/models/doctor.rb +0 -0
  230. data/spec/{app → support}/models/dog.rb +0 -0
  231. data/spec/{app → support}/models/dokument.rb +0 -0
  232. data/spec/{app → support}/models/draft.rb +0 -0
  233. data/spec/{app → support}/models/dragon.rb +0 -0
  234. data/spec/{app → support}/models/driver.rb +1 -1
  235. data/spec/{app → support}/models/drug.rb +0 -0
  236. data/spec/{app → support}/models/dungeon.rb +0 -0
  237. data/spec/{app → support}/models/edit.rb +0 -0
  238. data/spec/{app → support}/models/email.rb +0 -0
  239. data/spec/{app → support}/models/employer.rb +0 -0
  240. data/spec/{app → support}/models/entry.rb +0 -0
  241. data/spec/{app → support}/models/eraser.rb +0 -0
  242. data/spec/{app → support}/models/even.rb +0 -0
  243. data/spec/{app → support}/models/event.rb +0 -0
  244. data/spec/{app → support}/models/exhibition.rb +0 -0
  245. data/spec/{app → support}/models/exhibitor.rb +0 -0
  246. data/spec/{app → support}/models/explosion.rb +0 -0
  247. data/spec/{app → support}/models/eye.rb +0 -0
  248. data/spec/{app → support}/models/eye_bowl.rb +0 -0
  249. data/spec/{app → support}/models/face.rb +0 -0
  250. data/spec/{app → support}/models/favorite.rb +0 -0
  251. data/spec/{app → support}/models/filesystem.rb +0 -0
  252. data/spec/{app → support}/models/fire_hydrant.rb +0 -0
  253. data/spec/{app → support}/models/firefox.rb +0 -0
  254. data/spec/{app → support}/models/fish.rb +0 -0
  255. data/spec/{app → support}/models/folder.rb +0 -0
  256. data/spec/{app → support}/models/folder_item.rb +0 -0
  257. data/spec/{app → support}/models/fruits.rb +0 -0
  258. data/spec/{app → support}/models/game.rb +0 -0
  259. data/spec/{app → support}/models/ghost.rb +0 -0
  260. data/spec/support/models/guitar.rb +5 -0
  261. data/spec/{app → support}/models/home.rb +0 -0
  262. data/spec/{app → support}/models/house.rb +0 -0
  263. data/spec/{app → support}/models/html_writer.rb +0 -0
  264. data/spec/{app → support}/models/id_key.rb +0 -0
  265. data/spec/support/models/idnodef.rb +8 -0
  266. data/spec/{app → support}/models/image.rb +0 -0
  267. data/spec/{app → support}/models/implant.rb +0 -0
  268. data/spec/support/models/instrument.rb +9 -0
  269. data/spec/{app → support}/models/item.rb +1 -1
  270. data/spec/{app → support}/models/jar.rb +0 -0
  271. data/spec/{app → support}/models/kaleidoscope.rb +0 -0
  272. data/spec/{app → support}/models/kangaroo.rb +0 -0
  273. data/spec/{app → support}/models/label.rb +0 -0
  274. data/spec/{app → support}/models/language.rb +0 -0
  275. data/spec/{app → support}/models/lat_lng.rb +0 -0
  276. data/spec/{app → support}/models/league.rb +0 -0
  277. data/spec/{app → support}/models/learner.rb +0 -0
  278. data/spec/{app → support}/models/line_item.rb +0 -0
  279. data/spec/{app → support}/models/location.rb +0 -0
  280. data/spec/{app → support}/models/login.rb +0 -0
  281. data/spec/{app → support}/models/manufacturer.rb +0 -0
  282. data/spec/{app → support}/models/meat.rb +0 -0
  283. data/spec/{app → support}/models/membership.rb +0 -0
  284. data/spec/{app → support}/models/message.rb +0 -0
  285. data/spec/{app → support}/models/minim.rb +0 -0
  286. data/spec/{app → support}/models/mixed_drink.rb +0 -0
  287. data/spec/support/models/mop.rb +26 -0
  288. data/spec/{app → support}/models/movie.rb +0 -0
  289. data/spec/{app → support}/models/my_hash.rb +0 -0
  290. data/spec/{app → support}/models/name.rb +0 -0
  291. data/spec/{app → support}/models/name_only.rb +0 -0
  292. data/spec/{app → support}/models/node.rb +0 -0
  293. data/spec/{app → support}/models/note.rb +0 -0
  294. data/spec/{app → support}/models/odd.rb +0 -0
  295. data/spec/support/models/order.rb +11 -0
  296. data/spec/{app → support}/models/ordered_post.rb +0 -0
  297. data/spec/{app → support}/models/ordered_preference.rb +0 -0
  298. data/spec/{app → support}/models/oscar.rb +0 -0
  299. data/spec/{app → support}/models/other_owner_object.rb +0 -0
  300. data/spec/{app → support}/models/override.rb +0 -0
  301. data/spec/{app → support}/models/ownable.rb +0 -0
  302. data/spec/{app → support}/models/owner.rb +2 -0
  303. data/spec/{app → support}/models/pack.rb +0 -0
  304. data/spec/{app → support}/models/page.rb +0 -0
  305. data/spec/{app → support}/models/page_question.rb +0 -0
  306. data/spec/{app → support}/models/palette.rb +1 -1
  307. data/spec/{app → support}/models/parent.rb +0 -0
  308. data/spec/{app → support}/models/parent_doc.rb +0 -0
  309. data/spec/{app → support}/models/passport.rb +0 -0
  310. data/spec/{app → support}/models/patient.rb +0 -0
  311. data/spec/{app → support}/models/pdf_writer.rb +0 -0
  312. data/spec/{app → support}/models/pencil.rb +0 -0
  313. data/spec/{app → support}/models/person.rb +1 -1
  314. data/spec/{app → support}/models/pet.rb +0 -0
  315. data/spec/{app → support}/models/pet_owner.rb +0 -0
  316. data/spec/{app → support}/models/phone.rb +0 -0
  317. data/spec/support/models/piano.rb +5 -0
  318. data/spec/{app → support}/models/pizza.rb +0 -0
  319. data/spec/{app → support}/models/player.rb +0 -0
  320. data/spec/{app → support}/models/post.rb +0 -0
  321. data/spec/{app → support}/models/post_genre.rb +0 -0
  322. data/spec/{app → support}/models/powerup.rb +0 -0
  323. data/spec/{app → support}/models/preference.rb +0 -0
  324. data/spec/{app → support}/models/princess.rb +0 -0
  325. data/spec/{app → support}/models/product.rb +0 -0
  326. data/spec/support/models/profile.rb +18 -0
  327. data/spec/{app → support}/models/pronunciation.rb +0 -0
  328. data/spec/{app → support}/models/pub.rb +0 -0
  329. data/spec/support/models/publication.rb +5 -0
  330. data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
  331. data/spec/{app → support}/models/publication/review.rb +0 -0
  332. data/spec/{app → support}/models/purchase.rb +0 -0
  333. data/spec/{app → support}/models/question.rb +0 -0
  334. data/spec/{app → support}/models/quiz.rb +0 -0
  335. data/spec/{app → support}/models/rating.rb +0 -0
  336. data/spec/{app → support}/models/record.rb +0 -0
  337. data/spec/{app → support}/models/registry.rb +0 -0
  338. data/spec/{app → support}/models/role.rb +0 -0
  339. data/spec/{app → support}/models/root_category.rb +0 -0
  340. data/spec/{app → support}/models/sandwich.rb +0 -0
  341. data/spec/{app → support}/models/scheduler.rb +0 -0
  342. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
  343. data/spec/support/models/seat.rb +25 -0
  344. data/spec/{app → support}/models/seo.rb +0 -0
  345. data/spec/{app → support}/models/series.rb +0 -0
  346. data/spec/{app → support}/models/server.rb +0 -0
  347. data/spec/{app → support}/models/service.rb +0 -0
  348. data/spec/{app → support}/models/shape.rb +2 -2
  349. data/spec/{app → support}/models/shelf.rb +0 -0
  350. data/spec/{app → support}/models/shipment_address.rb +0 -0
  351. data/spec/{app → support}/models/shipping_container.rb +0 -0
  352. data/spec/{app → support}/models/shipping_pack.rb +0 -0
  353. data/spec/{app → support}/models/shop.rb +0 -0
  354. data/spec/{app → support}/models/short_agent.rb +0 -0
  355. data/spec/{app → support}/models/short_quiz.rb +0 -0
  356. data/spec/{app → support}/models/simple.rb +0 -0
  357. data/spec/{app → support}/models/slave.rb +0 -0
  358. data/spec/{app → support}/models/song.rb +0 -0
  359. data/spec/{app → support}/models/sound.rb +0 -0
  360. data/spec/{app → support}/models/square.rb +0 -0
  361. data/spec/{app → support}/models/staff.rb +0 -0
  362. data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
  363. data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
  364. data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  365. data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  366. data/spec/{app → support}/models/strategy.rb +0 -0
  367. data/spec/{app → support}/models/sub_item.rb +0 -0
  368. data/spec/{app → support}/models/subscription.rb +0 -0
  369. data/spec/{app → support}/models/survey.rb +0 -0
  370. data/spec/{app → support}/models/symptom.rb +0 -0
  371. data/spec/support/models/system_role.rb +7 -0
  372. data/spec/{app → support}/models/tag.rb +0 -0
  373. data/spec/{app → support}/models/target.rb +0 -0
  374. data/spec/{app → support}/models/template.rb +0 -0
  375. data/spec/{app → support}/models/thing.rb +0 -0
  376. data/spec/{app → support}/models/title.rb +0 -0
  377. data/spec/{app → support}/models/tool.rb +2 -2
  378. data/spec/{app → support}/models/topping.rb +0 -0
  379. data/spec/support/models/toy.rb +10 -0
  380. data/spec/{app → support}/models/track.rb +0 -0
  381. data/spec/{app → support}/models/translation.rb +0 -0
  382. data/spec/{app → support}/models/tree.rb +0 -0
  383. data/spec/{app → support}/models/truck.rb +2 -0
  384. data/spec/{app → support}/models/updatable.rb +0 -0
  385. data/spec/{app → support}/models/user.rb +0 -0
  386. data/spec/{app → support}/models/user_account.rb +0 -0
  387. data/spec/{app → support}/models/validation_callback.rb +0 -0
  388. data/spec/{app → support}/models/vehicle.rb +7 -2
  389. data/spec/{app → support}/models/version.rb +0 -0
  390. data/spec/{app → support}/models/vertex.rb +0 -0
  391. data/spec/{app → support}/models/vet_visit.rb +0 -0
  392. data/spec/{app → support}/models/video.rb +0 -0
  393. data/spec/{app → support}/models/video_game.rb +0 -0
  394. data/spec/{app → support}/models/weapon.rb +0 -0
  395. data/spec/{app → support}/models/wiki_page.rb +0 -0
  396. data/spec/{app → support}/models/word.rb +0 -0
  397. data/spec/{app → support}/models/word_origin.rb +0 -0
  398. data/spec/{app → support}/models/writer.rb +2 -2
  399. data/spec/support/spec_config.rb +1 -1
  400. metadata +617 -508
  401. metadata.gz.sig +3 -4
  402. data/lib/mongoid/matchable/all.rb +0 -30
  403. data/lib/mongoid/matchable/and.rb +0 -32
  404. data/lib/mongoid/matchable/default.rb +0 -121
  405. data/lib/mongoid/matchable/elem_match.rb +0 -36
  406. data/lib/mongoid/matchable/eq.rb +0 -23
  407. data/lib/mongoid/matchable/exists.rb +0 -25
  408. data/lib/mongoid/matchable/gt.rb +0 -25
  409. data/lib/mongoid/matchable/gte.rb +0 -25
  410. data/lib/mongoid/matchable/in.rb +0 -26
  411. data/lib/mongoid/matchable/lt.rb +0 -25
  412. data/lib/mongoid/matchable/lte.rb +0 -25
  413. data/lib/mongoid/matchable/ne.rb +0 -23
  414. data/lib/mongoid/matchable/nin.rb +0 -24
  415. data/lib/mongoid/matchable/nor.rb +0 -38
  416. data/lib/mongoid/matchable/or.rb +0 -35
  417. data/lib/mongoid/matchable/regexp.rb +0 -30
  418. data/lib/mongoid/matchable/size.rb +0 -23
  419. data/spec/app/models/publication.rb +0 -5
  420. data/spec/mongoid/matchable/all_spec.rb +0 -34
  421. data/spec/mongoid/matchable/and_spec.rb +0 -190
  422. data/spec/mongoid/matchable/default_spec.rb +0 -140
  423. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  424. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  425. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  426. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  427. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  428. data/spec/mongoid/matchable/in_spec.rb +0 -52
  429. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  430. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  431. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  432. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  433. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  434. data/spec/mongoid/matchable/or_spec.rb +0 -134
  435. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  436. data/spec/mongoid/matchable/size_spec.rb +0 -28
  437. data/spec/mongoid/matchable_spec.rb +0 -856
@@ -833,7 +833,8 @@ describe Mongoid::Fields do
833
833
  end
834
834
 
835
835
  it "does not return subclass defaults" do
836
- expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y", "_type" ])
836
+ expect(shape.pre_processed_defaults).to eq([ "_id", "x", "y" ])
837
+ expect(shape.post_processed_defaults).to eq([ "_type" ])
837
838
  end
838
839
  end
839
840
 
@@ -844,7 +845,8 @@ describe Mongoid::Fields do
844
845
  end
845
846
 
846
847
  it "has the parent and child defaults" do
847
- expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "_type", "radius" ])
848
+ expect(circle.pre_processed_defaults).to eq([ "_id", "x", "y", "radius" ])
849
+ expect(circle.post_processed_defaults).to eq([ "_type" ])
848
850
  end
849
851
  end
850
852
  end
@@ -1116,6 +1118,10 @@ describe Mongoid::Fields do
1116
1118
  it "does not return subclass fields" do
1117
1119
  expect(shape.fields.keys).to_not include("radius")
1118
1120
  end
1121
+
1122
+ it 'includes _type field' do
1123
+ expect(shape.fields.keys).to include("_type")
1124
+ end
1119
1125
  end
1120
1126
 
1121
1127
  context "on subclasses" do
@@ -1135,6 +1141,28 @@ describe Mongoid::Fields do
1135
1141
  it "includes the child fields" do
1136
1142
  expect(circle.fields.keys).to include("radius")
1137
1143
  end
1144
+
1145
+ it 'includes _type field' do
1146
+ expect(circle.fields.keys).to include("_type")
1147
+ end
1148
+ end
1149
+
1150
+ context "on new subclasses" do
1151
+ it "all subclasses get the discriminator key" do
1152
+ class DiscriminatorParent
1153
+ include Mongoid::Document
1154
+ end
1155
+
1156
+ class DiscriminatorChild1 < DiscriminatorParent
1157
+ end
1158
+
1159
+ class DiscriminatorChild2 < DiscriminatorParent
1160
+ end
1161
+
1162
+ expect(DiscriminatorParent.fields.keys).to include("_type")
1163
+ expect(DiscriminatorChild1.fields.keys).to include("_type")
1164
+ expect(DiscriminatorChild2.fields.keys).to include("_type")
1165
+ end
1138
1166
  end
1139
1167
  end
1140
1168
 
@@ -1352,4 +1380,22 @@ describe Mongoid::Fields do
1352
1380
  end
1353
1381
  end
1354
1382
  end
1383
+
1384
+ describe '_type field' do
1385
+ context 'on parent class' do
1386
+ let(:shape) { Shape.new }
1387
+
1388
+ it 'is correctly set' do
1389
+ shape.attributes['_type'].should == 'Shape'
1390
+ end
1391
+ end
1392
+
1393
+ context 'on child class' do
1394
+ let(:circle) { Circle.new }
1395
+
1396
+ it 'is correctly set' do
1397
+ circle.attributes['_type'].should == 'Circle'
1398
+ end
1399
+ end
1400
+ end
1355
1401
  end
@@ -479,6 +479,38 @@ describe Mongoid::Findable do
479
479
  end
480
480
  end
481
481
 
482
+ describe '.count' do
483
+ context 'when the collection is not empty' do
484
+ before do
485
+ Band.create!(name: "Tool")
486
+ Band.create!(name: "Photek")
487
+ end
488
+
489
+ it 'returns the currect count' do
490
+ expect(Band.count).to eq(2)
491
+ end
492
+ end
493
+ end
494
+
495
+ describe '.estimated_count' do
496
+ context 'when the collection is not empty' do
497
+ before do
498
+ Band.create(name: "Tool")
499
+ Band.create(name: "Photek")
500
+ end
501
+
502
+ it 'returns the correct count' do
503
+ expect(Band.estimated_count).to eq(2)
504
+ end
505
+ end
506
+
507
+ context 'when the collection is empty' do
508
+ it 'returns the correct count' do
509
+ expect(Band.estimated_count).to eq(0)
510
+ end
511
+ end
512
+ end
513
+
482
514
  Mongoid::Criteria::Queryable::Selectable.forwardables.each do |method|
483
515
 
484
516
  describe "##{method}" do
@@ -191,6 +191,32 @@ describe Mongoid::Indexable do
191
191
  expect(spec.options).to eq(unique: false, background: true)
192
192
  end
193
193
  end
194
+
195
+ context "when using a custom discriminator_key" do
196
+ context "when indexes have not been added" do
197
+ let(:klass) do
198
+ Class.new do
199
+ include Mongoid::Document
200
+ self.discriminator_key = "dkey"
201
+ def self.hereditary?
202
+ true
203
+ end
204
+ end
205
+ end
206
+
207
+ before do
208
+ klass.add_indexes
209
+ end
210
+
211
+ let(:spec) do
212
+ klass.index_specification(dkey: 1)
213
+ end
214
+
215
+ it "adds the _type index" do
216
+ expect(spec.options).to eq(unique: false, background: true)
217
+ end
218
+ end
219
+ end
194
220
  end
195
221
 
196
222
  describe ".index" do
@@ -383,7 +409,7 @@ describe Mongoid::Indexable do
383
409
  end
384
410
  end
385
411
 
386
- context "when providing a geospacial index" do
412
+ context "when providing a geospatial index" do
387
413
 
388
414
  before do
389
415
  klass.index({ location: "2d" }, { min: -200, max: 200, bits: 32 })
@@ -393,7 +419,7 @@ describe Mongoid::Indexable do
393
419
  klass.index_specification(location: "2d").options
394
420
  end
395
421
 
396
- it "sets the geospacial index" do
422
+ it "sets the geospatial index" do
397
423
  expect(options).to eq({ min: -200, max: 200, bits: 32 })
398
424
  end
399
425
  end
@@ -26,12 +26,39 @@ describe Mongoid::Inspectable do
26
26
  end
27
27
 
28
28
  it "displays defined fields" do
29
- expect(inspected).to include("title: \"CEO\"")
29
+ expect(inspected).to include(%q,title: "CEO",)
30
30
  end
31
31
 
32
32
  it "displays field aliases" do
33
33
  expect(inspected).to include("t(test):")
34
34
  end
35
+
36
+ it "displays the default discriminator key" do
37
+ expect(inspected).to include(%q,_type: "Person",)
38
+ end
39
+ end
40
+
41
+ context "when using a custom discriminator key" do
42
+
43
+ before do
44
+ Person.discriminator_key = "dkey"
45
+ end
46
+
47
+ after do
48
+ Person.discriminator_key = nil
49
+ end
50
+
51
+ let(:person) do
52
+ Person.new(title: "CEO")
53
+ end
54
+
55
+ let(:inspected) do
56
+ person.inspect
57
+ end
58
+
59
+ it "displays the new discriminator key" do
60
+ expect(inspected).to include(%q,dkey: "Person",)
61
+ end
35
62
  end
36
63
 
37
64
  context "when allowing dynamic fields" do
@@ -45,7 +72,7 @@ describe Mongoid::Inspectable do
45
72
  end
46
73
 
47
74
  it "includes dynamic attributes" do
48
- expect(inspected).to include("some_attribute: \"foo\"")
75
+ expect(inspected).to include(%q,some_attribute: "foo",)
49
76
  end
50
77
  end
51
78
  end
@@ -1707,8 +1707,8 @@ describe Mongoid::Interceptable do
1707
1707
  context "when loading a model multiple times" do
1708
1708
 
1709
1709
  before do
1710
- load "spec/app/models/callback_test.rb"
1711
- load "spec/app/models/callback_test.rb"
1710
+ load File.join(MODELS, "callback_test.rb")
1711
+ load File.join(MODELS, "callback_test.rb")
1712
1712
  end
1713
1713
 
1714
1714
  let(:callback) do
@@ -0,0 +1,104 @@
1
+ - name: string key - matches
2
+ document:
3
+ # Document field names in MongoDB are always strings.
4
+ '42': foo
5
+ # The paths are also always strings.
6
+ key: '42'
7
+
8
+ result:
9
+ - foo
10
+
11
+ - name: string key - does not match
12
+ document:
13
+ # Document field names in MongoDB are always strings.
14
+ '42': foo
15
+ # The paths are also always strings.
16
+ key: '4'
17
+
18
+ result: []
19
+
20
+ - name: array value - matches
21
+ document:
22
+ '42':
23
+ - foo
24
+ key: '42'
25
+
26
+ result:
27
+ - ['foo']
28
+
29
+ - name: subfield of numeric key - matches
30
+ document:
31
+ '42':
32
+ foo: bar
33
+ key: 42.foo
34
+
35
+ result:
36
+ - bar
37
+
38
+ - name: numeric key under array
39
+ document:
40
+ a:
41
+ -
42
+ '42': bar
43
+
44
+ key: a.42
45
+
46
+ result:
47
+ - bar
48
+
49
+ - name: multiple values under numeric key under array
50
+ document: &numeric-key-under-array
51
+ a:
52
+ -
53
+ '42': bar
54
+ -
55
+ '42': foo
56
+
57
+ key: a.42
58
+
59
+ result:
60
+ - bar
61
+ - foo
62
+
63
+ - name: array indexing with values under numeric key under array
64
+ document: *numeric-key-under-array
65
+
66
+ key: a.1
67
+
68
+ result:
69
+ -
70
+ '42': foo
71
+
72
+ - name: multiple values under array under numeric key
73
+ document:
74
+ a:
75
+ '42':
76
+ -
77
+ foo: bar
78
+ -
79
+ foo: baq
80
+
81
+ key: a.42.foo
82
+
83
+ result:
84
+ - bar
85
+ - baq
86
+
87
+ - name: path component interpretable as both array index and hash key
88
+ document:
89
+ a:
90
+ -
91
+ '1': bar
92
+ -
93
+ '1': foo
94
+
95
+ key: a.1
96
+
97
+ result:
98
+ # The order of these results isn't guaranteed:
99
+ # 1 interpreted as the array index:
100
+ -
101
+ '1': foo
102
+ # 1 interpreted as hash key:
103
+ - bar
104
+ - foo
@@ -0,0 +1,239 @@
1
+ - name: scalar retrieval
2
+ document:
3
+ name: foo
4
+ key: name
5
+
6
+ result:
7
+ - foo
8
+
9
+ - name: scalar leaf
10
+ document: &foo-bar-foo-bar-2
11
+ foo:
12
+ bar:
13
+ foo:
14
+ bar:
15
+ 2
16
+ key: foo.bar.foo.bar
17
+
18
+ result:
19
+ - 2
20
+
21
+ - name: scalar non-leaf
22
+ document: *foo-bar-foo-bar-2
23
+ key: foo.bar
24
+
25
+ result:
26
+ -
27
+ foo:
28
+ bar:
29
+ 2
30
+
31
+ - name: null leaf
32
+ document:
33
+ name:
34
+ key: name
35
+
36
+ result:
37
+ - ~
38
+
39
+ - name: array leaf
40
+ document: &foo-bar-foo-bar-array-2
41
+ foo:
42
+ bar:
43
+ foo:
44
+ bar:
45
+ - 2
46
+ key: foo.bar.foo.bar
47
+
48
+ result:
49
+ - [2]
50
+
51
+ - name: scalar non-leaf
52
+ document: *foo-bar-foo-bar-array-2
53
+ key: foo.bar
54
+
55
+ result:
56
+ -
57
+ foo:
58
+ bar:
59
+ - 2
60
+
61
+ - name: array non-leaf
62
+ document: &foo-bar-array-foo-bar-2
63
+ foo:
64
+ -
65
+ bar:
66
+ foo:
67
+ bar:
68
+ 2
69
+ key: foo.bar.foo.bar
70
+
71
+ result:
72
+ - 2
73
+
74
+ - name: array non-leaf with non-leaf query
75
+ document: *foo-bar-array-foo-bar-2
76
+ key: foo.bar
77
+
78
+ result:
79
+ -
80
+ foo:
81
+ bar:
82
+ 2
83
+
84
+ - name: array non-leaf with query for missing non-leaf key
85
+ document: *foo-bar-array-foo-bar-2
86
+ key: foo.missing
87
+
88
+ result: []
89
+
90
+ - name: path past end of document
91
+ document: &foo-hello-world
92
+ foo:
93
+ hello: world
94
+ key: foo.bar.foo.bar
95
+
96
+ result: []
97
+
98
+ - name: query for missing leaf key
99
+ document: *foo-hello-world
100
+ key: foo.bar
101
+
102
+ result: []
103
+
104
+ - name: numeric path component when traversing hash
105
+ document:
106
+ foo:
107
+ "10":
108
+ 42
109
+ key: "foo.10"
110
+
111
+ result:
112
+ - 42
113
+
114
+ - name: array index - hash leaf
115
+ document: &foo-one-two
116
+ foo:
117
+ - one: 1
118
+ - two: 2
119
+ bar: [3, 4]
120
+ key: foo.1.two
121
+
122
+ result:
123
+ - 2
124
+
125
+ - name: array index - hash non-leaf
126
+ document: *foo-one-two
127
+ key: foo.1
128
+
129
+ result:
130
+ -
131
+ two: 2
132
+
133
+ - name: array index - scalar leaf
134
+ document: *foo-one-two
135
+ key: bar.1
136
+
137
+ result:
138
+ - 4
139
+
140
+ - name: array index - scalar leaf - missing
141
+ document: *foo-one-two
142
+ key: bar.2
143
+
144
+ result: []
145
+
146
+ - name: array index - scalar leaf - missing with further hash subscription
147
+ document: *foo-one-two
148
+ key: bar.2.any
149
+
150
+ result: []
151
+
152
+ - name: non-sequential nested arrays - hash leaf - one value
153
+ document: &books-authors
154
+ books:
155
+ -
156
+ authors:
157
+ - name: Steve
158
+ -
159
+ authors:
160
+ - name: Boris
161
+ - name: Pasha
162
+ key: books.0.authors.name
163
+
164
+ result:
165
+ - Steve
166
+
167
+ - name: non-sequential nested arrays - hash non-leaf - one value
168
+ document: *books-authors
169
+ key: books.0
170
+
171
+ result:
172
+ -
173
+ authors:
174
+ - name: Steve
175
+
176
+ - name: non-sequential nested arrays - hash non-leaf - multiple values
177
+ document: *books-authors
178
+ key: books.1
179
+
180
+ result:
181
+ -
182
+ authors:
183
+ - name: Boris
184
+ - name: Pasha
185
+
186
+ - name: sequential nested arrays - numerically indexed leaf
187
+ document: &groups
188
+ groups:
189
+ - [1]
190
+ key: groups.0.0
191
+
192
+ result:
193
+ - 1
194
+
195
+ - name: sequential nested arrays - numerically indexed leaf - missing
196
+ document: *groups
197
+ key: groups.0.1
198
+
199
+ result: []
200
+
201
+ - name: sequential nested arrays - missing hash path through non-leaf
202
+ document: *groups
203
+ key: groups.missing
204
+
205
+ result: []
206
+
207
+ - name: sequential nested arrays - missing hash path through leaf
208
+ document: *groups
209
+ key: groups.0.missing
210
+
211
+ result: []
212
+
213
+ - name: sequential nested arrays - missing hash path past leaf
214
+ document: *groups
215
+ key: groups.0.0.missing
216
+
217
+ result: []
218
+
219
+ - name: mix of arrays and hashes in an array
220
+ document:
221
+ foo:
222
+ -
223
+ -
224
+ bar: 1
225
+ - bar: 2
226
+ key: foo.bar
227
+
228
+ result:
229
+ - 2
230
+
231
+ - name: numeric index through a primitive value not supporting subscription operator
232
+ document:
233
+ occupants:
234
+ -
235
+ age: 20
236
+ key:
237
+ occupants.0.age.0
238
+
239
+ result: []