vulcan 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/bin/vulcan +3 -1
  2. data/lib/vulcan/cli.rb +22 -3
  3. data/lib/vulcan/version.rb +1 -1
  4. data/server/bin/make +1 -3
  5. data/server/lib/spawner.js +9 -4
  6. data/server/node_modules/connect-form/node_modules/formidable/Readme.md +13 -2
  7. data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +19 -7
  8. data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +12 -1
  9. data/server/node_modules/connect-form/node_modules/formidable/package.json +1 -1
  10. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/plain.txt +1 -0
  11. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
  12. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +0 -10
  13. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +0 -9
  14. data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
  15. data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +1 -1
  16. data/server/node_modules/cradle/lib/cradle.js +0 -1
  17. data/server/node_modules/cradle/package.json +3 -3
  18. data/server/node_modules/cradle/test/cache-test.js +6 -7
  19. data/server/node_modules/cradle/test/cradle-test.js +4 -5
  20. data/server/node_modules/cradle/test/response-test.js +5 -6
  21. data/server/node_modules/express/History.md +53 -1
  22. data/server/node_modules/express/Makefile +3 -9
  23. data/server/node_modules/express/Readme.md +3 -1
  24. data/server/node_modules/express/bin/express +65 -66
  25. data/server/node_modules/express/lib/express.js +1 -1
  26. data/server/node_modules/express/lib/request.js +23 -9
  27. data/server/node_modules/express/lib/response.js +3 -2
  28. data/server/node_modules/express/lib/utils.js +13 -0
  29. data/server/node_modules/express/lib/view/view.js +2 -1
  30. data/server/node_modules/express/lib/view.js +19 -16
  31. data/server/node_modules/express/node_modules/connect/lib/connect.js +1 -1
  32. data/server/node_modules/express/node_modules/connect/lib/http.js +2 -0
  33. data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +135 -31
  34. data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +5 -1
  35. data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +2 -2
  36. data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +26 -21
  37. data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +91 -38
  38. data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +1 -1
  39. data/server/node_modules/express/node_modules/connect/lib/utils.js +11 -4
  40. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +14 -0
  41. data/server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +286 -0
  42. data/server/node_modules/express/node_modules/connect/node_modules/formidable/TODO +3 -0
  43. data/server/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +70 -0
  44. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +43 -0
  45. data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +48 -0
  46. data/server/node_modules/express/node_modules/connect/node_modules/formidable/index.js +1 -0
  47. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +61 -0
  48. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +377 -0
  49. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +3 -0
  50. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +312 -0
  51. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +25 -0
  52. data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +6 -0
  53. data/server/node_modules/express/node_modules/connect/node_modules/formidable/package.json +22 -0
  54. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +19 -0
  55. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +1 -0
  56. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +1 -0
  57. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
  58. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +3 -0
  59. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +26 -0
  60. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-firefox-3.6.http +24 -0
  61. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +23 -0
  62. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +24 -0
  63. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +22 -0
  64. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +22 -0
  65. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +22 -0
  66. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
  67. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +21 -0
  68. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multi_video.upload +0 -0
  69. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +72 -0
  70. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +89 -0
  71. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +24 -0
  72. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +80 -0
  73. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +104 -0
  74. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +715 -0
  75. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +50 -0
  76. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +45 -0
  77. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +72 -0
  78. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +2 -0
  79. data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +63 -0
  80. data/server/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +47 -0
  81. data/server/node_modules/express/node_modules/connect/package.json +7 -6
  82. data/server/node_modules/express/node_modules/connect/test.js +44 -31
  83. data/server/node_modules/express/node_modules/mime/mime.js +3 -3
  84. data/server/node_modules/express/node_modules/mime/package.json +21 -10
  85. data/server/node_modules/express/node_modules/mime/test.js +2 -3
  86. data/server/node_modules/express/node_modules/mime/{mime.types → types/mime.types} +0 -0
  87. data/server/node_modules/express/node_modules/mime/{node.types → types/node.types} +17 -0
  88. data/server/node_modules/express/node_modules/mkdirp/LICENSE +21 -0
  89. data/server/node_modules/express/node_modules/mkdirp/README.markdown +21 -0
  90. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js +6 -0
  91. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.orig +6 -0
  92. data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.rej +19 -0
  93. data/server/node_modules/express/node_modules/mkdirp/index.js +20 -0
  94. data/server/node_modules/express/node_modules/mkdirp/package.json +23 -0
  95. data/server/node_modules/express/node_modules/mkdirp/test/mkdirp.js +28 -0
  96. data/server/node_modules/express/node_modules/mkdirp/test/race.js +41 -0
  97. data/server/node_modules/express/node_modules/mkdirp/test/rel.js +32 -0
  98. data/server/node_modules/express/node_modules/qs/History.md +11 -0
  99. data/server/node_modules/express/node_modules/qs/Makefile +1 -3
  100. data/server/node_modules/express/node_modules/qs/Readme.md +2 -4
  101. data/server/node_modules/express/node_modules/qs/lib/querystring.js +100 -74
  102. data/server/node_modules/express/node_modules/qs/package.json +9 -2
  103. data/server/node_modules/express/node_modules/qs/test/mocha.opts +2 -0
  104. data/server/node_modules/express/node_modules/qs/test/{parse.test.js → parse.js} +1 -2
  105. data/server/node_modules/express/node_modules/qs/test/{stringify.test.js → stringify.js} +0 -0
  106. data/server/node_modules/express/package.json +9 -8
  107. data/server/node_modules/express/testing/foo/app.js +35 -0
  108. data/server/node_modules/express/testing/foo/package.json +9 -0
  109. data/server/node_modules/express/testing/foo/public/stylesheets/style.css +8 -0
  110. data/server/node_modules/express/testing/foo/routes/index.js +10 -0
  111. data/server/node_modules/express/testing/foo/views/index.jade +2 -0
  112. data/server/node_modules/express/testing/foo/views/layout.jade +6 -0
  113. data/server/node_modules/express/testing/index.js +43 -0
  114. data/server/node_modules/express/testing/public/test.txt +2971 -0
  115. data/server/node_modules/express/testing/views/page.html +1 -0
  116. data/server/node_modules/express/testing/views/page.jade +3 -0
  117. data/server/node_modules/express/testing/views/test.md +1 -0
  118. data/server/node_modules/express/testing/views/user/index.jade +1 -0
  119. data/server/node_modules/express/testing/views/user/list.jade +1 -0
  120. data/server/node_modules/node-uuid/README.md +166 -67
  121. data/server/node_modules/node-uuid/benchmark/README.md +53 -0
  122. data/server/node_modules/node-uuid/benchmark/bench.gnu +174 -0
  123. data/server/node_modules/node-uuid/benchmark/bench.sh +34 -0
  124. data/server/node_modules/node-uuid/{test → benchmark}/benchmark-native.c +0 -0
  125. data/server/node_modules/node-uuid/benchmark/benchmark.js +84 -0
  126. data/server/node_modules/node-uuid/package.json +5 -3
  127. data/server/node_modules/node-uuid/test/benchmark-native +0 -0
  128. data/server/node_modules/node-uuid/test/compare_v1.js +63 -0
  129. data/server/node_modules/node-uuid/test/test.html +3 -0
  130. data/server/node_modules/node-uuid/test/test.js +214 -57
  131. data/server/node_modules/node-uuid/uuid.js +225 -56
  132. data/server/node_modules/restler/README.md +20 -7
  133. data/server/node_modules/restler/bin/restler +1 -1
  134. data/server/node_modules/restler/lib/multipartform.js +9 -8
  135. data/server/node_modules/restler/lib/restler.js +64 -22
  136. data/server/node_modules/restler/package.json +2 -2
  137. data/server/node_modules/restler/test/restler.js +22 -2
  138. data/server/node_modules/restler/test/test_helper.js +20 -1
  139. data/server/package.json +1 -2
  140. data/server/web.js +30 -7
  141. metadata +90 -86
  142. data/server/node_modules/cradle/node_modules/vows/LICENSE +0 -20
  143. data/server/node_modules/cradle/node_modules/vows/Makefile +0 -7
  144. data/server/node_modules/cradle/node_modules/vows/README.md +0 -39
  145. data/server/node_modules/cradle/node_modules/vows/bin/vows +0 -515
  146. data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +0 -27
  147. data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +0 -215
  148. data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +0 -77
  149. data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +0 -131
  150. data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +0 -55
  151. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +0 -29
  152. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +0 -2
  153. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +0 -61
  154. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +0 -54
  155. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +0 -54
  156. data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +0 -38
  157. data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +0 -28
  158. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +0 -67
  159. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +0 -16
  160. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +0 -8
  161. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +0 -44
  162. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +0 -39
  163. data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +0 -90
  164. data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +0 -319
  165. data/server/node_modules/cradle/node_modules/vows/lib/vows.js +0 -193
  166. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +0 -20
  167. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +0 -4
  168. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +0 -72
  169. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +0 -233
  170. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +0 -14
  171. data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +0 -55
  172. data/server/node_modules/cradle/node_modules/vows/package.json +0 -14
  173. data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +0 -135
  174. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +0 -18
  175. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +0 -18
  176. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +0 -17
  177. data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +0 -18
  178. data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +0 -140
  179. data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +0 -133
  180. data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +0 -51
  181. data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +0 -374
  182. data/server/node_modules/express/node_modules/mime/index.js +0 -1
  183. data/server/node_modules/express/node_modules/qs/support/expresso/History.md +0 -128
  184. data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +0 -53
  185. data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +0 -61
  186. data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +0 -856
  187. data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +0 -1080
  188. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +0 -377
  189. data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +0 -290
  190. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +0 -3
  191. data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +0 -42
  192. data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +0 -4
  193. data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +0 -16
  194. data/server/node_modules/express/node_modules/qs/support/expresso/package.json +0 -12
  195. data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +0 -91
  196. data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +0 -12
  197. data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +0 -13
  198. data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +0 -14
  199. data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +0 -146
  200. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +0 -39
  201. data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +0 -48
  202. data/server/node_modules/express/node_modules/qs/support/should/History.md +0 -22
  203. data/server/node_modules/express/node_modules/qs/support/should/Makefile +0 -6
  204. data/server/node_modules/express/node_modules/qs/support/should/Readme.md +0 -248
  205. data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +0 -53
  206. data/server/node_modules/express/node_modules/qs/support/should/index.js +0 -2
  207. data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +0 -91
  208. data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +0 -548
  209. data/server/node_modules/express/node_modules/qs/support/should/package.json +0 -8
  210. data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +0 -358
  211. data/server/node_modules/node-uuid/test/benchmark.js +0 -27
