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
@@ -0,0 +1,270 @@
1
+ # This file contains functions pertaining to downloading, starting and
2
+ # configuring a MongoDB server.
3
+
4
+ set_fcv() {
5
+ if test -n "$FCV"; then
6
+ mongo --eval 'assert.commandWorked(db.adminCommand( { setFeatureCompatibilityVersion: "'"$FCV"'" } ));' "$MONGODB_URI"
7
+ mongo --quiet --eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )' |grep "version.*$FCV"
8
+ fi
9
+ }
10
+
11
+ add_uri_option() {
12
+ opt=$1
13
+
14
+ if ! echo $MONGODB_URI |sed -e s,//,, |grep -q /; then
15
+ MONGODB_URI="$MONGODB_URI/"
16
+ fi
17
+
18
+ if ! echo $MONGODB_URI |grep -q '?'; then
19
+ MONGODB_URI="$MONGODB_URI?"
20
+ fi
21
+
22
+ MONGODB_URI="$MONGODB_URI&$opt"
23
+ }
24
+
25
+ prepare_server() {
26
+ arch=$1
27
+
28
+ if test -n "$USE_OPT_MONGODB"; then
29
+ export BINDIR=/opt/mongodb/bin
30
+ export PATH=$BINDIR:$PATH
31
+ return
32
+ fi
33
+
34
+ if test "$MONGODB_VERSION" = latest; then
35
+ # Test on the most recent published 4.3 release.
36
+ # https://jira.mongodb.org/browse/RUBY-1724
37
+ echo 'Using "latest" server is not currently implemented' 1>&2
38
+ exit 1
39
+ else
40
+ download_version="$MONGODB_VERSION"
41
+ fi
42
+
43
+ url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
44
+
45
+ prepare_server_from_url $url
46
+ }
47
+
48
+ prepare_server_from_url() {
49
+ url=$1
50
+
51
+ mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb
52
+ mkdir -p "$mongodb_dir"
53
+ curl --retry 3 $url |tar xz -C "$mongodb_dir" -f -
54
+ BINDIR="$mongodb_dir"/`basename $url |sed -e s/.tgz//`/bin
55
+ export PATH="$BINDIR":$PATH
56
+ }
57
+
58
+ install_mlaunch_virtualenv() {
59
+ python2 -V || true
60
+ # Current virtualenv fails with
61
+ # https://github.com/pypa/virtualenv/issues/1630
62
+ python -m pip install 'virtualenv<20' --user
63
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
64
+ python2 -m virtualenv -p python2 $venvpath
65
+ . $venvpath/bin/activate
66
+ pip install 'mtools-legacy[mlaunch]'
67
+ }
68
+
69
+ install_mlaunch_pip() {
70
+ if test -n "$USE_OPT_MONGODB" && which mlaunch >/dev/null 2>&1; then
71
+ # mlaunch is preinstalled in the docker image, do not install it here
72
+ return
73
+ fi
74
+
75
+ python -V || true
76
+ python3 -V || true
77
+ pythonpath="$MONGO_ORCHESTRATION_HOME"/python
78
+ pip install -t "$pythonpath" 'mtools-legacy[mlaunch]'
79
+ export PATH="$pythonpath/bin":$PATH
80
+ export PYTHONPATH="$pythonpath"
81
+ }
82
+
83
+ install_mlaunch_git() {
84
+ repo=$1
85
+ branch=$2
86
+ python -V || true
87
+ python3 -V || true
88
+ which pip || true
89
+ which pip3 || true
90
+
91
+ if false; then
92
+ if ! virtualenv --version; then
93
+ python3 `which pip3` install --user virtualenv
94
+ export PATH=$HOME/.local/bin:$PATH
95
+ virtualenv --version
96
+ fi
97
+
98
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
99
+ virtualenv -p python3 $venvpath
100
+ . $venvpath/bin/activate
101
+
102
+ pip3 install psutil pymongo
103
+
104
+ git clone $repo mlaunch
105
+ cd mlaunch
106
+ git checkout origin/$branch
107
+ python3 setup.py install
108
+ cd ..
109
+ else
110
+ pip install --user 'virtualenv==13'
111
+ export PATH=$HOME/.local/bin:$PATH
112
+
113
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
114
+ virtualenv $venvpath
115
+ . $venvpath/bin/activate
116
+
117
+ pip install psutil pymongo
118
+
119
+ git clone $repo mlaunch
120
+ (cd mlaunch &&
121
+ git checkout origin/$branch &&
122
+ python setup.py install
123
+ )
124
+ fi
125
+ }
126
+
127
+ calculate_server_args() {
128
+ local mongo_version=`echo $MONGODB_VERSION |tr -d .`
129
+ if test $mongo_version = latest; then
130
+ mongo_version=44
131
+ fi
132
+
133
+ local args="--setParameter enableTestCommands=1"
134
+ # diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
135
+ # and mlaunch does not support specifying mongod-only parameters:
136
+ # https://github.com/rueckstiess/mtools/issues/696
137
+ # Pass it to 3.4 and newer servers where it is accepted by all daemons.
138
+ if test $mongo_version -ge 34; then
139
+ args="$args --setParameter diagnosticDataCollectionEnabled=false"
140
+ fi
141
+ local uri_options=
142
+ if test "$TOPOLOGY" = replica-set; then
143
+ args="$args --replicaset --name ruby-driver-rs --nodes 2 --arbiter"
144
+ export HAVE_ARBITER=1
145
+ elif test "$TOPOLOGY" = sharded-cluster; then
146
+ args="$args --replicaset --nodes 1 --sharded 1 --name ruby-driver-rs"
147
+ if test -z "$SINGLE_MONGOS"; then
148
+ args="$args --mongos 2"
149
+ fi
150
+ else
151
+ args="$args --single"
152
+ fi
153
+ if test -n "$MMAPV1"; then
154
+ args="$args --storageEngine mmapv1 --smallfiles --noprealloc"
155
+ uri_options="$uri_options&retryReads=false&retryWrites=false"
156
+ fi
157
+ if test "$AUTH" = auth; then
158
+ args="$args --auth --username bob --password pwd123"
159
+ elif test "$AUTH" = x509; then
160
+ args="$args --auth --username bootstrap --password bootstrap"
161
+ elif echo "$AUTH" |grep -q ^aws; then
162
+ args="$args --auth --username bootstrap --password bootstrap"
163
+ args="$args --setParameter authenticationMechanisms=MONGODB-AWS,SCRAM-SHA-1,SCRAM-SHA-256"
164
+ uri_options="$uri_options&authMechanism=MONGODB-AWS&authSource=\$external"
165
+ fi
166
+
167
+ if test -n "$OCSP"; then
168
+ if test -z "$OCSP_ALGORITHM"; then
169
+ echo "OCSP_ALGORITHM must be set if OCSP is set" 1>&2
170
+ exit 1
171
+ fi
172
+ fi
173
+
174
+ local server_cert_path server_ca_path server_client_cert_path
175
+ if test "$SSL" = ssl || test -n "$OCSP_ALGORITHM"; then
176
+ if test -n "$OCSP_ALGORITHM"; then
177
+ if test "$OCSP_MUST_STAPLE" = 1; then
178
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server-mustStaple.pem
179
+ else
180
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
181
+ fi
182
+ server_ca_path=spec/support/ocsp/$OCSP_ALGORITHM/ca.crt
183
+ server_client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
184
+ else
185
+ server_cert_path=spec/support/certificates/server-second-level-bundle.pem
186
+ server_ca_path=spec/support/certificates/ca.crt
187
+ server_client_cert_path=spec/support/certificates/client.pem
188
+ fi
189
+
190
+ if test -n "$OCSP_ALGORITHM"; then
191
+ client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
192
+ elif test "$AUTH" = x509; then
193
+ client_cert_path=spec/support/certificates/client-x509.pem
194
+
195
+ uri_options="$uri_options&authMechanism=MONGODB-X509"
196
+ elif echo $RVM_RUBY |grep -q jruby; then
197
+ # JRuby does not grok chained certificate bundles -
198
+ # https://github.com/jruby/jruby-openssl/issues/181
199
+ client_cert_path=spec/support/certificates/client.pem
200
+ else
201
+ client_cert_path=spec/support/certificates/client-second-level-bundle.pem
202
+ fi
203
+
204
+ uri_options="$uri_options&tls=true&"\
205
+ "tlsCAFile=$server_ca_path&"\
206
+ "tlsCertificateKeyFile=$client_cert_path"
207
+
208
+ args="$args --sslMode requireSSL"\
209
+ " --sslPEMKeyFile $server_cert_path"\
210
+ " --sslCAFile $server_ca_path"\
211
+ " --sslClientCertificate $server_client_cert_path"
212
+ fi
213
+
214
+ # Docker forwards ports to the external interface, not to the loopback.
215
+ # Hence we must bind to all interfaces here.
216
+ if test -n "$BIND_ALL"; then
217
+ args="$args --bind_ip_all"
218
+ fi
219
+
220
+ # MongoDB servers pre-4.2 do not enable zlib compression by default
221
+ if test "$COMPRESSOR" = snappy; then
222
+ args="$args --networkMessageCompressors snappy"
223
+ elif test "$COMPRESSOR" = zlib; then
224
+ args="$args --networkMessageCompressors zlib"
225
+ fi
226
+
227
+ if test -n "$OCSP_ALGORITHM" || test -n "$OCSP_VERIFIER"; then
228
+ python3 -m pip install asn1crypto oscrypto flask
229
+ fi
230
+
231
+ local ocsp_args=
232
+ if test -n "$OCSP_ALGORITHM"; then
233
+ if test -z "$server_ca_path"; then
234
+ echo "server_ca_path must have been set" 1>&2
235
+ exit 1
236
+ fi
237
+ ocsp_args="--ca_file $server_ca_path"
238
+ if test "$OCSP_DELEGATE" = 1; then
239
+ ocsp_args="$ocsp_args \
240
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.crt \
241
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.key \
242
+ "
243
+ else
244
+ ocsp_args="$ocsp_args \
245
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ca.crt \
246
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ca.key \
247
+ "
248
+ fi
249
+ if test -n "$OCSP_STATUS"; then
250
+ ocsp_args="$ocsp_args --fault $OCSP_STATUS"
251
+ fi
252
+ fi
253
+
254
+ OCSP_ARGS="$ocsp_args"
255
+ SERVER_ARGS="$args"
256
+ URI_OPTIONS="$uri_options"
257
+ }
258
+
259
+ launch_ocsp_mock() {
260
+ if test -n "$OCSP_ARGS"; then
261
+ # Bind to 0.0.0.0 for Docker
262
+ python3 spec/support/ocsp/ocsp_mock.py $OCSP_ARGS -b 0.0.0.0 -p 8100 &
263
+ OCSP_MOCK_PID=$!
264
+ fi
265
+ }
266
+
267
+ launch_server() {
268
+ local dbdir="$1"
269
+ python -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
270
+ }
@@ -0,0 +1,128 @@
1
+ TOOLCHAIN_VERSION=289d4bec7c61e88000cea582c05fd8073b932122
2
+
3
+ set_env_java() {
4
+ ls -l /opt || true
5
+ ls -l /usr/lib/jvm || true
6
+
7
+ # Use toolchain java if it exists
8
+ if [ -f /opt/java/jdk8/bin/java ]; then
9
+ export JAVACMD=/opt/java/jdk8/bin/java
10
+ #export PATH=$PATH:/opt/java/jdk8/bin
11
+ fi
12
+
13
+ # ppc64le has it in a different place
14
+ if test -z "$JAVACMD" && [ -f /usr/lib/jvm/java-1.8.0/bin/java ]; then
15
+ export JAVACMD=/usr/lib/jvm/java-1.8.0/bin/java
16
+ #export PATH=$PATH:/usr/lib/jvm/java-1.8.0/bin
17
+ fi
18
+
19
+ if true; then
20
+ # newer
21
+ # rhel71-ppc, https://jira.mongodb.org/browse/BUILD-9231
22
+ if test -z "$JAVACMD" &&
23
+ (ls /opt/java || true) |grep -q java-1.8.0-openjdk-1.8.0 &&
24
+ test -f /opt/java/java-1.8.0-openjdk-1.8.0*/bin/java;
25
+ then
26
+ path=$(cd /opt/java && ls -d java-1.8.0-openjdk-1.8.0* |head -n 1)
27
+ export JAVACMD=/opt/java/"$path"/bin/java
28
+ fi
29
+ else
30
+ # older
31
+ # rhel71-ppc seems to have an /opt/java/jdk8/bin/java but it doesn't work
32
+ if test -n "$JAVACMD" && ! exec $JAVACMD -version; then
33
+ JAVACMD=
34
+ # we will try the /usr/lib/jvm then
35
+ fi
36
+ fi
37
+
38
+ if test -n "$JAVACMD"; then
39
+ eval $JAVACMD -version
40
+ elif which java 2>/dev/null; then
41
+ java -version
42
+ else
43
+ echo No java runtime found
44
+ fi
45
+ }
46
+
47
+ set_env_ruby() {
48
+ if test -z "$RVM_RUBY"; then
49
+ echo "Empty RVM_RUBY, aborting"
50
+ exit 2
51
+ fi
52
+
53
+ #ls -l /opt
54
+
55
+ # Necessary for jruby
56
+ set_env_java
57
+
58
+ if [ "$RVM_RUBY" == "ruby-head" ]; then
59
+ # When we use ruby-head, we do not install the Ruby toolchain.
60
+ # But we still need Python 3.6+ to run mlaunch.
61
+ # Since the ruby-head tests are run on ubuntu1604, we can use the
62
+ # globally installed Python toolchain.
63
+ #export PATH=/opt/python/3.7/bin:$PATH
64
+
65
+ # 12.04, 14.04 and 16.04 are good
66
+ curl --retry 3 -fL http://rubies.travis-ci.org/ubuntu/`lsb_release -rs`/x86_64/ruby-head.tar.bz2 |tar xfj -
67
+ # TODO adjust gem path?
68
+ export PATH=`pwd`/ruby-head/bin:`pwd`/ruby-head/lib/ruby/gems/2.6.0/bin:$PATH
69
+ ruby --version
70
+ ruby --version |grep dev
71
+ else
72
+ if test "$USE_OPT_TOOLCHAIN" = 1; then
73
+ # nothing, also PATH is already set
74
+ :
75
+ elif true; then
76
+
77
+ # For testing toolchains:
78
+ #toolchain_url=https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/`host_distro`/f11598d091441ffc8d746aacfdc6c26741a3e629/mongo_ruby_driver_toolchain_`host_distro |tr - _`_patch_f11598d091441ffc8d746aacfdc6c26741a3e629_5e46f2793e8e866f36eda2c5_20_02_14_19_18_18.tar.gz
79
+ toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-`host_distro`-$TOOLCHAIN_VERSION.tar.xz
80
+ curl --retry 3 -fL $toolchain_url |tar Jxf -
81
+ export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
82
+ #export PATH=`pwd`/rubies/python/3/bin:$PATH
83
+
84
+ # Attempt to get bundler to report all errors - so far unsuccessful
85
+ #curl --retry 3 -o bundler-openssl.diff https://github.com/bundler/bundler/compare/v2.0.1...p-mongo:report-errors.diff
86
+ #find . -path \*/lib/bundler/fetcher.rb -exec patch {} bundler-openssl.diff \;
87
+
88
+ else
89
+
90
+ # Normal operation
91
+ if ! test -d $HOME/.rubies/$RVM_RUBY/bin; then
92
+ echo "Ruby directory does not exist: $HOME/.rubies/$RVM_RUBY/bin" 1>&2
93
+ echo "Contents of /opt:" 1>&2
94
+ ls -l /opt 1>&2 || true
95
+ echo ".rubies symlink:" 1>&2
96
+ ls -ld $HOME/.rubies 1>&2 || true
97
+ echo "Our rubies:" 1>&2
98
+ ls -l $HOME/.rubies 1>&2 || true
99
+ exit 2
100
+ fi
101
+ export PATH=$HOME/.rubies/$RVM_RUBY/bin:$PATH
102
+
103
+ fi
104
+
105
+ ruby --version
106
+
107
+ # Ensure we're using the right ruby
108
+ ruby_name=`echo $RVM_RUBY |awk -F- '{print $1}'`
109
+ ruby_version=`echo $RVM_RUBY |awk -F- '{print $2}' |cut -c 1-3`
110
+
111
+ ruby -v |fgrep $ruby_name
112
+ ruby -v |fgrep $ruby_version
113
+
114
+ # We shouldn't need to update rubygems, and there is value in
115
+ # testing on whatever rubygems came with each supported ruby version
116
+ #echo 'updating rubygems'
117
+ #gem update --system
118
+
119
+ # Only install bundler when not using ruby-head.
120
+ # ruby-head comes with bundler and gem complains
121
+ # because installing bundler would overwrite the bundler binary.
122
+ # We now install bundler in the toolchain, hence nothing needs to be done
123
+ # in the tests.
124
+ if false && echo "$RVM_RUBY" |grep -q jruby; then
125
+ gem install bundler -v '<2'
126
+ fi
127
+ fi
128
+ }
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  require 'lite_spec_helper'
5
5
 
