mongoid 7.1.11 → 7.2.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +10 -3
  4. data/Rakefile +11 -30
  5. data/lib/config/locales/en.yml +37 -14
  6. data/lib/mongoid/association/depending.rb +1 -6
  7. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  8. data/lib/mongoid/association/many.rb +3 -3
  9. data/lib/mongoid/association/proxy.rb +1 -1
  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 +37 -2
  13. data/lib/mongoid/association/referenced/has_many/proxy.rb +9 -2
  14. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  15. data/lib/mongoid/association/referenced/has_one/proxy.rb +1 -6
  16. data/lib/mongoid/atomic/modifiers.rb +1 -1
  17. data/lib/mongoid/attributes/dynamic.rb +1 -1
  18. data/lib/mongoid/attributes.rb +1 -8
  19. data/lib/mongoid/clients/factory.rb +17 -0
  20. data/lib/mongoid/composable.rb +1 -0
  21. data/lib/mongoid/config/environment.rb +1 -9
  22. data/lib/mongoid/config.rb +3 -0
  23. data/lib/mongoid/contextual/atomic.rb +2 -7
  24. data/lib/mongoid/contextual/mongo.rb +23 -4
  25. data/lib/mongoid/contextual/none.rb +0 -3
  26. data/lib/mongoid/copyable.rb +2 -2
  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 +23 -8
  30. data/lib/mongoid/criteria/queryable/selector.rb +7 -3
  31. data/lib/mongoid/criteria/queryable/storable.rb +7 -7
  32. data/lib/mongoid/criteria.rb +58 -8
  33. data/lib/mongoid/document.rb +19 -9
  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/errors.rb +7 -2
  42. data/lib/mongoid/factory.rb +27 -10
  43. data/lib/mongoid/fields/validators/macro.rb +22 -9
  44. data/lib/mongoid/findable.rb +50 -14
  45. data/lib/mongoid/indexable.rb +2 -2
  46. data/lib/mongoid/interceptable.rb +2 -4
  47. data/lib/mongoid/matchable.rb +1 -149
  48. data/lib/mongoid/matcher/all.rb +22 -0
  49. data/lib/mongoid/matcher/and.rb +21 -0
  50. data/lib/mongoid/matcher/elem_match.rb +35 -0
  51. data/lib/mongoid/matcher/elem_match_expression.rb +20 -0
  52. data/lib/mongoid/matcher/eq.rb +11 -0
  53. data/lib/mongoid/matcher/eq_impl.rb +32 -0
  54. data/lib/mongoid/matcher/eq_impl_with_regexp.rb +21 -0
  55. data/lib/mongoid/matcher/exists.rb +15 -0
  56. data/lib/mongoid/matcher/expression.rb +40 -0
  57. data/lib/mongoid/matcher/expression_operator.rb +19 -0
  58. data/lib/mongoid/matcher/field_expression.rb +63 -0
  59. data/lib/mongoid/matcher/field_operator.rb +52 -0
  60. data/lib/mongoid/matcher/gt.rb +17 -0
  61. data/lib/mongoid/matcher/gte.rb +17 -0
  62. data/lib/mongoid/matcher/in.rb +25 -0
  63. data/lib/mongoid/matcher/lt.rb +17 -0
  64. data/lib/mongoid/matcher/lte.rb +17 -0
  65. data/lib/mongoid/matcher/ne.rb +16 -0
  66. data/lib/mongoid/matcher/nin.rb +11 -0
  67. data/lib/mongoid/matcher/nor.rb +25 -0
  68. data/lib/mongoid/matcher/not.rb +29 -0
  69. data/lib/mongoid/matcher/or.rb +21 -0
  70. data/lib/mongoid/matcher/regex.rb +41 -0
  71. data/lib/mongoid/matcher/size.rb +26 -0
  72. data/lib/mongoid/matcher.rb +127 -0
  73. data/lib/mongoid/persistable/deletable.rb +1 -1
  74. data/lib/mongoid/persistence_context.rb +1 -3
  75. data/lib/mongoid/query_cache.rb +64 -62
  76. data/lib/mongoid/reloadable.rb +2 -7
  77. data/lib/mongoid/serializable.rb +1 -1
  78. data/lib/mongoid/tasks/database.rb +1 -1
  79. data/lib/mongoid/traversable.rb +111 -4
  80. data/lib/mongoid/validatable/associated.rb +1 -1
  81. data/lib/mongoid/validatable/presence.rb +3 -3
  82. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  83. data/lib/mongoid/version.rb +1 -1
  84. data/lib/mongoid.rb +23 -1
  85. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -8
  86. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  87. data/spec/integration/app_spec.rb +88 -178
  88. data/spec/integration/associations/embedded_spec.rb +94 -0
  89. data/spec/integration/associations/has_many_spec.rb +39 -46
  90. data/spec/integration/associations/has_one_spec.rb +39 -46
  91. data/spec/integration/associations/nested_attributes_assignment_spec.rb +116 -0
  92. data/spec/integration/atomic/modifiers_spec.rb +117 -0
  93. data/spec/integration/discriminator_key_spec.rb +354 -0
  94. data/spec/integration/discriminator_value_spec.rb +207 -0
  95. data/spec/integration/document_spec.rb +0 -21
  96. data/spec/integration/{matchable_spec.rb → matcher_examples_spec.rb} +120 -41
  97. data/spec/integration/matcher_operator_data/all.yml +140 -0
  98. data/spec/integration/matcher_operator_data/and.yml +93 -0
  99. data/spec/integration/matcher_operator_data/elem_match.yml +363 -0
  100. data/spec/integration/matcher_operator_data/elem_match_expr.yml +213 -0
  101. data/spec/integration/matcher_operator_data/eq.yml +191 -0
  102. data/spec/integration/matcher_operator_data/exists.yml +213 -0
  103. data/spec/integration/matcher_operator_data/generic_op.yml +17 -0
  104. data/spec/integration/matcher_operator_data/gt.yml +132 -0
  105. data/spec/integration/matcher_operator_data/gte.yml +132 -0
  106. data/spec/integration/matcher_operator_data/implicit.yml +331 -0
  107. data/spec/integration/matcher_operator_data/implicit_traversal.yml +16 -0
  108. data/spec/integration/matcher_operator_data/in.yml +194 -0
  109. data/spec/integration/matcher_operator_data/invalid_op.yml +59 -0
  110. data/spec/integration/matcher_operator_data/invalid_syntax.yml +39 -0
  111. data/spec/integration/matcher_operator_data/lt.yml +132 -0
  112. data/spec/integration/matcher_operator_data/lte.yml +132 -0
  113. data/spec/integration/matcher_operator_data/multiple.yml +29 -0
  114. data/spec/integration/matcher_operator_data/ne.yml +150 -0
  115. data/spec/integration/matcher_operator_data/nin.yml +114 -0
  116. data/spec/integration/matcher_operator_data/nor.yml +126 -0
  117. data/spec/integration/matcher_operator_data/not.yml +196 -0
  118. data/spec/integration/matcher_operator_data/or.yml +137 -0
  119. data/spec/integration/matcher_operator_data/regex.yml +174 -0
  120. data/spec/integration/matcher_operator_data/regex_options.yml +72 -0
  121. data/spec/integration/matcher_operator_data/size.yml +174 -0
  122. data/spec/integration/matcher_operator_spec.rb +100 -0
  123. data/spec/integration/matcher_spec.rb +189 -0
  124. data/spec/integration/server_query_spec.rb +142 -0
  125. data/spec/lite_spec_helper.rb +7 -7
  126. data/spec/mongoid/association/depending_spec.rb +78 -26
  127. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +0 -50
  128. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +37 -17
  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/belongs_to/proxy_spec.rb +0 -17
  132. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +460 -186
  133. data/spec/mongoid/association/referenced/has_many_models.rb +9 -0
  134. data/spec/mongoid/association/referenced/has_one_models.rb +9 -0
  135. data/spec/mongoid/atomic/modifiers_spec.rb +47 -0
  136. data/spec/mongoid/atomic/paths_spec.rb +0 -41
  137. data/spec/mongoid/atomic_spec.rb +23 -0
  138. data/spec/mongoid/attributes/nested_spec.rb +1 -1
  139. data/spec/mongoid/attributes_spec.rb +0 -241
  140. data/spec/mongoid/clients/factory_spec.rb +35 -9
  141. data/spec/mongoid/clients/options_spec.rb +3 -11
  142. data/spec/mongoid/clients/sessions_spec.rb +1 -6
  143. data/spec/mongoid/config/environment_spec.rb +8 -86
  144. data/spec/mongoid/config_spec.rb +28 -0
  145. data/spec/mongoid/contextual/atomic_spec.rb +29 -81
  146. data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
  147. data/spec/mongoid/contextual/mongo_spec.rb +70 -16
  148. data/spec/mongoid/copyable_spec.rb +153 -1
  149. data/spec/mongoid/copyable_spec_models.rb +14 -0
  150. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +0 -36
  151. data/spec/mongoid/criteria/queryable/selectable_spec.rb +84 -82
  152. data/spec/mongoid/criteria_spec.rb +204 -43
  153. data/spec/mongoid/document_query_spec.rb +0 -51
  154. data/spec/mongoid/document_spec.rb +90 -36
  155. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  156. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
  157. data/spec/mongoid/factory_spec.rb +261 -28
  158. data/spec/mongoid/fields_spec.rb +48 -2
  159. data/spec/mongoid/findable_spec.rb +32 -0
  160. data/spec/mongoid/indexable_spec.rb +28 -2
  161. data/spec/mongoid/inspectable_spec.rb +29 -2
  162. data/spec/mongoid/interceptable_spec.rb +2 -2
  163. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +259 -0
  164. data/spec/mongoid/matcher/extract_attribute_spec.rb +47 -0
  165. data/spec/mongoid/persistable/creatable_spec.rb +108 -25
  166. data/spec/mongoid/persistable/deletable_spec.rb +86 -0
  167. data/spec/mongoid/persistable/savable_spec.rb +174 -16
  168. data/spec/mongoid/persistable/settable_spec.rb +0 -30
  169. data/spec/mongoid/persistable/updatable_spec.rb +0 -2
  170. data/spec/mongoid/persistable_spec.rb +2 -2
  171. data/spec/mongoid/query_cache_middleware_spec.rb +16 -3
  172. data/spec/mongoid/query_cache_spec.rb +442 -41
  173. data/spec/mongoid/reloadable_spec.rb +72 -0
  174. data/spec/mongoid/serializable_spec.rb +21 -3
  175. data/spec/mongoid/traversable_spec.rb +1100 -0
  176. data/spec/spec_helper.rb +3 -5
  177. data/spec/support/child_process_helper.rb +79 -0
  178. data/spec/support/constraints.rb +250 -0
  179. data/spec/support/helpers.rb +1 -1
  180. data/spec/support/lite_constraints.rb +22 -0
  181. data/spec/{app → support}/models/account.rb +0 -0
  182. data/spec/{app → support}/models/acolyte.rb +0 -0
  183. data/spec/{app → support}/models/actor.rb +1 -1
  184. data/spec/{app → support}/models/actress.rb +0 -0
  185. data/spec/{app → support}/models/address.rb +0 -4
  186. data/spec/{app → support}/models/address_component.rb +0 -0
  187. data/spec/{app → support}/models/address_number.rb +0 -0
  188. data/spec/{app → support}/models/agency.rb +0 -0
  189. data/spec/{app → support}/models/agent.rb +0 -0
  190. data/spec/{app → support}/models/album.rb +0 -0
  191. data/spec/{app → support}/models/alert.rb +0 -0
  192. data/spec/{app → support}/models/animal.rb +0 -0
  193. data/spec/{app → support}/models/answer.rb +0 -0
  194. data/spec/{app → support}/models/appointment.rb +0 -0
  195. data/spec/support/models/armrest.rb +10 -0
  196. data/spec/{app → support}/models/array_field.rb +0 -0
  197. data/spec/{app → support}/models/article.rb +0 -0
  198. data/spec/{app → support}/models/artist.rb +0 -0
  199. data/spec/{app → support}/models/artwork.rb +0 -0
  200. data/spec/{app → support}/models/audio.rb +0 -0
  201. data/spec/{app → support}/models/augmentation.rb +0 -0
  202. data/spec/{app → support}/models/author.rb +0 -0
  203. data/spec/{app → support}/models/baby.rb +0 -0
  204. data/spec/{app → support}/models/band.rb +0 -0
  205. data/spec/{app → support}/models/bar.rb +0 -0
  206. data/spec/{app → support}/models/basic.rb +0 -0
  207. data/spec/{app → support}/models/bed.rb +0 -0
  208. data/spec/{app → support}/models/big_palette.rb +0 -0
  209. data/spec/{app → support}/models/birthday.rb +0 -0
  210. data/spec/{app → support}/models/bomb.rb +0 -0
  211. data/spec/{app → support}/models/book.rb +0 -0
  212. data/spec/{app → support}/models/breed.rb +0 -0
  213. data/spec/{app → support}/models/browser.rb +1 -1
  214. data/spec/{app → support}/models/building.rb +0 -0
  215. data/spec/{app → support}/models/building_address.rb +0 -0
  216. data/spec/{app → support}/models/bus.rb +0 -0
  217. data/spec/{app → support}/models/business.rb +0 -0
  218. data/spec/{app → support}/models/callback_test.rb +0 -0
  219. data/spec/{app → support}/models/canvas.rb +1 -1
  220. data/spec/{app → support}/models/car.rb +0 -0
  221. data/spec/{app → support}/models/cat.rb +0 -0
  222. data/spec/{app → support}/models/category.rb +0 -0
  223. data/spec/{app → support}/models/child.rb +0 -0
  224. data/spec/{app → support}/models/child_doc.rb +0 -0
  225. data/spec/{app → support}/models/church.rb +0 -0
  226. data/spec/{app → support}/models/circle.rb +0 -0
  227. data/spec/{app → support}/models/circuit.rb +0 -0
  228. data/spec/{app → support}/models/circus.rb +0 -0
  229. data/spec/{app → support}/models/code.rb +0 -0
  230. data/spec/{app → support}/models/coding/pull_request.rb +0 -0
  231. data/spec/{app → support}/models/coding.rb +1 -1
  232. data/spec/{app → support}/models/comment.rb +0 -0
  233. data/spec/{app → support}/models/company.rb +0 -0
  234. data/spec/{app → support}/models/consumption_period.rb +0 -0
  235. data/spec/{app → support}/models/contextable_item.rb +0 -0
  236. data/spec/{app → support}/models/contractor.rb +0 -0
  237. data/spec/{app → support}/models/cookie.rb +0 -0
  238. data/spec/{app → support}/models/country_code.rb +0 -0
  239. data/spec/{app → support}/models/courier_job.rb +0 -0
  240. data/spec/support/models/crate.rb +13 -0
  241. data/spec/support/models/deed.rb +8 -0
  242. data/spec/{app → support}/models/definition.rb +0 -0
  243. data/spec/{app → support}/models/delegating_patient.rb +0 -0
  244. data/spec/{app → support}/models/description.rb +0 -0
  245. data/spec/{app → support}/models/dictionary.rb +0 -6
  246. data/spec/{app → support}/models/division.rb +0 -0
  247. data/spec/{app → support}/models/doctor.rb +0 -0
  248. data/spec/{app → support}/models/dog.rb +0 -0
  249. data/spec/{app → support}/models/dokument.rb +0 -0
  250. data/spec/{app → support}/models/draft.rb +0 -0
  251. data/spec/{app → support}/models/dragon.rb +0 -0
  252. data/spec/{app → support}/models/driver.rb +1 -1
  253. data/spec/{app → support}/models/drug.rb +0 -0
  254. data/spec/{app → support}/models/dungeon.rb +0 -0
  255. data/spec/{app → support}/models/edit.rb +0 -0
  256. data/spec/{app → support}/models/email.rb +0 -0
  257. data/spec/{app → support}/models/employer.rb +0 -0
  258. data/spec/{app → support}/models/entry.rb +0 -0
  259. data/spec/{app → support}/models/eraser.rb +0 -0
  260. data/spec/{app → support}/models/even.rb +0 -0
  261. data/spec/{app → support}/models/event.rb +0 -0
  262. data/spec/{app → support}/models/exhibition.rb +0 -0
  263. data/spec/{app → support}/models/exhibitor.rb +0 -0
  264. data/spec/{app → support}/models/explosion.rb +0 -0
  265. data/spec/{app → support}/models/eye.rb +0 -0
  266. data/spec/{app → support}/models/eye_bowl.rb +0 -0
  267. data/spec/{app → support}/models/face.rb +0 -0
  268. data/spec/{app → support}/models/favorite.rb +0 -0
  269. data/spec/{app → support}/models/filesystem.rb +0 -0
  270. data/spec/{app → support}/models/fire_hydrant.rb +0 -0
  271. data/spec/{app → support}/models/firefox.rb +0 -0
  272. data/spec/{app → support}/models/fish.rb +0 -0
  273. data/spec/{app → support}/models/folder.rb +0 -0
  274. data/spec/{app → support}/models/folder_item.rb +0 -0
  275. data/spec/{app → support}/models/fruits.rb +0 -0
  276. data/spec/{app → support}/models/game.rb +0 -0
  277. data/spec/{app → support}/models/ghost.rb +0 -0
  278. data/spec/support/models/guitar.rb +5 -0
  279. data/spec/{app → support}/models/home.rb +0 -0
  280. data/spec/{app → support}/models/house.rb +0 -0
  281. data/spec/{app → support}/models/html_writer.rb +0 -0
  282. data/spec/{app → support}/models/id_key.rb +0 -0
  283. data/spec/support/models/idnodef.rb +8 -0
  284. data/spec/{app → support}/models/image.rb +0 -0
  285. data/spec/{app → support}/models/implant.rb +0 -0
  286. data/spec/support/models/instrument.rb +9 -0
  287. data/spec/{app → support}/models/item.rb +1 -1
  288. data/spec/{app → support}/models/jar.rb +0 -0
  289. data/spec/{app → support}/models/kaleidoscope.rb +0 -0
  290. data/spec/{app → support}/models/kangaroo.rb +0 -0
  291. data/spec/{app → support}/models/label.rb +0 -0
  292. data/spec/{app → support}/models/language.rb +0 -0
  293. data/spec/{app → support}/models/lat_lng.rb +0 -0
  294. data/spec/{app → support}/models/league.rb +0 -0
  295. data/spec/{app → support}/models/learner.rb +0 -0
  296. data/spec/{app → support}/models/line_item.rb +0 -0
  297. data/spec/{app → support}/models/location.rb +0 -0
  298. data/spec/{app → support}/models/login.rb +0 -0
  299. data/spec/{app → support}/models/manufacturer.rb +0 -0
  300. data/spec/{app → support}/models/meat.rb +0 -0
  301. data/spec/{app → support}/models/membership.rb +0 -0
  302. data/spec/{app → support}/models/message.rb +0 -0
  303. data/spec/{app → support}/models/minim.rb +0 -0
  304. data/spec/{app → support}/models/mixed_drink.rb +0 -0
  305. data/spec/{app → support}/models/mop.rb +0 -10
  306. data/spec/{app → support}/models/movie.rb +0 -0
  307. data/spec/{app → support}/models/my_hash.rb +0 -0
  308. data/spec/{app → support}/models/name.rb +0 -0
  309. data/spec/{app → support}/models/name_only.rb +0 -0
  310. data/spec/{app → support}/models/node.rb +0 -0
  311. data/spec/{app → support}/models/note.rb +0 -0
  312. data/spec/{app → support}/models/odd.rb +0 -0
  313. data/spec/{app → support}/models/ordered_post.rb +0 -0
  314. data/spec/{app → support}/models/ordered_preference.rb +0 -0
  315. data/spec/{app → support}/models/oscar.rb +0 -0
  316. data/spec/{app → support}/models/other_owner_object.rb +0 -0
  317. data/spec/{app → support}/models/override.rb +0 -0
  318. data/spec/{app → support}/models/ownable.rb +0 -0
  319. data/spec/{app → support}/models/owner.rb +2 -0
  320. data/spec/{app → support}/models/pack.rb +0 -0
  321. data/spec/{app → support}/models/page.rb +0 -0
  322. data/spec/{app → support}/models/page_question.rb +0 -0
  323. data/spec/{app → support}/models/palette.rb +1 -1
  324. data/spec/{app → support}/models/parent.rb +0 -0
  325. data/spec/{app → support}/models/parent_doc.rb +0 -0
  326. data/spec/{app → support}/models/passport.rb +0 -0
  327. data/spec/{app → support}/models/patient.rb +0 -0
  328. data/spec/{app → support}/models/pdf_writer.rb +0 -0
  329. data/spec/{app → support}/models/pencil.rb +0 -0
  330. data/spec/{app → support}/models/person.rb +1 -12
  331. data/spec/{app → support}/models/pet.rb +0 -0
  332. data/spec/{app → support}/models/pet_owner.rb +0 -0
  333. data/spec/{app → support}/models/phone.rb +0 -0
  334. data/spec/support/models/piano.rb +5 -0
  335. data/spec/{app → support}/models/pizza.rb +0 -0
  336. data/spec/{app → support}/models/player.rb +0 -0
  337. data/spec/{app → support}/models/post.rb +0 -0
  338. data/spec/{app → support}/models/post_genre.rb +0 -0
  339. data/spec/{app → support}/models/powerup.rb +0 -0
  340. data/spec/{app → support}/models/preference.rb +0 -0
  341. data/spec/{app → support}/models/princess.rb +0 -0
  342. data/spec/{app → support}/models/product.rb +0 -0
  343. data/spec/support/models/profile.rb +18 -0
  344. data/spec/{app → support}/models/pronunciation.rb +0 -0
  345. data/spec/{app → support}/models/pub.rb +0 -0
  346. data/spec/{app → support}/models/publication/encyclopedia.rb +0 -0
  347. data/spec/{app → support}/models/publication/review.rb +0 -0
  348. data/spec/support/models/publication.rb +5 -0
  349. data/spec/{app → support}/models/purchase.rb +0 -0
  350. data/spec/{app → support}/models/question.rb +0 -0
  351. data/spec/{app → support}/models/quiz.rb +0 -0
  352. data/spec/{app → support}/models/rating.rb +0 -0
  353. data/spec/{app → support}/models/record.rb +0 -0
  354. data/spec/{app → support}/models/registry.rb +0 -0
  355. data/spec/{app → support}/models/role.rb +0 -0
  356. data/spec/{app → support}/models/root_category.rb +0 -0
  357. data/spec/{app → support}/models/sandwich.rb +0 -0
  358. data/spec/{app → support}/models/scheduler.rb +0 -0
  359. data/spec/{app/models/profile.rb → support/models/scribe.rb} +2 -2
  360. data/spec/support/models/seat.rb +25 -0
  361. data/spec/{app → support}/models/seo.rb +0 -0
  362. data/spec/{app → support}/models/series.rb +0 -1
  363. data/spec/{app → support}/models/server.rb +0 -0
  364. data/spec/{app → support}/models/service.rb +0 -0
  365. data/spec/{app → support}/models/shape.rb +2 -2
  366. data/spec/{app → support}/models/shelf.rb +0 -0
  367. data/spec/{app → support}/models/shipment_address.rb +0 -0
  368. data/spec/{app → support}/models/shipping_container.rb +0 -0
  369. data/spec/{app → support}/models/shipping_pack.rb +0 -0
  370. data/spec/{app → support}/models/shop.rb +0 -0
  371. data/spec/{app → support}/models/short_agent.rb +0 -0
  372. data/spec/{app → support}/models/short_quiz.rb +0 -0
  373. data/spec/{app → support}/models/simple.rb +0 -0
  374. data/spec/{app → support}/models/slave.rb +0 -0
  375. data/spec/{app → support}/models/song.rb +0 -0
  376. data/spec/{app → support}/models/sound.rb +0 -0
  377. data/spec/{app → support}/models/square.rb +0 -0
  378. data/spec/{app → support}/models/staff.rb +0 -0
  379. data/spec/{app → support}/models/store_as_dup_test1.rb +0 -0
  380. data/spec/{app → support}/models/store_as_dup_test2.rb +0 -0
  381. data/spec/{app → support}/models/store_as_dup_test3.rb +0 -0
  382. data/spec/{app → support}/models/store_as_dup_test4.rb +0 -0
  383. data/spec/{app → support}/models/strategy.rb +0 -0
  384. data/spec/{app → support}/models/sub_item.rb +0 -0
  385. data/spec/{app → support}/models/subscription.rb +0 -0
  386. data/spec/{app → support}/models/survey.rb +0 -0
  387. data/spec/{app → support}/models/symptom.rb +0 -0
  388. data/spec/support/models/system_role.rb +7 -0
  389. data/spec/{app → support}/models/tag.rb +0 -0
  390. data/spec/{app → support}/models/target.rb +0 -0
  391. data/spec/{app → support}/models/template.rb +0 -0
  392. data/spec/{app → support}/models/thing.rb +0 -0
  393. data/spec/{app → support}/models/title.rb +0 -0
  394. data/spec/{app → support}/models/tool.rb +2 -2
  395. data/spec/{app → support}/models/topping.rb +0 -0
  396. data/spec/support/models/toy.rb +10 -0
  397. data/spec/{app → support}/models/track.rb +0 -0
  398. data/spec/{app → support}/models/translation.rb +0 -0
  399. data/spec/{app → support}/models/tree.rb +0 -0
  400. data/spec/{app → support}/models/truck.rb +2 -0
  401. data/spec/{app → support}/models/updatable.rb +0 -0
  402. data/spec/{app → support}/models/user.rb +0 -0
  403. data/spec/{app → support}/models/user_account.rb +0 -0
  404. data/spec/{app → support}/models/validation_callback.rb +0 -0
  405. data/spec/{app → support}/models/vehicle.rb +7 -2
  406. data/spec/{app → support}/models/version.rb +0 -0
  407. data/spec/{app → support}/models/vertex.rb +0 -0
  408. data/spec/{app → support}/models/vet_visit.rb +0 -0
  409. data/spec/{app → support}/models/video.rb +0 -0
  410. data/spec/{app → support}/models/video_game.rb +0 -0
  411. data/spec/{app → support}/models/weapon.rb +0 -0
  412. data/spec/{app → support}/models/wiki_page.rb +0 -1
  413. data/spec/{app → support}/models/word.rb +0 -0
  414. data/spec/{app → support}/models/word_origin.rb +0 -0
  415. data/spec/{app → support}/models/writer.rb +2 -2
  416. data/spec/support/spec_config.rb +1 -9
  417. data/spec/support/spec_organizer.rb +130 -0
  418. data.tar.gz.sig +0 -0
  419. metadata +847 -844
  420. metadata.gz.sig +0 -0
  421. data/lib/mongoid/errors/empty_config_file.rb +0 -26
  422. data/lib/mongoid/errors/invalid_config_file.rb +0 -26
  423. data/lib/mongoid/matchable/all.rb +0 -30
  424. data/lib/mongoid/matchable/and.rb +0 -32
  425. data/lib/mongoid/matchable/default.rb +0 -121
  426. data/lib/mongoid/matchable/elem_match.rb +0 -36
  427. data/lib/mongoid/matchable/eq.rb +0 -23
  428. data/lib/mongoid/matchable/exists.rb +0 -25
  429. data/lib/mongoid/matchable/gt.rb +0 -25
  430. data/lib/mongoid/matchable/gte.rb +0 -25
  431. data/lib/mongoid/matchable/in.rb +0 -26
  432. data/lib/mongoid/matchable/lt.rb +0 -25
  433. data/lib/mongoid/matchable/lte.rb +0 -25
  434. data/lib/mongoid/matchable/ne.rb +0 -23
  435. data/lib/mongoid/matchable/nin.rb +0 -24
  436. data/lib/mongoid/matchable/nor.rb +0 -38
  437. data/lib/mongoid/matchable/or.rb +0 -35
  438. data/lib/mongoid/matchable/regexp.rb +0 -30
  439. data/lib/mongoid/matchable/size.rb +0 -23
  440. data/spec/app/models/customer.rb +0 -11
  441. data/spec/app/models/customer_address.rb +0 -12
  442. data/spec/app/models/publication.rb +0 -5
  443. data/spec/integration/associations/embeds_many_spec.rb +0 -24
  444. data/spec/integration/associations/embeds_one_spec.rb +0 -24
  445. data/spec/integration/callbacks_models.rb +0 -49
  446. data/spec/integration/callbacks_spec.rb +0 -216
  447. data/spec/integration/contextual/empty_spec.rb +0 -142
  448. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
  449. data/spec/mongoid/matchable/all_spec.rb +0 -34
  450. data/spec/mongoid/matchable/and_spec.rb +0 -190
  451. data/spec/mongoid/matchable/default_spec.rb +0 -140
  452. data/spec/mongoid/matchable/elem_match_spec.rb +0 -109
  453. data/spec/mongoid/matchable/eq_spec.rb +0 -49
  454. data/spec/mongoid/matchable/exists_spec.rb +0 -60
  455. data/spec/mongoid/matchable/gt_spec.rb +0 -89
  456. data/spec/mongoid/matchable/gte_spec.rb +0 -87
  457. data/spec/mongoid/matchable/in_spec.rb +0 -52
  458. data/spec/mongoid/matchable/lt_spec.rb +0 -88
  459. data/spec/mongoid/matchable/lte_spec.rb +0 -88
  460. data/spec/mongoid/matchable/ne_spec.rb +0 -49
  461. data/spec/mongoid/matchable/nin_spec.rb +0 -51
  462. data/spec/mongoid/matchable/nor_spec.rb +0 -210
  463. data/spec/mongoid/matchable/or_spec.rb +0 -134
  464. data/spec/mongoid/matchable/regexp_spec.rb +0 -62
  465. data/spec/mongoid/matchable/size_spec.rb +0 -28
  466. data/spec/mongoid/matchable_spec.rb +0 -856
  467. data/spec/shared/LICENSE +0 -20
  468. data/spec/shared/bin/get-mongodb-download-url +0 -17
  469. data/spec/shared/bin/s3-copy +0 -45
  470. data/spec/shared/bin/s3-upload +0 -69
  471. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  472. data/spec/shared/lib/mrss/cluster_config.rb +0 -226
  473. data/spec/shared/lib/mrss/constraints.rb +0 -385
  474. data/spec/shared/lib/mrss/docker_runner.rb +0 -271
  475. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  476. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  477. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  478. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  479. data/spec/shared/lib/mrss/utils.rb +0 -15
  480. data/spec/shared/share/Dockerfile.erb +0 -323
  481. data/spec/shared/share/haproxy-1.conf +0 -16
  482. data/spec/shared/share/haproxy-2.conf +0 -17
  483. data/spec/shared/shlib/distro.sh +0 -73
  484. data/spec/shared/shlib/server.sh +0 -367
  485. data/spec/shared/shlib/set_env.sh +0 -131
