mongoid 7.1.10 → 7.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (472) 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 +10 -3
  5. data/Rakefile +11 -30
  6. data/lib/config/locales/en.yml +37 -1
  7. data/lib/mongoid.rb +23 -1
  8. data/lib/mongoid/association/depending.rb +1 -6
  9. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  10. data/lib/mongoid/association/many.rb +3 -3
  11. data/lib/mongoid/association/proxy.rb +1 -1
  12. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  13. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  14. data/lib/mongoid/association/referenced/has_many/enumerable.rb +37 -2
  15. data/lib/mongoid/association/referenced/has_many/proxy.rb +9 -2
  16. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  17. data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -6
  18. data/lib/mongoid/atomic/modifiers.rb +1 -1
  19. data/lib/mongoid/attributes.rb +1 -8
  20. data/lib/mongoid/attributes/dynamic.rb +1 -1
  21. data/lib/mongoid/clients/factory.rb +17 -0
  22. data/lib/mongoid/composable.rb +1 -0
  23. data/lib/mongoid/config.rb +3 -0
  24. data/lib/mongoid/contextual/mongo.rb +23 -4
  25. data/lib/mongoid/copyable.rb +2 -2
  26. data/lib/mongoid/criteria.rb +58 -8
  27. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  28. data/lib/mongoid/criteria/queryable/mergeable.rb +2 -2
  29. data/lib/mongoid/criteria/queryable/selectable.rb +21 -6
  30. data/lib/mongoid/criteria/queryable/selector.rb +7 -3
  31. data/lib/mongoid/criteria/queryable/storable.rb +3 -3
  32. data/lib/mongoid/document.rb +17 -6
  33. data/lib/mongoid/errors.rb +7 -0
  34. data/lib/mongoid/errors/invalid_discriminator_key_target.rb +25 -0
  35. data/lib/mongoid/errors/invalid_elem_match_operator.rb +33 -0
  36. data/lib/mongoid/errors/invalid_estimated_count_criteria.rb +26 -0
  37. data/lib/mongoid/errors/invalid_expression_operator.rb +28 -0
  38. data/lib/mongoid/errors/invalid_field_operator.rb +33 -0
  39. data/lib/mongoid/errors/invalid_query.rb +41 -0
  40. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  41. data/lib/mongoid/factory.rb +27 -10
  42. data/lib/mongoid/fields/validators/macro.rb +22 -9
  43. data/lib/mongoid/findable.rb +50 -14
  44. data/lib/mongoid/indexable.rb +2 -2
  45. data/lib/mongoid/interceptable.rb +2 -4
  46. data/lib/mongoid/matchable.rb +1 -149
  47. data/lib/mongoid/matcher.rb +127 -0
  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/persistable/deletable.rb +1 -1
  73. data/lib/mongoid/query_cache.rb +64 -62
  74. data/lib/mongoid/reloadable.rb +2 -7
  75. data/lib/mongoid/serializable.rb +1 -1
  76. data/lib/mongoid/traversable.rb +111 -4
  77. data/lib/mongoid/validatable/associated.rb +1 -1
  78. data/lib/mongoid/validatable/presence.rb +3 -3
  79. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  80. data/lib/mongoid/version.rb +1 -1
  81. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -8
  82. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  83. data/spec/integration/app_spec.rb +88 -178
  84. data/spec/integration/associations/embedded_spec.rb +94 -0
  85. data/spec/integration/associations/has_many_spec.rb +39 -46
  86. data/spec/integration/associations/has_one_spec.rb +39 -46
  87. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  88. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  89. data/spec/integration/discriminator_key_spec.rb +354 -0
  90. data/spec/integration/discriminator_value_spec.rb +207 -0
  91. data/spec/integration/document_spec.rb +0 -21
  92. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  93. data/spec/integration/matcher_operator_data/all.yml +140 -0
  94. data/spec/integration/matcher_operator_data/and.yml +93 -0
  95. data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
  96. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  97. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  98. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  99. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  100. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  101. data/spec/integration/matcher_operator_data/gte.yml +132 -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/lte.yml +132 -0
  109. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  110. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  111. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  112. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  113. data/spec/integration/matcher_operator_data/not.yml +196 -0
  114. data/spec/integration/matcher_operator_data/or.yml +137 -0
  115. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  116. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  117. data/spec/integration/matcher_operator_data/size.yml +174 -0
  118. data/spec/integration/matcher_operator_spec.rb +100 -0
  119. data/spec/integration/matcher_spec.rb +189 -0
  120. data/spec/integration/server_query_spec.rb +142 -0
  121. data/spec/lite_spec_helper.rb +7 -7
  122. data/spec/mongoid/association/depending_spec.rb +78 -26
  123. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +0 -50
  124. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +37 -17
  125. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  126. data/spec/mongoid/association/embedded/embeds_one_models.rb +1 -0
  127. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +0 -17
  128. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
  129. data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
  130. data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
  131. data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
  132. data/spec/mongoid/atomic/paths_spec.rb +0 -41
  133. data/spec/mongoid/atomic_spec.rb +23 -0
  134. data/spec/mongoid/attributes/nested_spec.rb +1 -1
  135. data/spec/mongoid/attributes_spec.rb +0 -241
  136. data/spec/mongoid/clients/factory_spec.rb +37 -0
  137. data/spec/mongoid/clients/options_spec.rb +0 -2
  138. data/spec/mongoid/clients/sessions_spec.rb +1 -6
  139. data/spec/mongoid/config_spec.rb +28 -0
  140. data/spec/mongoid/contextual/atomic_spec.rb +4 -17
  141. data/spec/mongoid/contextual/mongo_spec.rb +70 -16
  142. data/spec/mongoid/copyable_spec.rb +153 -1
  143. data/spec/mongoid/copyable_spec_models.rb +14 -0
  144. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -36
  145. data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
  146. data/spec/mongoid/criteria_spec.rb +204 -43
  147. data/spec/mongoid/document_query_spec.rb +0 -51
  148. data/spec/mongoid/document_spec.rb +89 -15
  149. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  150. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
  151. data/spec/mongoid/factory_spec.rb +261 -28
  152. data/spec/mongoid/fields_spec.rb +48 -2
  153. data/spec/mongoid/findable_spec.rb +32 -0
  154. data/spec/mongoid/indexable_spec.rb +28 -2
  155. data/spec/mongoid/inspectable_spec.rb +29 -2
  156. data/spec/mongoid/interceptable_spec.rb +2 -2
  157. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
  158. data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
  159. data/spec/mongoid/persistable/creatable_spec.rb +108 -25
  160. data/spec/mongoid/persistable/deletable_spec.rb +86 -0
  161. data/spec/mongoid/persistable/savable_spec.rb +174 -16
  162. data/spec/mongoid/persistable/settable_spec.rb +0 -30
  163. data/spec/mongoid/persistable_spec.rb +2 -2
  164. data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
  165. data/spec/mongoid/query_cache_spec.rb +442 -41
  166. data/spec/mongoid/reloadable_spec.rb +72 -0
  167. data/spec/mongoid/serializable_spec.rb +21 -3
  168. data/spec/mongoid/traversable_spec.rb +1100 -0
  169. data/spec/spec_helper.rb +3 -5
  170. data/spec/support/child_process_helper.rb +79 -0
  171. data/spec/support/constraints.rb +250 -0
  172. data/spec/support/helpers.rb +1 -1
  173. data/spec/support/lite_constraints.rb +22 -0
  174. data/spec/{app → support}/models/account.rb +0 -0
  175. data/spec/{app → support}/models/acolyte.rb +0 -0
  176. data/spec/{app → support}/models/actor.rb +1 -1
  177. data/spec/{app → support}/models/actress.rb +0 -0
  178. data/spec/{app → support}/models/address.rb +0 -4
  179. data/spec/{app → support}/models/address_component.rb +0 -0
  180. data/spec/{app → support}/models/address_number.rb +0 -0
  181. data/spec/{app → support}/models/agency.rb +0 -0
  182. data/spec/{app → support}/models/agent.rb +0 -0
  183. data/spec/{app → support}/models/album.rb +0 -0
  184. data/spec/{app → support}/models/alert.rb +0 -0
  185. data/spec/{app → support}/models/animal.rb +0 -0
  186. data/spec/{app → support}/models/answer.rb +0 -0
  187. data/spec/{app → support}/models/appointment.rb +0 -0
  188. data/spec/support/models/armrest.rb +10 -0
  189. data/spec/{app → support}/models/array_field.rb +0 -0
  190. data/spec/{app → support}/models/article.rb +0 -0
  191. data/spec/{app → support}/models/artist.rb +0 -0
  192. data/spec/{app → support}/models/artwork.rb +0 -0
  193. data/spec/{app → support}/models/audio.rb +0 -0
  194. data/spec/{app → support}/models/augmentation.rb +0 -0
  195. data/spec/{app → support}/models/author.rb +0 -0
  196. data/spec/{app → support}/models/baby.rb +0 -0
  197. data/spec/{app → support}/models/band.rb +0 -0
  198. data/spec/{app → support}/models/bar.rb +0 -0
  199. data/spec/{app → support}/models/basic.rb +0 -0
  200. data/spec/{app → support}/models/bed.rb +0 -0
  201. data/spec/{app → support}/models/big_palette.rb +0 -0
  202. data/spec/{app → support}/models/birthday.rb +0 -0
  203. data/spec/{app → support}/models/bomb.rb +0 -0
  204. data/spec/{app → support}/models/book.rb +0 -0
  205. data/spec/{app → support}/models/breed.rb +0 -0
  206. data/spec/{app → support}/models/browser.rb +1 -1
  207. data/spec/{app → support}/models/building.rb +0 -0
  208. data/spec/{app → support}/models/building_address.rb +0 -0
  209. data/spec/{app → support}/models/bus.rb +0 -0
  210. data/spec/{app → support}/models/business.rb +0 -0
  211. data/spec/{app → support}/models/callback_test.rb +0 -0
  212. data/spec/{app → support}/models/canvas.rb +1 -1
  213. data/spec/{app → support}/models/car.rb +0 -0
  214. data/spec/{app → support}/models/cat.rb +0 -0
  215. data/spec/{app → support}/models/category.rb +0 -0
  216. data/spec/{app → support}/models/child.rb +0 -0
  217. data/spec/{app → support}/models/child_doc.rb +0 -0
  218. data/spec/{app → support}/models/church.rb +0 -0
  219. data/spec/{app → support}/models/circle.rb +0 -0
  220. data/spec/{app → support}/models/circuit.rb +0 -0
  221. data/spec/{app → support}/models/circus.rb +0 -0
  222. data/spec/{app → support}/models/code.rb +0 -0
  223. data/spec/{app → support}/models/coding.rb +1 -1
  224. data/spec/{app → support}/models/coding/pull_request.rb +0 -0
  225. data/spec/{app → support}/models/comment.rb +0 -0
  226. data/spec/{app → support}/models/company.rb +0 -0
  227. data/spec/{app → support}/models/consumption_period.rb +0 -0
  228. data/spec/{app → support}/models/contextable_item.rb +0 -0
  229. data/spec/{app → support}/models/contractor.rb +0 -0
  230. data/spec/{app → support}/models/cookie.rb +0 -0
  231. data/spec/{app → support}/models/country_code.rb +0 -0
  232. data/spec/{app → support}/models/courier_job.rb +0 -0
  233. data/spec/support/models/crate.rb +13 -0
  234. data/spec/support/models/deed.rb +8 -0
  235. data/spec/{app → support}/models/definition.rb +0 -0
  236. data/spec/{app → support}/models/delegating_patient.rb +0 -0
  237. data/spec/{app → support}/models/description.rb +0 -0
  238. data/spec/{app → support}/models/dictionary.rb +0 -6
  239. data/spec/{app → support}/models/division.rb +0 -0
  240. data/spec/{app → support}/models/doctor.rb +0 -0
  241. data/spec/{app → support}/models/dog.rb +0 -0
  242. data/spec/{app → support}/models/dokument.rb +0 -0
  243. data/spec/{app → support}/models/draft.rb +0 -0
  244. data/spec/{app → support}/models/dragon.rb +0 -0
  245. data/spec/{app → support}/models/driver.rb +1 -1
  246. data/spec/{app → support}/models/drug.rb +0 -0
  247. data/spec/{app → support}/models/dungeon.rb +0 -0
  248. data/spec/{app → support}/models/edit.rb +0 -0
  249. data/spec/{app → support}/models/email.rb +0 -0
  250. data/spec/{app → support}/models/employer.rb +0 -0
  251. data/spec/{app → support}/models/entry.rb +0 -0
  252. data/spec/{app → support}/models/eraser.rb +0 -0
  253. data/spec/{app → support}/models/even.rb +0 -0
  254. data/spec/{app → support}/models/event.rb +0 -0
  255. data/spec/{app → support}/models/exhibition.rb +0 -0
  256. data/spec/{app → support}/models/exhibitor.rb +0 -0
  257. data/spec/{app → support}/models/explosion.rb +0 -0
  258. data/spec/{app → support}/models/eye.rb +0 -0
  259. data/spec/{app → support}/models/eye_bowl.rb +0 -0
  260. data/spec/{app → support}/models/face.rb +0 -0
  261. data/spec/{app → support}/models/favorite.rb +0 -0
  262. data/spec/{app → support}/models/filesystem.rb +0 -0
  263. data/spec/{app → support}/models/fire_hydrant.rb +0 -0
  264. data/spec/{app → support}/models/firefox.rb +0 -0
  265. data/spec/{app → support}/models/fish.rb +0 -0
  266. data/spec/{app → support}/models/folder.rb +0 -0
  267. data/spec/{app → support}/models/folder_item.rb +0 -0
  268. data/spec/{app → support}/models/fruits.rb +0 -0
  269. data/spec/{app → support}/models/game.rb +0 -0
  270. data/spec/{app → support}/models/ghost.rb +0 -0
  271. data/spec/support/models/guitar.rb +5 -0
  272. data/spec/{app → support}/models/home.rb +0 -0
  273. data/spec/{app → support}/models/house.rb +0 -0
  274. data/spec/{app → support}/models/html_writer.rb +0 -0
  275. data/spec/{app → support}/models/id_key.rb +0 -0
  276. data/spec/support/models/idnodef.rb +8 -0
  277. data/spec/{app → support}/models/image.rb +0 -0
  278. data/spec/{app → support}/models/implant.rb +0 -0
  279. data/spec/support/models/instrument.rb +9 -0
  280. data/spec/{app → support}/models/item.rb +1 -1
  281. data/spec/{app → support}/models/jar.rb +0 -0
  282. data/spec/{app → support}/models/kaleidoscope.rb +0 -0
  283. data/spec/{app → support}/models/kangaroo.rb +0 -0
  284. data/spec/{app → support}/models/label.rb +0 -0
  285. data/spec/{app → support}/models/language.rb +0 -0
  286. data/spec/{app → support}/models/lat_lng.rb +0 -0
  287. data/spec/{app → support}/models/league.rb +0 -0
  288. data/spec/{app → support}/models/learner.rb +0 -0
  289. data/spec/{app → support}/models/line_item.rb +0 -0
  290. data/spec/{app → support}/models/location.rb +0 -0
  291. data/spec/{app → support}/models/login.rb +0 -0
  292. data/spec/{app → support}/models/manufacturer.rb +0 -0
  293. data/spec/{app → support}/models/meat.rb +0 -0
  294. data/spec/{app → support}/models/membership.rb +0 -0
  295. data/spec/{app → support}/models/message.rb +0 -0
  296. data/spec/{app → support}/models/minim.rb +0 -0
  297. data/spec/{app → support}/models/mixed_drink.rb +0 -0
  298. data/spec/support/models/mop.rb +16 -0
  299. data/spec/{app → support}/models/movie.rb +0 -0
  300. data/spec/{app → support}/models/my_hash.rb +0 -0
  301. data/spec/{app → support}/models/name.rb +0 -0
  302. data/spec/{app → support}/models/name_only.rb +0 -0
  303. data/spec/{app → support}/models/node.rb +0 -0
  304. data/spec/{app → support}/models/note.rb +0 -0
  305. data/spec/{app → support}/models/odd.rb +0 -0
  306. data/spec/{app → support}/models/ordered_post.rb +0 -0
  307. data/spec/{app → support}/models/ordered_preference.rb +0 -0
  308. data/spec/{app → support}/models/oscar.rb +0 -0
  309. data/spec/{app → support}/models/other_owner_object.rb +0 -0
  310. data/spec/{app → support}/models/override.rb +0 -0
  311. data/spec/{app → support}/models/ownable.rb +0 -0
  312. data/spec/{app → support}/models/owner.rb +2 -0
  313. data/spec/{app → support}/models/pack.rb +0 -0
  314. data/spec/{app → support}/models/page.rb +0 -0
  315. data/spec/{app → support}/models/page_question.rb +0 -0
  316. data/spec/{app → support}/models/palette.rb +1 -1
  317. data/spec/{app → support}/models/parent.rb +0 -0
  318. data/spec/{app → support}/models/parent_doc.rb +0 -0
  319. data/spec/{app → support}/models/passport.rb +0 -0
  320. data/spec/{app → support}/models/patient.rb +0 -0
  321. data/spec/{app → support}/models/pdf_writer.rb +0 -0
  322. data/spec/{app → support}/models/pencil.rb +0 -0
  323. data/spec/{app → support}/models/person.rb +1 -12
  324. data/spec/{app → support}/models/pet.rb +0 -0
  325. data/spec/{app → support}/models/pet_owner.rb +0 -0
  326. data/spec/{app → support}/models/phone.rb +0 -0
  327. data/spec/support/models/piano.rb +5 -0
  328. data/spec/{app → support}/models/pizza.rb +0 -0
  329. data/spec/{app → support}/models/player.rb +0 -0
  330. data/spec/{app → support}/models/post.rb +0 -0
  331. data/spec/{app → support}/models/post_genre.rb +0 -0
  332. data/spec/{app → support}/models/powerup.rb +0 -0
  333. data/spec/{app → support}/models/preference.rb +0 -0
  334. data/spec/{app → support}/models/princess.rb +0 -0
  335. data/spec/{app → support}/models/product.rb +0 -0
  336. data/spec/support/models/profile.rb +18 -0
  337. data/spec/{app → support}/models/pronunciation.rb +0 -0
  338. data/spec/{app → support}/models/pub.rb +0 -0
  339. data/spec/support/models/publication.rb +5 -0
  340. data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
  341. data/spec/{app → support}/models/publication/review.rb +0 -0
  342. data/spec/{app → support}/models/purchase.rb +0 -0
  343. data/spec/{app → support}/models/question.rb +0 -0
  344. data/spec/{app → support}/models/quiz.rb +0 -0
  345. data/spec/{app → support}/models/rating.rb +0 -0
  346. data/spec/{app → support}/models/record.rb +0 -0
  347. data/spec/{app → support}/models/registry.rb +0 -0
  348. data/spec/{app → support}/models/role.rb +0 -0
  349. data/spec/{app → support}/models/root_category.rb +0 -0
  350. data/spec/{app → support}/models/sandwich.rb +0 -0
  351. data/spec/{app → support}/models/scheduler.rb +0 -0
  352. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
  353. data/spec/support/models/seat.rb +25 -0
  354. data/spec/{app → support}/models/seo.rb +0 -0
  355. data/spec/{app → support}/models/series.rb +0 -1
  356. data/spec/{app → support}/models/server.rb +0 -0
  357. data/spec/{app → support}/models/service.rb +0 -0
  358. data/spec/{app → support}/models/shape.rb +2 -2
  359. data/spec/{app → support}/models/shelf.rb +0 -0
  360. data/spec/{app → support}/models/shipment_address.rb +0 -0
  361. data/spec/{app → support}/models/shipping_container.rb +0 -0
  362. data/spec/{app → support}/models/shipping_pack.rb +0 -0
  363. data/spec/{app → support}/models/shop.rb +0 -0
  364. data/spec/{app → support}/models/short_agent.rb +0 -0
  365. data/spec/{app → support}/models/short_quiz.rb +0 -0
  366. data/spec/{app → support}/models/simple.rb +0 -0
  367. data/spec/{app → support}/models/slave.rb +0 -0
  368. data/spec/{app → support}/models/song.rb +0 -0
  369. data/spec/{app → support}/models/sound.rb +0 -0
  370. data/spec/{app → support}/models/square.rb +0 -0
  371. data/spec/{app → support}/models/staff.rb +0 -0
  372. data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
  373. data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
  374. data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  375. data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  376. data/spec/{app → support}/models/strategy.rb +0 -0
  377. data/spec/{app → support}/models/sub_item.rb +0 -0
  378. data/spec/{app → support}/models/subscription.rb +0 -0
  379. data/spec/{app → support}/models/survey.rb +0 -0
  380. data/spec/{app → support}/models/symptom.rb +0 -0
  381. data/spec/support/models/system_role.rb +7 -0
  382. data/spec/{app → support}/models/tag.rb +0 -0
  383. data/spec/{app → support}/models/target.rb +0 -0
  384. data/spec/{app → support}/models/template.rb +0 -0
  385. data/spec/{app → support}/models/thing.rb +0 -0
  386. data/spec/{app → support}/models/title.rb +0 -0
  387. data/spec/{app → support}/models/tool.rb +2 -2
  388. data/spec/{app → support}/models/topping.rb +0 -0
  389. data/spec/support/models/toy.rb +10 -0
  390. data/spec/{app → support}/models/track.rb +0 -0
  391. data/spec/{app → support}/models/translation.rb +0 -0
  392. data/spec/{app → support}/models/tree.rb +0 -0
  393. data/spec/{app → support}/models/truck.rb +2 -0
  394. data/spec/{app → support}/models/updatable.rb +0 -0
  395. data/spec/{app → support}/models/user.rb +0 -0
  396. data/spec/{app → support}/models/user_account.rb +0 -0
  397. data/spec/{app → support}/models/validation_callback.rb +0 -0
  398. data/spec/{app → support}/models/vehicle.rb +7 -2
  399. data/spec/{app → support}/models/version.rb +0 -0
  400. data/spec/{app → support}/models/vertex.rb +0 -0
  401. data/spec/{app → support}/models/vet_visit.rb +0 -0
  402. data/spec/{app → support}/models/video.rb +0 -0
  403. data/spec/{app → support}/models/video_game.rb +0 -0
  404. data/spec/{app → support}/models/weapon.rb +0 -0
  405. data/spec/{app → support}/models/wiki_page.rb +0 -1
  406. data/spec/{app → support}/models/word.rb +0 -0
  407. data/spec/{app → support}/models/word_origin.rb +0 -0
  408. data/spec/{app → support}/models/writer.rb +2 -2
  409. data/spec/support/spec_config.rb +1 -9
  410. data/spec/support/spec_organizer.rb +130 -0
  411. metadata +841 -828
  412. metadata.gz.sig +0 -0
  413. data/lib/mongoid/matchable/all.rb +0 -30
  414. data/lib/mongoid/matchable/and.rb +0 -32
  415. data/lib/mongoid/matchable/default.rb +0 -121
  416. data/lib/mongoid/matchable/elem_match.rb +0 -36
  417. data/lib/mongoid/matchable/eq.rb +0 -23
  418. data/lib/mongoid/matchable/exists.rb +0 -25
  419. data/lib/mongoid/matchable/gt.rb +0 -25
  420. data/lib/mongoid/matchable/gte.rb +0 -25
  421. data/lib/mongoid/matchable/in.rb +0 -26
  422. data/lib/mongoid/matchable/lt.rb +0 -25
  423. data/lib/mongoid/matchable/lte.rb +0 -25
  424. data/lib/mongoid/matchable/ne.rb +0 -23
  425. data/lib/mongoid/matchable/nin.rb +0 -24
  426. data/lib/mongoid/matchable/nor.rb +0 -38
  427. data/lib/mongoid/matchable/or.rb +0 -35
  428. data/lib/mongoid/matchable/regexp.rb +0 -30
  429. data/lib/mongoid/matchable/size.rb +0 -23
  430. data/spec/app/models/customer.rb +0 -11
  431. data/spec/app/models/customer_address.rb +0 -12
  432. data/spec/app/models/publication.rb +0 -5
  433. data/spec/integration/associations/embeds_many_spec.rb +0 -24
  434. data/spec/integration/associations/embeds_one_spec.rb +0 -24
  435. data/spec/integration/callbacks_models.rb +0 -49
  436. data/spec/integration/callbacks_spec.rb +0 -216
  437. data/spec/mongoid/matchable/all_spec.rb +0 -34
  438. data/spec/mongoid/matchable/and_spec.rb +0 -190
  439. data/spec/mongoid/matchable/default_spec.rb +0 -140
  440. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  441. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  442. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  443. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  444. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  445. data/spec/mongoid/matchable/in_spec.rb +0 -52
  446. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  447. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  448. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  449. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  450. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  451. data/spec/mongoid/matchable/or_spec.rb +0 -134
  452. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  453. data/spec/mongoid/matchable/size_spec.rb +0 -28
  454. data/spec/mongoid/matchable_spec.rb +0 -856
  455. data/spec/shared/LICENSE +0 -20
  456. data/spec/shared/bin/get-mongodb-download-url +0 -17
  457. data/spec/shared/bin/s3-copy +0 -45
  458. data/spec/shared/bin/s3-upload +0 -69
  459. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  460. data/spec/shared/lib/mrss/cluster_config.rb +0 -226
  461. data/spec/shared/lib/mrss/constraints.rb +0 -368
  462. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  463. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  464. data/spec/shared/lib/mrss/server_version_registry.rb +0 -115
  465. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  466. data/spec/shared/lib/mrss/utils.rb +0 -15
  467. data/spec/shared/share/Dockerfile.erb +0 -322
  468. data/spec/shared/share/haproxy-1.conf +0 -16
  469. data/spec/shared/share/haproxy-2.conf +0 -17
  470. data/spec/shared/shlib/distro.sh +0 -73
  471. data/spec/shared/shlib/server.sh +0 -317
  472. data/spec/shared/shlib/set_env.sh +0 -131
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -80,7 +80,6 @@ class Person
80
80
  end
