vulcan 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (627) hide show
  1. data/lib/vulcan/version.rb +1 -1
  2. data/server/Procfile +1 -0
  3. data/server/bin/make +39 -0
  4. data/server/lib/on.js +13 -0
  5. data/server/lib/spawner.js +101 -0
  6. data/server/node_modules/connect-form/History.md +28 -0
  7. data/server/node_modules/connect-form/LICENSE +22 -0
  8. data/server/node_modules/connect-form/Makefile +11 -0
  9. data/server/node_modules/connect-form/Readme.md +35 -0
  10. data/server/node_modules/connect-form/index.html +213 -0
  11. data/server/node_modules/connect-form/index.js +100 -0
  12. data/server/node_modules/connect-form/lib/connect-form.js +100 -0
  13. data/server/node_modules/connect-form/node_modules/formidable/Makefile +14 -0
  14. data/server/node_modules/connect-form/node_modules/formidable/Readme.md +264 -0
  15. data/server/node_modules/connect-form/node_modules/formidable/TODO +3 -0
  16. data/server/node_modules/connect-form/node_modules/formidable/benchmark/bench-multipart-parser.js +70 -0
  17. data/server/node_modules/connect-form/node_modules/formidable/example/post.js +43 -0
  18. data/server/node_modules/connect-form/node_modules/formidable/example/upload.js +48 -0
  19. data/server/node_modules/connect-form/node_modules/formidable/index.js +1 -0
  20. data/server/node_modules/connect-form/node_modules/formidable/lib/file.js +61 -0
  21. data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +362 -0
  22. data/server/node_modules/connect-form/node_modules/formidable/lib/index.js +3 -0
  23. data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +301 -0
  24. data/server/node_modules/connect-form/node_modules/formidable/lib/querystring_parser.js +25 -0
  25. data/server/node_modules/connect-form/node_modules/formidable/lib/util.js +6 -0
  26. data/server/node_modules/connect-form/node_modules/formidable/package.json +19 -0
  27. data/server/node_modules/connect-form/node_modules/formidable/test/common.js +20 -0
  28. data/server/node_modules/connect-form/node_modules/formidable/test/fast/test-incoming-form.js +45 -0
  29. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/: // ? % * | /" < > . /342/230/203 ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt" +1 -0
  30. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +3 -0
  31. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +36 -0
  32. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +24 -0
  33. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +23 -0
  34. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +33 -0
  35. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +22 -0
  36. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +22 -0
  37. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +22 -0
  38. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +21 -0
  39. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/multi_video.upload +0 -0
  40. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/multipart.js +72 -0
  41. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/common.js +24 -0
  42. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +80 -0
  43. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-file.js +104 -0
  44. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-incoming-form.js +715 -0
  45. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +50 -0
  46. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +45 -0
  47. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +72 -0
  48. data/server/node_modules/connect-form/node_modules/formidable/test/run.js +7 -0
  49. data/server/node_modules/connect-form/node_modules/formidable/test/slow/test-fixtures.js +84 -0
  50. data/server/node_modules/connect-form/node_modules/formidable/tool/record.js +47 -0
  51. data/server/node_modules/connect-form/package.json +9 -0
  52. data/server/node_modules/connect-form/support/connect/History.md +120 -0
  53. data/server/node_modules/connect-form/support/connect/Makefile +85 -0
  54. data/server/node_modules/connect-form/support/connect/README.md +121 -0
  55. data/server/node_modules/connect-form/support/connect/benchmarks/graph +79 -0
  56. data/server/node_modules/connect-form/support/connect/benchmarks/hello-world/connect.js +19 -0
  57. data/server/node_modules/connect-form/support/connect/benchmarks/hello-world/node.js +16 -0
  58. data/server/node_modules/connect-form/support/connect/benchmarks/hello-world/rack.thin.ru +9 -0
  59. data/server/node_modules/connect-form/support/connect/benchmarks/hello-world/sinatra.thin.ru +10 -0
  60. data/server/node_modules/connect-form/support/connect/benchmarks/public/jquery.js +19 -0
  61. data/server/node_modules/connect-form/support/connect/benchmarks/run +60 -0
  62. data/server/node_modules/connect-form/support/connect/benchmarks/static/connect.js +10 -0
  63. data/server/node_modules/connect-form/support/connect/benchmarks/static/node.js +17 -0
  64. data/server/node_modules/connect-form/support/connect/benchmarks/static/sinatra.thin.ru +10 -0
  65. data/server/node_modules/connect-form/support/connect/docs/api.html +1973 -0
  66. data/server/node_modules/connect-form/support/connect/docs/bodyDecoder.1 +27 -0
  67. data/server/node_modules/connect-form/support/connect/docs/bodyDecoder.html +164 -0
  68. data/server/node_modules/connect-form/support/connect/docs/bodyDecoder.md +11 -0
  69. data/server/node_modules/connect-form/support/connect/docs/compiler.1 +66 -0
  70. data/server/node_modules/connect-form/support/connect/docs/compiler.html +193 -0
  71. data/server/node_modules/connect-form/support/connect/docs/compiler.md +32 -0
  72. data/server/node_modules/connect-form/support/connect/docs/conditionalGet.1 +16 -0
  73. data/server/node_modules/connect-form/support/connect/docs/conditionalGet.html +158 -0
  74. data/server/node_modules/connect-form/support/connect/docs/conditionalGet.md +7 -0
  75. data/server/node_modules/connect-form/support/connect/docs/cookieDecoder.1 +27 -0
  76. data/server/node_modules/connect-form/support/connect/docs/cookieDecoder.html +164 -0
  77. data/server/node_modules/connect-form/support/connect/docs/cookieDecoder.md +11 -0
  78. data/server/node_modules/connect-form/support/connect/docs/errorHandler.1 +58 -0
  79. data/server/node_modules/connect-form/support/connect/docs/errorHandler.html +181 -0
  80. data/server/node_modules/connect-form/support/connect/docs/errorHandler.md +28 -0
  81. data/server/node_modules/connect-form/support/connect/docs/format.1 +7 -0
  82. data/server/node_modules/connect-form/support/connect/docs/format.html +152 -0
  83. data/server/node_modules/connect-form/support/connect/docs/format.md +3 -0
  84. data/server/node_modules/connect-form/support/connect/docs/index.1 +260 -0
  85. data/server/node_modules/connect-form/support/connect/docs/index.html +332 -0
  86. data/server/node_modules/connect-form/support/connect/docs/index.md +171 -0
  87. data/server/node_modules/connect-form/support/connect/docs/jsonrpc.1 +62 -0
  88. data/server/node_modules/connect-form/support/connect/docs/jsonrpc.html +192 -0
  89. data/server/node_modules/connect-form/support/connect/docs/jsonrpc.md +39 -0
  90. data/server/node_modules/connect-form/support/connect/docs/layout/api.foot.html +3 -0
  91. data/server/node_modules/connect-form/support/connect/docs/layout/api.head.html +142 -0
  92. data/server/node_modules/connect-form/support/connect/docs/lint.1 +102 -0
  93. data/server/node_modules/connect-form/support/connect/docs/lint.html +232 -0
  94. data/server/node_modules/connect-form/support/connect/docs/lint.md +79 -0
  95. data/server/node_modules/connect-form/support/connect/docs/logger.1 +66 -0
  96. data/server/node_modules/connect-form/support/connect/docs/logger.html +184 -0
  97. data/server/node_modules/connect-form/support/connect/docs/logger.md +31 -0
  98. data/server/node_modules/connect-form/support/connect/docs/methodOverride.1 +31 -0
  99. data/server/node_modules/connect-form/support/connect/docs/methodOverride.html +171 -0
  100. data/server/node_modules/connect-form/support/connect/docs/methodOverride.md +17 -0
  101. data/server/node_modules/connect-form/support/connect/docs/responseTime.1 +7 -0
  102. data/server/node_modules/connect-form/support/connect/docs/responseTime.html +152 -0
  103. data/server/node_modules/connect-form/support/connect/docs/responseTime.md +3 -0
  104. data/server/node_modules/connect-form/support/connect/docs/router.1 +75 -0
  105. data/server/node_modules/connect-form/support/connect/docs/router.html +211 -0
  106. data/server/node_modules/connect-form/support/connect/docs/router.md +58 -0
  107. data/server/node_modules/connect-form/support/connect/docs/session.1 +115 -0
  108. data/server/node_modules/connect-form/support/connect/docs/session.html +214 -0
  109. data/server/node_modules/connect-form/support/connect/docs/session.md +55 -0
  110. data/server/node_modules/connect-form/support/connect/docs/staticProvider.1 +28 -0
  111. data/server/node_modules/connect-form/support/connect/docs/staticProvider.html +162 -0
  112. data/server/node_modules/connect-form/support/connect/docs/staticProvider.md +11 -0
  113. data/server/node_modules/connect-form/support/connect/examples/error/app.js +13 -0
  114. data/server/node_modules/connect-form/support/connect/examples/jsonrpc/app.js +38 -0
  115. data/server/node_modules/connect-form/support/connect/examples/less/app.js +21 -0
  116. data/server/node_modules/connect-form/support/connect/examples/less/public/index.html +8 -0
  117. data/server/node_modules/connect-form/support/connect/examples/less/public/style.less +8 -0
  118. data/server/node_modules/connect-form/support/connect/examples/lint/app.js +40 -0
  119. data/server/node_modules/connect-form/support/connect/examples/multitouch/app.js +61 -0
  120. data/server/node_modules/connect-form/support/connect/examples/multitouch/public/client.js +73 -0
  121. data/server/node_modules/connect-form/support/connect/examples/multitouch/public/favicon.ico +0 -0
  122. data/server/node_modules/connect-form/support/connect/examples/multitouch/public/index.html +16 -0
  123. data/server/node_modules/connect-form/support/connect/examples/multitouch/public/raphael.js +113 -0
  124. data/server/node_modules/connect-form/support/connect/examples/multitouch/public/style.css +23 -0
  125. data/server/node_modules/connect-form/support/connect/examples/router/app.js +63 -0
  126. data/server/node_modules/connect-form/support/connect/examples/sass/app.js +21 -0
  127. data/server/node_modules/connect-form/support/connect/examples/sass/public/index.html +8 -0
  128. data/server/node_modules/connect-form/support/connect/examples/sass/public/style.sass +4 -0
  129. data/server/node_modules/connect-form/support/connect/examples/session/app.js +60 -0
  130. data/server/node_modules/connect-form/support/connect/examples/stack-middleware/app.js +15 -0
  131. data/server/node_modules/connect-form/support/connect/examples/stack-middleware/hello.js +13 -0
  132. data/server/node_modules/connect-form/support/connect/examples/stack-middleware/world.js +13 -0
  133. data/server/node_modules/connect-form/support/connect/examples/static/app.js +10 -0
  134. data/server/node_modules/connect-form/support/connect/examples/static/public/style.css +3 -0
  135. data/server/node_modules/connect-form/support/connect/examples/url-rewrite/app.js +44 -0
  136. data/server/node_modules/connect-form/support/connect/examples/vhost/app.js +25 -0
  137. data/server/node_modules/connect-form/support/connect/install.sh +6 -0
  138. data/server/node_modules/connect-form/support/connect/lib/connect/index.js +309 -0
  139. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/bodyDecoder.js +69 -0
  140. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/cache.js +142 -0
  141. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/cacheManifest.js +71 -0
  142. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/compiler.js +150 -0
  143. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/conditionalGet.js +71 -0
  144. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/cookieDecoder.js +37 -0
  145. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/errorHandler.js +91 -0
  146. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/format.js +46 -0
  147. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/gzip-compress.js +79 -0
  148. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/gzip-proc.js +73 -0
  149. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/gzip.js +8 -0
  150. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/jsonrpc.js +235 -0
  151. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/lint.js +136 -0
  152. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/logger.js +107 -0
  153. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/methodOverride.js +54 -0
  154. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/pubsub.js +107 -0
  155. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/repl.js +43 -0
  156. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/responseTime.js +28 -0
  157. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/router.js +158 -0
  158. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/session.js +129 -0
  159. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/session/memory.js +141 -0
  160. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/session/session.js +71 -0
  161. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/session/store.js +59 -0
  162. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/staticProvider.js +144 -0
  163. data/server/node_modules/connect-form/support/connect/lib/connect/middleware/vhost.js +43 -0
  164. data/server/node_modules/connect-form/support/connect/lib/connect/public/error.html +13 -0
  165. data/server/node_modules/connect-form/support/connect/lib/connect/public/style.css +98 -0
  166. data/server/node_modules/connect-form/support/connect/lib/connect/response.js +56 -0
  167. data/server/node_modules/connect-form/support/connect/lib/connect/utils.js +428 -0
  168. data/server/node_modules/connect-form/support/connect/package.json +21 -0
  169. data/server/node_modules/connect-form/support/connect/support/highlight.js +26 -0
  170. data/server/node_modules/connect-form/support/connect/test/bodyDecoder.test.js +69 -0
  171. data/server/node_modules/connect-form/support/connect/test/compiler.test.js +23 -0
  172. data/server/node_modules/connect-form/support/connect/test/connect.test.js +187 -0
  173. data/server/node_modules/connect-form/support/connect/test/cookieDecoder.test.js +31 -0
  174. data/server/node_modules/connect-form/support/connect/test/errorHandler.test.js +60 -0
  175. data/server/node_modules/connect-form/support/connect/test/filters/uppercase.js +14 -0
  176. data/server/node_modules/connect-form/support/connect/test/fixtures/foo.bar.baz.sass +2 -0
  177. data/server/node_modules/connect-form/support/connect/test/fixtures/index.html +1 -0
  178. data/server/node_modules/connect-form/support/connect/test/fixtures/some text.txt +1 -0
  179. data/server/node_modules/connect-form/support/connect/test/fixtures/style.less +2 -0
  180. data/server/node_modules/connect-form/support/connect/test/fixtures/style.sass +3 -0
  181. data/server/node_modules/connect-form/support/connect/test/fixtures/user.json +4 -0
  182. data/server/node_modules/connect-form/support/connect/test/format.test.js +37 -0
  183. data/server/node_modules/connect-form/support/connect/test/gzip.test.js +55 -0
  184. data/server/node_modules/connect-form/support/connect/test/helpers/http.js +87 -0
  185. data/server/node_modules/connect-form/support/connect/test/helpers/index.js +12 -0
  186. data/server/node_modules/connect-form/support/connect/test/jsonrpc.test.js +225 -0
  187. data/server/node_modules/connect-form/support/connect/test/logger.test.js +52 -0
  188. data/server/node_modules/connect-form/support/connect/test/methodOverride.test.js +69 -0
  189. data/server/node_modules/connect-form/support/connect/test/providers/echo.js +10 -0
  190. data/server/node_modules/connect-form/support/connect/test/responseTime.test.js +29 -0
  191. data/server/node_modules/connect-form/support/connect/test/router.test.js +154 -0
  192. data/server/node_modules/connect-form/support/connect/test/session.test.js +127 -0
  193. data/server/node_modules/connect-form/support/connect/test/static.test.js +66 -0
  194. data/server/node_modules/connect-form/support/connect/test/utils.test.js +65 -0
  195. data/server/node_modules/connect-form/support/connect/test/vhost.test.js +46 -0
  196. data/server/node_modules/connect-form/support/expresso/History.md +54 -0
  197. data/server/node_modules/connect-form/support/expresso/Makefile +30 -0
  198. data/server/node_modules/connect-form/support/expresso/Readme.md +208 -0
  199. data/server/node_modules/connect-form/support/expresso/bin/expresso +647 -0
  200. data/server/node_modules/connect-form/support/expresso/lib/bar.js +4 -0
  201. data/server/node_modules/connect-form/support/expresso/lib/foo.js +16 -0
  202. data/server/node_modules/connect-form/support/expresso/package.json +9 -0
  203. data/server/node_modules/connect-form/support/expresso/seed.yml +6 -0
  204. data/server/node_modules/connect-form/support/expresso/test/assert.test.js +64 -0
  205. data/server/node_modules/connect-form/support/expresso/test/bar.test.js +12 -0
  206. data/server/node_modules/connect-form/support/expresso/test/foo.test.js +13 -0
  207. data/server/node_modules/connect-form/support/expresso/test/http.test.js +61 -0
  208. data/server/node_modules/connect-form/test/form.test.js +148 -0
  209. data/server/node_modules/cradle/LICENSE +20 -0
  210. data/server/node_modules/cradle/Makefile +10 -0
  211. data/server/node_modules/cradle/README.md +377 -0
  212. data/server/node_modules/cradle/lib/cradle.js +688 -0
  213. data/server/node_modules/cradle/lib/cradle/cache.js +102 -0
  214. data/server/node_modules/cradle/lib/cradle/response.js +127 -0
  215. data/server/node_modules/cradle/node_modules/vargs/LICENSE +20 -0
  216. data/server/node_modules/cradle/node_modules/vargs/README.md +34 -0
  217. data/server/node_modules/cradle/node_modules/vargs/lib/vargs.js +70 -0
  218. data/server/node_modules/cradle/node_modules/vargs/package.json +12 -0
  219. data/server/node_modules/cradle/node_modules/vows/LICENSE +20 -0
  220. data/server/node_modules/cradle/node_modules/vows/Makefile +7 -0
  221. data/server/node_modules/cradle/node_modules/vows/README.md +39 -0
  222. data/server/node_modules/cradle/node_modules/vows/bin/vows +515 -0
  223. data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +27 -0
  224. data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +215 -0
  225. data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +77 -0
  226. data/server/node_modules/cradle/node_modules/vows/lib/vows.js +193 -0
  227. data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +131 -0
  228. data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +55 -0
  229. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +29 -0
  230. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +2 -0
  231. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +61 -0
  232. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +54 -0
  233. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +54 -0
  234. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +38 -0
  235. data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +28 -0
  236. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +67 -0
  237. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +16 -0
  238. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +8 -0
  239. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +44 -0
  240. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +39 -0
  241. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +90 -0
  242. data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +319 -0
  243. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +20 -0
  244. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +4 -0
  245. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +72 -0
  246. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +233 -0
  247. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +14 -0
  248. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +55 -0
  249. data/server/node_modules/cradle/node_modules/vows/package.json +14 -0
  250. data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +135 -0
  251. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +18 -0
  252. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +18 -0
  253. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +17 -0
  254. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +18 -0
  255. data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +140 -0
  256. data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +133 -0
  257. data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +51 -0
  258. data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +374 -0
  259. data/server/node_modules/cradle/package.json +14 -0
  260. data/server/node_modules/cradle/test/cache-test.js +102 -0
  261. data/server/node_modules/cradle/test/cradle-test.js +651 -0
  262. data/server/node_modules/cradle/test/fixtures/databases.json +25 -0
  263. data/server/node_modules/cradle/test/helpers/seed.js +56 -0
  264. data/server/node_modules/cradle/test/response-test.js +73 -0
  265. data/server/node_modules/express/History.md +743 -0
  266. data/server/node_modules/express/LICENSE +22 -0
  267. data/server/node_modules/express/Makefile +35 -0
  268. data/server/node_modules/express/Readme.md +143 -0
  269. data/server/node_modules/express/bin/express +417 -0
  270. data/server/node_modules/express/index.js +2 -0
  271. data/server/node_modules/express/lib/express.js +79 -0
  272. data/server/node_modules/express/lib/http.js +583 -0
  273. data/server/node_modules/express/lib/https.js +52 -0
  274. data/server/node_modules/express/lib/request.js +309 -0
  275. data/server/node_modules/express/lib/response.js +459 -0
  276. data/server/node_modules/express/lib/router/collection.js +53 -0
  277. data/server/node_modules/express/lib/router/index.js +398 -0
  278. data/server/node_modules/express/lib/router/methods.js +70 -0
  279. data/server/node_modules/express/lib/router/route.js +88 -0
  280. data/server/node_modules/express/lib/utils.js +139 -0
  281. data/server/node_modules/express/lib/view.js +457 -0
  282. data/server/node_modules/express/lib/view/partial.js +40 -0
  283. data/server/node_modules/express/lib/view/view.js +209 -0
  284. data/server/node_modules/express/node_modules/connect/LICENSE +24 -0
  285. data/server/node_modules/express/node_modules/connect/index.js +2 -0
  286. data/server/node_modules/express/node_modules/connect/lib/cache.js +81 -0
  287. data/server/node_modules/express/node_modules/connect/lib/connect.js +106 -0
  288. data/server/node_modules/express/node_modules/connect/lib/http.js +215 -0
  289. data/server/node_modules/express/node_modules/connect/lib/https.js +47 -0
  290. data/server/node_modules/express/node_modules/connect/lib/index.js +46 -0
  291. data/server/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js +93 -0
  292. data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +92 -0
  293. data/server/node_modules/express/node_modules/connect/lib/middleware/compiler.js +163 -0
  294. data/server/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js +46 -0
  295. data/server/node_modules/express/node_modules/connect/lib/middleware/csrf.js +105 -0
  296. data/server/node_modules/express/node_modules/connect/lib/middleware/directory.js +222 -0
  297. data/server/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js +100 -0
  298. data/server/node_modules/express/node_modules/connect/lib/middleware/favicon.js +76 -0
  299. data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +78 -0
  300. data/server/node_modules/express/node_modules/connect/lib/middleware/logger.js +299 -0
  301. data/server/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js +38 -0
  302. data/server/node_modules/express/node_modules/connect/lib/middleware/profiler.js +100 -0
  303. data/server/node_modules/express/node_modules/connect/lib/middleware/query.js +40 -0
  304. data/server/node_modules/express/node_modules/connect/lib/middleware/responseTime.js +34 -0
  305. data/server/node_modules/express/node_modules/connect/lib/middleware/router.js +379 -0
  306. data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +346 -0
  307. data/server/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js +126 -0
  308. data/server/node_modules/express/node_modules/connect/lib/middleware/session/memory.js +131 -0
  309. data/server/node_modules/express/node_modules/connect/lib/middleware/session/session.js +137 -0
  310. data/server/node_modules/express/node_modules/connect/lib/middleware/session/store.js +87 -0
  311. data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +220 -0
  312. data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +122 -0
  313. data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +44 -0
  314. data/server/node_modules/express/node_modules/connect/lib/patch.js +79 -0
  315. data/server/node_modules/express/node_modules/connect/lib/public/directory.html +75 -0
  316. data/server/node_modules/express/node_modules/connect/lib/public/error.html +13 -0
  317. data/server/node_modules/express/node_modules/connect/lib/public/favicon.ico +0 -0
  318. data/server/node_modules/express/node_modules/connect/lib/public/icons/page.png +0 -0
  319. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_add.png +0 -0
  320. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png +0 -0
  321. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_code.png +0 -0
  322. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png +0 -0
  323. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png +0 -0
  324. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png +0 -0
  325. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_error.png +0 -0
  326. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png +0 -0
  327. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_find.png +0 -0
  328. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png +0 -0
  329. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_go.png +0 -0
  330. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_green.png +0 -0
  331. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_key.png +0 -0
  332. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png +0 -0
  333. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_link.png +0 -0
  334. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png +0 -0
  335. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png +0 -0
  336. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_red.png +0 -0
  337. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png +0 -0
  338. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_save.png +0 -0
  339. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white.png +0 -0
  340. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png +0 -0
  341. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png +0 -0
  342. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png +0 -0
  343. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png +0 -0
  344. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png +0 -0
  345. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png +0 -0
  346. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png +0 -0
  347. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png +0 -0
  348. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png +0 -0
  349. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png +0 -0
  350. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png +0 -0
  351. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png +0 -0
  352. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png +0 -0
  353. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png +0 -0
  354. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png +0 -0
  355. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png +0 -0
  356. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png +0 -0
  357. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png +0 -0
  358. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png +0 -0
  359. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png +0 -0
  360. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png +0 -0
  361. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png +0 -0
  362. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png +0 -0
  363. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png +0 -0
  364. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png +0 -0
  365. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png +0 -0
  366. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png +0 -0
  367. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png +0 -0
  368. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png +0 -0
  369. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png +0 -0
  370. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png +0 -0
  371. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png +0 -0
  372. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png +0 -0
  373. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png +0 -0
  374. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png +0 -0
  375. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png +0 -0
  376. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png +0 -0
  377. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png +0 -0
  378. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png +0 -0
  379. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png +0 -0
  380. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png +0 -0
  381. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png +0 -0
  382. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png +0 -0
  383. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png +0 -0
  384. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png +0 -0
  385. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png +0 -0
  386. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png +0 -0
  387. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png +0 -0
  388. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png +0 -0
  389. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png +0 -0
  390. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png +0 -0
  391. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png +0 -0
  392. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png +0 -0
  393. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png +0 -0
  394. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png +0 -0
  395. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_word.png +0 -0
  396. data/server/node_modules/express/node_modules/connect/lib/public/icons/page_world.png +0 -0
  397. data/server/node_modules/express/node_modules/connect/lib/public/style.css +141 -0
  398. data/server/node_modules/express/node_modules/connect/lib/utils.js +444 -0
  399. data/server/node_modules/express/node_modules/connect/package.json +24 -0
  400. data/server/node_modules/express/node_modules/connect/test.js +39 -0
  401. data/server/node_modules/express/node_modules/mime/LICENSE +19 -0
  402. data/server/node_modules/express/node_modules/mime/README.md +50 -0
  403. data/server/node_modules/express/node_modules/mime/index.js +1 -0
  404. data/server/node_modules/express/node_modules/mime/mime.js +92 -0
  405. data/server/node_modules/express/node_modules/mime/mime.types +1479 -0
  406. data/server/node_modules/express/node_modules/mime/node.types +26 -0
  407. data/server/node_modules/express/node_modules/mime/package.json +11 -0
  408. data/server/node_modules/express/node_modules/mime/test.js +80 -0
  409. data/server/node_modules/express/node_modules/qs/History.md +52 -0
  410. data/server/node_modules/express/node_modules/qs/Makefile +7 -0
  411. data/server/node_modules/express/node_modules/qs/Readme.md +49 -0
  412. data/server/node_modules/express/node_modules/qs/benchmark.js +17 -0
  413. data/server/node_modules/express/node_modules/qs/examples.js +48 -0
  414. data/server/node_modules/express/node_modules/qs/index.js +2 -0
  415. data/server/node_modules/express/node_modules/qs/lib/querystring.js +236 -0
  416. data/server/node_modules/express/node_modules/qs/package.json +9 -0
  417. data/server/node_modules/express/node_modules/qs/support/expresso/History.md +128 -0
  418. data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +53 -0
  419. data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +61 -0
  420. data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +856 -0
  421. data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +1080 -0
  422. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +377 -0
  423. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +290 -0
  424. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +3 -0
  425. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +42 -0
  426. data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +4 -0
  427. data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +16 -0
  428. data/server/node_modules/express/node_modules/qs/support/expresso/package.json +12 -0
  429. data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +91 -0
  430. data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +12 -0
  431. data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +13 -0
  432. data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +14 -0
  433. data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +146 -0
  434. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +39 -0
  435. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +48 -0
  436. data/server/node_modules/express/node_modules/qs/support/should/History.md +22 -0
  437. data/server/node_modules/express/node_modules/qs/support/should/Makefile +6 -0
  438. data/server/node_modules/express/node_modules/qs/support/should/Readme.md +248 -0
  439. data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +53 -0
  440. data/server/node_modules/express/node_modules/qs/support/should/index.js +2 -0
  441. data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +91 -0
  442. data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +548 -0
  443. data/server/node_modules/express/node_modules/qs/support/should/package.json +8 -0
  444. data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +358 -0
  445. data/server/node_modules/express/node_modules/qs/test/parse.test.js +156 -0
  446. data/server/node_modules/express/node_modules/qs/test/stringify.test.js +95 -0
  447. data/server/node_modules/express/package.json +38 -0
  448. data/server/node_modules/knox/History.md +41 -0
  449. data/server/node_modules/knox/Makefile +21 -0
  450. data/server/node_modules/knox/Readme.md +144 -0
  451. data/server/node_modules/knox/index.html +483 -0
  452. data/server/node_modules/knox/index.js +2 -0
  453. data/server/node_modules/knox/lib/knox/auth.js +190 -0
  454. data/server/node_modules/knox/lib/knox/client.js +355 -0
  455. data/server/node_modules/knox/lib/knox/index.js +36 -0
  456. data/server/node_modules/knox/lib/knox/mime/README.md +19 -0
  457. data/server/node_modules/knox/lib/knox/mime/index.js +308 -0
  458. data/server/node_modules/knox/lib/knox/mime/mime.js +308 -0
  459. data/server/node_modules/knox/lib/knox/mime/package.json +12 -0
  460. data/server/node_modules/knox/lib/knox/mime/test.js +59 -0
  461. data/server/node_modules/knox/lib/knox/utils.js +55 -0
  462. data/server/node_modules/knox/package.json +13 -0
  463. data/server/node_modules/knox/support/expresso/History.md +87 -0
  464. data/server/node_modules/knox/support/expresso/Makefile +53 -0
  465. data/server/node_modules/knox/support/expresso/Readme.md +39 -0
  466. data/server/node_modules/knox/support/expresso/bin/expresso +835 -0
  467. data/server/node_modules/knox/support/expresso/docs/api.html +1048 -0
  468. data/server/node_modules/knox/support/expresso/docs/index.html +373 -0
  469. data/server/node_modules/knox/support/expresso/docs/index.md +290 -0
  470. data/server/node_modules/knox/support/expresso/docs/layout/foot.html +3 -0
  471. data/server/node_modules/knox/support/expresso/docs/layout/head.html +42 -0
  472. data/server/node_modules/knox/support/expresso/lib/bar.js +4 -0
  473. data/server/node_modules/knox/support/expresso/lib/foo.js +16 -0
  474. data/server/node_modules/knox/support/expresso/package.json +9 -0
  475. data/server/node_modules/knox/support/expresso/test/assert.test.js +84 -0
  476. data/server/node_modules/knox/support/expresso/test/async.test.js +6 -0
  477. data/server/node_modules/knox/support/expresso/test/bar.test.js +12 -0
  478. data/server/node_modules/knox/support/expresso/test/foo.test.js +13 -0
  479. data/server/node_modules/knox/support/expresso/test/http.test.js +76 -0
  480. data/server/node_modules/knox/support/expresso/test/serial/async.test.js +38 -0
  481. data/server/node_modules/knox/support/expresso/test/serial/http.test.js +47 -0
  482. data/server/node_modules/knox/test/auth.test.js +59 -0
  483. data/server/node_modules/knox/test/fixtures/user.json +1 -0
  484. data/server/node_modules/knox/test/knox.test.js +188 -0
  485. data/server/node_modules/knox/test/utils.test.js +17 -0
  486. data/server/node_modules/node-uuid/LICENSE.md +3 -0
  487. data/server/node_modules/node-uuid/README.md +100 -0
  488. data/server/node_modules/node-uuid/package.json +12 -0
  489. data/server/node_modules/node-uuid/test/benchmark-native.c +34 -0
  490. data/server/node_modules/node-uuid/test/benchmark.js +27 -0
  491. data/server/node_modules/node-uuid/test/test.html +14 -0
  492. data/server/node_modules/node-uuid/test/test.js +83 -0
  493. data/server/node_modules/node-uuid/uuid.js +80 -0
  494. data/server/node_modules/restler/MIT-LICENSE +20 -0
  495. data/server/node_modules/restler/README.md +147 -0
  496. data/server/node_modules/restler/bin/restler +23 -0
  497. data/server/node_modules/restler/index.js +1 -0
  498. data/server/node_modules/restler/lib/multipartform.js +202 -0
  499. data/server/node_modules/restler/lib/restler.js +300 -0
  500. data/server/node_modules/restler/package.json +10 -0
  501. data/server/node_modules/restler/test/all.js +1 -0
  502. data/server/node_modules/restler/test/restler.js +148 -0
  503. data/server/node_modules/restler/test/test_helper.js +144 -0
  504. data/server/package.json +12 -0
  505. data/server/vendor/gems/bin/restclient +19 -0
  506. data/server/vendor/gems/cache/couchrest-1.1.2.gem +0 -0
  507. data/server/vendor/gems/cache/mime-types-1.16.gem +0 -0
  508. data/server/vendor/gems/cache/multi_json-1.0.3.gem +0 -0
  509. data/server/vendor/gems/cache/rest-client-1.6.7.gem +0 -0
  510. data/server/vendor/gems/gems/couchrest-1.1.2/Gemfile +4 -0
  511. data/server/vendor/gems/gems/couchrest-1.1.2/LICENSE +176 -0
  512. data/server/vendor/gems/gems/couchrest-1.1.2/README.md +65 -0
  513. data/server/vendor/gems/gems/couchrest-1.1.2/Rakefile +38 -0
  514. data/server/vendor/gems/gems/couchrest-1.1.2/THANKS.md +21 -0
  515. data/server/vendor/gems/gems/couchrest-1.1.2/VERSION +1 -0
  516. data/server/vendor/gems/gems/couchrest-1.1.2/couchrest.gemspec +34 -0
  517. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/markov +38 -0
  518. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/books/chunked-map.js +3 -0
  519. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/books/united-map.js +1 -0
  520. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/markov/chain-map.js +6 -0
  521. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/markov/chain-reduce.js +7 -0
  522. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/word_count/count-map.js +6 -0
  523. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/views/word_count/count-reduce.js +3 -0
  524. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/word_count.rb +46 -0
  525. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/word_count_query.rb +40 -0
  526. data/server/vendor/gems/gems/couchrest-1.1.2/examples/word_count/word_count_views.rb +26 -0
  527. data/server/vendor/gems/gems/couchrest-1.1.2/history.txt +194 -0
  528. data/server/vendor/gems/gems/couchrest-1.1.2/init.rb +1 -0
  529. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest.rb +134 -0
  530. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/attributes.rb +89 -0
  531. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/commands/generate.rb +71 -0
  532. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/commands/push.rb +103 -0
  533. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/database.rb +396 -0
  534. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/design.rb +91 -0
  535. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/document.rb +105 -0
  536. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/attachments.rb +29 -0
  537. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/pager.rb +103 -0
  538. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/streamer.rb +58 -0
  539. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/helper/upgrade.rb +51 -0
  540. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/middlewares/logger.rb +263 -0
  541. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/monkeypatches.rb +25 -0
  542. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/rest_api.rb +159 -0
  543. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/server.rb +90 -0
  544. data/server/vendor/gems/gems/couchrest-1.1.2/lib/couchrest/support/inheritable_attributes.rb +107 -0
  545. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/couchrest_spec.rb +202 -0
  546. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/database_spec.rb +921 -0
  547. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/design_spec.rb +206 -0
  548. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/document_spec.rb +400 -0
  549. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/helpers/pager_spec.rb +115 -0
  550. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/helpers/streamer_spec.rb +59 -0
  551. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/rest_api_spec.rb +212 -0
  552. data/server/vendor/gems/gems/couchrest-1.1.2/spec/couchrest/server_spec.rb +35 -0
  553. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/attachments/README +3 -0
  554. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/attachments/couchdb.png +0 -0
  555. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/attachments/test.html +11 -0
  556. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/views/lib.js +3 -0
  557. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/views/test_view/lib.js +3 -0
  558. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/views/test_view/only-map.js +4 -0
  559. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/views/test_view/test-map.js +3 -0
  560. data/server/vendor/gems/gems/couchrest-1.1.2/spec/fixtures/views/test_view/test-reduce.js +3 -0
  561. data/server/vendor/gems/gems/couchrest-1.1.2/spec/spec.opts +5 -0
  562. data/server/vendor/gems/gems/couchrest-1.1.2/spec/spec_helper.rb +46 -0
  563. data/server/vendor/gems/gems/couchrest-1.1.2/utils/remap.rb +27 -0
  564. data/server/vendor/gems/gems/couchrest-1.1.2/utils/subset.rb +30 -0
  565. data/server/vendor/gems/gems/mime-types-1.16/History.txt +107 -0
  566. data/server/vendor/gems/gems/mime-types-1.16/Install.txt +17 -0
  567. data/server/vendor/gems/gems/mime-types-1.16/Licence.txt +15 -0
  568. data/server/vendor/gems/gems/mime-types-1.16/Manifest.txt +12 -0
  569. data/server/vendor/gems/gems/mime-types-1.16/README.txt +28 -0
  570. data/server/vendor/gems/gems/mime-types-1.16/Rakefile +316 -0
  571. data/server/vendor/gems/gems/mime-types-1.16/lib/mime/types.rb +751 -0
  572. data/server/vendor/gems/gems/mime-types-1.16/lib/mime/types.rb.data +1324 -0
  573. data/server/vendor/gems/gems/mime-types-1.16/mime-types.gemspec +43 -0
  574. data/server/vendor/gems/gems/mime-types-1.16/setup.rb +1585 -0
  575. data/server/vendor/gems/gems/mime-types-1.16/test/test_mime_type.rb +356 -0
  576. data/server/vendor/gems/gems/mime-types-1.16/test/test_mime_types.rb +122 -0
  577. data/server/vendor/gems/gems/multi_json-1.0.3/Gemfile +7 -0
  578. data/server/vendor/gems/gems/multi_json-1.0.3/LICENSE.md +20 -0
  579. data/server/vendor/gems/gems/multi_json-1.0.3/README.md +70 -0
  580. data/server/vendor/gems/gems/multi_json-1.0.3/Rakefile +23 -0
  581. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json.rb +74 -0
  582. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/engines/json_gem.rb +21 -0
  583. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/engines/json_pure.rb +21 -0
  584. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/engines/ok_json.rb +48 -0
  585. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/engines/yajl.rb +18 -0
  586. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/vendor/ok_json.rb +581 -0
  587. data/server/vendor/gems/gems/multi_json-1.0.3/lib/multi_json/version.rb +3 -0
  588. data/server/vendor/gems/gems/multi_json-1.0.3/multi_json.gemspec +23 -0
  589. data/server/vendor/gems/gems/multi_json-1.0.3/spec/helper.rb +11 -0
  590. data/server/vendor/gems/gems/multi_json-1.0.3/spec/multi_json_spec.rb +134 -0
  591. data/server/vendor/gems/gems/rest-client-1.6.7/README.rdoc +285 -0
  592. data/server/vendor/gems/gems/rest-client-1.6.7/Rakefile +66 -0
  593. data/server/vendor/gems/gems/rest-client-1.6.7/VERSION +1 -0
  594. data/server/vendor/gems/gems/rest-client-1.6.7/bin/restclient +93 -0
  595. data/server/vendor/gems/gems/rest-client-1.6.7/history.md +134 -0
  596. data/server/vendor/gems/gems/rest-client-1.6.7/lib/rest-client.rb +2 -0
  597. data/server/vendor/gems/gems/rest-client-1.6.7/lib/rest_client.rb +2 -0
  598. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient.rb +174 -0
  599. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb +106 -0
  600. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/exceptions.rb +193 -0
  601. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/net_http_ext.rb +55 -0
  602. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/payload.rb +235 -0
  603. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/raw_response.rb +34 -0
  604. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/request.rb +316 -0
  605. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/resource.rb +169 -0
  606. data/server/vendor/gems/gems/rest-client-1.6.7/lib/restclient/response.rb +24 -0
  607. data/server/vendor/gems/gems/rest-client-1.6.7/spec/abstract_response_spec.rb +85 -0
  608. data/server/vendor/gems/gems/rest-client-1.6.7/spec/base.rb +16 -0
  609. data/server/vendor/gems/gems/rest-client-1.6.7/spec/exceptions_spec.rb +98 -0
  610. data/server/vendor/gems/gems/rest-client-1.6.7/spec/integration/certs/equifax.crt +19 -0
  611. data/server/vendor/gems/gems/rest-client-1.6.7/spec/integration/certs/verisign.crt +14 -0
  612. data/server/vendor/gems/gems/rest-client-1.6.7/spec/integration/request_spec.rb +25 -0
  613. data/server/vendor/gems/gems/rest-client-1.6.7/spec/integration_spec.rb +38 -0
  614. data/server/vendor/gems/gems/rest-client-1.6.7/spec/master_shake.jpg +0 -0
  615. data/server/vendor/gems/gems/rest-client-1.6.7/spec/payload_spec.rb +234 -0
  616. data/server/vendor/gems/gems/rest-client-1.6.7/spec/raw_response_spec.rb +17 -0
  617. data/server/vendor/gems/gems/rest-client-1.6.7/spec/request2_spec.rb +40 -0
  618. data/server/vendor/gems/gems/rest-client-1.6.7/spec/request_spec.rb +529 -0
  619. data/server/vendor/gems/gems/rest-client-1.6.7/spec/resource_spec.rb +134 -0
  620. data/server/vendor/gems/gems/rest-client-1.6.7/spec/response_spec.rb +169 -0
  621. data/server/vendor/gems/gems/rest-client-1.6.7/spec/restclient_spec.rb +73 -0
  622. data/server/vendor/gems/specifications/couchrest-1.1.2.gemspec +43 -0
  623. data/server/vendor/gems/specifications/mime-types-1.16.gemspec +42 -0
  624. data/server/vendor/gems/specifications/multi_json-1.0.3.gemspec +40 -0
  625. data/server/vendor/gems/specifications/rest-client-1.6.7.gemspec +37 -0
  626. data/server/web.js +93 -0
  627. metadata +633 -7