@@ -6,6 +6,9 @@ class HmmCompany
6
6
 
7
7
  field :p, type: Integer
8
8
  has_many :emails, primary_key: :p, foreign_key: :f, class_name: 'HmmEmail'
9
+
10
+ # The addresses are added with different dependency mechanisms in tests:
11
+ #has_many :addresses, class_name: 'HmmAddress', dependent: :destroy
9
12
  end
10
13
 
11
14
  class HmmEmail
@@ -15,6 +18,12 @@ class HmmEmail
15
18
  belongs_to :company, primary_key: :p, foreign_key: :f, class_name: 'HmmCompany'
16
19
  end
17
20
 
21
+ class HmmAddress
22
+ include Mongoid::Document
23
+
24
+ belongs_to :company, class_name: 'HmmCompany'
25
+ end
26
+
18
27
  class HmmSchool
19
28
  include Mongoid::Document
20
29
 
@@ -6,6 +6,9 @@ class HomCollege
6
6
 
7
7
  has_one :accreditation, class_name: 'HomAccreditation'
8
8
 
9
+ # The address is added with different dependency mechanisms in tests:
10
+ #has_one :address, class_name: 'HomAddress', dependent: :destroy
11
+
9
12
  field :state, type: String
10
13
  end
11
14
 
@@ -24,6 +27,12 @@ class HomAccreditation::Child
24
27
  belongs_to :hom_college