81
81
  embeds_one :quiz, validate: false
82
82
 
83
- # Must have dependent: :destroy
84
83
  has_one :game, dependent: :destroy, validate: false do
85
84
  def extension
86
85
  "Testing"
@@ -106,7 +105,6 @@ class Person
106
105
  has_and_belongs_to_many :ordered_preferences, order: :value.desc, validate: false
107
106
 
108
107
  has_many :drugs, validate: false
109
- # Must not have dependent: :destroy
110
108
  has_one :account, validate: false
111
109
  has_one :cat, dependent: :nullify, validate: false, primary_key: :username
112
110
  has_one :book, autobuild: true, validate: false
@@ -136,10 +134,6 @@ class Person
136
134
  scope :without_ssn, ->{ without(:ssn) }
137
135
  scope :search, ->(query){ any_of({ title: query }) }
138
136
 
139
- def self.older_than(age:)
140
- where(:age.gt => age)
141
- end
142
-
143
137
  def score_with_rescoring=(score)
144
138
  @rescored = score.to_i + 20
145
139
  self.score_without_rescoring = score
@@ -210,15 +204,10 @@ class Person
210
204
  self.map_with_default["key"] = value
211
205
  end
212
206
 
213
- def set_personal_data(ssn:, age:)
214
- self.ssn = ssn
215
- self.age = age
216
- end
217
-
218
207
  reset_callbacks(:validate)
