mongoid 7.1.11 → 7.2.0

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