6
- MODELS = File.join(File.dirname(__FILE__), "app/models")
6
+ MODELS = File.join(File.dirname(__FILE__), "support/models")
7
7
  $LOAD_PATH.unshift(MODELS)
8
8
 
9
9
  require "action_controller"
@@ -35,6 +35,7 @@ require 'support/helpers'
35
35
  require 'support/macros'
36
36
  require 'support/cluster_config'
37
37
  require 'support/constraints'
38
+ require 'mrss/constraints'
38
39
 
39
40
  # Give MongoDB servers time to start up in CI environments
40
41
  if SpecConfig.instance.ci?
@@ -82,7 +83,7 @@ Mongoid.configure do |config|
82
83
  config.load_configuration(CONFIG)
83
84
  end
84
85
 
85
- # Autoload every model for the test suite that sits in spec/app/models.
86
+ # Autoload every model for the test suite that sits in spec/support/models.
86
87
  Dir[ File.join(MODELS, "*.rb") ].sort.each do |file|
87
88
  name = File.basename(file, ".rb")
88
89
  autoload name.camelize.to_sym, name
@@ -128,6 +129,7 @@ RSpec.configure do |config|
128
129
  config.raise_errors_for_deprecations!
129
130
  config.include(Helpers)
130
131
  config.include(Mongoid::Expectations)