219
208
  reset_callbacks(:create)
220
209
  reset_callbacks(:save)
221
210
  reset_callbacks(:destroy)
222
211
  end
223
212
 
224
- require "app/models/doctor"
213
+ require "support/models/doctor"
File without changes
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class Piano < Instrument
5
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class Profile
5
+ include Mongoid::Document
6
+ field :name, type: String
7
+
8
+ embeds_one :profile_image
9
+
10
+ shard_key :name
11
+ end
12
+
13
+ class ProfileImage
14
+ include Mongoid::Document
15
+ field :url, type: String
16
+
17
+ embedded_in :profile
18
+ end
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'support/models/publication/encyclopedia'
5
+ require 'support/models/publication/review'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
- class Profile
4
+ class Scribe
5
5
  include Mongoid::Document
6
6
  field :name, type: String
7
- shard_key :name
7
+ embedded_in :owner
8
8
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class Seat
5
+ include Mongoid::Document
6
+
7
+ embedded_in :vehicle
8
+
9
+ field :rating, type: Integer
10
+
11
+ embeds_many :armrests
12
+
13
+ before_create :set_rating
14
+ before_update :update_rating
15
+
16
+ private
17
+
18
+ def set_rating
19
+ self.rating ||= 100
20
+ end
21
+
22
+ def update_rating
23
+ self.rating += 1
24
+ end
25
+ end
File without changes
@@ -3,6 +3,5 @@
3
3
 
