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
@@ -0,0 +1,41 @@
1
+ var mkdirp = require('../').mkdirp;
2
+ var path = require('path');
3
+ var fs = require('fs');
4
+ var test = require('tap').test;
5
+
6
+ test('race', function (t) {
7
+ t.plan(4);
8
+ var ps = [ '', 'tmp' ];
9
+
10
+ for (var i = 0; i < 25; i++) {
11
+ var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
12
+ ps.push(dir);
13
+ }
14
+ var file = ps.join('/');
15
+
16
+ var res = 2;
17
+ mk(file, function () {
18
+ if (--res === 0) t.end();
19
+ });
20
+
21
+ mk(file, function () {
22
+ if (--res === 0) t.end();
23
+ });
24
+
25
+ function mk (file, cb) {
26
+ mkdirp(file, 0755, function (err) {
27
+ if (err) t.fail(err);
28
+ else path.exists(file, function (ex) {
29
+ if (!ex) t.fail('file not created')
30
+ else fs.stat(file, function (err, stat) {
31
+ if (err) t.fail(err)
32
+ else {
33
+ t.equal(stat.mode & 0777, 0755);
34
+ t.ok(stat.isDirectory(), 'target not a directory');
35
+ if (cb) cb();
36
+ }
37
+ })
38
+ })
39
+ });
40
+ }
41
+ });
@@ -0,0 +1,32 @@
1
+ var mkdirp = require('../');
2
+ var path = require('path');
3
+ var fs = require('fs');
4
+ var test = require('tap').test;
5
+
6
+ test('rel', function (t) {
7
+ t.plan(2);
8
+ var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
9
+ var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
10
+ var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
11
+
12
+ var cwd = process.cwd();
13
+ process.chdir('/tmp');
14
+
15
+ var file = [x,y,z].join('/');
16
+
17
+ mkdirp(file, 0755, function (err) {
18
+ if (err) t.fail(err);
19
+ else path.exists(file, function (ex) {
20
+ if (!ex) t.fail('file not created')
21
+ else fs.stat(file, function (err, stat) {
22
+ if (err) t.fail(err)
23
+ else {
24
+ process.chdir(cwd);
25
+ t.equal(stat.mode & 0777, 0755);
26
+ t.ok(stat.isDirectory(), 'target not a directory');
27
+ t.end();
28
+ }
29
+ })
30
+ })
31
+ });
32
+ });
@@ -1,4 +1,15 @@
1
1
 
2
+ 0.4.0 / 2011-11-21
3
+ ==================
4
+
5
+ * Allow parsing of an existing object (for `bodyParser()`) [jackyz]
6
+ * Replaced expresso with mocha
7
+
8
+ 0.3.2 / 2011-11-08
9
+ ==================
10
+
11
+ * Fixed global variable leak
12
+
2
13
  0.3.1 / 2011-08-17
3
14
  ==================
4
15
 
@@ -1,7 +1,5 @@
1
1
 
2
2
  test:
3
- @./support/expresso/bin/expresso \
4
- -I support \
5
- -I lib
3
+ @./node_modules/.bin/mocha
6
4
 
7
5
  .PHONY: test
@@ -6,7 +6,6 @@
6
6
 
7
7
  $ npm install qs
8
8
 
9
-
10
9
  ## Examples
11
10
 
12
11
  require('qs').parse('user[name][first]=tj&user[email]=tj');
@@ -14,10 +13,9 @@
14
13
 
15
14
  ## Testing
16
15
 
17
- Update git submodules:
16
+ Install dev dependencies:
18
17
 
19
- $ git submodule init
20
- $ git submodule update
18
+ $ npm install -d
21
19
 
22
20
  and execute:
23
21
 
@@ -1,3 +1,4 @@
1
+
1
2
  /*!
2
3
  * querystring
3
4
  * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
@@ -8,7 +9,7 @@
8
9
  * Library version.
9
10
  */
10
11
 
11
- exports.version = '0.3.1';
12
+ exports.version = '0.4.0';
12
13
 