25
28
  end
26
29
 
30
+ class HomAddress
31
+ include Mongoid::Document
32
+
33
+ belongs_to :college, class_name: 'HomCollege'
34
+ end
35
+
27
36
  module HomNs
28
37
  class PrefixedParent
29
38
  include Mongoid::Document
@@ -9,6 +9,26 @@ describe Mongoid::Atomic::Modifiers do
9
9
  described_class.new
10
10
  end
11
11
 
12
+ describe "#push_conflict?" do
13
+ let(:result) { modifiers.send(:push_conflict?, field) }
14
+
15
+ context 'for embeds many subdocument' do
16
+ context 'when another field on subdocument is being set' do
17
+ before do
18
+ modifiers.set('foo.0.a' => 1)
19
+ end
20
+
21
+ let(:field) { 'foo' }
22
+
23
+ it 'does not conflict' do
24
+ pending 'https://jira.mongodb.org/browse/MONGOID-4982'
25
+
26
+ result.should be false
27
+ end
28
+ end
29
+ end
30
+ end
31
+
12
32
  describe "#add_to_set" do
13
33
 
14
34
  context "when the unique adds are empty" do
@@ -344,6 +364,33 @@ describe Mongoid::Atomic::Modifiers do
344
364
  end
345
365
  end
346
366
  end