4
4
  class Series
5
5
  include Mongoid::Document
6
- # Must not have dependent: :destroy
7
6
  has_many :books
8
7
  end
File without changes
File without changes
@@ -11,5 +11,5 @@ class Shape
11
11
  def render; end
12
12
  end
13
13
 
14
- require "app/models/circle"
15
- require "app/models/square"
14
+ require "support/models/circle"
15
+ require "support/models/square"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,7 @@
1
+ class SystemRole
2
+ include Mongoid::Document
3
+
4
+ # NOTE: this model is for test purposes only. It is not recommended that you
5
+ # store Mongoid documents in system collections.
6
+ store_in collection: "system.roles", database: "admin"
7
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -7,5 +7,5 @@ class Tool
7
7
  accepts_nested_attributes_for :palette
8
8
  end
9
9
 
10
- require "app/models/eraser"
11
- require "app/models/pencil"
10
+ require "support/models/eraser"
11
+ require "support/models/pencil"
File without changes
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ class Toy
5
+ include Mongoid::Document
6
+
7
+ embedded_in :crate
8
+
9
+ field :name
10
+ end
File without changes
File without changes
File without changes
@@ -3,4 +3,6 @@
3
3
 
4
4
  class Truck < Vehicle
5
5
  embeds_one :bed
