mongoid_rails4 4.0.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 (659) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3213 -0
  3. data/LICENSE +20 -0
  4. data/README.md +62 -0
  5. data/Rakefile +35 -0
  6. data/lib/config/locales/en.yml +448 -0
  7. data/lib/mongoid.rb +104 -0
  8. data/lib/mongoid/atomic.rb +384 -0
  9. data/lib/mongoid/atomic/modifiers.rb +317 -0
  10. data/lib/mongoid/atomic/paths.rb +3 -0
  11. data/lib/mongoid/atomic/paths/embedded.rb +28 -0
  12. data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
  13. data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
  14. data/lib/mongoid/atomic/paths/root.rb +39 -0
  15. data/lib/mongoid/attributes.rb +284 -0
  16. data/lib/mongoid/attributes/dynamic.rb +154 -0
  17. data/lib/mongoid/attributes/nested.rb +82 -0
  18. data/lib/mongoid/attributes/processing.rb +147 -0
  19. data/lib/mongoid/attributes/readonly.rb +56 -0
  20. data/lib/mongoid/changeable.rb +379 -0
  21. data/lib/mongoid/composable.rb +104 -0
  22. data/lib/mongoid/config.rb +263 -0
  23. data/lib/mongoid/config/environment.rb +44 -0
  24. data/lib/mongoid/config/options.rb +74 -0
  25. data/lib/mongoid/config/validators.rb +3 -0
  26. data/lib/mongoid/config/validators/option.rb +25 -0
  27. data/lib/mongoid/config/validators/session.rb +140 -0
  28. data/lib/mongoid/contextual.rb +54 -0
  29. data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
  30. data/lib/mongoid/contextual/aggregable/mongo.rb +147 -0
  31. data/lib/mongoid/contextual/atomic.rb +180 -0
  32. data/lib/mongoid/contextual/command.rb +61 -0
  33. data/lib/mongoid/contextual/eager.rb +158 -0
  34. data/lib/mongoid/contextual/find_and_modify.rb +69 -0
  35. data/lib/mongoid/contextual/geo_near.rb +238 -0
  36. data/lib/mongoid/contextual/map_reduce.rb +324 -0
  37. data/lib/mongoid/contextual/memory.rb +440 -0
  38. data/lib/mongoid/contextual/mongo.rb +676 -0
  39. data/lib/mongoid/contextual/queryable.rb +25 -0
  40. data/lib/mongoid/contextual/text_search.rb +180 -0
  41. data/lib/mongoid/copyable.rb +67 -0
  42. data/lib/mongoid/criteria.rb +562 -0
  43. data/lib/mongoid/criteria/findable.rb +179 -0
  44. data/lib/mongoid/criteria/inspectable.rb +25 -0
  45. data/lib/mongoid/criteria/marshalable.rb +50 -0
  46. data/lib/mongoid/criteria/modifiable.rb +189 -0
  47. data/lib/mongoid/criteria/scopable.rb +158 -0
  48. data/lib/mongoid/document.rb +361 -0
  49. data/lib/mongoid/equality.rb +66 -0
  50. data/lib/mongoid/errors.rb +40 -0
  51. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  52. data/lib/mongoid/errors/callback.rb +25 -0
  53. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  54. data/lib/mongoid/errors/document_not_found.rb +111 -0
  55. data/lib/mongoid/errors/eager_load.rb +22 -0
  56. data/lib/mongoid/errors/invalid_collection.rb +18 -0
  57. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  58. data/lib/mongoid/errors/invalid_field.rb +64 -0
  59. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  60. data/lib/mongoid/errors/invalid_find.rb +19 -0
  61. data/lib/mongoid/errors/invalid_includes.rb +32 -0
  62. data/lib/mongoid/errors/invalid_index.rb +28 -0
  63. data/lib/mongoid/errors/invalid_options.rb +28 -0
  64. data/lib/mongoid/errors/invalid_path.rb +21 -0
  65. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  66. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  67. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  68. data/lib/mongoid/errors/invalid_time.rb +22 -0
  69. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  70. data/lib/mongoid/errors/mixed_relations.rb +32 -0
  71. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  72. data/lib/mongoid/errors/mongoid_error.rb +92 -0
  73. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  74. data/lib/mongoid/errors/no_default_session.rb +23 -0
  75. data/lib/mongoid/errors/no_environment.rb +19 -0
  76. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  77. data/lib/mongoid/errors/no_metadata.rb +21 -0
  78. data/lib/mongoid/errors/no_parent.rb +24 -0
  79. data/lib/mongoid/errors/no_session_config.rb +22 -0
  80. data/lib/mongoid/errors/no_session_database.rb +27 -0
  81. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  82. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  83. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  84. data/lib/mongoid/errors/scope_overwrite.rb +21 -0
  85. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
  86. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  87. data/lib/mongoid/errors/unsaved_document.rb +19 -0
  88. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  89. data/lib/mongoid/errors/validations.rb +29 -0
  90. data/lib/mongoid/evolvable.rb +19 -0
  91. data/lib/mongoid/extensions.rb +35 -0
  92. data/lib/mongoid/extensions/array.rb +180 -0
  93. data/lib/mongoid/extensions/big_decimal.rb +69 -0
  94. data/lib/mongoid/extensions/boolean.rb +21 -0
  95. data/lib/mongoid/extensions/date.rb +77 -0
  96. data/lib/mongoid/extensions/date_time.rb +73 -0
  97. data/lib/mongoid/extensions/false_class.rb +38 -0
  98. data/lib/mongoid/extensions/float.rb +56 -0
  99. data/lib/mongoid/extensions/hash.rb +209 -0
  100. data/lib/mongoid/extensions/integer.rb +67 -0
  101. data/lib/mongoid/extensions/module.rb +28 -0
  102. data/lib/mongoid/extensions/nil_class.rb +33 -0
  103. data/lib/mongoid/extensions/object.rb +274 -0
  104. data/lib/mongoid/extensions/object_id.rb +54 -0
  105. data/lib/mongoid/extensions/range.rb +79 -0
  106. data/lib/mongoid/extensions/regexp.rb +27 -0
  107. data/lib/mongoid/extensions/set.rb +55 -0
  108. data/lib/mongoid/extensions/string.rb +199 -0
  109. data/lib/mongoid/extensions/symbol.rb +54 -0
  110. data/lib/mongoid/extensions/time.rb +88 -0
  111. data/lib/mongoid/extensions/time_with_zone.rb +56 -0
  112. data/lib/mongoid/extensions/true_class.rb +38 -0
  113. data/lib/mongoid/factory.rb +46 -0
  114. data/lib/mongoid/fields.rb +542 -0
  115. data/lib/mongoid/fields/foreign_key.rb +174 -0
  116. data/lib/mongoid/fields/localized.rb +73 -0
  117. data/lib/mongoid/fields/standard.rb +273 -0
  118. data/lib/mongoid/fields/validators.rb +2 -0
  119. data/lib/mongoid/fields/validators/macro.rb +92 -0
  120. data/lib/mongoid/findable.rb +133 -0
  121. data/lib/mongoid/identity_map.rb +163 -0
  122. data/lib/mongoid/indexable.rb +147 -0
  123. data/lib/mongoid/indexable/specification.rb +115 -0
  124. data/lib/mongoid/indexable/validators/options.rb +103 -0
  125. data/lib/mongoid/inspectable.rb +59 -0
  126. data/lib/mongoid/interceptable.rb +265 -0
  127. data/lib/mongoid/loggable.rb +69 -0
  128. data/lib/mongoid/matchable.rb +152 -0
  129. data/lib/mongoid/matchable/all.rb +27 -0
  130. data/lib/mongoid/matchable/and.rb +30 -0
  131. data/lib/mongoid/matchable/default.rb +72 -0
  132. data/lib/mongoid/matchable/exists.rb +23 -0
  133. data/lib/mongoid/matchable/gt.rb +21 -0
  134. data/lib/mongoid/matchable/gte.rb +21 -0
  135. data/lib/mongoid/matchable/in.rb +24 -0
  136. data/lib/mongoid/matchable/lt.rb +21 -0
  137. data/lib/mongoid/matchable/lte.rb +21 -0
  138. data/lib/mongoid/matchable/ne.rb +21 -0
  139. data/lib/mongoid/matchable/nin.rb +21 -0
  140. data/lib/mongoid/matchable/or.rb +33 -0
  141. data/lib/mongoid/matchable/size.rb +21 -0
  142. data/lib/mongoid/persistable.rb +207 -0
  143. data/lib/mongoid/persistable/creatable.rb +189 -0
  144. data/lib/mongoid/persistable/deletable.rb +149 -0
  145. data/lib/mongoid/persistable/destroyable.rb +55 -0
  146. data/lib/mongoid/persistable/incrementable.rb +36 -0
  147. data/lib/mongoid/persistable/logical.rb +38 -0
  148. data/lib/mongoid/persistable/poppable.rb +39 -0
  149. data/lib/mongoid/persistable/pullable.rb +55 -0
  150. data/lib/mongoid/persistable/pushable.rb +62 -0
  151. data/lib/mongoid/persistable/renamable.rb +35 -0
  152. data/lib/mongoid/persistable/savable.rb +52 -0
  153. data/lib/mongoid/persistable/settable.rb +33 -0
  154. data/lib/mongoid/persistable/unsettable.rb +36 -0
  155. data/lib/mongoid/persistable/updatable.rb +151 -0
  156. data/lib/mongoid/persistable/upsertable.rb +55 -0
  157. data/lib/mongoid/positional.rb +71 -0
  158. data/lib/mongoid/railtie.rb +156 -0
  159. data/lib/mongoid/railties/database.rake +97 -0
  160. data/lib/mongoid/railties/document.rb +12 -0
  161. data/lib/mongoid/relations.rb +162 -0
  162. data/lib/mongoid/relations/accessors.rb +299 -0
  163. data/lib/mongoid/relations/auto_save.rb +106 -0
  164. data/lib/mongoid/relations/binding.rb +218 -0
  165. data/lib/mongoid/relations/bindings.rb +9 -0
  166. data/lib/mongoid/relations/bindings/embedded/in.rb +63 -0
  167. data/lib/mongoid/relations/bindings/embedded/many.rb +50 -0
  168. data/lib/mongoid/relations/bindings/embedded/one.rb +55 -0
  169. data/lib/mongoid/relations/bindings/referenced/in.rb +65 -0
  170. data/lib/mongoid/relations/bindings/referenced/many.rb +42 -0
  171. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +67 -0
  172. data/lib/mongoid/relations/bindings/referenced/one.rb +44 -0
  173. data/lib/mongoid/relations/builder.rb +57 -0
  174. data/lib/mongoid/relations/builders.rb +104 -0
  175. data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
  176. data/lib/mongoid/relations/builders/embedded/many.rb +36 -0
  177. data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
  178. data/lib/mongoid/relations/builders/nested_attributes/many.rb +174 -0
  179. data/lib/mongoid/relations/builders/nested_attributes/one.rb +126 -0
  180. data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
  181. data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
  182. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +40 -0
  183. data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
  184. data/lib/mongoid/relations/cascading.rb +56 -0
  185. data/lib/mongoid/relations/cascading/delete.rb +44 -0
  186. data/lib/mongoid/relations/cascading/destroy.rb +43 -0
  187. data/lib/mongoid/relations/cascading/nullify.rb +35 -0
  188. data/lib/mongoid/relations/cascading/restrict.rb +39 -0
  189. data/lib/mongoid/relations/constraint.rb +49 -0
  190. data/lib/mongoid/relations/conversions.rb +34 -0
  191. data/lib/mongoid/relations/counter_cache.rb +105 -0
  192. data/lib/mongoid/relations/cyclic.rb +107 -0
  193. data/lib/mongoid/relations/embedded/batchable.rb +355 -0
  194. data/lib/mongoid/relations/embedded/in.rb +231 -0
  195. data/lib/mongoid/relations/embedded/many.rb +639 -0
  196. data/lib/mongoid/relations/embedded/one.rb +223 -0
  197. data/lib/mongoid/relations/macros.rb +356 -0
  198. data/lib/mongoid/relations/many.rb +208 -0
  199. data/lib/mongoid/relations/marshalable.rb +32 -0
  200. data/lib/mongoid/relations/metadata.rb +1174 -0
  201. data/lib/mongoid/relations/nested_builder.rb +74 -0
  202. data/lib/mongoid/relations/one.rb +48 -0
  203. data/lib/mongoid/relations/options.rb +48 -0
  204. data/lib/mongoid/relations/polymorphic.rb +39 -0
  205. data/lib/mongoid/relations/proxy.rb +270 -0
  206. data/lib/mongoid/relations/referenced/in.rb +297 -0
  207. data/lib/mongoid/relations/referenced/many.rb +787 -0
  208. data/lib/mongoid/relations/referenced/many_to_many.rb +486 -0
  209. data/lib/mongoid/relations/referenced/one.rb +290 -0
  210. data/lib/mongoid/relations/reflections.rb +62 -0
  211. data/lib/mongoid/relations/synchronization.rb +169 -0
  212. data/lib/mongoid/relations/targets.rb +2 -0
  213. data/lib/mongoid/relations/targets/enumerable.rb +473 -0
  214. data/lib/mongoid/relations/touchable.rb +94 -0
  215. data/lib/mongoid/reloadable.rb +95 -0
  216. data/lib/mongoid/scopable.rb +379 -0
  217. data/lib/mongoid/selectable.rb +59 -0
  218. data/lib/mongoid/serializable.rb +170 -0
  219. data/lib/mongoid/sessions.rb +330 -0
  220. data/lib/mongoid/sessions/factory.rb +129 -0
  221. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  222. data/lib/mongoid/sessions/options.rb +141 -0
  223. data/lib/mongoid/sessions/validators.rb +2 -0
  224. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  225. data/lib/mongoid/shardable.rb +65 -0
  226. data/lib/mongoid/state.rb +97 -0
  227. data/lib/mongoid/threaded.rb +383 -0
  228. data/lib/mongoid/threaded/lifecycle.rb +164 -0
  229. data/lib/mongoid/timestamps.rb +15 -0
  230. data/lib/mongoid/timestamps/created.rb +30 -0
  231. data/lib/mongoid/timestamps/created/short.rb +19 -0
  232. data/lib/mongoid/timestamps/short.rb +10 -0
  233. data/lib/mongoid/timestamps/updated.rb +39 -0
  234. data/lib/mongoid/timestamps/updated/short.rb +19 -0
  235. data/lib/mongoid/traversable.rb +192 -0
  236. data/lib/mongoid/unit_of_work.rb +61 -0
  237. data/lib/mongoid/validatable.rb +180 -0
  238. data/lib/mongoid/validatable/associated.rb +48 -0
  239. data/lib/mongoid/validatable/format.rb +20 -0
  240. data/lib/mongoid/validatable/length.rb +20 -0
  241. data/lib/mongoid/validatable/localizable.rb +30 -0
  242. data/lib/mongoid/validatable/macros.rb +94 -0
  243. data/lib/mongoid/validatable/presence.rb +86 -0
  244. data/lib/mongoid/validatable/queryable.rb +30 -0
  245. data/lib/mongoid/validatable/uniqueness.rb +330 -0
  246. data/lib/mongoid/version.rb +4 -0
  247. data/lib/rack/mongoid.rb +2 -0
  248. data/lib/rack/mongoid/middleware/identity_map.rb +39 -0
  249. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  250. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +76 -0
  251. data/lib/rails/generators/mongoid/model/model_generator.rb +25 -0
  252. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
  253. data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
  254. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
  255. data/lib/rails/generators/mongoid_generator.rb +65 -0
  256. data/lib/rails/mongoid.rb +180 -0
  257. data/lib/support/ruby_version.rb +26 -0
  258. data/spec/app/models/account.rb +28 -0
  259. data/spec/app/models/acolyte.rb +17 -0
  260. data/spec/app/models/actor.rb +18 -0
  261. data/spec/app/models/actress.rb +2 -0
  262. data/spec/app/models/address.rb +77 -0
  263. data/spec/app/models/address_component.rb +5 -0
  264. data/spec/app/models/address_number.rb +6 -0
  265. data/spec/app/models/agency.rb +5 -0
  266. data/spec/app/models/agent.rb +12 -0
  267. data/spec/app/models/album.rb +14 -0
  268. data/spec/app/models/alert.rb +5 -0
  269. data/spec/app/models/animal.rb +25 -0
  270. data/spec/app/models/answer.rb +4 -0
  271. data/spec/app/models/appointment.rb +7 -0
  272. data/spec/app/models/article.rb +10 -0
  273. data/spec/app/models/artist.rb +66 -0
  274. data/spec/app/models/artwork.rb +4 -0
  275. data/spec/app/models/audio.rb +5 -0
  276. data/spec/app/models/augmentation.rb +11 -0
  277. data/spec/app/models/author.rb +4 -0
  278. data/spec/app/models/band.rb +26 -0
  279. data/spec/app/models/bar.rb +10 -0
  280. data/spec/app/models/basic.rb +6 -0
  281. data/spec/app/models/bed.rb +1 -0
  282. data/spec/app/models/big_palette.rb +2 -0
  283. data/spec/app/models/birthday.rb +13 -0
  284. data/spec/app/models/book.rb +13 -0
  285. data/spec/app/models/breed.rb +4 -0
  286. data/spec/app/models/browser.rb +6 -0
  287. data/spec/app/models/building.rb +5 -0
  288. data/spec/app/models/building_address.rb +5 -0
  289. data/spec/app/models/bus.rb +7 -0
  290. data/spec/app/models/business.rb +5 -0
  291. data/spec/app/models/callback_recorder.rb +25 -0
  292. data/spec/app/models/callback_test.rb +9 -0
  293. data/spec/app/models/canvas.rb +25 -0
  294. data/spec/app/models/car.rb +1 -0
  295. data/spec/app/models/cat.rb +8 -0
  296. data/spec/app/models/category.rb +8 -0
  297. data/spec/app/models/child.rb +4 -0
  298. data/spec/app/models/child_doc.rb +22 -0
  299. data/spec/app/models/church.rb +4 -0
  300. data/spec/app/models/circle.rb +3 -0
  301. data/spec/app/models/circuit.rb +4 -0
  302. data/spec/app/models/circus.rb +7 -0
  303. data/spec/app/models/code.rb +5 -0
  304. data/spec/app/models/comment.rb +16 -0
  305. data/spec/app/models/contractor.rb +5 -0
  306. data/spec/app/models/cookie.rb +6 -0
  307. data/spec/app/models/country_code.rb +8 -0
  308. data/spec/app/models/definition.rb +7 -0
  309. data/spec/app/models/description.rb +11 -0
  310. data/spec/app/models/dictionary.rb +10 -0
  311. data/spec/app/models/division.rb +10 -0
  312. data/spec/app/models/doctor.rb +12 -0
  313. data/spec/app/models/dog.rb +7 -0
  314. data/spec/app/models/dokument.rb +5 -0
  315. data/spec/app/models/dragon.rb +4 -0
  316. data/spec/app/models/driver.rb +7 -0
  317. data/spec/app/models/drug.rb +6 -0
  318. data/spec/app/models/dungeon.rb +4 -0
  319. data/spec/app/models/email.rb +6 -0
  320. data/spec/app/models/employer.rb +5 -0
  321. data/spec/app/models/entry.rb +6 -0
  322. data/spec/app/models/eraser.rb +1 -0
  323. data/spec/app/models/event.rb +22 -0
  324. data/spec/app/models/exhibition.rb +4 -0
  325. data/spec/app/models/exhibitor.rb +5 -0
  326. data/spec/app/models/eye.rb +9 -0
  327. data/spec/app/models/eye_bowl.rb +9 -0
  328. data/spec/app/models/face.rb +8 -0
  329. data/spec/app/models/favorite.rb +6 -0
  330. data/spec/app/models/filesystem.rb +5 -0
  331. data/spec/app/models/fire_hydrant.rb +6 -0
  332. data/spec/app/models/firefox.rb +4 -0
  333. data/spec/app/models/fish.rb +7 -0
  334. data/spec/app/models/folder.rb +7 -0
  335. data/spec/app/models/folder_item.rb +9 -0
  336. data/spec/app/models/fruits.rb +28 -0
  337. data/spec/app/models/game.rb +19 -0
  338. data/spec/app/models/ghost.rb +7 -0
  339. data/spec/app/models/home.rb +4 -0
  340. data/spec/app/models/house.rb +6 -0
  341. data/spec/app/models/html_writer.rb +3 -0
  342. data/spec/app/models/image.rb +22 -0
  343. data/spec/app/models/implant.rb +16 -0
  344. data/spec/app/models/item.rb +8 -0
  345. data/spec/app/models/jar.rb +7 -0
  346. data/spec/app/models/label.rb +40 -0
  347. data/spec/app/models/language.rb +5 -0
  348. data/spec/app/models/lat_lng.rb +15 -0
  349. data/spec/app/models/league.rb +11 -0
  350. data/spec/app/models/learner.rb +2 -0
  351. data/spec/app/models/line_item.rb +6 -0
  352. data/spec/app/models/location.rb +8 -0
  353. data/spec/app/models/login.rb +8 -0
  354. data/spec/app/models/manufacturer.rb +7 -0
  355. data/spec/app/models/meat.rb +4 -0
  356. data/spec/app/models/membership.rb +4 -0
  357. data/spec/app/models/mixed_drink.rb +4 -0
  358. data/spec/app/models/movie.rb +13 -0
  359. data/spec/app/models/my_hash.rb +2 -0
  360. data/spec/app/models/name.rb +23 -0
  361. data/spec/app/models/node.rb +5 -0
  362. data/spec/app/models/note.rb +12 -0
  363. data/spec/app/models/ordered_post.rb +6 -0
  364. data/spec/app/models/ordered_preference.rb +6 -0
  365. data/spec/app/models/oscar.rb +15 -0
  366. data/spec/app/models/override.rb +16 -0
  367. data/spec/app/models/ownable.rb +6 -0
  368. data/spec/app/models/owner.rb +6 -0
  369. data/spec/app/models/pack.rb +3 -0
  370. data/spec/app/models/page.rb +5 -0
  371. data/spec/app/models/page_question.rb +4 -0
  372. data/spec/app/models/palette.rb +7 -0
  373. data/spec/app/models/parent.rb +5 -0
  374. data/spec/app/models/parent_doc.rb +6 -0
  375. data/spec/app/models/passport.rb +5 -0
  376. data/spec/app/models/patient.rb +9 -0
  377. data/spec/app/models/pdf_writer.rb +3 -0
  378. data/spec/app/models/pencil.rb +1 -0
  379. data/spec/app/models/person.rb +205 -0
  380. data/spec/app/models/pet.rb +23 -0
  381. data/spec/app/models/pet_owner.rb +6 -0
  382. data/spec/app/models/phone.rb +11 -0
  383. data/spec/app/models/pizza.rb +7 -0
  384. data/spec/app/models/player.rb +35 -0
  385. data/spec/app/models/post.rb +44 -0
  386. data/spec/app/models/powerup.rb +11 -0
  387. data/spec/app/models/preference.rb +9 -0
  388. data/spec/app/models/princess.rb +8 -0
  389. data/spec/app/models/product.rb +15 -0
  390. data/spec/app/models/profile.rb +5 -0
  391. data/spec/app/models/pronunciation.rb +5 -0
  392. data/spec/app/models/purchase.rb +4 -0
  393. data/spec/app/models/question.rb +8 -0
  394. data/spec/app/models/quiz.rb +7 -0
  395. data/spec/app/models/rating.rb +8 -0
  396. data/spec/app/models/record.rb +46 -0
  397. data/spec/app/models/registry.rb +4 -0
  398. data/spec/app/models/role.rb +7 -0
  399. data/spec/app/models/root_category.rb +4 -0
  400. data/spec/app/models/sandwich.rb +4 -0
  401. data/spec/app/models/scheduler.rb +7 -0
  402. data/spec/app/models/seo.rb +7 -0
  403. data/spec/app/models/series.rb +4 -0
  404. data/spec/app/models/server.rb +13 -0
  405. data/spec/app/models/service.rb +22 -0
  406. data/spec/app/models/shape.rb +12 -0
  407. data/spec/app/models/shelf.rb +5 -0
  408. data/spec/app/models/shipping_container.rb +5 -0
  409. data/spec/app/models/shipping_pack.rb +3 -0
  410. data/spec/app/models/shop.rb +6 -0
  411. data/spec/app/models/short_agent.rb +4 -0
  412. data/spec/app/models/short_quiz.rb +5 -0
  413. data/spec/app/models/slave.rb +6 -0
  414. data/spec/app/models/song.rb +8 -0
  415. data/spec/app/models/sound.rb +5 -0
  416. data/spec/app/models/square.rb +4 -0
  417. data/spec/app/models/strategy.rb +3 -0
  418. data/spec/app/models/sub_item.rb +3 -0
  419. data/spec/app/models/subscription.rb +4 -0
  420. data/spec/app/models/survey.rb +5 -0
  421. data/spec/app/models/symptom.rb +6 -0
  422. data/spec/app/models/tag.rb +8 -0
  423. data/spec/app/models/target.rb +5 -0
  424. data/spec/app/models/template.rb +5 -0
  425. data/spec/app/models/thing.rb +9 -0
  426. data/spec/app/models/title.rb +3 -0
  427. data/spec/app/models/tool.rb +8 -0
  428. data/spec/app/models/topping.rb +5 -0
  429. data/spec/app/models/track.rb +38 -0
  430. data/spec/app/models/translation.rb +5 -0
  431. data/spec/app/models/tree.rb +9 -0
  432. data/spec/app/models/truck.rb +3 -0
  433. data/spec/app/models/user.rb +21 -0
  434. data/spec/app/models/user_account.rb +10 -0
  435. data/spec/app/models/validation_callback.rb +10 -0
  436. data/spec/app/models/vehicle.rb +11 -0
  437. data/spec/app/models/version.rb +5 -0
  438. data/spec/app/models/vet_visit.rb +5 -0
  439. data/spec/app/models/video.rb +13 -0
  440. data/spec/app/models/weapon.rb +11 -0
  441. data/spec/app/models/wiki_page.rb +14 -0
  442. data/spec/app/models/word.rb +15 -0
  443. data/spec/app/models/word_origin.rb +11 -0
  444. data/spec/app/models/writer.rb +11 -0
  445. data/spec/config/mongoid.yml +38 -0
  446. data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
  447. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +118 -0
  448. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +110 -0
  449. data/spec/mongoid/atomic/paths/root_spec.rb +48 -0
  450. data/spec/mongoid/atomic/paths_spec.rb +270 -0
  451. data/spec/mongoid/atomic_spec.rb +365 -0
  452. data/spec/mongoid/attributes/nested_spec.rb +4832 -0
  453. data/spec/mongoid/attributes/readonly_spec.rb +169 -0
  454. data/spec/mongoid/attributes_spec.rb +1412 -0
  455. data/spec/mongoid/changeable_spec.rb +1507 -0
  456. data/spec/mongoid/composable_spec.rb +24 -0
  457. data/spec/mongoid/config/environment_spec.rb +83 -0
  458. data/spec/mongoid/config/options_spec.rb +56 -0
  459. data/spec/mongoid/config_spec.rb +318 -0
  460. data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
  461. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
  462. data/spec/mongoid/contextual/atomic_spec.rb +529 -0
  463. data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
  464. data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
  465. data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
  466. data/spec/mongoid/contextual/memory_spec.rb +1236 -0
  467. data/spec/mongoid/contextual/mongo_spec.rb +1843 -0
  468. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  469. data/spec/mongoid/copyable_spec.rb +393 -0
  470. data/spec/mongoid/criteria/findable_spec.rb +1189 -0
  471. data/spec/mongoid/criteria/inspectable_spec.rb +27 -0
  472. data/spec/mongoid/criteria/marshalable_spec.rb +28 -0
  473. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  474. data/spec/mongoid/criteria/scopable_spec.rb +391 -0
  475. data/spec/mongoid/criteria_spec.rb +3821 -0
  476. data/spec/mongoid/document_spec.rb +1205 -0
  477. data/spec/mongoid/equality_spec.rb +241 -0
  478. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
  479. data/spec/mongoid/errors/callback_spec.rb +29 -0
  480. data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
  481. data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
  482. data/spec/mongoid/errors/eager_load_spec.rb +29 -0
  483. data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
  484. data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
  485. data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
  486. data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
  487. data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
  488. data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
  489. data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
  490. data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
  491. data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
  492. data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
  493. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
  494. data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
  495. data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
  496. data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
  497. data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
  498. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
  499. data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
  500. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
  501. data/spec/mongoid/errors/no_environment_spec.rb +29 -0
  502. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
  503. data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
  504. data/spec/mongoid/errors/no_parent_spec.rb +29 -0
  505. data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
  506. data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
  507. data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
  508. data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
  509. data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
  510. data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
  511. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
  512. data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
  513. data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
  514. data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
  515. data/spec/mongoid/errors/validations_spec.rb +45 -0
  516. data/spec/mongoid/extensions/array_spec.rb +638 -0
  517. data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
  518. data/spec/mongoid/extensions/binary_spec.rb +60 -0
  519. data/spec/mongoid/extensions/boolean_spec.rb +135 -0
  520. data/spec/mongoid/extensions/date_spec.rb +235 -0
  521. data/spec/mongoid/extensions/date_time_spec.rb +155 -0
  522. data/spec/mongoid/extensions/false_class_spec.rb +42 -0
  523. data/spec/mongoid/extensions/float_spec.rb +133 -0
  524. data/spec/mongoid/extensions/hash_spec.rb +333 -0
  525. data/spec/mongoid/extensions/integer_spec.rb +136 -0
  526. data/spec/mongoid/extensions/module_spec.rb +42 -0
  527. data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
  528. data/spec/mongoid/extensions/object_id_spec.rb +946 -0
  529. data/spec/mongoid/extensions/object_spec.rb +292 -0
  530. data/spec/mongoid/extensions/range_spec.rb +105 -0
  531. data/spec/mongoid/extensions/regexp_spec.rb +47 -0
  532. data/spec/mongoid/extensions/set_spec.rb +33 -0
  533. data/spec/mongoid/extensions/string_spec.rb +357 -0
  534. data/spec/mongoid/extensions/symbol_spec.rb +76 -0
  535. data/spec/mongoid/extensions/time_spec.rb +467 -0
  536. data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
  537. data/spec/mongoid/extensions/true_class_spec.rb +42 -0
  538. data/spec/mongoid/extensions_spec.rb +15 -0
  539. data/spec/mongoid/factory_spec.rb +185 -0
  540. data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
  541. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
  542. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
  543. data/spec/mongoid/fields/localized_spec.rb +386 -0
  544. data/spec/mongoid/fields/standard_spec.rb +166 -0
  545. data/spec/mongoid/fields_spec.rb +1229 -0
  546. data/spec/mongoid/findable_spec.rb +342 -0
  547. data/spec/mongoid/identity_map_spec.rb +564 -0
  548. data/spec/mongoid/indexable/specification_spec.rb +87 -0
  549. data/spec/mongoid/indexable_spec.rb +504 -0
  550. data/spec/mongoid/inspectable_spec.rb +49 -0
  551. data/spec/mongoid/interceptable_spec.rb +1564 -0
  552. data/spec/mongoid/loggable_spec.rb +21 -0
  553. data/spec/mongoid/matchable/all_spec.rb +31 -0
  554. data/spec/mongoid/matchable/and_spec.rb +162 -0
  555. data/spec/mongoid/matchable/default_spec.rb +130 -0
  556. data/spec/mongoid/matchable/exists_spec.rb +57 -0
  557. data/spec/mongoid/matchable/gt_spec.rb +75 -0
  558. data/spec/mongoid/matchable/gte_spec.rb +74 -0
  559. data/spec/mongoid/matchable/in_spec.rb +25 -0
  560. data/spec/mongoid/matchable/lt_spec.rb +74 -0
  561. data/spec/mongoid/matchable/lte_spec.rb +74 -0
  562. data/spec/mongoid/matchable/ne_spec.rb +25 -0
  563. data/spec/mongoid/matchable/nin_spec.rb +25 -0
  564. data/spec/mongoid/matchable/or_spec.rb +106 -0
  565. data/spec/mongoid/matchable/size_spec.rb +25 -0
  566. data/spec/mongoid/matchable_spec.rb +532 -0
  567. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  568. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  569. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  570. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  571. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  572. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  573. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  574. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  575. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  576. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  577. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  578. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  579. data/spec/mongoid/persistable/updatable_spec.rb +522 -0
  580. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  581. data/spec/mongoid/persistable_spec.rb +206 -0
  582. data/spec/mongoid/positional_spec.rb +227 -0
  583. data/spec/mongoid/railties/document_spec.rb +24 -0
  584. data/spec/mongoid/relations/accessors_spec.rb +736 -0
  585. data/spec/mongoid/relations/auto_save_spec.rb +261 -0
  586. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
  587. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
  588. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
  589. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
  590. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
  591. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
  592. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
  593. data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
  594. data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
  595. data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
  596. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
  597. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
  598. data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
  599. data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
  600. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
  601. data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
  602. data/spec/mongoid/relations/builders_spec.rb +226 -0
  603. data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
  604. data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
  605. data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
  606. data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
  607. data/spec/mongoid/relations/cascading_spec.rb +355 -0
  608. data/spec/mongoid/relations/constraint_spec.rb +74 -0
  609. data/spec/mongoid/relations/conversions_spec.rb +126 -0
  610. data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
  611. data/spec/mongoid/relations/cyclic_spec.rb +156 -0
  612. data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
  613. data/spec/mongoid/relations/embedded/in_spec.rb +579 -0
  614. data/spec/mongoid/relations/embedded/many_spec.rb +3781 -0
  615. data/spec/mongoid/relations/embedded/one_spec.rb +1014 -0
  616. data/spec/mongoid/relations/macros_spec.rb +613 -0
  617. data/spec/mongoid/relations/metadata_spec.rb +1917 -0
  618. data/spec/mongoid/relations/options_spec.rb +35 -0
  619. data/spec/mongoid/relations/polymorphic_spec.rb +128 -0
  620. data/spec/mongoid/relations/proxy_spec.rb +48 -0
  621. data/spec/mongoid/relations/referenced/in_spec.rb +1435 -0
  622. data/spec/mongoid/relations/referenced/many_spec.rb +3546 -0
  623. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3556 -0
  624. data/spec/mongoid/relations/referenced/one_spec.rb +1289 -0
  625. data/spec/mongoid/relations/reflections_spec.rb +101 -0
  626. data/spec/mongoid/relations/synchronization_spec.rb +449 -0
  627. data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
  628. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  629. data/spec/mongoid/relations_spec.rb +188 -0
  630. data/spec/mongoid/reloadable_spec.rb +305 -0
  631. data/spec/mongoid/scopable_spec.rb +926 -0
  632. data/spec/mongoid/selectable_spec.rb +134 -0
  633. data/spec/mongoid/serializable_spec.rb +862 -0
  634. data/spec/mongoid/sessions/factory_spec.rb +312 -0
  635. data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
  636. data/spec/mongoid/sessions/options_spec.rb +71 -0
  637. data/spec/mongoid/sessions_spec.rb +1078 -0
  638. data/spec/mongoid/shardable_spec.rb +61 -0
  639. data/spec/mongoid/state_spec.rb +102 -0
  640. data/spec/mongoid/threaded_spec.rb +258 -0
  641. data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
  642. data/spec/mongoid/timestamps/created_spec.rb +44 -0
  643. data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
  644. data/spec/mongoid/timestamps/updated_spec.rb +86 -0
  645. data/spec/mongoid/timestamps_spec.rb +112 -0
  646. data/spec/mongoid/traversable_spec.rb +244 -0
  647. data/spec/mongoid/unit_of_work_spec.rb +196 -0
  648. data/spec/mongoid/validatable/associated_spec.rb +183 -0
  649. data/spec/mongoid/validatable/format_spec.rb +83 -0
  650. data/spec/mongoid/validatable/length_spec.rb +119 -0
  651. data/spec/mongoid/validatable/numericality_spec.rb +30 -0
  652. data/spec/mongoid/validatable/presence_spec.rb +511 -0
  653. data/spec/mongoid/validatable/uniqueness_spec.rb +2305 -0
  654. data/spec/mongoid/validatable_spec.rb +309 -0
  655. data/spec/mongoid_spec.rb +74 -0
  656. data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
  657. data/spec/rails/mongoid_spec.rb +462 -0
  658. data/spec/spec_helper.rb +103 -0
  659. metadata +1159 -0