367
+
368
+ context 'when there is another operation on a sibling of a key which is nested' do
369
+
370
+ let(:first_op) do
371
+ { "addresses.0.name" => 'test' }
372
+ end
373
+
374
+ let(:push_op) do
375
+ { "addresses.0.locations" => { "street" => "Oxford St" } }
376
+ end
377
+
378
+ before do
379
+ modifiers.set(first_op)
380
+ modifiers.push(push_op)
381
+ end
382
+
383
+ it "does not conflict and adds push to top level" do
384
+ pending 'https://jira.mongodb.org/browse/MONGOID-4982'
385
+
386
+ modifiers.should == {
387
+ '$set' => { "addresses.0.name" => 'test' },
388
+ '$push' => {"addresses.0.locations" => {'$each' => [
389
+ { "street" => "Oxford St" },
390
+ ]}},
391
+ }
392
+ end
393
+ end
347
394
  end
348
395
 
349
396
  describe "#set" do
@@ -268,46 +268,5 @@ describe Mongoid::Atomic::Paths do
268
268
  end
269
269
  end
270
270
  end
271
-
272
- context "when the same class is embedded in multiple associations" do
273
-
274
- let(:customer) do
275
- Customer.new
276
- end
277
-
278
- context "assignment after saving" do
279
-
280
- it "correctly sets the association for the embedded class" do
281
- pending 'MONGOID-5039'
282
-
283
- customer.home_address = CustomerAddress.new
284
- customer.work_address = CustomerAddress.new
285
-
286
- expect(customer.home_address.atomic_path).to eq("home_address")
287
- expect(customer.work_address.atomic_path).to eq("work_address")
288
-
289
- customer.save!
290
-
291
- customer.home_address = CustomerAddress.new
292
- customer.work_address = CustomerAddress.new
293
-
294
- expect(customer.home_address.atomic_path).to eq("home_address")
295
- expect(customer.work_address.atomic_path).to eq("work_address")
296
- end
297
- end
298
-
299
- context "inverse assignment" do
300
-
301
- it "correctly returns the path for each embedded class" do
302
- pending 'MONGOID-5039'
303
-
304
- customer.work_address = CustomerAddress.new
305
- customer.work_address.addressable = customer
306
-
307
- expect(customer.home_address.atomic_path).to eq("home_address")
308
- expect(customer.work_address.atomic_path).to eq("work_address")
309
- end
310
- end
311
- end
312
271
  end