6
+
7
+ field :capacity, type: Integer
6
8
  end
File without changes
File without changes
File without changes
File without changes
@@ -3,12 +3,17 @@
3
3
 
4
4
  class Vehicle
5
5
  include Mongoid::Document
6
+
6
7
  belongs_to :shipping_container
7
8
  belongs_to :driver
8
9
 
10
+ embeds_many :crates
11
+ embeds_many :seats, cascade_callbacks: true
12
+
9
13
  accepts_nested_attributes_for :driver
10
14
  accepts_nested_attributes_for :shipping_container
15
+ accepts_nested_attributes_for :crates
11
16
  end
12
17
 
13
- require "app/models/car"
14
- require "app/models/truck"
18
+ require "support/models/car"
19
+ require "support/models/truck"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,7 +11,6 @@ class WikiPage
11
11
  field :description, type: String, localize: true
12
12
 
13
13
  embeds_many :edits, validate: false
14
- # Must have dependent: :destroy
15
14
  has_many :comments, dependent: :destroy, validate: false
16
15
  has_many :child_pages, class_name: "WikiPage", dependent: :delete_all, inverse_of: :parent_pages
17
16
  belongs_to :parent_pages, class_name: "WikiPage", inverse_of: :child_pages
File without changes
File without changes
@@ -10,5 +10,5 @@ class Writer
10
10
  def write; end