132
+ config.extend(Mrss::Constraints)
131
133
  config.extend(Constraints)
132
134
  config.extend(Mongoid::Macros)
133
135
 
@@ -4,252 +4,50 @@
4
4
  module Constraints
5
5
  RAILS_VERSION = ActiveSupport.version.to_s.split('.')[0..1].join('.').freeze
6
6
 
7
- def min_rails_version(version)
8
- unless version =~ /\A\d+\.\d+\z/
9
- raise ArgumentError, "Version can only be major.minor: #{version}"
10
- end
11
-
7
+ def min_driver_version(version)
8
+ required_version = version.split('.').map(&:to_i)
9
+ actual_version = driver_version(required_version.length)
12
10
  before(:all) do
13
- if version > RAILS_VERSION
14
- skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
11
+ if (actual_version <=> required_version) < 0
12
+ skip "Driver version #{version} or higher is required"
15
13
  end
16
14
  end
17
15
  end
18
16
 
19
- def max_rails_version(version)
20
- unless version =~ /\A\d+\.\d+\z/
21
- raise ArgumentError, "Version can only be major.minor: #{version}"
22
- end
23
-
17
+ def max_driver_version(version)
18
+ required_version = version.split('.').map(&:to_i)
19
+ actual_version = driver_version(required_version.length)
24
20
  before(:all) do