313
272
  end
@@ -362,6 +362,29 @@ describe Mongoid::Atomic do
362
362
  )
363
363
  end
364
364
  end
365
+
366
+ context 'when adding nested embedded docs and updating top level embedded doc' do
367
+ let!(:truck) { Truck.create! }
368
+ let!(:crate) { truck.crates.create!(volume: 1) }
369
+
370
+ before do
371
+ truck.crates.first.volume = 2
372
+ truck.crates.first.toys.build(name: 'Bear')
373
+ truck.crates.build
374
+ end
375
+
376
+ it 'correctly distributes the operations' do
377
+ pending 'https://jira.mongodb.org/browse/MONGOID-4982'
378
+
379
+ truck.atomic_updates.should == {
380
+ '$set' => {'crates.0.volume' => 2},
381
+ '$push' => {'crates.0.toys' => {'$each' => [crate.toys.first.attributes]}},
382
+ conflicts: {
383
+ '$push' => {'crates' => {'$each' => [truck.crates.last.attributes]}},
384
+ },
385
+ }
386
+ end
387
+ end
365
388
  end
366
389
  end
367
390
  end
@@ -234,7 +234,7 @@ describe Mongoid::Attributes::Nested do
234
234
  end
235
235
  end
236
236
 
237
- describe "##{name}_attributes=" do
237
+ describe "*_attributes=" do
238
238
 