13
14
  /**
14
15
  * Object#toString() ref for stringify().
@@ -22,29 +23,95 @@ var toString = Object.prototype.toString;
22
23
 
23
24
  var notint = /[^0-9]/;
24
25
 
26
+ function promote(parent, key) {
27
+ if (parent[key].length == 0) return parent[key] = {};
28
+ var t = {};
29
+ for (var i in parent[key]) t[i] = parent[key][i];
30
+ parent[key] = t;
31
+ return t;
32
+ }
33
+
34
+ function parse(parts, parent, key, val) {
35
+ var part = parts.shift();
36
+ // end
37
+ if (!part) {
38
+ if (Array.isArray(parent[key])) {
39
+ parent[key].push(val);
40
+ } else if ('object' == typeof parent[key]) {
41
+ parent[key] = val;
42
+ } else if ('undefined' == typeof parent[key]) {
43
+ parent[key] = val;
44
+ } else {
45
+ parent[key] = [parent[key], val];
46
+ }
47
+ // array
48
+ } else {
49
+ var obj = parent[key] = parent[key] || [];
50
+ if (']' == part) {
51
+ if (Array.isArray(obj)) {
52
+ if ('' != val) obj.push(val);
53
+ } else if ('object' == typeof obj) {
54
+ obj[Object.keys(obj).length] = val;
55
+ } else {
56
+ obj = parent[key] = [parent[key], val];
57
+ }
58
+ // prop
59
+ } else if (~part.indexOf(']')) {
60
+ part = part.substr(0, part.length - 1);
61
+ if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
62
+ parse(parts, obj, part, val);
63
+ // key
64
+ } else {
65
+ if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
66
+ parse(parts, obj, part, val);
67
+ }
68
+ }
69
+ }
70
+
25
71
  /**
26
- * Parse the given query `str`, returning an object.
27
- *
28
- * @param {String} str
29
- * @return {Object}
30
- * @api public
72
+ * Merge parent key/val pair.
31
73
  */
32
74
 