@@ -0,0 +1,921 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ describe CouchRest::Database do
4
+ before(:each) do
5
+ @cr = CouchRest.new(COUCHHOST)
6
+ @db = @cr.database(TESTDB)
7
+ @db.delete! rescue nil
8
+ @db = @cr.create_db(TESTDB) rescue nil
9
+ end
10
+
11
+ describe "database name including slash" do
12
+ it "should escape the name in the URI" do
13
+ db = @cr.database("foo/bar")
14
+ db.name.should == "foo/bar"
15
+ db.root.should == "#{COUCHHOST}/foo%2Fbar"
16
+ db.uri.should == "/foo%2Fbar"
17
+ end
18
+ end
19
+
20
+ describe "#info" do
21
+ it "should request basic database data" do
22
+ @db.info['db_name'].should eql(TESTDB)
23
+ end
24
+ end
25
+
26
+ describe "map query with _temp_view in Javascript" do
27
+ before(:each) do
28
+ @db.bulk_save([
29
+ {"wild" => "and random"},
30
+ {"mild" => "yet local"},
31
+ {"another" => ["set","of","keys"]}
32
+ ])
33
+ @temp_view = {:map => "function(doc){for(var w in doc){ if(!w.match(/^_/))emit(w,doc[w])}}"}
34
+ end
35
+ it "should return the result of the temporary function" do
36
+ rs = @db.temp_view(@temp_view)
37
+ rs['rows'].select{|r|r['key'] == 'wild' && r['value'] == 'and random'}.length.should == 1
38
+ end
39
+ it "should work with a range" do
40
+ rs = @db.temp_view(@temp_view, :startkey => "b", :endkey => "z")
41
+ rs['rows'].length.should == 2
42
+ end
43
+ it "should work with a key" do
44
+ rs = @db.temp_view(@temp_view, :key => "wild")
45
+ rs['rows'].length.should == 1
46
+ end
47
+ it "should work with a limit" do
48
+ rs = @db.temp_view(@temp_view, :limit => 1)
49
+ rs['rows'].length.should == 1
50
+ end
51
+ it "should work with multi-keys" do
52
+ rs = @db.temp_view(@temp_view, :keys => ["another", "wild"])
53
+ rs['rows'].length.should == 2
54
+ end
55
+ end
56
+
57
+ describe "map/reduce query with _temp_view in Javascript" do
58
+ before(:each) do
59
+ @db.bulk_save([
60
+ {"beverage" => "beer", :count => 4},
61
+ {"beverage" => "beer", :count => 2},
62
+ {"beverage" => "tea", :count => 3}
63
+ ])
64
+ end
65
+ it "should return the result of the temporary function" do
66
+ rs = @db.temp_view(:map => "function(doc){emit(doc.beverage, doc.count)}", :reduce => "function(beverage,counts){return sum(counts)}")
67
+ # rs.should == 'x'
68
+ rs['rows'][0]['value'].should == 9
69
+ end
70
+ end
71
+
72
+ describe "saving a view" do
73
+ before(:each) do
74
+ @view = {'test' => {'map' => <<-JS
75
+ function(doc) {
76
+ var reg = new RegExp("\\\\W");
77
+ if (doc.word && !reg.test(doc.word)) {
78
+ emit(doc.word,null);
79
+ }
80
+ }
81
+ JS
82
+ }}
83
+ @db.save_doc({
84
+ "_id" => "_design/test",
85
+ :views => @view
86
+ })
87
+ end
88
+ it "should work properly" do
89
+ r = @db.bulk_save([
90
+ {"word" => "once"},
91
+ {"word" => "and again"}
92
+ ])
93
+ r = @db.view('test/test')
94
+ r['total_rows'].should == 1
95
+ end
96
+ it "should round trip" do
97
+ @db.get("_design/test")['views'].should == @view
98
+ end
99
+ end
100
+
101
+ describe "select from an existing view" do
102
+ before(:each) do
103
+ r = @db.save_doc({
104
+ "_id" => "_design/first",
105
+ :views => {
106
+ :test => {
107
+ :map => "function(doc){for(var w in doc){ if(!w.match(/^_/))emit(w,doc[w])}}"
108
+ }
109
+ }
110
+ })
111
+ @db.bulk_save([
112
+ {"wild" => "and random"},
113
+ {"mild" => "yet local"},
114
+ {"another" => ["set","of","keys"]}
115
+ ])
116
+ end
117
+ it "should have the view" do
118
+ @db.get('_design/first')['views']['test']['map'].should include("for(var w in doc)")
119
+ end
120
+ it "should list from the view" do
121
+ rs = @db.view('first/test')
122
+ rs['rows'].select{|r|r['key'] == 'wild' && r['value'] == 'and random'}.length.should == 1
123
+ end
124
+ it "should work with a range" do
125
+ rs = @db.view('first/test', :startkey => "b", :endkey => "z")
126
+ rs['rows'].length.should == 2
127
+ end
128
+ it "should work with a key" do
129
+ rs = @db.view('first/test', :key => "wild")
130
+ rs['rows'].length.should == 1
131
+ end
132
+ it "should work with a limit" do
133
+ rs = @db.view('first/test', :limit => 1)
134
+ rs['rows'].length.should == 1
135
+ end
136
+ it "should work with multi-keys" do
137
+ rs = @db.view('first/test', :keys => ["another", "wild"])
138
+ rs['rows'].length.should == 2
139
+ end
140
+ it "should accept a block" do
141
+ rows = []
142
+ rs = @db.view('first/test', :include_docs => true) do |row|
143
+ rows << row
144
+ end
145
+ rows.length.should == 3
146
+ rs["total_rows"].should == 3
147
+ end
148
+ it "should accept a block with several params" do
149
+ rows = []
150
+ rs = @db.view('first/test', :include_docs => true, :limit => 2) do |row|
151
+ rows << row
152
+ end
153
+ rows.length.should == 2
154
+ end
155
+ it "should accept a payload" do
156
+ rs = @db.view('first/test', {}, :keys => ["another", "wild"])
157
+ rs['rows'].length.should == 2
158
+ end
159
+ it "should accept a payload with block" do
160
+ rows = []
161
+ rs = @db.view('first/test', {:include_docs => true}, :keys => ["another", "wild"]) do |row|
162
+ rows << row
163
+ end
164
+ rows.length.should == 2
165
+ rows.first['doc']['another'].should_not be_empty
166
+ end
167
+ end
168
+
169
+ describe "#changes" do
170
+ # uses standard view method, so not much testing required
171
+ before(:each) do
172
+ [
173
+ {"wild" => "and random"},
174
+ {"mild" => "yet local"},
175
+ {"another" => ["set","of","keys"]}
176
+ ].each do |d|
177
+ @db.save_doc(d)
178
+ end
179
+ end
180
+
181
+ it "should produce a basic list of changes" do
182
+ c = @db.changes
183
+ c['results'].length.should eql(3)
184
+ end
185
+
186
+ it "should provide id of last document" do
187
+ c = @db.changes
188
+ doc = @db.get(c['results'].last['id'])
189
+ doc['another'].should_not be_empty
190
+ end
191
+ end
192
+
193
+ describe "GET (document by id) when the doc exists" do
194
+ before(:each) do
195
+ @r = @db.save_doc({'lemons' => 'from texas', 'and' => 'spain'})
196
+ @docid = "http://example.com/stuff.cgi?things=and%20stuff"
197
+ @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
198
+ end
199
+ it "should get the document" do
200
+ doc = @db.get(@r['id'])
201
+ doc['lemons'].should == 'from texas'
202
+ end
203
+ it "should work with a funky id" do
204
+ @db.get(@docid)['will-exist'].should == 'here'
205
+ end
206
+ end
207
+
208
+ describe "POST (adding bulk documents)" do
209
+ it "should add them without ids" do
210
+ rs = @db.bulk_save([
211
+ {"wild" => "and random"},
212
+ {"mild" => "yet local"},
213
+ {"another" => ["set","of","keys"]}
214
+ ])
215
+ rs.each do |r|
216
+ @db.get(r['id']).rev.should == r["rev"]
217
+ end
218
+ end
219
+
220
+ it "should use uuids when ids aren't provided" do
221
+ @db.server.stub!(:next_uuid).and_return('asdf6sgadkfhgsdfusdf')
222
+
223
+ docs = [{'key' => 'value'}, {'_id' => 'totally-uniq'}]
224
+ id_docs = [{'key' => 'value', '_id' => 'asdf6sgadkfhgsdfusdf'}, {'_id' => 'totally-uniq'}]
225
+ CouchRest.should_receive(:post).with("#{COUCHHOST}/couchrest-test/_bulk_docs", {:docs => id_docs})
226
+
227
+ @db.bulk_save(docs)
228
+ end
229
+
230
+ it "should add them with uniq ids" do
231
+ rs = @db.bulk_save([
232
+ {"_id" => "oneB", "wild" => "and random"},
233
+ {"_id" => "twoB", "mild" => "yet local"},
234
+ {"another" => ["set","of","keys"]}
235
+ ])
236
+ rs.each do |r|
237
+ @db.get(r['id']).rev.should == r["rev"]
238
+ end
239
+ end
240
+
241
+ it "should empty the bulk save cache if no documents are given" do
242
+ @db.save_doc({"_id" => "bulk_cache_1", "val" => "test"}, true)
243
+ lambda do
244
+ @db.get('bulk_cache_1')
245
+ end.should raise_error(RestClient::ResourceNotFound)
246
+ @db.bulk_save
247
+ @db.get("bulk_cache_1")["val"].should == "test"
248
+ end
249
+
250
+ it "should raise an error that is useful for recovery" do
251
+ @r = @db.save_doc({"_id" => "taken", "field" => "stuff"})
252
+ begin
253
+ rs = @db.bulk_save([
254
+ {"_id" => "taken", "wild" => "and random"},
255
+ {"_id" => "free", "mild" => "yet local"},
256
+ {"another" => ["set","of","keys"]}
257
+ ])
258
+ rescue RestClient::RequestFailed => e
259
+ # soon CouchDB will provide _which_ docs conflicted
260
+ MultiJson.decode(e.response.body)['error'].should == 'conflict'
261
+ end
262
+ end
263
+ end
264
+
265
+ describe "new document without an id" do
266
+ it "should start empty" do
267
+ @db.documents["total_rows"].should == 0
268
+ end
269
+ it "should create the document and return the id" do
270
+ r = @db.save_doc({'lemons' => 'from texas', 'and' => 'spain'})
271
+ r2 = @db.get(r['id'])
272
+ r2["lemons"].should == "from texas"
273
+ end
274
+ it "should use PUT with UUIDs" do
275
+ CouchRest.should_receive(:put).and_return({"ok" => true, "id" => "100", "rev" => "55"})
276
+ r = @db.save_doc({'just' => ['another document']})
277
+ end
278
+
279
+ end
280
+
281
+ describe "fetch_attachment" do
282
+ before do
283
+ @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
284
+ @doc = {
285
+ "_id" => "mydocwithattachment",
286
+ "field" => ["some value"],
287
+ "_attachments" => {
288
+ "test.html" => {
289
+ "type" => "text/html",
290
+ "data" => @attach
291
+ }
292
+ }
293
+ }
294
+ @db.save_doc(@doc)
295
+ end
296
+
297
+ # Depreacated
298
+ # it "should get the attachment with the doc's _id" do
299
+ # @db.fetch_attachment("mydocwithattachment", "test.html").should == @attach
300
+ # end
301
+
302
+ it "should get the attachment with the doc itself" do
303
+ @db.fetch_attachment(@db.get('mydocwithattachment'), 'test.html').should == @attach
304
+ end
305
+ end
306
+
307
+ describe "PUT attachment from file" do
308
+ before(:each) do
309
+ filename = FIXTURE_PATH + '/attachments/couchdb.png'
310
+ @file = File.open(filename, "rb")
311
+ end
312
+ after(:each) do
313
+ @file.close
314
+ end
315
+ it "should save the attachment to a new doc" do
316
+ r = @db.put_attachment({'_id' => 'attach-this'}, 'couchdb.png', image = @file.read, {:content_type => 'image/png'})
317
+ r['ok'].should == true
318
+ doc = @db.get("attach-this")
319
+ attachment = @db.fetch_attachment(doc, "couchdb.png")
320
+ (attachment == image).should be_true
321
+ #if attachment.respond_to?(:net_http_res)
322
+ # attachment.net_http_res.body.should == image
323
+ #end
324
+ end
325
+ end
326
+
327
+ describe "PUT document with attachment" do
328
+ before(:each) do
329
+ @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
330
+ doc = {
331
+ "_id" => "mydocwithattachment",
332
+ "field" => ["some value"],
333
+ "_attachments" => {
334
+ "test.html" => {
335
+ "type" => "text/html",
336
+ "data" => @attach
337
+ }
338
+ }
339
+ }
340
+ @db.save_doc(doc)
341
+ @doc = @db.get("mydocwithattachment")
342
+ end
343
+ it "should save and be indicated" do
344
+ @doc['_attachments']['test.html']['length'].should == @attach.length
345
+ end
346
+ it "should be there" do
347
+ attachment = @db.fetch_attachment(@doc,"test.html")
348
+ attachment.should == @attach
349
+ end
350
+ end
351
+
352
+ describe "PUT document with attachment stub" do
353
+ before(:each) do
354
+ @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
355
+ doc = {
356
+ '_id' => 'mydocwithattachment',
357
+ 'field' => ['some_value'],
358
+ '_attachments' => {
359
+ 'test.html' => {
360
+ 'type' => 'text/html', 'data' => @attach
361
+ }
362
+ }
363
+ }
364
+ @db.save_doc(doc)
365
+ doc['_rev'].should_not be_nil
366
+ doc['field'] << 'another value'
367
+ @db.save_doc(doc)["ok"].should be_true
368
+ end
369
+
370
+ it 'should be there' do
371
+ doc = @db.get('mydocwithattachment')
372
+ attachment = @db.fetch_attachment(doc, 'test.html')
373
+ Base64.decode64(attachment).should == @attach
374
+ end
375
+ end
376
+
377
+ describe "PUT document with multiple attachments" do
378
+ before(:each) do
379
+ @attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
380
+ @attach2 = "<html><head><title>Other Doc</title></head><body><p>Has more words.</p></body></html>"
381
+ @doc = {
382
+ "_id" => "mydocwithattachment",
383
+ "field" => ["some value"],
384
+ "_attachments" => {
385
+ "test.html" => {
386
+ "type" => "text/html",
387
+ "data" => @attach
388
+ },
389
+ "other.html" => {
390
+ "type" => "text/html",
391
+ "data" => @attach2
392
+ }
393
+ }
394
+ }
395
+ @db.save_doc(@doc)
396
+ @doc = @db.get("mydocwithattachment")
397
+ end
398
+ it "should save and be indicated" do
399
+ @doc['_attachments']['test.html']['length'].should == @attach.length
400
+ @doc['_attachments']['other.html']['length'].should == @attach2.length
401
+ end
402
+ it "should be there" do
403
+ attachment = @db.fetch_attachment(@doc,"test.html")
404
+ attachment.should == @attach
405
+ end
406
+ it "should be there" do
407
+ attachment = @db.fetch_attachment(@doc,"other.html")
408
+ attachment.should == @attach2
409
+ end
410
+ end
411
+
412
+ describe "DELETE an attachment directly from the database" do
413
+ before(:each) do
414
+ doc = {
415
+ '_id' => 'mydocwithattachment',
416
+ '_attachments' => {
417
+ 'test.html' => {
418
+ 'type' => 'text/html',
419
+ 'data' => "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
420
+ }
421
+ }
422
+ }
423
+ @db.save_doc(doc)
424
+ @doc = @db.get('mydocwithattachment')
425
+ end
426
+ it "should delete the attachment" do
427
+ lambda { @db.fetch_attachment(@doc,'test.html') }.should_not raise_error
428
+ @db.delete_attachment(@doc, "test.html")
429
+ @doc = @db.get('mydocwithattachment') # avoid getting a 409
430
+ lambda{ @db.fetch_attachment(@doc,'test.html')}.should raise_error
431
+ end
432
+
433
+ it "should force a delete even if we get a 409" do
434
+ @doc['new_attribute'] = 'something new'
435
+ @db.put_attachment(@doc, 'test', File.open(File.join(FIXTURE_PATH, 'attachments', 'test.html')).read)
436
+ # at this point the revision number changed, if we try to save doc one more time
437
+ # we would get a 409.
438
+ lambda{ @db.save_doc(@doc) }.should raise_error
439
+ lambda{ @db.delete_attachment(@doc, "test", true) }.should_not raise_error
440
+ end
441
+ end
442
+
443
+ describe "POST document with attachment (with funky name)" do
444
+ before(:each) do
445
+ @attach = "<html><head><title>My Funky Doc</title></head><body><p>Has words.</p></body></html>"
446
+ @doc = {
447
+ "field" => ["some other value"],
448
+ "_attachments" => {
449
+ "http://example.com/stuff.cgi?things=and%20stuff" => {
450
+ "type" => "text/html",
451
+ "data" => @attach
452
+ }
453
+ }
454
+ }
455
+ @docid = @db.save_doc(@doc)['id']
456
+ end
457
+ it "should save and be indicated" do
458
+ doc = @db.get(@docid)
459
+ doc['_attachments']['http://example.com/stuff.cgi?things=and%20stuff']['length'].should == @attach.length
460
+ end
461
+ it "should be there" do
462
+ doc = @db.get(@docid)
463
+ attachment = @db.fetch_attachment(doc,"http://example.com/stuff.cgi?things=and%20stuff")
464
+ attachment.should == @attach
465
+ end
466
+ end
467
+
468
+ describe "PUT (new document with url id)" do
469
+ it "should create the document" do
470
+ @docid = "http://example.com/stuff.cgi?things=and%20stuff"
471
+ @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
472
+ lambda{@db.save_doc({'_id' => @docid})}.should raise_error(RestClient::Request::RequestFailed)
473
+ @db.get(@docid)['will-exist'].should == 'here'
474
+ end
475
+ end
476
+
477
+ describe "PUT (new document with id)" do
478
+ it "should start without the document" do
479
+ # r = @db.save_doc({'lemons' => 'from texas', 'and' => 'spain'})
480
+ @db.documents['rows'].each do |doc|
481
+ doc['id'].should_not == 'my-doc'
482
+ end
483
+ # should_not include({'_id' => 'my-doc'})
484
+ # this needs to be a loop over docs on content with the post
485
+ # or instead make it return something with a fancy <=> method
486
+ end
487
+ it "should create the document" do
488
+ @db.save_doc({'_id' => 'my-doc', 'will-exist' => 'here'})
489
+ lambda{@db.save_doc({'_id' => 'my-doc'})}.should raise_error(RestClient::Request::RequestFailed)
490
+ end
491
+ end
492
+
493
+ describe "PUT (existing document with rev)" do
494
+ before(:each) do
495
+ @db.save_doc({'_id' => 'my-doc', 'will-exist' => 'here'})
496
+ @doc = @db.get('my-doc')
497
+ @docid = "http://example.com/stuff.cgi?things=and%20stuff"
498
+ @db.save_doc({'_id' => @docid, 'now' => 'save'})
499
+ end
500
+ it "should start with the document" do
501
+ @doc['will-exist'].should == 'here'
502
+ @db.get(@docid)['now'].should == 'save'
503
+ end
504
+ it "should save with url id" do
505
+ doc = @db.get(@docid)
506
+ doc['yaml'] = ['json', 'word.']
507
+ @db.save_doc doc
508
+ @db.get(@docid)['yaml'].should == ['json', 'word.']
509
+ end
510
+ it "should fail to resave without the rev" do
511
+ @doc['them-keys'] = 'huge'
512
+ @doc['_rev'] = 'wrong'
513
+ # @db.save_doc(@doc)
514
+ lambda {@db.save_doc(@doc)}.should raise_error
515
+ end
516
+ it "should update the document" do
517
+ @doc['them-keys'] = 'huge'
518
+ @db.save_doc(@doc)
519
+ now = @db.get('my-doc')
520
+ now['them-keys'].should == 'huge'
521
+ end
522
+ end
523
+
524
+ describe "cached bulk save" do
525
+ it "stores documents in a database-specific cache" do
526
+ td = {"_id" => "btd1", "val" => "test"}
527
+ @db.save_doc(td, true)
528
+ @db.instance_variable_get("@bulk_save_cache").should == [td]
529
+
530
+ end
531
+
532
+ it "doesn't save to the database until the configured cache size is exceded" do
533
+ @db.bulk_save_cache_limit = 3
534
+ td1 = {"_id" => "td1", "val" => true}
535
+ td2 = {"_id" => "td2", "val" => 4}
536
+ @db.save_doc(td1, true)
537
+ @db.save_doc(td2, true)
538
+ lambda do
539
+ @db.get(td1["_id"])
540
+ end.should raise_error(RestClient::ResourceNotFound)
541
+ lambda do
542
+ @db.get(td2["_id"])
543
+ end.should raise_error(RestClient::ResourceNotFound)
544
+ td3 = {"_id" => "td3", "val" => "foo"}
545
+ @db.save_doc(td3, true)
546
+ @db.get(td1["_id"])["val"].should == td1["val"]
547
+ @db.get(td2["_id"])["val"].should == td2["val"]
548
+ @db.get(td3["_id"])["val"].should == td3["val"]
549
+ end
550
+
551
+ it "clears the bulk save cache the first time a non bulk save is requested" do
552
+ td1 = {"_id" => "blah", "val" => true}
553
+ td2 = {"_id" => "steve", "val" => 3}
554
+ @db.bulk_save_cache_limit = 50
555
+ @db.save_doc(td1, true)
556
+ lambda do
557
+ @db.get(td1["_id"])
558
+ end.should raise_error(RestClient::ResourceNotFound)
559
+ @db.save_doc(td2)
560
+ @db.get(td1["_id"])["val"].should == td1["val"]
561
+ @db.get(td2["_id"])["val"].should == td2["val"]
562
+ end
563
+ end
564
+
565
+ describe "DELETE existing document" do
566
+ before(:each) do
567
+ @r = @db.save_doc({'lemons' => 'from texas', 'and' => 'spain'})
568
+ @docid = "http://example.com/stuff.cgi?things=and%20stuff"
569
+ @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
570
+ end
571
+ it "should work" do
572
+ doc = @db.get(@r['id'])
573
+ doc['and'].should == 'spain'
574
+ @db.delete_doc doc
575
+ lambda{@db.get @r['id']}.should raise_error
576
+ end
577
+ it "should work with uri id" do
578
+ doc = @db.get(@docid)
579
+ @db.delete_doc doc
580
+ lambda{@db.get @docid}.should raise_error
581
+ end
582
+ it "should fail without an _id" do
583
+ lambda{@db.delete_doc({"not"=>"a real doc"})}.should raise_error(ArgumentError)
584
+ end
585
+ it "should defer actual deletion when using bulk save" do
586
+ doc = @db.get(@docid)
587
+ @db.delete_doc doc, true
588
+ lambda{@db.get @docid}.should_not raise_error
589
+ @db.bulk_save
590
+ lambda{@db.get @docid}.should raise_error
591
+ end
592
+
593
+ end
594
+
595
+ describe "UPDATE existing document" do
596
+ before :each do
597
+ @id = @db.save_doc({
598
+ 'article' => 'Pete Doherty Kicked Out For Nazi Anthem',
599
+ 'upvotes' => 10,
600
+ 'link' => 'http://beatcrave.com/2009-11-30/pete-doherty-kicked-out-for-nazi-anthem/'})['id']
601
+ end
602
+ it "should work under normal conditions" do
603
+ @db.update_doc @id do |doc|
604
+ doc['upvotes'] += 1
605
+ end
606
+ @db.get(@id)['upvotes'].should == 11
607
+ end
608
+ it "should fail if update_limit is reached" do
609
+ lambda do
610
+ @db.update_doc @id do |doc|
611
+ # modify and save the doc so that a collision happens
612
+ conflicting_doc = @db.get @id
613
+ conflicting_doc['upvotes'] += 1
614
+ @db.save_doc conflicting_doc
615
+
616
+ # then try saving it through the update
617
+ doc['upvotes'] += 1
618
+ end
619
+ end.should raise_error(RestClient::RequestFailed)
620
+ end
621
+ it "should not fail if update_limit is not reached" do
622
+ limit = 5
623
+ lambda do
624
+ @db.update_doc @id do |doc|
625
+ # same as the last spec except we're only forcing 5 conflicts
626
+ if limit > 0
627
+ conflicting_doc = @db.get @id
628
+ conflicting_doc['upvotes'] += 1
629
+ @db.save_doc conflicting_doc
630
+ limit -= 1
631
+ end
632
+ doc['upvotes'] += 1
633
+ doc
634
+ end
635
+ end.should_not raise_error
636
+ @db.get(@id)['upvotes'].should == 16
637
+ end
638
+ end
639
+
640
+ describe "COPY existing document" do
641
+ before :each do
642
+ @r = @db.save_doc({'artist' => 'Zappa', 'title' => 'Muffin Man'})
643
+ @docid = 'tracks/zappa/muffin-man'
644
+ @doc = @db.get(@r['id'])
645
+ end
646
+ describe "to a new location" do
647
+ it "should work" do
648
+ @db.copy_doc @doc, @docid
649
+ newdoc = @db.get(@docid)
650
+ newdoc['artist'].should == 'Zappa'
651
+ end
652
+ it "should fail without an _id" do
653
+ lambda{@db.copy_doc({"not"=>"a real doc"})}.should raise_error(ArgumentError)
654
+ end
655
+ end
656
+ describe "to an existing location" do
657
+ before :each do
658
+ @db.save_doc({'_id' => @docid, 'will-exist' => 'here'})
659
+ end
660
+ it "should fail without a rev" do
661
+ lambda{@db.copy_doc @doc, @docid}.should raise_error(RestClient::RequestFailed)
662
+ end
663
+ it "should succeed with a rev" do
664
+ @to_be_overwritten = @db.get(@docid)
665
+ @db.copy_doc @doc, "#{@docid}?rev=#{@to_be_overwritten['_rev']}"
666
+ newdoc = @db.get(@docid)
667
+ newdoc['artist'].should == 'Zappa'
668
+ end
669
+ it "should succeed given the doc to overwrite" do
670
+ @to_be_overwritten = @db.get(@docid)
671
+ @db.copy_doc @doc, @to_be_overwritten
672
+ newdoc = @db.get(@docid)
673
+ newdoc['artist'].should == 'Zappa'
674
+ end
675
+ end
676
+ end
677
+
678
+
679
+ it "should list documents" do
680
+ 5.times do
681
+ @db.save_doc({'another' => 'doc', 'will-exist' => 'anywhere'})
682
+ end
683
+ ds = @db.documents
684
+ ds['rows'].should be_an_instance_of(Array)
685
+ ds['rows'][0]['id'].should_not be_nil
686
+ ds['total_rows'].should == 5
687
+ end
688
+
689
+ # This is redundant with the latest view code, but left in place for prosterity.
690
+ describe "documents / _all_docs" do
691
+ before(:each) do
692
+ 9.times do |i|
693
+ @db.save_doc({'_id' => "doc#{i}",'another' => 'doc', 'will-exist' => 'here'})
694
+ end
695
+ end
696
+ it "should list documents with keys and such" do
697
+ ds = @db.documents
698
+ ds['rows'].should be_an_instance_of(Array)
699
+ ds['rows'][0]['id'].should == "doc0"
700
+ ds['total_rows'].should == 9
701
+ end
702
+ it "should take query params" do
703
+ ds = @db.documents(:startkey => 'doc0', :endkey => 'doc3')
704
+ ds['rows'].length.should == 4
705
+ ds = @db.documents(:key => 'doc0')
706
+ ds['rows'].length.should == 1
707
+ end
708
+ it "should work with multi-key" do
709
+ rs = @db.documents :keys => ["doc0", "doc7"]
710
+ rs['rows'].length.should == 2
711
+ end
712
+ it "should work with include_docs" do
713
+ ds = @db.documents(:startkey => 'doc0', :endkey => 'doc3', :include_docs => true)
714
+ ds['rows'][0]['doc']['another'].should == "doc"
715
+ end
716
+ it "should have the bulk_load macro" do
717
+ rs = @db.bulk_load ["doc0", "doc7"]
718
+ rs['rows'].length.should == 2
719
+ rs['rows'][0]['doc']['another'].should == "doc"
720
+ end
721
+ end
722
+
723
+
724
+ describe "#compact" do
725
+ it "should compact the database" do
726
+ db = @cr.database('couchrest-test')
727
+ r = db.compact!
728
+ r['ok'].should == true
729
+ end
730
+ end
731
+
732
+ describe "deleting a database" do
733
+ it "should start with the test database" do
734
+ @cr.databases.should include('couchrest-test')
735
+ end
736
+ it "should delete the database" do
737
+ db = @cr.database('couchrest-test')
738
+ r = db.delete!
739
+ r['ok'].should == true
740
+ @cr.databases.should_not include('couchrest-test')
741
+ end
742
+ end
743
+
744
+ describe "simply replicating a database" do
745
+ before(:each) do
746
+ @db.save_doc({'_id' => 'test_doc', 'some-value' => 'foo'})
747
+ @other_db = @cr.database(REPLICATIONDB)
748
+ end
749
+
750
+ shared_examples_for "simply replicated" do
751
+ it "contains the document from the original database" do
752
+ doc = @other_db.get('test_doc')
753
+ doc['some-value'].should == 'foo'
754
+ end
755
+ end
756
+
757
+ describe "via pulling" do
758
+ before(:each) do
759
+ @other_db.recreate!
760
+ @other_db.replicate_from @db
761
+ end
762
+
763
+ it_should_behave_like "simply replicated"
764
+ end
765
+
766
+ describe "via pushing" do
767
+ before(:each) do
768
+ @other_db.recreate!
769
+ @db.replicate_to @other_db
770
+ end
771
+
772
+ it_should_behave_like "simply replicated"
773
+ end
774
+
775
+ describe "with a specific doc" do
776
+ before(:each) do
777
+ @other_db.recreate!
778
+ @db.save_doc({'_id' => 'unreplicated_doc', 'some-value' => 'foo'})
779
+ @db.replicate_to @other_db, false, false, ['test_doc']
780
+ end
781
+
782
+ # should contain only replicated doc and not unreplicated doc
783
+ it_should_behave_like "simply replicated"
784
+ it "does not contain unreplicated doc" do
785
+ lambda { @other_db.get('unreplicated_doc') }.should raise_error(RestClient::ResourceNotFound)
786
+ end
787
+ end
788
+
789
+ describe "implicitly creating target" do
790
+ describe "via pulling" do
791
+ before(:each) do
792
+ @other_db.replicate_from(@db, false, true)
793
+ end
794
+
795
+ it_should_behave_like "simply replicated"
796
+ end
797
+
798
+ describe "via pushing" do
799
+ before(:each) do
800
+ @db.replicate_to(@other_db, false, true)
801
+ end
802
+
803
+ it_should_behave_like "simply replicated"
804
+ end
805
+ end
806
+ end
807
+
808
+ describe "continuously replicating a database" do
809
+ before(:each) do
810
+ @db.save_doc({'_id' => 'test_doc', 'some-value' => 'foo'})
811
+ @other_db = @cr.database(REPLICATIONDB)
812
+ end
813
+
814
+ shared_examples_for "continuously replicated" do
815
+ it "contains the document from the original database" do
816
+ sleep(1.5) # Allow some time to replicate
817
+ doc = @other_db.get('test_doc')
818
+ doc['some-value'].should == 'foo'
819
+ end
820
+
821
+ it "contains documents saved after replication initiated" do
822
+ @db.save_doc({'_id' => 'test_doc_after', 'some-value' => 'bar'})
823
+ sleep(1.5) # Allow some time to replicate
824
+ doc = @other_db.get('test_doc_after')
825
+ doc['some-value'].should == 'bar'
826
+ end
827
+ end
828
+
829
+ describe "via pulling" do
830
+ before(:each) do
831
+ @other_db.recreate!
832
+ @other_db.replicate_from(@db, true)
833
+ end
834
+
835
+ it_should_behave_like "continuously replicated"
836
+ end
837
+
838
+ describe "via pushing" do
839
+ before(:each) do
840
+ @other_db.recreate!
841
+ @db.replicate_to(@other_db, true)
842
+ end
843
+
844
+ it_should_behave_like "continuously replicated"
845
+ end
846
+
847
+ describe "implicitly creating target" do
848
+ before(:each) do
849
+ @other_db.replicate_from(@db, true, true)
850
+ end
851
+
852
+ after(:each) do
853
+ @other_db.delete!
854
+ end
855
+
856
+ describe "via pulling" do
857
+ it_should_behave_like "continuously replicated"
858
+ end
859
+
860
+ describe "via pushing" do
861
+ it_should_behave_like "continuously replicated"
862
+ end
863
+ end
864
+ end
865
+
866
+ describe "#create!" do
867
+ before(:each) do
868
+ @db = @cr.database('couchrest-test-db_to_create')
869
+ @db.delete! if @cr.databases.include?('couchrest-test-db_to_create')
870
+ end
871
+
872
+ it "should just work fine" do
873
+ @cr.databases.should_not include('couchrest-test-db_to_create')
874
+ @db.create!
875
+ @cr.databases.should include('couchrest-test-db_to_create')
876
+ end
877
+ end
878
+
879
+ describe "#recreate!" do
880
+ before(:each) do
881
+ @db = @cr.database('couchrest-test-db_to_create')
882
+ @db2 = @cr.database('couchrest-test-db_to_recreate')
883
+ @cr.databases.include?(@db.name) ? nil : @db.create!
884
+ @cr.databases.include?(@db2.name) ? @db2.delete! : nil
885
+ end
886
+
887
+ it "should drop and recreate a database" do
888
+ @cr.databases.should include(@db.name)
889
+ @db.recreate!
890
+ @cr.databases.should include(@db.name)
891
+ end
892
+
893
+ it "should recreate a db even tho it doesn't exist" do
894
+ @cr.databases.should_not include(@db2.name)
895
+ @db2.recreate!
896
+ @cr.databases.should include(@db2.name)
897
+ end
898
+ end
899
+
900
+ describe "searching a database" do
901
+ before(:each) do
902
+ search_function = { 'defaults' => {'store' => 'no', 'index' => 'analyzed_no_norms'},
903
+ 'index' => "function(doc) { ret = new Document(); ret.add(doc['name'], {'field':'name'}); ret.add(doc['age'], {'field':'age'}); return ret; }" }
904
+ @db.save_doc({'_id' => '_design/search', 'fulltext' => {'people' => search_function}})
905
+ @db.save_doc({'_id' => 'john', 'name' => 'John', 'age' => '31'})
906
+ @db.save_doc({'_id' => 'jack', 'name' => 'Jack', 'age' => '32'})
907
+ @db.save_doc({'_id' => 'dave', 'name' => 'Dave', 'age' => '33'})
908
+ end
909
+
910
+ it "should be able to search a database using couchdb-lucene" do
911
+ if couchdb_lucene_available?
912
+ result = @db.search('search/people', :q => 'name:J*')
913
+ doc_ids = result['rows'].collect{ |row| row['id'] }
914
+ doc_ids.size.should == 2
915
+ doc_ids.should include('john')
916
+ doc_ids.should include('jack')
917
+ end
918
+ end
919
+ end
920
+
921
+ end