239
239
  context "when the parent document is new" do
240
240
 
@@ -245,97 +245,6 @@ describe Mongoid::Attributes do
245
245
  end
246
246
  end
247
247
 
248
- context "when the field was not explicitly defined" do
249
-
250
- context "when excluding with only and the field was not excluded" do
251
-
252
- let(:from_db) do
253
- Person.only(:_id).first
254
- end
255
-
256
- it "raises an error" do
257
- expect {
258
- from_db[:undefined_field]
259
- }.to raise_error(ActiveModel::MissingAttributeError)
260
- end
261
- end
262
-
263
- context "when excluding with without and the field was excluded" do
264
-
265
- let(:from_db) do
266
- Person.without(:title).first
267
- end
268
-
269
- it "raises an error" do
270
- expect {
271
- from_db[:title]
272
- }.to raise_error(ActiveModel::MissingAttributeError)
273
- end
274
- end
275
-
276
- context "when excluding with without and the field was not excluded" do
277
-
278
- let(:from_db) do
279
- Person.without(:title).first
280
- end
281
-
282
- it "returns nil" do
283
- from_db[:undefined_field].should be nil
284
- end
285
- end
286
- end
287
-
288
- context 'when projecting with #only' do
289
- let!(:person) do
290
- Person.create(title: 'sir', name: { first_name: 'Jose', language: { name: 'es' } })
291
- end
292
-
293
- context 'when projecting an embedded association' do
294
- let(:from_db) do
295
- Person.only(:name).first
296
- end
297
-
298
- context 'when retrieving a field of the association using the dot notation' do
299
-
300
- it 'retrieves the field' do
301
- pending 'MONGOID-5032, fixed in 7.3'
302
-
303
- expect(from_db['name.first_name']).to eq 'Jose'
304
- end
305
- end
306
-
307
- context 'when retrieving a field of a nested association using the dot notation' do
308
- it 'retrieves the field' do
309
- pending 'MONGOID-5032, fixed in 7.3'
310
-
311
- expect(from_db['name.language.name']).to eq 'es'
312
- end
313
- end
314
- end
315
-
316
- context 'when projecting a sub-association of an embedded association' do
317
- let(:from_db) do
318
- Person.only('name.language').first
319
- end
320
-
321
- context 'when retrieving a field under the projected sub-association' do
322
- it 'retrieves the field' do
323
- pending 'MONGOID-5032, fixed in 7.3'
324
-
325
- expect(from_db['name.language.name']).to eq 'es'
326
- end
327
- end
328
-
329
- context 'when retrieving a non-projected field' do
330
- it 'raises MissingAttributeError' do
331
- expect do
332
- from_db['name.first_name']
333
- end.to raise_error(ActiveModel::MissingAttributeError)
334
- end
335
- end
336
- end
337
- end
338
-
339
248
  context "when the attribute does not exist" do