@@ -0,0 +1,136 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Integer do
4
+
5
+ let(:number) do
6
+ 118347652312341
7
+ end
8
+
9
+ describe "#__mongoize_time__" do
10
+
11
+ let(:integer) do
12
+ 1335532685
13
+ end
14
+
15
+ let(:mongoized) do
16
+ integer.__mongoize_time__
17
+ end
18
+
19
+ it "returns the float as a time" do
20
+ expect(mongoized).to eq(Time.at(integer))
21
+ end
22
+ end
23
+
24
+ describe ".demongoize" do
25
+
26
+ context "when the the value is an integer" do
27
+
28
+ it "returns a integer" do
29
+ expect(Integer.demongoize(number)).to eq(number)
30
+ end
31
+ end
32
+
33
+ context "when the value is nil" do
34
+
35
+ it "returns nil" do
36
+ expect(Integer.demongoize(nil)).to be_nil
37
+ end
38
+ end
39
+
40
+ context "when the value is not an integer" do
41
+
42
+ it "converts the value to an integer" do
43
+ expect(Integer.demongoize("1.0")).to eq(1)
44
+ end
45
+ end
46
+ end
47
+
48
+ describe ".mongoize" do
49
+
50
+ context "when the value is a number" do
51
+
52
+ context "when the value is an integer" do
53
+
54
+ context "when the value is small" do
55
+
56
+ it "it returns the integer" do
57
+ expect(Integer.mongoize(3)).to eq(3)
58
+ end
59
+ end
60
+
61
+ context "when the value is large" do
62
+
63
+ it "returns the integer" do
64
+ expect(Integer.mongoize(1024**2).to_s).to eq("1048576")
65
+ end
66
+ end
67
+ end
68
+
69
+ context "when the value is a decimal" do
70
+
71
+ it "casts to integer" do
72
+ expect(Integer.mongoize(2.5)).to eq(2)
73
+ end
74
+ end
75
+
76
+ context "when the value is floating point zero" do
77
+
78
+ it "returns the integer zero" do
79
+ expect(Integer.mongoize(0.00000)).to eq(0)
80
+ end
81
+ end
82
+
83
+ context "when the value is a floating point integer" do
84
+
85
+ it "returns the integer number" do
86
+ expect(Integer.mongoize(4.00000)).to eq(4)
87
+ end
88
+ end
89
+
90
+ context "when the value has leading zeros" do
91
+
92
+ it "returns the stripped integer" do
93
+ expect(Integer.mongoize("000011")).to eq(11)
94
+ end
95
+ end
96
+ end
97
+
98
+ context "when the string is not a number" do
99
+
100
+ context "when the string is non numerical" do
101
+
102
+ it "returns 0" do
103
+ expect(Integer.mongoize("foo")).to eq(0)
104
+ end
105
+ end
106
+
107
+ context "when the string is numerical" do
108
+
109
+ it "returns the integer value for the string" do
110
+ expect(Integer.mongoize("3")).to eq(3)
111
+ end
112
+ end
113
+
114
+ context "when the string is empty" do
115
+
116
+ it "returns nil" do
117
+ expect(Integer.mongoize("")).to be_nil
118
+ end
119
+ end
120
+
121
+ context "when the string is nil" do
122
+
123
+ it "returns nil" do
124
+ expect(Integer.mongoize(nil)).to be_nil
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ describe "#mongoize" do
131
+
132
+ it "returns self" do
133
+ expect(number.mongoize).to eq(number)
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,42 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Module do
4
+
5
+ describe "#re_define_method" do
6
+
7
+ context "when the method already exists" do
8
+
9
+ class Smoochy
10
+ def sing
11
+ "singing"
12
+ end
13
+ end
14
+
15
+ before do
16
+ Smoochy.re_define_method("sing") do
17
+ "singing again"
18
+ end
19
+ end
20
+
21
+ it "redefines the existing method" do
22
+ expect(Smoochy.new.sing).to eq("singing again")
23
+ end
24
+ end
25
+
26
+ context "when the method does not exist" do
27
+
28
+ class Rhino
29
+ end
30
+
31
+ before do
32
+ Rhino.re_define_method("sing") do
33
+ "singing"
34
+ end
35
+ end
36
+
37
+ it "redefines the existing method" do
38
+ expect(Rhino.new.sing).to eq("singing")
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::NilClass do
4
+
5
+ describe "#collectionize" do
6
+
7
+ it "returns ''" do
8
+ expect(nil.collectionize).to be_empty
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,946 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::ObjectId do
4
+
5
+ let(:object_id) do
6
+ Moped::BSON::ObjectId.new
7
+ end
8
+
9
+ let(:composite_key) do
10
+ "21-jump-street"
11
+ end
12
+
13
+ describe "#__evolve_object_id__" do
14
+
15
+ it "returns self" do
16
+ expect(object_id.__evolve_object_id__).to eq(object_id)
17
+ end
18
+
19
+ it "returns the same instance" do
20
+ expect(object_id.__evolve_object_id__).to equal(object_id)
21
+ end
22
+ end
23
+
24
+ describe ".evolve" do
25
+
26
+ context "when the class is using object ids" do
27
+
28
+ context "when provided a single object id" do
29
+
30
+ let(:evolved) do
31
+ Moped::BSON::ObjectId.evolve(object_id)
32
+ end
33
+
34
+ it "returns the object id" do
35
+ expect(evolved).to eq(object_id)
36
+ end
37
+ end
38
+
39
+ context "when provided an array of object ids" do
40
+
41
+ let(:other_id) do
42
+ Moped::BSON::ObjectId.new
43
+ end
44
+
45
+ let(:evolved) do
46
+ Moped::BSON::ObjectId.evolve([ object_id, other_id ])
47
+ end
48
+
49
+ it "returns the array of object ids" do
50
+ expect(evolved).to eq([ object_id, other_id ])
51
+ end
52
+ end
53
+
54
+ context "when provided a single string" do
55
+
56
+ context "when the string is a valid object id" do
57
+
58
+ let(:evolved) do
59
+ Moped::BSON::ObjectId.evolve(object_id.to_s)
60
+ end
61
+
62
+ it "evolves to an object id" do
63
+ expect(evolved).to eq(object_id)
64
+ end
65
+ end
66
+
67
+ context "when the string is not a valid object id" do
68
+
69
+ it "returns the key" do
70
+ expect(Moped::BSON::ObjectId.evolve(composite_key)).to eq(
71
+ composite_key
72
+ )
73
+ end
74
+ end
75
+
76
+ context "when the string is empty" do
77
+
78
+ let(:evolved) do
79
+ Moped::BSON::ObjectId.evolve("")
80
+ end
81
+
82
+ it "evolves to an empty string" do
83
+ expect(evolved).to be_empty
84
+ end
85
+ end
86
+ end
87
+
88
+ context "when provided an array" do
89
+
90
+ context "when array key of nils" do
91
+
92
+ let(:evolved) do
93
+ Moped::BSON::ObjectId.evolve([ nil, nil ])
94
+ end
95
+
96
+ it "returns the array with nils" do
97
+ expect(evolved).to eq([ nil, nil ])
98
+ end
99
+ end
100
+
101
+ context "when the array key is empty strings" do
102
+
103
+ let(:evolved) do
104
+ Moped::BSON::ObjectId.evolve([ "", "" ])
105
+ end
106
+
107
+ it "returns the array with empty strings" do
108
+ expect(evolved).to eq([ "", "" ])
109
+ end
110
+ end
111
+
112
+ context "when the array key is full of strings" do
113
+
114
+ context "when the strings are valid object ids" do
115
+
116
+ let(:other_id) do
117
+ Moped::BSON::ObjectId.new
118
+ end
119
+
120
+ let(:evolved) do
121
+ Moped::BSON::ObjectId.evolve([ object_id.to_s, other_id.to_s ])
122
+ end
123
+
124
+ it "evolves to an array of object ids" do
125
+ expect(evolved).to eq([ object_id, other_id ])
126
+ end
127
+ end
128
+
129
+ context "when the strings are not valid object ids" do
130
+
131
+ let(:other_key) do
132
+ "hawaii-five-o"
133
+ end
134
+
135
+ let(:evolved) do
136
+ Moped::BSON::ObjectId.evolve([ composite_key, other_key ])
137
+ end
138
+
139
+ it "returns the key" do
140
+ expect(Moped::BSON::ObjectId.evolve(composite_key)).to eq(
141
+ composite_key
142
+ )
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ context "when provided a hash" do
149
+
150
+ context "when the hash key is _id" do
151
+
152
+ context "when the value is an object id" do
153
+
154
+ let(:hash) do
155
+ { _id: object_id }
156
+ end
157
+
158
+ let(:evolved) do
159
+ Moped::BSON::ObjectId.evolve(hash)
160
+ end
161
+
162
+ it "returns the hash" do
163
+ expect(evolved).to eq(hash)
164
+ end
165
+ end
166
+
167
+ context "when the value is an array of object ids" do
168
+
169
+ let(:other_id) do
170
+ Moped::BSON::ObjectId.new
171
+ end
172
+
173
+ let(:hash) do
174
+ { _id: [ object_id, other_id ] }
175
+ end
176
+
177
+ let(:evolved) do
178
+ Moped::BSON::ObjectId.evolve(hash)
179
+ end
180
+
181
+ it "returns the hash" do
182
+ expect(evolved).to eq(hash)
183
+ end
184
+ end
185
+
186
+ context "when the value is a string" do
187
+
188
+ let(:hash) do
189
+ { _id: object_id.to_s }
190
+ end
191
+
192
+ let(:evolved) do
193
+ Moped::BSON::ObjectId.evolve(hash)
194
+ end
195
+
196
+ it "returns the hash with evolved value" do
197
+ expect(evolved).to eq({ _id: object_id })
198
+ end
199
+ end
200
+
201
+ context "when the value is an array of strings" do
202
+
203
+ let(:other_id) do
204
+ Moped::BSON::ObjectId.new
205
+ end
206
+
207
+ let(:hash) do
208
+ { _id: [ object_id.to_s, other_id.to_s ] }
209
+ end
210
+
211
+ let(:evolved) do
212
+ Moped::BSON::ObjectId.evolve(hash)
213
+ end
214
+
215
+ it "returns the hash with evolved values" do
216
+ expect(evolved).to eq({ _id: [ object_id, other_id ] })
217
+ end
218
+ end
219
+ end
220
+
221
+ context "when the hash key is id" do
222
+
223
+ context "when the value is an object id" do
224
+
225
+ let(:hash) do
226
+ { id: object_id }
227
+ end
228
+
229
+ let(:evolved) do
230
+ Moped::BSON::ObjectId.evolve(hash)
231
+ end
232
+
233
+ it "returns the hash" do
234
+ expect(evolved).to eq(hash)
235
+ end
236
+ end
237
+
238
+ context "when the value is an array of object ids" do
239
+
240
+ let(:other_id) do
241
+ Moped::BSON::ObjectId.new
242
+ end
243
+
244
+ let(:hash) do
245
+ { id: [ object_id, other_id ] }
246
+ end
247
+
248
+ let(:evolved) do
249
+ Moped::BSON::ObjectId.evolve(hash)
250
+ end
251
+
252
+ it "returns the hash" do
253
+ expect(evolved).to eq(hash)
254
+ end
255
+ end
256
+
257
+ context "when the value is a string" do
258
+
259
+ let(:hash) do
260
+ { id: object_id.to_s }
261
+ end
262
+
263
+ let(:evolved) do
264
+ Moped::BSON::ObjectId.evolve(hash)
265
+ end
266
+
267
+ it "returns the hash with evolved value" do
268
+ expect(evolved).to eq({ id: object_id })
269
+ end
270
+ end
271
+
272
+ context "when the value is an array of strings" do
273
+
274
+ let(:other_id) do
275
+ Moped::BSON::ObjectId.new
276
+ end
277
+
278
+ let(:hash) do
279
+ { id: [ object_id.to_s, other_id.to_s ] }
280
+ end
281
+
282
+ let(:evolved) do
283
+ Moped::BSON::ObjectId.evolve(hash)
284
+ end
285
+
286
+ it "returns the hash with evolved values" do
287
+ expect(evolved).to eq({ id: [ object_id, other_id ] })
288
+ end
289
+ end
290
+ end
291
+
292
+ context "when the hash key is not an id" do
293
+
294
+ context "when the value is a string" do
295
+
296
+ let(:hash) do
297
+ { key: composite_key }
298
+ end
299
+
300
+ let(:evolved) do
301
+ Moped::BSON::ObjectId.evolve(hash)
302
+ end
303
+
304
+ it "returns the hash" do
305
+ expect(evolved).to eq(hash)
306
+ end
307
+ end
308
+
309
+ context "when the value is an array of strings" do
310
+
311
+ let(:hash) do
312
+ { key: [ composite_key ] }
313
+ end
314
+
315
+ let(:evolved) do
316
+ Moped::BSON::ObjectId.evolve(hash)
317
+ end
318
+
319
+ it "returns the hash" do
320
+ expect(evolved).to eq(hash)
321
+ end
322
+ end
323
+ end
324
+ end
325
+ end
326
+ end
327
+
328
+ describe ".mongoize" do
329
+
330
+ context "when the class is using object ids" do
331
+
332
+ context "when provided a single object id" do
333
+
334
+ let(:mongoized) do
335
+ Moped::BSON::ObjectId.mongoize(object_id)
336
+ end
337
+
338
+ it "returns the object id" do
339
+ expect(mongoized).to eq(object_id)
340
+ end
341
+ end
342
+
343
+ context "when provided an array of object ids" do
344
+
345
+ let(:other_id) do
346
+ Moped::BSON::ObjectId.new
347
+ end
348
+
349
+ let(:mongoized) do
350
+ Moped::BSON::ObjectId.mongoize([ object_id, other_id ])
351
+ end
352
+
353
+ it "returns the array of object ids" do
354
+ expect(mongoized).to eq([ object_id, other_id ])
355
+ end
356
+ end
357
+
358
+ context "when provided a single string" do
359
+
360
+ context "when the string is a valid object id" do
361
+
362
+ let(:mongoized) do
363
+ Moped::BSON::ObjectId.mongoize(object_id.to_s)
364
+ end
365
+
366
+ it "mongoizes to an object id" do
367
+ expect(mongoized).to eq(object_id)
368
+ end
369
+ end
370
+
371
+ context "when the string is not a valid object id" do
372
+
373
+ it "returns the key" do
374
+ expect(Moped::BSON::ObjectId.mongoize(composite_key)).to eq(
375
+ composite_key
376
+ )
377
+ end
378
+ end
379
+
380
+ context "when the string is empty" do
381
+
382
+ let(:mongoized) do
383
+ Moped::BSON::ObjectId.mongoize("")
384
+ end
385
+
386
+ it "mongoizes to nil" do
387
+ expect(mongoized).to be_nil
388
+ end
389
+ end
390
+ end
391
+
392
+ context "when provided an array" do
393
+
394
+ context "when array key of nils" do
395
+
396
+ let(:mongoized) do
397
+ Moped::BSON::ObjectId.mongoize([ nil, nil ])
398
+ end
399
+
400
+ it "returns an empty array" do
401
+ expect(mongoized).to be_empty
402
+ end
403
+ end
404
+
405
+ context "when the array key is empty strings" do
406
+
407
+ let(:mongoized) do
408
+ Moped::BSON::ObjectId.mongoize([ "", "" ])
409
+ end
410
+
411
+ it "returns an empty array" do
412
+ expect(mongoized).to be_empty
413
+ end
414
+ end
415
+
416
+ context "when the array key is full of strings" do
417
+
418
+ context "when the strings are valid object ids" do
419
+
420
+ let(:other_id) do
421
+ Moped::BSON::ObjectId.new
422
+ end
423
+
424
+ let(:mongoized) do
425
+ Moped::BSON::ObjectId.mongoize([ object_id.to_s, other_id.to_s ])
426
+ end
427
+
428
+ it "mongoizes to an array of object ids" do
429
+ expect(mongoized).to eq([ object_id, other_id ])
430
+ end
431
+ end
432
+
433
+ context "when the strings are not valid object ids" do
434
+
435
+ let(:other_key) do
436
+ "hawaii-five-o"
437
+ end
438
+
439
+ let(:mongoized) do
440
+ Moped::BSON::ObjectId.mongoize([ composite_key, other_key ])
441
+ end
442
+
443
+ it "returns the key" do
444
+ expect(Moped::BSON::ObjectId.mongoize(composite_key)).to eq(
445
+ composite_key
446
+ )
447
+ end
448
+ end
449
+ end
450
+ end
451
+
452
+ context "when provided a hash" do
453
+
454
+ context "when the hash key is _id" do
455
+
456
+ context "when the value is an object id" do
457
+
458
+ let(:hash) do
459
+ { _id: object_id }
460
+ end
461
+
462
+ let(:mongoized) do
463
+ Moped::BSON::ObjectId.mongoize(hash)
464
+ end
465
+
466
+ it "returns the hash" do
467
+ expect(mongoized).to eq(hash)
468
+ end
469
+ end
470
+
471
+ context "when the value is an array of object ids" do
472
+
473
+ let(:other_id) do
474
+ Moped::BSON::ObjectId.new
475
+ end
476
+
477
+ let(:hash) do
478
+ { _id: [ object_id, other_id ] }
479
+ end
480
+
481
+ let(:mongoized) do
482
+ Moped::BSON::ObjectId.mongoize(hash)
483
+ end
484
+
485
+ it "returns the hash" do
486
+ expect(mongoized).to eq(hash)
487
+ end
488
+ end
489
+
490
+ context "when the value is a string" do
491
+
492
+ let(:hash) do
493
+ { _id: object_id.to_s }
494
+ end
495
+
496
+ let(:mongoized) do
497
+ Moped::BSON::ObjectId.mongoize(hash)
498
+ end
499
+
500
+ it "returns the hash with mongoized value" do
501
+ expect(mongoized).to eq({ _id: object_id })
502
+ end
503
+ end
504
+
505
+ context "when the value is an array of strings" do
506
+
507
+ let(:other_id) do
508
+ Moped::BSON::ObjectId.new
509
+ end
510
+
511
+ let(:hash) do
512
+ { _id: [ object_id.to_s, other_id.to_s ] }
513
+ end
514
+
515
+ let(:mongoized) do
516
+ Moped::BSON::ObjectId.mongoize(hash)
517
+ end
518
+
519
+ it "returns the hash with mongoized values" do
520
+ expect(mongoized).to eq({ _id: [ object_id, other_id ] })
521
+ end
522
+ end
523
+ end
524
+
525
+ context "when the hash key is id" do
526
+
527
+ context "when the value is an object id" do
528
+
529
+ let(:hash) do
530
+ { id: object_id }
531
+ end
532
+
533
+ let(:mongoized) do
534
+ Moped::BSON::ObjectId.mongoize(hash)
535
+ end
536
+
537
+ it "returns the hash" do
538
+ expect(mongoized).to eq(hash)
539
+ end
540
+ end
541
+
542
+ context "when the value is an array of object ids" do
543
+
544
+ let(:other_id) do
545
+ Moped::BSON::ObjectId.new
546
+ end
547
+
548
+ let(:hash) do
549
+ { id: [ object_id, other_id ] }
550
+ end
551
+
552
+ let(:mongoized) do
553
+ Moped::BSON::ObjectId.mongoize(hash)
554
+ end
555
+
556
+ it "returns the hash" do
557
+ expect(mongoized).to eq(hash)
558
+ end
559
+ end
560
+
561
+ context "when the value is a string" do
562
+
563
+ let(:hash) do
564
+ { id: object_id.to_s }
565
+ end
566
+
567
+ let(:mongoized) do
568
+ Moped::BSON::ObjectId.mongoize(hash)
569
+ end
570
+
571
+ it "returns the hash with mongoized value" do
572
+ expect(mongoized).to eq({ id: object_id })
573
+ end
574
+ end
575
+
576
+ context "when the value is an array of strings" do
577
+
578
+ let(:other_id) do
579
+ Moped::BSON::ObjectId.new
580
+ end
581
+
582
+ let(:hash) do
583
+ { id: [ object_id.to_s, other_id.to_s ] }
584
+ end
585
+
586
+ let(:mongoized) do
587
+ Moped::BSON::ObjectId.mongoize(hash)
588
+ end
589
+
590
+ it "returns the hash with mongoized values" do
591
+ expect(mongoized).to eq({ id: [ object_id, other_id ] })
592
+ end
593
+ end
594
+ end
595
+
596
+ context "when the hash key is not an id" do
597
+
598
+ context "when the value is a string" do
599
+
600
+ let(:hash) do
601
+ { key: composite_key }
602
+ end
603
+
604
+ let(:mongoized) do
605
+ Moped::BSON::ObjectId.mongoize(hash)
606
+ end
607
+
608
+ it "returns the hash" do
609
+ expect(mongoized).to eq(hash)
610
+ end
611
+ end
612
+
613
+ context "when the value is an array of strings" do
614
+
615
+ let(:hash) do
616
+ { key: [ composite_key ] }
617
+ end
618
+
619
+ let(:mongoized) do
620
+ Moped::BSON::ObjectId.mongoize(hash)
621
+ end
622
+
623
+ it "returns the hash" do
624
+ expect(mongoized).to eq(hash)
625
+ end
626
+ end
627
+ end
628
+ end
629
+ end
630
+ end
631
+
632
+ describe ".mongoize" do
633
+
634
+ context "when the class is using object ids" do
635
+
636
+ context "when provided a single object id" do
637
+
638
+ let(:mongoized) do
639
+ Moped::BSON::ObjectId.mongoize(object_id)
640
+ end
641
+
642
+ it "returns the object id" do
643
+ expect(mongoized).to eq(object_id)
644
+ end
645
+ end
646
+
647
+ context "when provided an array of object ids" do
648
+
649
+ let(:other_id) do
650
+ Moped::BSON::ObjectId.new
651
+ end
652
+
653
+ let(:mongoized) do
654
+ Moped::BSON::ObjectId.mongoize([ object_id, other_id ])
655
+ end
656
+
657
+ it "returns the array of object ids" do
658
+ expect(mongoized).to eq([ object_id, other_id ])
659
+ end
660
+ end
661
+
662
+ context "when provided a single string" do
663
+
664
+ context "when the string is a valid object id" do
665
+
666
+ let(:mongoized) do
667
+ Moped::BSON::ObjectId.mongoize(object_id.to_s)
668
+ end
669
+
670
+ it "mongoizes to an object id" do
671
+ expect(mongoized).to eq(object_id)
672
+ end
673
+ end
674
+
675
+ context "when the string is not a valid object id" do
676
+
677
+ it "returns the key" do
678
+ expect(Moped::BSON::ObjectId.mongoize(composite_key)).to eq(
679
+ composite_key
680
+ )
681
+ end
682
+ end
683
+
684
+ context "when the string is empty" do
685
+
686
+ let(:mongoized) do
687
+ Moped::BSON::ObjectId.mongoize("")
688
+ end
689
+
690
+ it "mongoizes to nil" do
691
+ expect(mongoized).to be_nil
692
+ end
693
+ end
694
+ end
695
+
696
+ context "when provided an array" do
697
+
698
+ context "when array key of nils" do
699
+
700
+ let(:mongoized) do
701
+ Moped::BSON::ObjectId.mongoize([ nil, nil ])
702
+ end
703
+
704
+ it "returns an empty array" do
705
+ expect(mongoized).to be_empty
706
+ end
707
+ end
708
+
709
+ context "when the array key is empty strings" do
710
+
711
+ let(:mongoized) do
712
+ Moped::BSON::ObjectId.mongoize([ "", "" ])
713
+ end
714
+
715
+ it "returns an empty array" do
716
+ expect(mongoized).to be_empty
717
+ end
718
+ end
719
+
720
+ context "when the array key is full of strings" do
721
+
722
+ context "when the strings are valid object ids" do
723
+
724
+ let(:other_id) do
725
+ Moped::BSON::ObjectId.new
726
+ end
727
+
728
+ let(:mongoized) do
729
+ Moped::BSON::ObjectId.mongoize([ object_id.to_s, other_id.to_s ])
730
+ end
731
+
732
+ it "mongoizes to an array of object ids" do
733
+ expect(mongoized).to eq([ object_id, other_id ])
734
+ end
735
+ end
736
+
737
+ context "when the strings are not valid object ids" do
738
+
739
+ let(:other_key) do
740
+ "hawaii-five-o"
741
+ end
742
+
743
+ let(:mongoized) do
744
+ Moped::BSON::ObjectId.mongoize([ composite_key, other_key ])
745
+ end
746
+
747
+ it "returns the key" do
748
+ expect(Moped::BSON::ObjectId.mongoize(composite_key)).to eq(
749
+ composite_key
750
+ )
751
+ end
752
+ end
753
+ end
754
+ end
755
+
756
+ context "when provided a hash" do
757
+
758
+ context "when the hash key is _id" do
759
+
760
+ context "when the value is an object id" do
761
+
762
+ let(:hash) do
763
+ { _id: object_id }
764
+ end
765
+
766
+ let(:mongoized) do
767
+ Moped::BSON::ObjectId.mongoize(hash)
768
+ end
769
+
770
+ it "returns the hash" do
771
+ expect(mongoized).to eq(hash)
772
+ end
773
+ end
774
+
775
+ context "when the value is an array of object ids" do
776
+
777
+ let(:other_id) do
778
+ Moped::BSON::ObjectId.new
779
+ end
780
+
781
+ let(:hash) do
782
+ { _id: [ object_id, other_id ] }
783
+ end
784
+
785
+ let(:mongoized) do
786
+ Moped::BSON::ObjectId.mongoize(hash)
787
+ end
788
+
789
+ it "returns the hash" do
790
+ expect(mongoized).to eq(hash)
791
+ end
792
+ end
793
+
794
+ context "when the value is a string" do
795
+
796
+ let(:hash) do
797
+ { _id: object_id.to_s }
798
+ end
799
+
800
+ let(:mongoized) do
801
+ Moped::BSON::ObjectId.mongoize(hash)
802
+ end
803
+
804
+ it "returns the hash with mongoized value" do
805
+ expect(mongoized).to eq({ _id: object_id })
806
+ end
807
+ end
808
+
809
+ context "when the value is an array of strings" do
810
+
811
+ let(:other_id) do
812
+ Moped::BSON::ObjectId.new
813
+ end
814
+
815
+ let(:hash) do
816
+ { _id: [ object_id.to_s, other_id.to_s ] }
817
+ end
818
+
819
+ let(:mongoized) do
820
+ Moped::BSON::ObjectId.mongoize(hash)
821
+ end
822
+
823
+ it "returns the hash with mongoized values" do
824
+ expect(mongoized).to eq({ _id: [ object_id, other_id ] })
825
+ end
826
+ end
827
+ end
828
+
829
+ context "when the hash key is id" do
830
+
831
+ context "when the value is an object id" do
832
+
833
+ let(:hash) do
834
+ { id: object_id }
835
+ end
836
+
837
+ let(:mongoized) do
838
+ Moped::BSON::ObjectId.mongoize(hash)
839
+ end
840
+
841
+ it "returns the hash" do
842
+ expect(mongoized).to eq(hash)
843
+ end
844
+ end
845
+
846
+ context "when the value is an array of object ids" do
847
+
848
+ let(:other_id) do
849
+ Moped::BSON::ObjectId.new
850
+ end
851
+
852
+ let(:hash) do
853
+ { id: [ object_id, other_id ] }
854
+ end
855
+
856
+ let(:mongoized) do
857
+ Moped::BSON::ObjectId.mongoize(hash)
858
+ end
859
+
860
+ it "returns the hash" do
861
+ expect(mongoized).to eq(hash)
862
+ end
863
+ end
864
+
865
+ context "when the value is a string" do
866
+
867
+ let(:hash) do
868
+ { id: object_id.to_s }
869
+ end
870
+
871
+ let(:mongoized) do
872
+ Moped::BSON::ObjectId.mongoize(hash)
873
+ end
874
+
875
+ it "returns the hash with mongoized value" do
876
+ expect(mongoized).to eq({ id: object_id })
877
+ end
878
+ end
879
+
880
+ context "when the value is an array of strings" do
881
+
882
+ let(:other_id) do
883
+ Moped::BSON::ObjectId.new
884
+ end
885
+
886
+ let(:hash) do
887
+ { id: [ object_id.to_s, other_id.to_s ] }
888
+ end
889
+
890
+ let(:mongoized) do
891
+ Moped::BSON::ObjectId.mongoize(hash)
892
+ end
893
+
894
+ it "returns the hash with mongoized values" do
895
+ expect(mongoized).to eq({ id: [ object_id, other_id ] })
896
+ end
897
+ end
898
+ end
899
+
900
+ context "when the hash key is not an id" do
901
+
902
+ context "when the value is a string" do
903
+
904
+ let(:hash) do
905
+ { key: composite_key }
906
+ end
907
+
908
+ let(:mongoized) do
909
+ Moped::BSON::ObjectId.mongoize(hash)
910
+ end
911
+
912
+ it "returns the hash" do
913
+ expect(mongoized).to eq(hash)
914
+ end
915
+ end
916
+
917
+ context "when the value is an array of strings" do
918
+
919
+ let(:hash) do
920
+ { key: [ composite_key ] }
921
+ end
922
+
923
+ let(:mongoized) do
924
+ Moped::BSON::ObjectId.mongoize(hash)
925
+ end
926
+
927
+ it "returns the hash" do
928
+ expect(mongoized).to eq(hash)
929
+ end
930
+ end
931
+ end
932
+ end
933
+ end
934
+ end
935
+
936
+ describe "#__mongoize_object_id__" do
937
+
938
+ it "returns self" do
939
+ expect(object_id.__mongoize_object_id__).to eq(object_id)
940
+ end
941
+
942
+ it "returns the same instance" do
943
+ expect(object_id.__mongoize_object_id__).to equal(object_id)
944
+ end
945
+ end
946
+ end