vulcan 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/vulcan +3 -1
- data/lib/vulcan/cli.rb +22 -3
- data/lib/vulcan/version.rb +1 -1
- data/server/bin/make +1 -3
- data/server/lib/spawner.js +9 -4
- data/server/node_modules/connect-form/node_modules/formidable/Readme.md +13 -2
- data/server/node_modules/connect-form/node_modules/formidable/lib/incoming_form.js +19 -7
- data/server/node_modules/connect-form/node_modules/formidable/lib/multipart_parser.js +12 -1
- data/server/node_modules/connect-form/node_modules/formidable/package.json +1 -1
- data/server/node_modules/connect-form/node_modules/formidable/test/fixture/file/plain.txt +1 -0
- data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
- data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +0 -10
- data/server/node_modules/connect-form/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +0 -9
- data/server/node_modules/connect-form/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
- data/server/node_modules/connect-form/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +1 -1
- data/server/node_modules/cradle/lib/cradle.js +0 -1
- data/server/node_modules/cradle/package.json +3 -3
- data/server/node_modules/cradle/test/cache-test.js +6 -7
- data/server/node_modules/cradle/test/cradle-test.js +4 -5
- data/server/node_modules/cradle/test/response-test.js +5 -6
- data/server/node_modules/express/History.md +53 -1
- data/server/node_modules/express/Makefile +3 -9
- data/server/node_modules/express/Readme.md +3 -1
- data/server/node_modules/express/bin/express +65 -66
- data/server/node_modules/express/lib/express.js +1 -1
- data/server/node_modules/express/lib/request.js +23 -9
- data/server/node_modules/express/lib/response.js +3 -2
- data/server/node_modules/express/lib/utils.js +13 -0
- data/server/node_modules/express/lib/view/view.js +2 -1
- data/server/node_modules/express/lib/view.js +19 -16
- data/server/node_modules/express/node_modules/connect/lib/connect.js +1 -1
- data/server/node_modules/express/node_modules/connect/lib/http.js +2 -0
- data/server/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +135 -31
- data/server/node_modules/express/node_modules/connect/lib/middleware/limit.js +5 -1
- data/server/node_modules/express/node_modules/connect/lib/middleware/session.js +2 -2
- data/server/node_modules/express/node_modules/connect/lib/middleware/static.js +26 -21
- data/server/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +91 -38
- data/server/node_modules/express/node_modules/connect/lib/middleware/vhost.js +1 -1
- data/server/node_modules/express/node_modules/connect/lib/utils.js +11 -4
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +14 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +286 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/TODO +3 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +70 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +43 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +48 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/index.js +1 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +61 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +377 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +3 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +312 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +25 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +6 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/package.json +22 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +19 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +1 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +1 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/no-filename/generic.http +13 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +3 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-chrome-13.http +26 -0
- 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
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/osx-safari-5.http +23 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-chrome-12.http +24 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-7.http +22 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-ie-8.http +22 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/xp-safari-5.http +22 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +3 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +21 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multi_video.upload +0 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +72 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +89 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +24 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +80 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +104 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +715 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +50 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +45 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +72 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +2 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +63 -0
- data/server/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +47 -0
- data/server/node_modules/express/node_modules/connect/package.json +7 -6
- data/server/node_modules/express/node_modules/connect/test.js +44 -31
- data/server/node_modules/express/node_modules/mime/mime.js +3 -3
- data/server/node_modules/express/node_modules/mime/package.json +21 -10
- data/server/node_modules/express/node_modules/mime/test.js +2 -3
- data/server/node_modules/express/node_modules/mime/{mime.types → types/mime.types} +0 -0
- data/server/node_modules/express/node_modules/mime/{node.types → types/node.types} +17 -0
- data/server/node_modules/express/node_modules/mkdirp/LICENSE +21 -0
- data/server/node_modules/express/node_modules/mkdirp/README.markdown +21 -0
- data/server/node_modules/express/node_modules/mkdirp/examples/pow.js +6 -0
- data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.orig +6 -0
- data/server/node_modules/express/node_modules/mkdirp/examples/pow.js.rej +19 -0
- data/server/node_modules/express/node_modules/mkdirp/index.js +20 -0
- data/server/node_modules/express/node_modules/mkdirp/package.json +23 -0
- data/server/node_modules/express/node_modules/mkdirp/test/mkdirp.js +28 -0
- data/server/node_modules/express/node_modules/mkdirp/test/race.js +41 -0
- data/server/node_modules/express/node_modules/mkdirp/test/rel.js +32 -0
- data/server/node_modules/express/node_modules/qs/History.md +11 -0
- data/server/node_modules/express/node_modules/qs/Makefile +1 -3
- data/server/node_modules/express/node_modules/qs/Readme.md +2 -4
- data/server/node_modules/express/node_modules/qs/lib/querystring.js +100 -74
- data/server/node_modules/express/node_modules/qs/package.json +9 -2
- data/server/node_modules/express/node_modules/qs/test/mocha.opts +2 -0
- data/server/node_modules/express/node_modules/qs/test/{parse.test.js → parse.js} +1 -2
- data/server/node_modules/express/node_modules/qs/test/{stringify.test.js → stringify.js} +0 -0
- data/server/node_modules/express/package.json +9 -8
- data/server/node_modules/express/testing/foo/app.js +35 -0
- data/server/node_modules/express/testing/foo/package.json +9 -0
- data/server/node_modules/express/testing/foo/public/stylesheets/style.css +8 -0
- data/server/node_modules/express/testing/foo/routes/index.js +10 -0
- data/server/node_modules/express/testing/foo/views/index.jade +2 -0
- data/server/node_modules/express/testing/foo/views/layout.jade +6 -0
- data/server/node_modules/express/testing/index.js +43 -0
- data/server/node_modules/express/testing/public/test.txt +2971 -0
- data/server/node_modules/express/testing/views/page.html +1 -0
- data/server/node_modules/express/testing/views/page.jade +3 -0
- data/server/node_modules/express/testing/views/test.md +1 -0
- data/server/node_modules/express/testing/views/user/index.jade +1 -0
- data/server/node_modules/express/testing/views/user/list.jade +1 -0
- data/server/node_modules/node-uuid/README.md +166 -67
- data/server/node_modules/node-uuid/benchmark/README.md +53 -0
- data/server/node_modules/node-uuid/benchmark/bench.gnu +174 -0
- data/server/node_modules/node-uuid/benchmark/bench.sh +34 -0
- data/server/node_modules/node-uuid/{test → benchmark}/benchmark-native.c +0 -0
- data/server/node_modules/node-uuid/benchmark/benchmark.js +84 -0
- data/server/node_modules/node-uuid/package.json +5 -3
- data/server/node_modules/node-uuid/test/benchmark-native +0 -0
- data/server/node_modules/node-uuid/test/compare_v1.js +63 -0
- data/server/node_modules/node-uuid/test/test.html +3 -0
- data/server/node_modules/node-uuid/test/test.js +214 -57
- data/server/node_modules/node-uuid/uuid.js +225 -56
- data/server/node_modules/restler/README.md +20 -7
- data/server/node_modules/restler/bin/restler +1 -1
- data/server/node_modules/restler/lib/multipartform.js +9 -8
- data/server/node_modules/restler/lib/restler.js +64 -22
- data/server/node_modules/restler/package.json +2 -2
- data/server/node_modules/restler/test/restler.js +22 -2
- data/server/node_modules/restler/test/test_helper.js +20 -1
- data/server/package.json +1 -2
- data/server/web.js +30 -7
- metadata +90 -86
- data/server/node_modules/cradle/node_modules/vows/LICENSE +0 -20
- data/server/node_modules/cradle/node_modules/vows/Makefile +0 -7
- data/server/node_modules/cradle/node_modules/vows/README.md +0 -39
- data/server/node_modules/cradle/node_modules/vows/bin/vows +0 -515
- data/server/node_modules/cradle/node_modules/vows/lib/assert/error.js +0 -27
- data/server/node_modules/cradle/node_modules/vows/lib/assert/macros.js +0 -215
- data/server/node_modules/cradle/node_modules/vows/lib/assert/utils.js +0 -77
- data/server/node_modules/cradle/node_modules/vows/lib/vows/console.js +0 -131
- data/server/node_modules/cradle/node_modules/vows/lib/vows/context.js +0 -55
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/file.js +0 -29
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-foot.html +0 -2
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/fragments/coverage-head.html +0 -61
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-html.js +0 -54
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-json.js +0 -54
- data/server/node_modules/cradle/node_modules/vows/lib/vows/coverage/report-plain.js +0 -38
- data/server/node_modules/cradle/node_modules/vows/lib/vows/extras.js +0 -28
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/dot-matrix.js +0 -67
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/json.js +0 -16
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/silent.js +0 -8
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/spec.js +0 -44
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/watch.js +0 -39
- data/server/node_modules/cradle/node_modules/vows/lib/vows/reporters/xunit.js +0 -90
- data/server/node_modules/cradle/node_modules/vows/lib/vows/suite.js +0 -319
- data/server/node_modules/cradle/node_modules/vows/lib/vows.js +0 -193
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/LICENSE +0 -20
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/Makefile +0 -4
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/README.md +0 -72
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/lib/eyes.js +0 -233
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/package.json +0 -14
- data/server/node_modules/cradle/node_modules/vows/node_modules/eyes/test/eyes-test.js +0 -55
- data/server/node_modules/cradle/node_modules/vows/package.json +0 -14
- data/server/node_modules/cradle/node_modules/vows/test/assert-test.js +0 -135
- data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/failing.js +0 -18
- data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/log.js +0 -18
- data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/passing.js +0 -17
- data/server/node_modules/cradle/node_modules/vows/test/fixtures/isolate/stderr.js +0 -18
- data/server/node_modules/cradle/node_modules/vows/test/isolate-test.js +0 -140
- data/server/node_modules/cradle/node_modules/vows/test/testInherit.js +0 -133
- data/server/node_modules/cradle/node_modules/vows/test/vows-error-test.js +0 -51
- data/server/node_modules/cradle/node_modules/vows/test/vows-test.js +0 -374
- data/server/node_modules/express/node_modules/mime/index.js +0 -1
- data/server/node_modules/express/node_modules/qs/support/expresso/History.md +0 -128
- data/server/node_modules/express/node_modules/qs/support/expresso/Makefile +0 -53
- data/server/node_modules/express/node_modules/qs/support/expresso/Readme.md +0 -61
- data/server/node_modules/express/node_modules/qs/support/expresso/bin/expresso +0 -856
- data/server/node_modules/express/node_modules/qs/support/expresso/docs/api.html +0 -1080
- data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.html +0 -377
- data/server/node_modules/express/node_modules/qs/support/expresso/docs/index.md +0 -290
- data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/foot.html +0 -3
- data/server/node_modules/express/node_modules/qs/support/expresso/docs/layout/head.html +0 -42
- data/server/node_modules/express/node_modules/qs/support/expresso/lib/bar.js +0 -4
- data/server/node_modules/express/node_modules/qs/support/expresso/lib/foo.js +0 -16
- data/server/node_modules/express/node_modules/qs/support/expresso/package.json +0 -12
- data/server/node_modules/express/node_modules/qs/support/expresso/test/assert.test.js +0 -91
- data/server/node_modules/express/node_modules/qs/support/expresso/test/async.test.js +0 -12
- data/server/node_modules/express/node_modules/qs/support/expresso/test/bar.test.js +0 -13
- data/server/node_modules/express/node_modules/qs/support/expresso/test/foo.test.js +0 -14
- data/server/node_modules/express/node_modules/qs/support/expresso/test/http.test.js +0 -146
- data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/async.test.js +0 -39
- data/server/node_modules/express/node_modules/qs/support/expresso/test/serial/http.test.js +0 -48
- data/server/node_modules/express/node_modules/qs/support/should/History.md +0 -22
- data/server/node_modules/express/node_modules/qs/support/should/Makefile +0 -6
- data/server/node_modules/express/node_modules/qs/support/should/Readme.md +0 -248
- data/server/node_modules/express/node_modules/qs/support/should/examples/runner.js +0 -53
- data/server/node_modules/express/node_modules/qs/support/should/index.js +0 -2
- data/server/node_modules/express/node_modules/qs/support/should/lib/eql.js +0 -91
- data/server/node_modules/express/node_modules/qs/support/should/lib/should.js +0 -548
- data/server/node_modules/express/node_modules/qs/support/should/package.json +0 -8
- data/server/node_modules/express/node_modules/qs/support/should/test/should.test.js +0 -358
- data/server/node_modules/node-uuid/test/benchmark.js +0 -27
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
Restler 0.2.
|
|
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('
|
|
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.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var fs = require('fs');
|
|
2
|
-
var sys = require(
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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 =
|
|
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('
|
|
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
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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('
|
|
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('
|
|
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
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
|
|
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) {
|
|
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
|
-
|
|
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
|
});
|