340
249
 
341
250
  before do
@@ -420,67 +329,6 @@ describe Mongoid::Attributes do
420
329
  expect(terms).to eq(true)
421
330
  end
422
331
  end
423
-
424
- context 'when the field is not explicitly defined' do
425
- let(:bar) { Bar.new }
426
-
427
- before do
428
- bar['missing_field'] = 42
429
- end
430
-
431
- it 'writes the value into attributes' do
432
- bar.attributes.should == {'_id' => bar.id, 'missing_field' => 42}
433
- end
434
-
435
- it 'makes the attribute accessible via []' do
436
- bar['missing_field'].should == 42
437
- end
438
-
439
- context 'when writing fields on a document with projection' do
440
-
441
- let!(:person) do
442
- Person.create(title: "sir")
443
- end
444
-
445
- context "when excluding with only and the field was not excluded" do
446
-
447
- let(:from_db) do
448
- Person.only(:_id).first
449
- end
450
-
451
- it "raises an error" do
452
- expect {
453
- from_db[:undefined_field] = 'x'
454
- }.to raise_error(ActiveModel::MissingAttributeError)
455
- end
456
- end
457
-
458
- context "when excluding with without and the field was excluded" do
459
-
460
- let(:from_db) do
461
- Person.without(:title).first
462
- end
463
-
464
- it "raises an error" do
465
- expect {
466
- from_db[:title] = 'x'
467
- }.to raise_error(ActiveModel::MissingAttributeError)
468
- end
469
- end
470
-
471
- context "when excluding with without and the field was not excluded" do
472
-
473
- let(:from_db) do
474
- Person.without(:title).first
475
- end
476
-
477
- it "writes the value" do
478
- from_db[:undefined_field] = 'x'
479
- from_db[:undefined_field].should == 'x'
480
- end
481
- end
482
- end
483
- end
484
332
  end
485
333
 
486
334
  describe "#_id" do
@@ -1045,50 +893,6 @@ describe Mongoid::Attributes do
1045
893
  expect(person.age_before_type_cast).to eq("old")
1046
894
  end
1047
895
  end
1048
-
1049
- context 'when reading fields on a document with projection' do
1050
-
1051
- let!(:person) do
1052
- Person.create(title: "sir")
1053
- end
1054
-
1055
- context "when excluding with only and the field was not excluded" do
1056
-
1057
- let(:from_db) do
1058
- Person.only(:_id).first
1059
- end
1060
-
1061
- it "raises an error" do
1062
- expect {
1063
- from_db.read_attribute(:undefined_field)
1064
- }.to raise_error(ActiveModel::MissingAttributeError)
1065
- end
1066
- end
1067
-
1068
- context "when excluding with without and the field was excluded" do
1069
-
1070
- let(:from_db) do
1071
- Person.without(:title).first
1072
- end
1073
-
1074
- it "raises an error" do
1075
- expect {
1076
- from_db.read_attribute(:title)
1077
- }.to raise_error(ActiveModel::MissingAttributeError)
1078
- end
1079
- end
1080
-
1081
- context "when excluding with without and the field was not excluded" do
1082
-
1083
- let(:from_db) do
1084
- Person.without(:title).first
1085
- end
1086
-
1087
- it "returns nil" do
1088
- from_db.read_attribute(:undefined_field).should be nil
1089
- end
1090
- end
1091
- end
1092
896
  end
1093
897
 
1094
898
  describe "#attribute_present?" do
@@ -1594,51 +1398,6 @@ describe Mongoid::Attributes do
1594
1398
  expect(dictionary.description).to eq('foo')
1595
1399
  end
1596
1400
  end
1597
-
1598
- context 'when writing fields on a document with projection' do
1599
-
1600
- let!(:person) do
1601
- Person.create(title: "sir")
1602
- end
1603
-
1604
- context "when excluding with only and the field was not excluded" do
1605
-
1606
- let(:from_db) do
1607
- Person.only(:_id).first
1608
- end
1609
-
1610
- it "raises an error" do
1611
- expect {
1612
- from_db.write_attribute(:undefined_field, 'x')
1613
- }.to raise_error(ActiveModel::MissingAttributeError)
1614
- end
1615
- end
1616
-
1617
- context "when excluding with without and the field was excluded" do
1618
-
1619
- let(:from_db) do
1620
- Person.without(:title).first
1621
- end
1622
-
1623
- it "raises an error" do
1624
- expect {
1625
- from_db.write_attribute(:title, 'x')
1626
- }.to raise_error(ActiveModel::MissingAttributeError)
1627
- end
1628
- end
1629
-
1630
- context "when excluding with without and the field was not excluded" do
1631
-
1632
- let(:from_db) do
1633
- Person.without(:title).first
1634
- end
1635
-
1636
- it "writes the value" do
1637
- from_db.write_attribute(:undefined_field, 'x')
1638
- from_db.read_attribute(:undefined_field).should == 'x'
1639
- end
1640
- end
1641
- end
1642
1401
  end
1643
1402
 
1644
1403
  describe "#typed_value_for" do
@@ -65,15 +65,9 @@ describe Mongoid::Clients::Factory do
65
65
  expect(client).to be_a(Mongo::Client)
66
66
  end
67
67
 
68
- context 'not JRuby' do
69
- # Run this test on JRuby when driver 2.16.0 is released -
70
- # see RUBY-2771.
71
- fails_on_jruby
72
-
73
- it 'does not produce driver warnings' do
74
- Mongo::Logger.logger.should_not receive(:warn)
75
- client
76
- end
68
+ it 'does not produce driver warnings' do
69
+ Mongo::Logger.logger.should_not receive(:warn)
70
+ client
77
71
  end
78
72
 
79
73
  let(:cluster_addresses) do
@@ -85,6 +79,38 @@ describe Mongoid::Clients::Factory do
85
79
  it "sets the platform to Mongoid's platform constant" do
