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,357 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::String do
4
+
5
+ describe "#__evolve_object_id__" do
6
+
7
+ context "when the string is blank" do
8
+
9
+ it "returns the empty string" do
10
+ expect("".__evolve_object_id__).to be_empty
11
+ end
12
+ end
13
+
14
+ context "when the string is a legal object id" do
15
+
16
+ let(:object_id) do
17
+ Moped::BSON::ObjectId.new
18
+ end
19
+
20
+ it "returns the object id" do
21
+ expect(object_id.to_s.__evolve_object_id__).to eq(object_id)
22
+ end
23
+ end
24
+
25
+ context "when the string is not a legal object id" do
26
+
27
+ let(:string) do
28
+ "testing"
29
+ end
30
+
31
+ it "returns the string" do
32
+ expect(string.__evolve_object_id__).to eq(string)
33
+ end
34
+ end
35
+ end
36
+
37
+ describe "#__mongoize_object_id__" do
38
+
39
+ context "when the string is blank" do
40
+
41
+ it "returns nil" do
42
+ expect("".__mongoize_object_id__).to be_nil
43
+ end
44
+ end
45
+
46
+ context "when the string is a legal object id" do
47
+
48
+ let(:object_id) do
49
+ Moped::BSON::ObjectId.new
50
+ end
51
+
52
+ it "returns the object id" do
53
+ expect(object_id.to_s.__mongoize_object_id__).to eq(object_id)
54
+ end
55
+ end
56
+
57
+ context "when the string is not a legal object id" do
58
+
59
+ let(:string) do
60
+ "testing"
61
+ end
62
+
63
+ it "returns the string" do
64
+ expect(string.__mongoize_object_id__).to eq(string)
65
+ end
66
+ end
67
+ end
68
+
69
+ describe "#__mongoize_time__" do
70
+
71
+ context "when using active support's time zone" do
72
+
73
+ before do
74
+ Mongoid.use_activesupport_time_zone = true
75
+ ::Time.zone = "Tokyo"
76
+ end
77
+
78
+ after do
79
+ ::Time.zone = "Berlin"
80
+ end
81
+
82
+ context "when the string is a valid time" do
83
+
84
+ let(:string) do
85
+ "2010-11-19 00:24:49 +0900"
86
+ end
87
+
88
+ let(:time) do
89
+ string.__mongoize_time__
90
+ end
91
+
92
+ it "converts to a time" do
93
+ expect(time).to eq(Time.configured.parse(string))
94
+ end
95
+
96
+ it "converts to the as time zone" do
97
+ expect(time.zone).to eq("JST")
98
+ end
99
+ end
100
+
101
+ context "when the string is an invalid time" do
102
+
103
+ let(:string) do
104
+ "shitty string"
105
+ end
106
+
107
+ it "raises an error" do
108
+ expect {
109
+ string.__mongoize_time__
110
+ }.to raise_error(ArgumentError)
111
+ end
112
+ end
113
+ end
114
+
115
+ context "when not using active support's time zone" do
116
+
117
+ before do
118
+ Mongoid.use_activesupport_time_zone = false
119
+ end
120
+
121
+ after do
122
+ Mongoid.use_activesupport_time_zone = true
123
+ Time.zone = nil
124
+ end
125
+
126
+ context "when the string is a valid time" do
127
+
128
+ let(:string) do
129
+ "2010-11-19 00:24:49 +0900"
130
+ end
131
+
132
+ let(:time) do
133
+ string.__mongoize_time__
134
+ end
135
+
136
+ it "converts to a time" do
137
+ expect(time).to eq(Time.parse(string))
138
+ end
139
+ end
140
+
141
+ context "when the string is an invalid time" do
142
+
143
+ let(:string) do
144
+ "shitty string"
145
+ end
146
+
147
+ it "raises an error" do
148
+ expect {
149
+ string.__mongoize_time__
150
+ }.to raise_error(ArgumentError)
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ describe "#collectionize" do
157
+
158
+ context "when class is namepaced" do
159
+
160
+ module Medical
161
+ class Patient
162
+ include Mongoid::Document
163
+ end
164
+ end
165
+
166
+ it "returns an underscored tableized name" do
167
+ expect(Medical::Patient.name.collectionize).to eq("medical_patients")
168
+ end
169
+ end
170
+
171
+ context "when class is not namespaced" do
172
+
173
+ it "returns an underscored tableized name" do
174
+ expect(MixedDrink.name.collectionize).to eq("mixed_drinks")
175
+ end
176
+ end
177
+ end
178
+
179
+ describe ".demongoize" do
180
+
181
+ context "when the object is not a string" do
182
+
183
+ it "returns the string" do
184
+ expect(String.demongoize(:test)).to eq("test")
185
+ end
186
+ end
187
+
188
+ context "when the object is nil" do
189
+
190
+ it "returns nil" do
191
+ expect(String.demongoize(nil)).to be_nil
192
+ end
193
+ end
194
+ end
195
+
196
+ describe "#mongoid_id?" do
197
+
198
+ context "when the string is id" do
199
+
200
+ it "returns true" do
201
+ expect("id").to be_mongoid_id
202
+ end
203
+ end
204
+
205
+ context "when the string is _id" do
206
+
207
+ it "returns true" do
208
+ expect("_id").to be_mongoid_id
209
+ end
210
+ end
211
+
212
+ context "when the string contains id" do
213
+
214
+ it "returns false" do
215
+ expect("identity").to_not be_mongoid_id
216
+ end
217
+ end
218
+
219
+ context "when the string contains _id" do
220
+
221
+ it "returns false" do
222
+ expect("something_id").to_not be_mongoid_id
223
+ end
224
+ end
225
+ end
226
+
227
+ describe ".mongoize" do
228
+
229
+ context "when the object is not a string" do
230
+
231
+ it "returns the string" do
232
+ expect(String.mongoize(:test)).to eq("test")
233
+ end
234
+ end
235
+
236
+ context "when the object is nil" do
237
+
238
+ it "returns nil" do
239
+ expect(String.mongoize(nil)).to be_nil
240
+ end
241
+ end
242
+ end
243
+
244
+ describe "#mongoize" do
245
+
246
+ it "returns self" do
247
+ expect("test".mongoize).to eq("test")
248
+ end
249
+ end
250
+
251
+ describe "#reader" do
252
+
253
+ context "when string is a reader" do
254
+
255
+ it "returns self" do
256
+ expect("attribute".reader).to eq("attribute")
257
+ end
258
+ end
259
+
260
+ context "when string is a writer" do
261
+
262
+ it "returns the reader" do
263
+ expect("attribute=".reader).to eq("attribute")
264
+ end
265
+ end
266
+
267
+ context "when the string is before_type_cast" do
268
+
269
+ it "returns the reader" do
270
+ expect("attribute_before_type_cast".reader).to eq("attribute")
271
+ end
272
+ end
273
+ end
274
+
275
+ describe "#numeric?" do
276
+
277
+ context "when the string is an integer" do
278
+
279
+ it "returns true" do
280
+ expect("1234").to be_numeric
281
+ end
282
+ end
283
+
284
+ context "when string is a float" do
285
+
286
+ it "returns true" do
287
+ expect("1234.123").to be_numeric
288
+ end
289
+ end
290
+
291
+ context "when the string is has exponents" do
292
+
293
+ it "returns true" do
294
+ expect("1234.123123E4").to be_numeric
295
+ end
296
+ end
297
+
298
+ context "when the string is non numeric" do
299
+
300
+ it "returns false" do
301
+ expect("blah").to_not be_numeric
302
+ end
303
+ end
304
+ end
305
+
306
+ describe "#singularize" do
307
+
308
+ context "when string is address" do
309
+
310
+ it "returns address" do
311
+ expect("address".singularize).to eq("address")
312
+ end
313
+ end
314
+
315
+ context "when string is address_profiles" do
316
+
317
+ it "returns address_profile" do
318
+ expect("address_profiles".singularize).to eq("address_profile")
319
+ end
320
+ end
321
+ end
322
+
323
+ describe "#writer?" do
324
+
325
+ context "when string is a reader" do
326
+
327
+ it "returns false" do
328
+ expect("attribute".writer?).to be_false
329
+ end
330
+ end
331
+
332
+ context "when string is a writer" do
333
+
334
+ it "returns true" do
335
+ expect("attribute=".writer?).to be_true
336
+ end
337
+ end
338
+ end
339
+
340
+ describe "#before_type_cast?" do
341
+
342
+ context "when string is a reader" do
343
+
344
+ it "returns false" do
345
+ expect("attribute".before_type_cast?).to be_false
346
+ end
347
+ end
348
+
349
+ context "when string is before_type_cast" do
350
+
351
+ it "returns true" do
352
+ expect("attribute_before_type_cast".before_type_cast?).to be_true
353
+ end
354
+ end
355
+ end
356
+
357
+ end
@@ -0,0 +1,76 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Symbol do
4
+
5
+ describe ".demongoize" do
6
+
7
+ context "when the object is not a symbol" do
8
+
9
+ it "returns the symbol" do
10
+ expect(Symbol.demongoize("test")).to eq(:test)
11
+ end
12
+ end
13
+
14
+ context "when the object is nil" do
15
+
16
+ it "returns nil" do
17
+ expect(Symbol.demongoize(nil)).to be_nil
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "#mongoid_id?" do
23
+
24
+ context "when the string is id" do
25
+
26
+ it "returns true" do
27
+ expect(:id).to be_mongoid_id
28
+ end
29
+ end
30
+
31
+ context "when the string is _id" do
32
+
33
+ it "returns true" do
34
+ expect(:_id).to be_mongoid_id
35
+ end
36
+ end
37
+
38
+ context "when the string contains id" do
39
+
40
+ it "returns false" do
41
+ expect(:identity).to_not be_mongoid_id
42
+ end
43
+ end
44
+
45
+ context "when the string contains _id" do
46
+
47
+ it "returns false" do
48
+ expect(:something_id).to_not be_mongoid_id
49
+ end
50
+ end
51
+ end
52
+
53
+ describe ".mongoize" do
54
+
55
+ context "when the object is not a symbol" do
56
+
57
+ it "returns the symbol" do
58
+ expect(Symbol.mongoize("test")).to eq(:test)
59
+ end
60
+ end
61
+
62
+ context "when the object is nil" do
63
+
64
+ it "returns nil" do
65
+ expect(Symbol.mongoize(nil)).to be_nil
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "#mongoize" do
71
+
72
+ it "returns self" do
73
+ expect(:test.mongoize).to eq(:test)
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,467 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Time do
4
+
5
+ describe ".demongoize" do
6
+
7
+ after(:all) do
8
+ Mongoid.use_utc = false
9
+ Mongoid.use_activesupport_time_zone = true
10
+ end
11
+
12
+ let!(:time) do
13
+ Time.local(2010, 11, 19)
14
+ end
15
+
16
+ context "when the time zone is not defined" do
17
+
18
+ before do
19
+ Mongoid.use_utc = false
20
+ end
21
+
22
+ context "when the local time is not observing daylight saving" do
23
+
24
+ let(:time) do
25
+ Time.utc(2010, 11, 19)
26
+ end
27
+
28
+ it "returns the local time" do
29
+ expect(Time.demongoize(time).utc_offset).to eq(
30
+ Time.local(2010, 11, 19).utc_offset
31
+ )
32
+ end
33
+ end
34
+
35
+ context "when the local time is observing daylight saving" do
36
+
37
+ let(:time) do
38
+ Time.utc(2010, 9, 19)
39
+ end
40
+
41
+ it "returns the local time" do
42
+ expect(Time.demongoize(time)).to eq(time.getlocal)
43
+ end
44
+ end
45
+
46
+ context "when we have a time close to midnight" do
47
+
48
+ let(:time) do
49
+ Time.local(2010, 11, 19, 0, 30).utc
50
+ end
51
+
52
+ it "changes it back to the equivalent local time" do
53
+ expect(Time.demongoize(time)).to eq(time)
54
+ end
55
+ end
56
+
57
+ context "when using the ActiveSupport time zone" do
58
+
59
+ before do
60
+ Mongoid.use_activesupport_time_zone = true
61
+ Time.zone = "Stockholm"
62
+ end
63
+
64
+ after do
65
+ Time.zone = nil
66
+ Mongoid.use_activesupport_time_zone = false
67
+ end
68
+
69
+ it "returns an ActiveSupport::TimeWithZone" do
70
+ expect(Time.demongoize(time).class).to eq(ActiveSupport::TimeWithZone)
71
+ end
72
+
73
+ context "when the local time is not observing daylight saving" do
74
+
75
+ let(:new_time) do
76
+ Time.utc(2010, 11, 19, 12)
77
+ end
78
+
79
+ it "returns the local time" do
80
+ expect(Time.demongoize(new_time)).to eq(
81
+ Time.zone.local(2010, 11, 19, 13)
82
+ )
83
+ end
84
+ end
85
+
86
+ context "when the local time is observing daylight saving" do
87
+
88
+ let(:new_time) do
89
+ Time.utc(2010, 9, 19, 12)
90
+ end
91
+
92
+ it "returns the local time" do
93
+ expect(Time.demongoize(new_time)).to eq(
94
+ Time.zone.local(2010, 9, 19, 14)
95
+ )
96
+ end
97
+ end
98
+
99
+ context "when we have a time close to midnight" do
100
+
101
+ let(:new_time) do
102
+ Time.utc(2010, 11, 19, 0, 30)
103
+ end
104
+
105
+ it "change it back to the equivalent local time" do
106
+ expect(Time.demongoize(new_time)).to eq(
107
+ Time.zone.local(2010, 11, 19, 1, 30)
108
+ )
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ context "when the time zone is defined as UTC" do
115
+
116
+ before do
117
+ Mongoid.use_utc = true
118
+ end
119
+
120
+ after do
121
+ Mongoid.use_utc = false
122
+ end
123
+
124
+ it "returns utc" do
125
+ expect(Time.demongoize(time.dup.utc).utc_offset).to eq(0)
126
+ end
127
+
128
+ context "when using the ActiveSupport time zone" do
129
+
130
+ let(:time) do
131
+ Time.utc(2010, 11, 19, 0, 30)
132
+ end
133
+
134
+ before do
135
+ Mongoid.use_activesupport_time_zone = true
136
+ Time.zone = "Stockholm"
137
+ end
138
+
139
+ after do
140
+ Time.zone = nil
141
+ Mongoid.use_activesupport_time_zone = false
142
+ end
143
+
144
+ it "returns utc" do
145
+ expect(Time.demongoize(time)).to eq(
146
+ ActiveSupport::TimeZone['UTC'].local(2010, 11, 19, 0, 30)
147
+ )
148
+ end
149
+
150
+ it "returns an ActiveSupport::TimeWithZone" do
151
+ expect(Time.demongoize(time).class).to eq(
152
+ ActiveSupport::TimeWithZone
153
+ )
154
+ end
155
+ end
156
+ end
157
+
158
+ context "when time is nil" do
159
+
160
+ it "returns nil" do
161
+ expect(Time.demongoize(nil)).to be_nil
162
+ end
163
+ end
164
+ end
165
+
166
+ describe ".mongoize" do
167
+
168
+ let!(:time) do
169
+ Time.local(2010, 11, 19)
170
+ end
171
+
172
+ context "when given nil" do
173
+
174
+ it "returns nil" do
175
+ expect(Time.mongoize(nil)).to be_nil
176
+ end
177
+ end
178
+
179
+ context "when string is empty" do
180
+
181
+ it "returns nil" do
182
+ expect(Time.mongoize("")).to be_nil
183
+ end
184
+ end
185
+
186
+ context "when given a string" do
187
+
188
+ context "when the string is a valid time" do
189
+
190
+ it "converts to a utc time" do
191
+ expect(Time.mongoize(time.to_s).utc_offset).to eq(0)
192
+ end
193
+
194
+ it "serializes with time parsing" do
195
+ expect(Time.mongoize(time.to_s)).to eq(Time.parse(time.to_s).utc)
196
+ end
197
+
198
+ it "returns a local date from the string" do
199
+ expect(Time.mongoize(time.to_s)).to eq(
200
+ Time.local(time.year, time.month, time.day, time.hour, time.min, time.sec)
201
+ )
202
+ end
203
+ end
204
+
205
+ context "when the string is an invalid time" do
206
+
207
+ let(:epoch) do
208
+ Time.utc(1970, 1, 1, 0, 0, 0, 0)
209
+ end
210
+
211
+ it "converts the time to epoch" do
212
+ expect(Time.mongoize("time")).to eq(epoch)
213
+ end
214
+ end
215
+
216
+ context "when using the ActiveSupport time zone" do
217
+
218
+ before do
219
+ Mongoid.use_activesupport_time_zone = true
220
+ # if this is actually your time zone, the following tests are useless
221
+ Time.zone = "Stockholm"
222
+ end
223
+
224
+ after do
225
+ Time.zone = nil
226
+ Mongoid.use_activesupport_time_zone = false
227
+ end
228
+
229
+ context "when the local time is not observing daylight saving" do
230
+
231
+ it "returns the local time" do
232
+ expect(Time.mongoize('2010-11-19 5:00:00')).to eq(
233
+ Time.utc(2010, 11, 19, 4)
234
+ )
235
+ end
236
+ end
237
+
238
+ context "when the local time is observing daylight saving" do
239
+
240
+ it "returns the local time" do
241
+ expect(Time.mongoize('2010-9-19 5:00:00')).to eq(
242
+ Time.utc(2010, 9, 19, 3)
243
+ )
244
+ end
245
+ end
246
+ end
247
+ end
248
+
249
+ context "when given a DateTime" do
250
+
251
+ let!(:time) do
252
+ DateTime.now
253
+ end
254
+
255
+ let!(:eom_time) do
256
+ DateTime.parse("2012-11-30T23:59:59.999999999-05:00")
257
+ end
258
+
259
+ let!(:eom_time_mongoized) do
260
+ eom_time.mongoize
261
+ end
262
+
263
+ it "doesn't strip milli- or microseconds" do
264
+ expect(Time.mongoize(time).to_f).to eq(time.to_time.to_f)
265
+ end
266
+
267
+ it "doesn't round up the hour at end of month" do
268
+ expect(eom_time_mongoized.hour).to eq(eom_time.utc.hour)
269
+ end
270
+
271
+ it "doesn't round up the minute" do
272
+ expect(eom_time_mongoized.min).to eq(eom_time.utc.min)
273
+ end
274
+
275
+ it "doesn't round up the seconds" do
276
+ expect(eom_time_mongoized.sec).to eq(eom_time.utc.sec)
277
+ end
278
+
279
+ it "does not alter seconds" do
280
+ expect((eom_time_mongoized.usec)).to eq(999999)
281
+ end
282
+
283
+ it "does not alter seconds with fractions" do
284
+ expect(DateTime.mongoize(11.11).to_f).to eq(11.11)
285
+ end
286
+
287
+ context "when using the ActiveSupport time zone" do
288
+
289
+ let(:datetime) do
290
+ DateTime.new(2010, 11, 19)
291
+ end
292
+
293
+ before do
294
+ Mongoid.use_activesupport_time_zone = true
295
+ # if this is actually your time zone, the following tests are useless
296
+ Time.zone = "Stockholm"
297
+ end
298
+
299
+ after do
300
+ Time.zone = nil
301
+ Mongoid.use_activesupport_time_zone = false
302
+ end
303
+
304
+ it "assumes the given time is local" do
305
+ expect(Time.mongoize(datetime)).to eq(
306
+ Time.utc(2010, 11, 19)
307
+ )
308
+ end
309
+
310
+ it "doesn't round up the hour" do
311
+ expect(eom_time_mongoized.hour).to eq(eom_time.utc.hour)
312
+ end
313
+
314
+ it "doesn't round up the minutes" do
315
+ expect(eom_time_mongoized.min).to eq(eom_time.utc.min)
316
+ end
317
+
318
+ it "doesn't round up the seconds" do
319
+ expect(eom_time_mongoized.sec).to eq(eom_time.utc.sec)
320
+ end
321
+
322
+ it "does not alter the seconds" do
323
+ expect((eom_time_mongoized.usec)).to eq(999999)
324
+ end
325
+ end
326
+ end
327
+
328
+ context "when given a Time" do
329
+
330
+ it "converts to a utc time" do
331
+ expect(Time.mongoize(time).utc_offset).to eq(0)
332
+ end
333
+
334
+ it "returns utc times unchanged" do
335
+ expect(Time.mongoize(time.utc)).to eq(time.utc)
336
+ end
337
+
338
+ it "returns the time as utc" do
339
+ expect(Time.mongoize(time)).to eq(time.utc)
340
+ end
341
+
342
+ it "doesn't strip milli- or microseconds" do
343
+ expect(Time.mongoize(time).to_f).to eq(time.to_f)
344
+ end
345
+
346
+ it "does not alter seconds with fractions" do
347
+ expect(Time.mongoize(102.63).to_f).to eq(102.63)
348
+ end
349
+ end
350
+
351
+ context "when given an ActiveSupport::TimeWithZone" do
352
+
353
+ before do
354
+ 1.hour.ago
355
+ end
356
+
357
+ it "converts it to utc" do
358
+ expect(Time.mongoize(time.in_time_zone("Alaska"))).to eq(
359
+ Time.at(time.to_i).utc
360
+ )
361
+ end
362
+ end
363
+
364
+ context "when given a Date" do
365
+
366
+ let(:date) do
367
+ Date.today
368
+ end
369
+
370
+ it "converts to a utc time" do
371
+ expect(Time.mongoize(date)).to eq(Time.local(date.year, date.month, date.day))
372
+ end
373
+
374
+ it "has a zero utc offset" do
375
+ expect(Time.mongoize(date).utc_offset).to eq(0)
376
+ end
377
+
378
+ context "when using the ActiveSupport time zone" do
379
+
380
+ let(:date) do
381
+ Date.new(2010, 11, 19)
382
+ end
383
+
384
+ before do
385
+ Mongoid.use_activesupport_time_zone = true
386
+ # if this is actually your time zone, the following tests are useless
387
+ Time.zone = "Stockholm"
388
+ end
389
+
390
+ after do
391
+ Time.zone = nil
392
+ Mongoid.use_activesupport_time_zone = false
393
+ end
394
+
395
+ it "assumes the given time is local" do
396
+ expect(Time.mongoize(date)).to eq(Time.utc(2010, 11, 18, 23))
397
+ end
398
+ end
399
+ end
400
+
401
+ context "when given an array" do
402
+
403
+ let(:array) do
404
+ [ 2010, 11, 19, 00, 24, 49 ]
405
+ end
406
+
407
+ it "returns a time" do
408
+ expect(Time.mongoize(array)).to eq(Time.local(*array))
409
+ end
410
+
411
+ context "when using the ActiveSupport time zone" do
412
+
413
+ before do
414
+ Mongoid.use_activesupport_time_zone = true
415
+ # if this is actually your time zone, the following tests are useless
416
+ Time.zone = "Stockholm"
417
+ end
418
+
419
+ after do
420
+ Time.zone = nil
421
+ Mongoid.use_activesupport_time_zone = false
422
+ end
423
+
424
+ it "assumes the given time is local" do
425
+ expect(Time.mongoize(array)).to eq(
426
+ Time.utc(2010, 11, 18, 23, 24, 49)
427
+ )
428
+ end
429
+ end
430
+ end
431
+ end
432
+
433
+ describe "#mongoize" do
434
+
435
+ let!(:time) do
436
+ Time.local(2010, 11, 19)
437
+ end
438
+
439
+ let!(:eom_time) do
440
+ Time.local(2012, 11, 30, 23, 59, 59, 999999.999)
441
+ end
442
+
443
+ let!(:eom_time_mongoized) do
444
+ eom_time.mongoize
445
+ end
446
+
447
+ it "converts to a utc time" do
448
+ expect(time.mongoize.utc_offset).to eq(0)
449
+ end
450
+
451
+ it "returns the time as utc" do
452
+ expect(time.mongoize).to eq(time.utc)
453
+ end
454
+
455
+ it "doesn't strip milli- or microseconds" do
456
+ expect(time.mongoize.to_f).to eq(time.to_f)
457
+ end
458
+
459
+ it "doesn't round up at end of month" do
460
+ expect(eom_time_mongoized.hour).to eq(eom_time.utc.hour)
461
+ expect(eom_time_mongoized.min).to eq(eom_time.utc.min)
462
+ expect(eom_time_mongoized.sec).to eq(eom_time.utc.sec)
463
+ expect(eom_time_mongoized.usec).to eq(eom_time.utc.usec)
464
+ expect(eom_time_mongoized.subsec.to_f.round(3)).to eq(eom_time.utc.subsec.to_f.round(3))
465
+ end
466
+ end
467
+ end