25
- if version < RAILS_VERSION
26
- skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
21
+ if (actual_version <=> required_version) > 0
22
+ skip "Driver version #{version} or lower is required"
27
23
  end
28
24
  end
29
25
  end
30
26
 
31
- def min_server_version(version)
32
- unless version =~ /\A\d+\.\d+\z/
33
- raise ArgumentError, "Version can only be major.minor: #{version}"
34
- end
35
-
36
- before(:all) do
37
- if version > ClusterConfig.instance.server_version
38
- skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
39
- end
40
- end
27
+ def driver_version(precision)
28
+ Mongo::VERSION.split('.')[0...precision].map(&:to_i)
41
29
  end
42
30
 
43
- def max_server_version(version)
31
+ def min_rails_version(version)
44
32
  unless version =~ /\A\d+\.\d+\z/
45
33
  raise ArgumentError, "Version can only be major.minor: #{version}"
46
34
  end
47
35
 
48
36
  before(:all) do
49
- if version < ClusterConfig.instance.short_server_version
50
- skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
51
- end
52
- end
53
- end
54
-
55
- def require_topology(*topologies)
56
- invalid_topologies = topologies - [:single, :replica_set, :sharded]
57
-
58
- unless invalid_topologies.empty?
59
- raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
60
- end
61
-
62
- before(:all) do
63
- unless topologies.include?(topology = ClusterConfig.instance.topology)
64
- skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
65
- end
66
- end
67
- end
68
-
69
- def max_example_run_time(timeout)
70
- around do |example|
71
- TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
72
- example.run
73
- end
74
- end
75
- end
76
-
77
- def require_transaction_support
78
- before(:all) do
79
- case ClusterConfig.instance.topology
80
- when :single
81
- skip 'Transactions tests require a replica set (4.0+) or a sharded cluster (4.2+)'
82
- when :replica_set
83
- unless ClusterConfig.instance.server_version >= '4.0'
84
- skip 'Transactions tests in a replica set topology require server 4.0+'
85
- end
86
- when :sharded
87
- unless ClusterConfig.instance.server_version >= '4.2'
88
- skip 'Transactions tests in a sharded cluster topology require server 4.2+'
89
- end
90
- else
91
- raise NotImplementedError
92
- end
93
- end
94
- end
95
-
96
- def require_tls
97
- before(:all) do
98
- unless SpecConfig.instance.ssl?
99
- skip "SSL not enabled"
100
- end
101
- end
102
- end
103
-
104
- def require_no_tls
105
- before(:all) do
106
- if SpecConfig.instance.ssl?
107
- skip "SSL enabled"
108
- end
109
- end
110
- end
111
-
112
- def require_local_tls
113
- require_tls
114
- end
115
-
116
- def require_no_retry_writes
117
- before(:all) do
118
- if SpecConfig.instance.retry_writes?
119
- skip "Retry writes is enabled"
120
- end
121
- end
122
- end
123
-
124
- def require_compression
125
- before(:all) do
126
- if SpecConfig.instance.compressors.nil?
127
- skip "Compression is not enabled"
128
- end
129
- end
130
- end
131
-
132
- def require_no_compression
133
- before(:all) do
134
- if SpecConfig.instance.compressors
135
- skip "Compression is enabled"
136
- end
137
- end
138
- end
139
-
140
- def ruby_version_gte(version)
141
- before(:all) do
142
- if RUBY_VERSION < version
143
- skip "Ruby version #{version} or higher required"
144
- end
145
- end
146
- end
147
-
148
- def ruby_version_lt(version)
149
- before(:all) do
150
- if RUBY_VERSION >= version
151
- skip "Ruby version less than #{version} required"
152
- end
153
- end
154
- end
155
-
156
- def require_auth
157
- before(:all) do
158
- unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
159
- skip "Auth required"
160
- end
161
- end
162
- end
163
-
164
- def require_no_auth
165
- before(:all) do
166
- if ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
167
- skip "Auth not allowed"
168
- end
169
- end
170
- end
171
-
172
- def require_no_x509_auth
173
- before(:all) do
174
- if SpecConfig.instance.x509_auth?
175
- skip "X.509 auth not allowed"
176
- end
177
- end
178
- end
179
-
180
- # Can the driver specify a write concern that won't be overridden?
181
- # (mongos 4.0+ overrides the write concern)
182
- def require_set_write_concern
183
- before(:all) do
184
- if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
185
- skip "mongos 4.0+ overrides write concern"
186
- end
187
- end
188
- end
189
-
190
- def require_multi_shard
191
- before(:all) do
192
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
193
- skip 'Test requires a minimum of two shards if run in sharded topology'
194
- end
195
- end
196
- end
197
-
198
- def require_no_multi_shard
199
- before(:all) do
200
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
201
- skip 'Test requires a single shard if run in sharded topology'
202
- end
203
- end
204
- end
205
-
206
- def require_wired_tiger
207
- before(:all) do
208
- if ClusterConfig.instance.storage_engine != :wired_tiger
209
- skip 'Test requires WiredTiger storage engine'
210
- end
211
- end
212
- end
213
-
214
- def require_wired_tiger_on_36
215
- before(:all) do
216
- if ClusterConfig.instance.short_server_version >= '3.6'
217
- if ClusterConfig.instance.storage_engine != :wired_tiger
218
- skip 'Test requires WiredTiger storage engine on 3.6+ servers'
219
- end
220
- end
221
- end
222
- end
223
-
224
- def require_mmapv1
225
- before(:all) do
226
- if ClusterConfig.instance.storage_engine != :mmapv1
227
- skip 'Test requires MMAPv1 storage engine'
37
+ if version > RAILS_VERSION
38
+ skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
228
39
  end
229
40
  end
230
41
  end
231
42
 
232
- def require_enterprise
233
- before(:all) do
234
- unless ClusterConfig.instance.enterprise?
235
- skip 'Test requires enterprise build of MongoDB'
236
- end
43
+ def max_rails_version(version)
44
+ unless version =~ /\A\d+\.\d+\z/
45
+ raise ArgumentError, "Version can only be major.minor: #{version}"
237
46
  end
238
- end
239
47
 
240
- # Integration tests for SRV polling require internet connectivity to
241
- # look up SRV records and a sharded cluster configured on default port on
242
- # localhost (localhost:27017, localhost:27018).
243
- def require_default_port_deployment
244
- # Because the DNS records at test1.test.build.10gen.cc point to
245
- # localhost:27017 & localhost:27018, the test suite must have been
246
- # configured to use these addresses
247
48
  before(:all) do
248
- have_default_port = SpecConfig.instance.addresses.any? do |address|
249
- %w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
250
- end
251
- unless have_default_port
252
- skip 'This test requires the test suite to be configured for localhost:27017'
49
+ if version < RAILS_VERSION
50
+ skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
253
51
  end
254
52
  end
255
53
  end