33
- exports.parse = function(str){
34
- if (null == str || '' == str) return {};
35
-
36
- function promote(parent, key) {
37
- if (parent[key].length == 0) return parent[key] = {};
38
- var t = {};
39
- for (var i in parent[key]) t[i] = parent[key][i];
40
- parent[key] = t;
41
- return t;
75
+ function merge(parent, key, val){
76
+ if (~key.indexOf(']')) {
77
+ var parts = key.split('[')
78
+ , len = parts.length
79
+ , last = len - 1;
80
+ parse(parts, parent, 'base', val);
81
+ // optimize
82
+ } else {
83
+ if (notint.test(key) && Array.isArray(parent.base)) {
84
+ var t = {};
85
+ for (var k in parent.base) t[k] = parent.base[k];
86
+ parent.base = t;
87
+ }
88
+ set(parent.base, key, val);
42
89
  }
43
90
 
91
+ return parent;
92
+ }
93
+
94
+ /**
95
+ * Parse the given obj.
96
+ */
97
+
98
+ function parseObject(obj){
99
+ var ret = { base: {} };
100
+ Object.keys(obj).forEach(function(name){
101
+ merge(ret, name, obj[name]);
102
+ });
103
+ return ret.base;
104
+ }
105
+
106
+ /**
107
+ * Parse the given str.
108
+ */
109
+
110
+ function parseString(str){
44
111
  return String(str)
45
112
  .split('&')
46
113
  .reduce(function(ret, pair){
47
- try{
114
+ try{
48
115
  pair = decodeURIComponent(pair.replace(/\+/g, ' '));
49
116
  } catch(e) {
50
117
  // ignore
@@ -54,69 +121,28 @@ exports.parse = function(str){
54
121
  , brace = lastBraceInKey(pair)
55
122
  , key = pair.substr(0, brace || eql)
56
123
  , val = pair.substr(brace || eql, pair.length)
57
- , val = val.substr(val.indexOf('=') + 1, val.length)
58
- , parent = ret;
124
+ , val = val.substr(val.indexOf('=') + 1, val.length);
59
125
 
60
126
  // ?foo
61
127
  if ('' == key) key = pair, val = '';
62
128
 
63
- // nested
64
- if (~key.indexOf(']')) {
65
- var parts = key.split('[')
66
- , len = parts.length
67
- , last = len - 1;
68
-
69
- function parse(parts, parent, key) {
70
- var part = parts.shift();
71
-
72
- // end
73
- if (!part) {
74
- if (Array.isArray(parent[key])) {
75
- parent[key].push(val);
76
- } else if ('object' == typeof parent[key]) {
77
- parent[key] = val;
78
- } else if ('undefined' == typeof parent[key]) {
79
- parent[key] = val;
80
- } else {
81
- parent[key] = [parent[key], val];
82
- }
83
- // array
84
- } else {
85
- obj = parent[key] = parent[key] || [];
86
- if (']' == part) {
87
- if (Array.isArray(obj)) {
88
- if ('' != val) obj.push(val);
89
- } else if ('object' == typeof obj) {
90
- obj[Object.keys(obj).length] = val;
91
- } else {
92
- obj = parent[key] = [parent[key], val];
93
- }
94
- // prop
95
- } else if (~part.indexOf(']')) {
96
- part = part.substr(0, part.length - 1);
97
- if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
98
- parse(parts, obj, part);
99
- // key
100
- } else {
101
- if(notint.test(part) && Array.isArray(obj)) obj = promote(parent, key);
102
- parse(parts, obj, part);
103
- }
104
- }
105
- }
106
-
107
- parse(parts, parent, 'base');
108
- // optimize
109
- } else {
110
- if (notint.test(key) && Array.isArray(parent.base)) {
111
- var t = {};
112
- for(var k in parent.base) t[k] = parent.base[k];
113
- parent.base = t;
114
- }
115
- set(parent.base, key, val);
116
- }
129
+ return merge(ret, key, val);
130
+ }, { base: {} }).base;
131
+ }
117
132
 
118
- return ret;
119
- }, {base: {}}).base;
133
+ /**
134
+ * Parse the given query `str` or `obj`, returning an object.
135
+ *
136
+ * @param {String} str | {Object} obj
137
+ * @return {Object}
138
+ * @api public
139
+ */
140
+
141
+ exports.parse = function(str){
142
+ if (null == str || '' == str) return {};
143
+ return 'object' == typeof str
144
+ ? parseObject(str)
145
+ : parseString(str);
120
146
  };
121
147
 
122
148
  /**
@@ -1,8 +1,15 @@
1
1
  {
2
2
  "name": "qs",
3
3
  "description": "querystring parser",
4
- "version": "0.3.1",
5
- "repository": {},
4
+ "version": "0.4.0",
5
+ "repository": {
6
+ "type" : "git",
7
+ "url" : "git://github.com/visionmedia/node-querystring.git"
8
+ },
9
+ "devDependencies": {
10
+ "mocha": "*"
11
+ , "should": "*"
12
+ },
6
13
  "author": "TJ Holowaychuk <tj@vision-media.ca> (http://tjholowaychuk.com)",
7
14
  "main": "index",
8
15
  "engines": { "node": "*" }
@@ -0,0 +1,2 @@
1
+ --require should
2
+ --ui exports
@@ -3,8 +3,7 @@
3
3
  * Module dependencies.
4
4
  */
5
5
 
6
- var qs = require('../')
7
- , should = require('should');
6
+ var qs = require('../');
8
7
 
9
8
  module.exports = {
10
9
  'test basics': function(){
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "express",
3
3
  "description": "Sinatra inspired web development framework",
4
- "version": "2.4.6",
4
+ "version": "2.5.6",
5
5
  "author": "TJ Holowaychuk <tj@vision-media.ca>",
6
6
  "contributors": [
7
7
  { "name": "TJ Holowaychuk", "email": "tj@vision-media.ca" },
@@ -10,18 +10,19 @@
10
10
  { "name": "Guillermo Rauch", "email": "rauchg@gmail.com" }
11
11
  ],
12
12
  "dependencies": {
13
- "connect": ">= 1.5.2 < 2.0.0",
13
+ "connect": "1.x",
14
14
  "mime": ">= 0.0.1",
15
- "qs": ">= 0.3.1"
15
+ "qs": ">= 0.3.1",
16
+ "mkdirp": "0.0.7"
16
17
  },
17
18
  "devDependencies": {
18
19
  "connect-form": "0.2.1",
19
20
  "ejs": "0.4.2",
20
- "expresso": "0.7.2",
21
- "hamljs": "0.5.1",
22
- "jade": "0.11.0",
21
+ "expresso": "0.9.2",
22
+ "hamljs": "0.6.x",
23
+ "jade": "0.16.2",
23
24
  "stylus": "0.13.0",
24
- "should": "0.2.1",
25
+ "should": "0.3.2",
25
26
  "express-messages": "0.0.2",
26
27
  "node-markdown": ">= 0.0.1",
27
28
  "connect-redis": ">= 0.0.1"
@@ -34,5 +35,5 @@
34
35
  "test": "make test",
35
36
  "prepublish" : "npm prune"
36
37
  },
37
- "engines": { "node": ">= 0.4.1 < 0.5.0" }
38
+ "engines": { "node": ">= 0.4.1 < 0.7.0" }
38
39
  }
@@ -0,0 +1,35 @@
1
+
2
+ /**
3
+ * Module dependencies.
4
+ */
5
+
6
+ var express = require('express')
7
+ , routes = require('./routes')
8
+
9
+ var app = module.exports = express.createServer();
10
+
11
+ // Configuration
12
+
13
+ app.configure(function(){
14
+ app.set('views', __dirname + '/views');
15
+ app.set('view engine', 'jade');
16
+ app.use(express.bodyParser());
17
+ app.use(express.methodOverride());
18
+ app.use(app.router);
19
+ app.use(express.static(__dirname + '/public'));
20
+ });
21
+
22
+ app.configure('development', function(){
23
+ app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
24
+ });
25
+
26
+ app.configure('production', function(){
27
+ app.use(express.errorHandler());
28
+ });
29
+
30
+ // Routes
31
+
32
+ app.get('/', routes.index);
33
+
34
+ app.listen(3000);
35
+ console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "application-name"
3
+ , "version": "0.0.1"
4
+ , "private": true
5
+ , "dependencies": {
6
+ "express": "2.5.0"
7
+ , "jade": ">= 0.0.1"
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ body {
2
+ padding: 50px;
3
+ font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4
+ }
5
+
6
+ a {
7
+ color: #00B7FF;
8
+ }
@@ -0,0 +1,10 @@
1
+
2
+ /*
3
+ * GET home page.
4
+ */
5
+
6
+ exports.index = function(req, res){
7
+ res.writeHead(200);
8
+ req.doesnotexist();
9
+ // res.render('index', { title: 'Express' })
10
+ };
@@ -0,0 +1,2 @@
1
+ h1= title
2
+ p Welcome to #{title}
@@ -0,0 +1,6 @@
1
+ !!!
2
+ html
3
+ head
4
+ title= title
5
+ link(rel='stylesheet', href='/stylesheets/style.css')
6
+ body!= body
@@ -0,0 +1,43 @@
1
+
2
+ /**
3
+ * Module dependencies.
4
+ */
5
+
6
+ var express = require('../')
7
+ , http = require('http')
8
+ , connect = require('connect');
9
+
10
+ var app = express.createServer();
11
+
12
+ app.get('/', function(req, res){
13
+ req.foo();
14
+ res.send('test');
15
+ });
16
+
17
+ // app.set('views', __dirname + '/views');
18
+ // app.set('view engine', 'jade');
19
+ //
20
+ // app.configure(function(){
21
+ // app.use(function(req, res, next){
22
+ // debugger
23
+ // res.write('first');
24
+ // console.error('first');
25
+ // next();
26
+ // });
27
+ //
28
+ // app.use(app.router);
29
+ //
30
+ // app.use(function(req, res, next){
31
+ // console.error('last');
32
+ // res.end('last');
33
+ // });
34
+ // });
35
+ //
36
+ // app.get('/', function(req, res, next){
37
+ // console.error('middle');
38
+ // res.write(' route ');
39
+ // next();
40
+ // });
41
+
42
+ app.listen(3000);
43
+ console.log('listening on port 3000');