11
11
  end
12
12
 
13
- require "app/models/pdf_writer"
14
- require "app/models/html_writer"
13
+ require "support/models/pdf_writer"
14
+ require "support/models/html_writer"
@@ -20,7 +20,7 @@ class SpecConfig
20
20
  if @uri
21
21
  @uri.servers
22
22
  else
23
- ['127.0.0.1']
23
+ ['127.0.0.1:27017']
24
24
  end
25
25
  end
26
26
 
@@ -47,12 +47,4 @@ class SpecConfig
47
47
  def ci?
48
48
  !!ENV['CI']
49
49
  end
50
-
51
- def rails_version
52
- v = ENV['RAILS']
53
- if v == ''
54
- v = nil
55
- end
56
- v || '6.1'
57
- end
58
50
  end
@@ -0,0 +1,130 @@
1
+ require 'support/child_process_helper'
2
+ require 'json'
3
+
4
+ autoload :FileUtils, 'fileutils'
5
+ autoload :Find, 'find'
6
+
7
+ # Organizes and runs all of the tests in the test suite in batches.
8
+ #
9
+ # Organizing the tests in batches serves two purposes:
10
+ #
11
+ # 1. This allows running unit tests before integration tests, therefore
12
+ # in theory revealing failures quicker on average.
13
+ # 2. This allows running some tests that have high intermittent failure rate
14
+ # in their own test process.
15
+ #
16
+ # This class aggregates RSpec results after the test runs.
17
+ class SpecOrganizer
18
+ CLASSIFIERS = [
19
+ [%r,^mongoid/attribute,, :attributes],
20
+ [%r,^mongoid/association/[or],, :associations_referenced],
21
+ [%r,^mongoid/association,, :associations],
22
+ [%r,^mongoid,, :unit],
23
+ [%r,^integration,, :integration],
24
+ [%r,^rails,, :rails],
25
+ ]
26
+
27
+ RUN_PRIORITY = %i(
28
+ unit attributes associations_referenced associations
29
+ integration rails
30
+ )
31
+
32
+ SPEC_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
33
+ ROOT = File.expand_path(File.join(SPEC_ROOT, '..'))
34
+ RSPEC_JSON_PATH = File.join(ROOT, 'tmp/rspec.json')
35
+ RSPEC_ALL_JSON_PATH = File.join(ROOT, 'tmp/rspec-all.json')
36
+
37
+ def run
38
+ FileUtils.rm_f(RSPEC_ALL_JSON_PATH)
39
+
40
+ buckets = {}
41
+ Find.find(SPEC_ROOT) do |path|
42
+ next unless File.file?(path)
43
+ next unless path =~ /_spec\.rb\z/
44
+ rel_path = path[(SPEC_ROOT.length + 1)..path.length]
45
+
46
+ found = false
47
+ CLASSIFIERS.each do |(regexp, category)|
48
+ if regexp =~ rel_path
49
+ buckets[category] ||= []
50
+ buckets[category] << rel_path
51
+ found = true
52
+ break
53
+ end
54
+ end
55
+
56
+ unless found
57
+ buckets[nil] ||= []
58
+ buckets[nil] << rel_path
59
+ end
60
+ end
61
+
62
+ failed = []
63
+
64
+ RUN_PRIORITY.each do |category|
65
+ if files = buckets.delete(category)
66
+ unless run_files(category, files)
67
+ failed << category
68
+ end
69
+ end
70
+ end
71
+ if files = buckets.delete(nil)
72
+ unless run_files('remaining', files)
73
+ failed << 'remaining'
74
+ end
75
+ end
76
+
77
+ unless buckets.empty?
78
+ raise "Some buckets were not executed: #{buckets.keys.map(&:to_s).join(', ')}"
79
+ end
80
+
81
+ if failed.any?
82
+ raise "The following buckets failed: #{failed.map(&:to_s).join(', ')}"
83
+ end
84
+ end
85
+
86
+ def run_files(category, paths)
87
+ paths = paths.map do |path|
88
+ File.join('spec', path)
89
+ end
90
+
91
+ puts "Running #{category.to_s.gsub('_', ' ')} tests"
92
+ FileUtils.rm_f(RSPEC_JSON_PATH)
93
+ cmd = %w(rspec) + paths
94
+
95
+ begin
96
+ ChildProcessHelper.check_call(cmd)
97
+ ensure
98
+ if File.exist?(RSPEC_JSON_PATH)
99
+ if File.exist?(RSPEC_ALL_JSON_PATH)
100
+ merge_rspec_results
101
+ else
102
+ FileUtils.cp(RSPEC_JSON_PATH, RSPEC_ALL_JSON_PATH)
103
+ end
104
+ end
105
+ end
106
+
107
+ true
108
+ rescue ChildProcessHelper::SpawnError
109
+ false
110
+ end
111
+
112
+ def merge_rspec_results
113
+ all = JSON.parse(File.read(RSPEC_ALL_JSON_PATH))
114
+ new = JSON.parse(File.read(RSPEC_JSON_PATH))
115
+ all['examples'] += new.delete('examples')
116
+ new.delete('summary').each do |k, v|
117
+ all['summary'][k] += v
118
+ end
119
+ new.delete('version')
120
+ new.delete('summary_line')
121
+ unless new.empty?
122
+ raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
123
+ end
124
+ # We do not merge summary lines, delete them from aggregated results
125
+ all.delete('summary_line')
126
+ File.open(RSPEC_ALL_JSON_PATH, 'w') do |f|
127
+ f << JSON.dump(all)
128
+ end
129
+ end
130
+ end