@@ -1,10 +1,12 @@
1
- Restler 0.2.0
1
+ Restler 0.2.4
2
2
  ===========
3
3
 
4
4
  (C) Dan Webb (dan@danwebb.net/@danwrong) 2011, Licensed under the MIT-LICENSE
5
5
 
6
6
  An HTTP client library for node.js (0.3 and up). Hides most of the complexity of creating and using http.Client. Very early days yet.
7
7
 
8
+ See [Version History](https://github.com/danwrong/restler/wiki/Version-History) for changes
9
+
8
10
 
9
11
  Features
10
12
  --------
@@ -19,8 +21,9 @@ Features
19
21
  * Transparently handle SSL (just specify https in the URL)
20
22
  * Deals with basic auth for you, just provide username and password options
21
23
  * Simple service wrapper that allows you to easily put together REST API libraries
22
-
23
-
24
+ * Transparently handle content-encoded responses (gzip, deflate)
25
+
26
+
24
27
  API
25
28
  ---
26
29
 
@@ -68,9 +71,12 @@ All of these attempt to turn the response into a JavaScript object. In order to
68
71
 
69
72
  * _method_ Request method, can be get, post, put, del
70
73
  * _query_ Query string variables as a javascript object, will override the querystring in the URL
71
- * _data_ The data to be added to the body of the request. Can be a string or any object
74
+ * _data_ The data to be added to the body of the request. Can be a string or any object.
75
+ Note that if you want your request body to be JSON with the Content-Type `application/json`, you need to
76
+ JSON.stringify your object first. Otherwise, it will be sent as `application/x-www-form-urlencoded` and encoded accordingly.
72
77
  * _parser_ A function that will be called on the returned data. try parsers.auto, parsers.json etc
73
78
  * _encoding_ The encoding of the request body. defaults to utf8
79
+ * _decoding_ The encoding of the response body. For a list of supported values see [Buffers](http://nodejs.org/docs/latest/api/buffers.html#buffers). Additionally accepts `"buffer"` - returns response as `Buffer`. Defaults to `utf8`.
74
80
  * _headers_ a hash of HTTP headers to be sent
75
81
  * _username_ Basic auth username
76
82
  * _password_ Basic auth password
@@ -82,7 +88,7 @@ All of these attempt to turn the response into a JavaScript object. In order to
82
88
  Example usage
83
89
  -------------
84
90
 
85
- var sys = require('sys'),
91
+ var sys = require('util'),
86
92
  rest = require('./restler');
87
93
 
88
94
  rest.get('http://google.com').on('complete', function(data) {
@@ -112,7 +118,7 @@ Example usage
112
118
  password: 'wouldntyouliketoknow',
113
119
  data: {
114
120
  'sound[message]': 'hello from restler!',
115
- 'sound[file]': rest.file('doug-e-fresh_the-show.mp3', 'audio/mpeg')
121
+ 'sound[file]': rest.file('doug-e-fresh_the-show.mp3', null, null, null, 'audio/mpeg')
116
122
  }
117
123
  }).on('complete', function(data) {
118
124
  sys.puts(data.audio_url);
@@ -135,6 +141,13 @@ Example usage
135
141
  sys.p(data);
136
142
  });
137
143
 
144
+ // the JSON post
145
+ rest.post('http://example.com/action', {
146
+ data: JSON.stringify({ id: 334 }),
147
+ }).on('complete', function(data, response) {
148
+ // you can get at the raw response like this...
149
+ });
150
+
138
151
 
139
152
  Running the tests
140
153
  -----------------
@@ -144,4 +157,4 @@ Running the tests
144
157
  TODO
145
158
  ----
146
159
  * Deal with no utf-8 response bodies
147
- * What do you need? Let me know or fork.
160
+ * What do you need? Let me know or fork.
@@ -2,7 +2,7 @@
2
2
 
3
3
  require.paths.push(process.cwd());
4
4
 
5
- var sys = require('sys'),
5
+ var sys = require('util'),
6
6
  rest = require('../lib/restler'),
7
7
  repl = require('repl');
8
8
 
@@ -1,5 +1,5 @@
1
1
  var fs = require('fs');
2
- var sys = require("sys")
2
+ var sys = require('util')
3
3
  exports.defaultBoundary = '48940923NODERESLTER3890457293';
4
4
 
5
5
 
@@ -109,7 +109,7 @@ Part.prototype = {
109
109
  fs.open(this.value.path, "r", 0666, function (err, fd) {
110
110
  if (err) throw err;
111
111
 
112
- position = 0;
112
+ var position = 0;
113
113
 
114
114
  (function reader () {
115
115
  fs.read(fd, 1024 * 4, position, "binary", function (er, chunk) {
@@ -142,12 +142,13 @@ function MultiPartRequest(data, boundary) {
142
142
 
143
143
  MultiPartRequest.prototype = {
144
144
  _partNames: function() {
145
- partNames = []
146
- for (var name in this.data) {
147
- partNames.push(name)
145
+ var partNames = [];
146
+ for (var name in this.data) {
147
+ partNames.push(name)
148
148
  }
149
149
  return partNames;
150
150
  },
151
+
151
152
  write: function(stream, callback) {
152
153
  var partCount = 0, self = this;
153
154
 
@@ -157,8 +158,8 @@ MultiPartRequest.prototype = {
157
158
 
158
159
  // Let each part write itself out to the stream
159
160
  (function writePart() {
160
- partName = this.partNames[partCount];
161
- part = new Part(partName, self.data[partName], self.boundary);
161
+ var partName = self.partNames[partCount];
162
+ var part = new Part(partName, self.data[partName], self.boundary);
162
163
  part.write(stream, function (err) {
163
164
  if (err) {
164
165
  callback(err);
@@ -199,4 +200,4 @@ var exportMethods = {
199
200
 
200
201
  Object.keys(exportMethods).forEach(function(exportMethod) {
201
202
  exports[exportMethod] = exportMethods[exportMethod]
202
- })
203
+ })
@@ -1,9 +1,10 @@
1
- var sys = require('sys'),
1
+ var sys = require('util'),
2
2
  http = require('http'),
3
3
  https = require('https'),
4
4
  url = require('url'),
5
5
  qs = require('querystring'),
6
- multipart = require('./multipartform');
6
+ multipart = require('./multipartform'),
7
+ zlib = require('zlib');
7
8
 
8
9
  function mixin(target, source) {
9
10
  Object.keys(source).forEach(function(key) {
@@ -20,7 +21,7 @@ function Request(uri, options) {
20
21
  'Accept': '*/*',
21
22
  'User-Agent': 'Restler for node.js',
22
23
  'Host': this.url.host
23
- }
24
+ };
24
25
 
25
26
  mixin(this.headers, options.headers || {});
26
27
 
@@ -46,6 +47,11 @@ function Request(uri, options) {
46
47
  this.headers['Content-Type'] = 'application/x-www-form-urlencoded';
47
48
  this.headers['Content-Length'] = this.options.data.length;
48
49
  }
50
+ if(typeof this.options.data == 'string') {
51
+ var buffer = new Buffer(this.options.data, this.options.encoding || 'utf8');
52
+ this.options.data = buffer;
53
+ this.headers['Content-Length'] = buffer.length;
54
+ }
49
55
  }
50
56
 
51
57
  var proto = (this.url.protocol == 'https:') ? https : http;
@@ -62,9 +68,10 @@ function Request(uri, options) {
62
68
  }
63
69
 
64
70
  Request.prototype = new process.EventEmitter();
71
+
65
72
  mixin(Request.prototype, {
66
73
  _isRedirect: function(response) {
67
- return ([301, 302].indexOf(response.statusCode) >= 0);
74
+ return ([301, 302, 303].indexOf(response.statusCode) >= 0);
68
75
  },
69
76
  _fullPath: function() {
70
77
  var path = this.url.pathname || '/';
@@ -101,25 +108,46 @@ mixin(Request.prototype, {
101
108
  } else {
102
109
  var body = '';
103
110
 
104
- // TODO Handle different encodings
105
- response.setEncoding('utf8');
111
+ response.setEncoding('binary');
106
112
 
107
113
  response.on('data', function(chunk) {
108
114
  body += chunk;
109
115
  });
110
116
 
111
117
  response.on('end', function() {
112
- if (self.options.parser) {
113
- self.options.parser.call(response, body, function(parsedData) {
114
-
115
- self._fireEvents(parsedData, response);
116
- });
117
- } else {
118
- self._fireEvents(body, response);
119
- }
118
+ self._decode(new Buffer(body, 'binary'), response, function(err, body) {
119
+ if (err) {
120
+ self._respond('error', '', 'Failed to decode response body');
121
+ return;
122
+ }
123
+ self._encode(body, response, function(body) {
124
+ self._fireEvents(body, response);
125
+ });
126
+ });
120
127
  });
121
128
  }
122
129
  },
130
+ _decode: function(body, response, callback) {
131
+ var encoder = response.headers['content-encoding'];
132
+ if (encoder in decoders) {
133
+ decoders[encoder].call(response, body, callback);
134
+ } else {
135
+ callback(null, body);
136
+ }
137
+ },
138
+ _encode: function(body, response, callback) {
139
+ var self = this;
140
+ if (self.options.decoding == 'buffer') {
141
+ callback(body);
142
+ } else {
143
+ body = body.toString(self.options.decoding);
144
+ if (self.options.parser) {
145
+ self.options.parser.call(response, body, callback);
146
+ } else {
147
+ callback(body);
148
+ }
149
+ }
150
+ },
123
151
  _respond: function(type, data, response) {
124
152
  if (this.options.originalRequest) {
125
153
  this.options.originalRequest.emit(type, data, response);
@@ -135,11 +163,11 @@ mixin(Request.prototype, {
135
163
  this._respond(response.statusCode.toString(), body, response);
136
164
  this._respond('complete', body, response);
137
165
  },
138
- _makeRequest: function() {
166
+ _makeRequest: function() {
139
167
  var self = this;
140
168
 
141
169
  this.request.on('response', function(response) {
142
- self._responseHandler(response);
170
+ self._responseHandler(response);
143
171
  }).on('error', function(err) {
144
172
  self._respond('error', null, err);
145
173
  });
@@ -155,7 +183,7 @@ mixin(Request.prototype, {
155
183
  if (this.options.data) {
156
184
  this.request.write(this.options.data.toString(), this.options.encoding || 'utf8');
157
185
  }
158
- this.request.end();
186
+ this.request.end();
159
187
  }
160
188
 
161
189
  return this;
@@ -170,7 +198,9 @@ function shortcutOptions(options, method) {
170
198
  }
171
199
 
172
200
  function request(url, options) {
173
- return (new Request(url, options)).run();
201
+ var request = new Request(url, options);
202
+ request.on('error', function() {});
203
+ return request.run();
174
204
  }
175
205
 
176
206
  function get(url, options) {
@@ -207,7 +237,7 @@ var parsers = {
207
237
  json: function(data, callback) {
208
238
  callback(data && JSON.parse(data));
209
239
  }
210
- }
240
+ };
211
241
 
212
242
  parsers.auto.matchers = {
213
243
  'application/json': parsers.json
@@ -233,15 +263,27 @@ try {
233
263
  parser.on('end', function(result) {
234
264
  callback(result);
235
265
  });
236
-
237
- parser.parseString(data);
266
+ try {
267
+ parser.parseString(data);
268
+ } catch (e) {
269
+ callback({error:'Oops, something went wrong.'});
270
+ }
238
271
  } else {
239
272
  callback();
240
273
  }
241
274
  };
242
275
 
243
276
  parsers.auto.matchers['application/xml'] = parsers.xml;
244
- } catch(e) {}
277
+ } catch(e) { }
278
+
279
+ var decoders = {
280
+ gzip: function(buf, callback) {
281
+ zlib.gunzip(buf, callback);
282
+ },
283
+ deflate: function(buf, callback) {
284
+ zlib.inflate(buf, callback);
285
+ }
286
+ };
245
287
 
246
288
 
247
289
  function Service(defaults) {
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "restler",
3
- "version": "0.2.1",
3
+ "version": "0.2.4",
4
4
  "description": "An HTTP client library for node.js",
5
5
  "contributors": [{ "name": "Dan Webb", "email": "dan@danwebb.net" }],
6
6
  "homepage": "https://github.com/danwrong/restler",
7
7
  "directories" : { "lib" : "./lib" },
8
8
  "main" : "./lib/restler",
9
9
  "engines": { "node": ">= 0.3.7" }
10
- }
10
+ }
@@ -1,6 +1,6 @@
1
1
  var helper = require('./test_helper'),
2
2
  rest = require('../lib/restler'),
3
- sys = require('sys');
3
+ sys = require('util');
4
4
 
5
5
  helper.testCase("Basic Tests", helper.echoServer, {
6
6
  testRequestShouldTakePath: function(host, test) {
@@ -145,4 +145,24 @@ helper.testCase('Redirect Tests', helper.redirectServer, {
145
145
  test.equal('Hell Yeah!', data, "returned " + sys.inspect(data));
146
146
  });
147
147
  }
148
- });
148
+ });
149
+
150
+ helper.testCase('Content-Length Tests', helper.contentLengthServer, {
151
+ testRequestHeaderIncludesContentLengthWithJSONData: function(host, test){
152
+ var jsonString = JSON.stringify({ greeting: 'hello world' });
153
+ rest.post(host, {
154
+ data: jsonString
155
+ }).on('complete', function(data){
156
+ test.equal(26, data, 'should set content-length');
157
+ });
158
+ },
159
+ testJSONMultibyteContentLength: function (host, test){
160
+ var multibyteData = JSON.stringify({ greeting: 'こんにちは世界' });
161
+ rest.post(host, {
162
+ data: multibyteData
163
+ }).on('complete', function(data) {
164
+ test.notEqual(22, data, 'should unicode string length');
165
+ test.equal(36, data, 'should byte-size content-length');
166
+ });
167
+ }
168
+ });
@@ -1,5 +1,5 @@
1
1
  var http = require("http"),
2
- sys = require('sys'),
2
+ sys = require('util'),
3
3
  test = require('assert');
4
4
 
5
5
  exports.echoServer = function() {
@@ -84,6 +84,25 @@ exports.redirectServer = function() {
84
84
  return ["http://localhost:" + port, server];
85
85
  }
86
86
 
87
+ exports.contentLengthServer = function (){
88
+ var port = exports.port++;
89
+
90
+ var server = http.createServer(function(request, response){
91
+ response.writeHead(200, { 'Content-Type': 'text/plain' });
92
+ if('content-length' in request.headers){
93
+ response.write(request.headers['content-length']);
94
+ } else {
95
+ response.write('content-length isnot set');
96
+ }
97
+
98
+ response.end();
99
+ server.close();
100
+ });
101
+
102
+ server.listen(port, 'localhost');
103
+ return ['http://localhost:' + port, server];
104
+ };
105
+
87
106
  exports.port = 7000;
88
107
 
89
108
  exports.testCase = function(caseName, serverFunc, tests) {
data/server/package.json CHANGED
@@ -10,7 +10,6 @@
10
10
  "restler"
11
11
  ],
12
12
  "engines": {
13
- "node": ">=0.4.7 <0.6.0",
14
- "npm": ">=1.0.0"
13
+ "node": "0.6.x"
15
14
  }
16
15
  }
data/server/web.js CHANGED
@@ -1,10 +1,8 @@
1
- require.paths.unshift(__dirname + '/lib');
2
-
3
1
  var cradle = require('cradle');
4
2
  var express = require('express');
5
3
  var fs = require('fs');
6
4
  var spawner = require('spawner').create();
7
- var sys = require('sys');
5
+ var util = require('util');
8
6
  var uuid = require('node-uuid');
9
7
 
10
8
  var app = express.createServer(
@@ -14,6 +12,14 @@ var app = express.createServer(
14
12
  require('connect-form')({ keepExtensions: true })
15
13
  );
16
14
 
15
+ function log_action(uuid, message) {
16
+ console.log(uuid + ': ' + message);
17
+ }
18
+
19
+ function log_error(uuid, message) {
20
+ log_action(uuid, 'ERROR: ' + message);
21
+ }
22
+
17
23
  // connect to couchdb
18
24
  var couchdb_url = require('url').parse(process.env.CLOUDANT_URL);
19
25
  var couchdb_options = couchdb_url.auth ?
@@ -27,6 +33,7 @@ app.post('/make', function(request, response, next) {
27
33
 
28
34
  // require a form
29
35
  if (! request.form) {
36
+ console.log('invalid form');
30
37
  response.write('invalid form');
31
38
  response.send(500);
32
39
  } else {
@@ -48,10 +55,12 @@ app.post('/make', function(request, response, next) {
48
55
  var prefix = fields.prefix;
49
56
 
50
57
  // create a couchdb documents for this build
58
+ log_action(id, 'saving to couchdb');
51
59
  db.save(id, { command:command, prefix:prefix }, function(err, doc) {
52
- if (err) { return next(err); }
60
+ if (err) { log_error(id, util.inspect(err)); return next(err); }
53
61
 
54
62
  // save the input tarball as an attachment
63
+ log_action(id, 'saving attachment - [id:' + doc.id + ', rev:' + doc.rev + ']')
55
64
  db.saveAttachment(
56
65
  doc.id,
57
66
  doc.rev,
@@ -59,16 +68,26 @@ app.post('/make', function(request, response, next) {
59
68
  'application/octet-stream',
60
69
  fs.createReadStream(files.code.path),
61
70
  function(err, data) {
62
- if (err) { return next(err); }
71
+ if (err) {
72
+ // work around temporary problem with cloudant and document
73
+ // conflicts
74
+ if (err.error != 'conflict') {
75
+ log_error(id, err.reason);
76
+ return next(err.reason);
77
+ }
78
+ }
63
79
 
64
80
  // spawn bin/make with this build id
81
+ log_action(id, 'spawning build');
65
82
  var ls = spawner.spawn('bin/make ' + id, function(err) {
83
+ log_error(id, 'could not spawn: ' + err);
66
84
  response.write('could not spawn: ' + err);
67
85
  response.send(500);
68
86
  });
69
87
 
70
88
  ls.on('error', function(error) {
71
- response.write('error: ' + err);
89
+ log_error(id, 'spawn error: ' + util.inspect(error));
90
+ response.write('error: ' + util.inspect(error));
72
91
  response.send(500);
73
92
  });
74
93
 
@@ -86,7 +105,7 @@ app.post('/make', function(request, response, next) {
86
105
  response.header('X-Make-Id', id);
87
106
  });
88
107
  }
89
-
108
+
90
109
  });
91
110
  }
92
111
  });
@@ -97,6 +116,10 @@ app.get('/output/:id', function(request, response, next) {
97
116
  // from couchdb
98
117
  var stream = db.getAttachment(request.params.id, 'output');
99
118
 
119
+ stream.on('error', function(err) {
120
+ console.log('download error: ' + err);
121
+ });
122
+
100
123
  stream.on('data', function(chunk) {
101
124
  response.write(chunk, 'binary');
102
125
  });