86
80
  expect(client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
87
81
  end
82
+
83
+ context 'driver 2.13+' do
84
+ min_driver_version '2.13'
85
+
86
+ it 'sets Mongoid as a wrapping library' do
87
+ client.options[:wrapping_libraries].should == [BSON::Document.new(
88
+ Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY)]
89
+ end
90
+
91
+ context 'when configuration specifies a wrapping library' do
92
+
93
+ let(:config) do
94
+ {
95
+ default: { hosts: SpecConfig.instance.addresses, database: database_id },
96
+ analytics: {
97
+ hosts: SpecConfig.instance.addresses,
98
+ database: database_id,
99
+ options: {
100
+ wrapping_libraries: [{name: 'Foo'}],
101
+ },
102
+ }
103
+ }
104
+ end
105
+
106
+ it 'adds Mongoid as another wrapping library' do
107
+ client.options[:wrapping_libraries].should == [
108
+ BSON::Document.new(Mongoid::Clients::Factory::MONGOID_WRAPPING_LIBRARY),
109
+ {'name' => 'Foo'},
110
+ ]
111
+ end
112
+ end
113
+ end
88
114
  end
89
115
 
90
116
  context "when the configuration has no ports" do
@@ -83,11 +83,9 @@ describe Mongoid::Clients::Options, retry: 3 do
83
83
 
84
84
  let!(:connections_and_cluster_during) do
85
85
  connections = nil
86
- cluster = nil
87
- Minim.with(options) do |klass|
86
+ cluster = Minim.with(options) do |klass|
88
87
  klass.where(name: 'emily').to_a
89
88
  connections = Minim.mongo_client.database.command(serverStatus: 1).first['connections']['current']
90
- cluster = Minim.collection.cluster
91
89
  end
92
90
  [ connections, cluster ]
93
91
  end
@@ -126,10 +124,7 @@ describe Mongoid::Clients::Options, retry: 3 do
126
124
  end
127
125
 
128
126
  it 'disconnects the new cluster when the block exits' do
129
- expect(cluster_after).not_to be(cluster_during)
130
-
131
- cluster_during.connected?.should be false
132
- cluster_before.connected?.should be true
127
+ expect(connections_before).to eq(connections_after)
133
128
  end
134
129
  end
135
130
 
@@ -143,14 +138,11 @@ describe Mongoid::Clients::Options, retry: 3 do
143
138
 
144
139
  it 'does not create a new cluster' do
145
140
  expect(connections_during).to eq(connections_before)
146
-
147
- cluster_during.should be cluster_before
148
141
  end
149
142
 
150
143
  it 'does not disconnect the original cluster' do
144
+ expect(connections_after).to eq(connections_before)
151
145
  expect(cluster_before).to be(cluster_after)
152
-
153
- cluster_before.connected?.should be true
154
146
  end
155
147
  end
156
148
 
@@ -20,12 +20,7 @@ describe Mongoid::Clients::Sessions do
20
20
 
21
21
  let(:subscriber) do
22
22
  client = Mongoid::Clients.with_name(:other)
23
- monitoring = if client.respond_to?(:monitoring, true)
24
- client.send(:monitoring)
25
- else
26
- # driver 2.5
27
- client.instance_variable_get('@monitoring')
28
- end
23
+ monitoring = client.send(:monitoring)
29
24
  monitoring.subscribers['Command'].find do |s|
30
25
  s.is_a?(EventSubscriber)
31
26
  end
@@ -5,19 +5,9 @@ require "spec_helper"
5
5
 
6
6
  describe Mongoid::Config::Environment do
7
7
 
8
- around do |example|
9
- if defined?(Rails)
10
- SavedRails = Rails
11
- example.run
12
- Object.send(:remove_const, :Rails) if defined?(Rails)
13
- Rails = SavedRails
14
- Object.send(:remove_const, :SavedRails)
15
- else
16
- example.run
17
- if defined?(Rails)
18
- Object.send(:remove_const, :Rails)
19
- end
20
- end
8
+ after(:all) do
9
+ Rails = RailsTemp
10
+ Object.send(:remove_const, :RailsTemp)
21
11
  end
22
12
 
23
13
  describe "#env_name" do
@@ -34,6 +24,11 @@ describe Mongoid::Config::Environment do
34
24
  end
35
25
  end
36
26
 
27
+ after do
28
+ RailsTemp = Rails
29
+ Object.send(:remove_const, :Rails)
30
+ end
31
+
37
32
  it "returns the rails environment" do
38
33
  expect(described_class.env_name).to eq("production")
39
34
  end
@@ -91,77 +86,4 @@ describe Mongoid::Config::Environment do
91
86
  end
92
87
  end
93
88
  end
94
-
95
- describe "#load_yaml" do
96
- let(:path) { 'mongoid.yml' }
97
- let(:environment) {}
98
- before { allow(Rails).to receive('env').and_return('test') }
99
-
100
- subject { described_class.load_yaml(path, environment) }
101
-
102
- context 'when file not found' do
103
- let(:path) { 'not/a/valid/path'}
104
-
105
- it { expect { subject }.to raise_error(Errno::ENOENT) }
106
- end
107
-
108
- context 'when file found' do
109
- before do
110
- allow(File).to receive(:new).with('mongoid.yml').and_return(StringIO.new(file_contents))
111
- end
112
-
113
- let(:file_contents) do
114
- <<~FILE
115
- test:
116
- clients: ['test']
117
- development:
118
- clients: ['dev']
119
- FILE
120
- end
121
-
122
- context 'when file cannot be parsed as YAML' do
123
- let(:file_contents) { "*\nbad:%123abc" }
124
-
125
- it { expect { subject }.to raise_error(Psych::SyntaxError) }
126
- end
127
-
128
- context 'when file contains ERB errors' do
129
- let(:file_contents) { '<%= foo %>' }
130
-
131
- it { expect { subject }.to raise_error(NameError) }
132
- end
133
-
134
- context 'when file is empty' do
135
- let(:file_contents) { '' }
136
-
137
- it { expect { subject }.to raise_error(Mongoid::Errors::EmptyConfigFile) }
138
- end
139
-
140
- context 'when file does not contain a YAML Hash object' do
141
- let(:file_contents) { '["this", "is", "an", "array"]' }
142
-
143
- it { expect { subject }.to raise_error(Mongoid::Errors::InvalidConfigFile) }
144
- end
145
-
146
- context 'when environment not specified' do
147
- it 'uses the rails environment' do
148
- is_expected.to eq("clients"=>["test"])
149
- end
150
- end
151
-
152
- context 'when environment is specified' do
153
- let(:environment) { 'development' }
154
-
155
- it 'uses the specified environment' do
156
- is_expected.to eq("clients"=>["dev"])
157
- end
158
- end
159
-
160
- context 'when environment is missing' do
161
- let(:environment) { 'staging' }
162
-
163
- it { is_expected.to be_nil }
164
- end
165
- end
166
- end
167
89
  end