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.
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
@@ -5,13 +5,15 @@
5
5
  */
6
6
 
7
7
  var fs = require('fs')
8
- , exec = require('child_process').exec;
8
+ , os = require('os')
9
+ , exec = require('child_process').exec
10
+ , mkdirp = require('mkdirp');
9
11
 
10
12
  /**
11
13
  * Framework version.
12
14
  */
13
15
 
14
- var version = '2.4.6';
16
+ var version = '2.5.5';
15
17
 
16
18
  /**
17
19
  * Add session support.
@@ -25,6 +27,14 @@ var sessions = false;
25
27
 
26
28
  var cssEngine;
27
29
 
30
+ /**
31
+ * End-of-line code.
32
+ */
33
+
34
+ var eol = os.platform
35
+ ? ('win32' == os.platform() ? '\r\n' : '\n')
36
+ : '\n';
37
+
28
38
  /**
29
39
  * Template engine to utilize.
30
40
  */
@@ -42,11 +52,26 @@ var usage = ''
42
52
  + ' Options:\n'
43
53
  + ' -s, --sessions add session support\n'
44
54
  + ' -t, --template <engine> add template <engine> support (jade|ejs). default=jade\n'
45
- + ' -c, --css <engine> add stylesheet <engine> support (less|sass|stylus). default=plain css\n'
55
+ + ' -c, --css <engine> add stylesheet <engine> support (stylus). default=plain css\n'
46
56
  + ' -v, --version output framework version\n'
47
57
  + ' -h, --help output help information\n'
48
58
  ;
49
59
 
60
+ /**
61
+ * Routes index template.
62
+ */
63
+
64
+ var index = [
65
+ ''
66
+ , '/*'
67
+ , ' * GET home page.'
68
+ , ' */'
69
+ , ''
70
+ , 'exports.index = function(req, res){'
71
+ , ' res.render(\'index\', { title: \'Express\' })'
72
+ , '};'
73
+ ].join(eol);
74
+
50
75
  /**
51
76
  * Jade layout template.
52
77
  */
@@ -58,7 +83,7 @@ var jadeLayout = [
58
83
  , ' title= title'
59
84
  , ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')'
60
85
  , ' body!= body'
61
- ].join('\n');
86
+ ].join(eol);
62
87
 
63
88
  /**
64
89
  * Jade index template.
@@ -67,7 +92,7 @@ var jadeLayout = [
67
92
  var jadeIndex = [
68
93
  'h1= title'
69
94
  , 'p Welcome to #{title}'
70
- ].join('\n');
95
+ ].join(eol);
71
96
 
72
97
  /**
73
98
  * EJS layout template.
@@ -84,7 +109,7 @@ var ejsLayout = [
84
109
  , ' <%- body %>'
85
110
  , ' </body>'
86
111
  , '</html>'
87
- ].join('\n');
112
+ ].join(eol);
88
113
 
89
114
  /**
90
115
  * EJS index template.
@@ -93,7 +118,7 @@ var ejsLayout = [
93
118
  var ejsIndex = [
94
119
  '<h1><%= title %></h1>'
95
120
  , '<p>Welcome to <%= title %></p>'
96
- ].join('\n');
121
+ ].join(eol);
97
122
 
98
123
  /**
99
124
  * Default css template.
@@ -108,34 +133,7 @@ var css = [
108
133
  , 'a {'
109
134
  , ' color: #00B7FF;'
110
135
  , '}'
111
- ].join('\n');
112
-
113
- /**
114
- * Default less template.
115
- */
116
-
117
- var less = [
118
- 'body {'
119
- , ' padding: 50px;'
120
- , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
121
- , '}'
122
- , ''
123
- , 'a {'
124
- , ' color: #00B7FF;'
125
- , '}'
126
- ].join('\n');
127
-
128
- /**
129
- * Default sass template.
130
- */
131
-
132
- var sass = [
133
- 'body'
134
- , ' :padding 50px'
135
- , ' :font 14px "Lucida Grande", Helvetica, Arial, sans-serif'
136
- , 'a'
137
- , ' :color #00B7FF'
138
- ].join('\n');
136
+ ].join(eol);
139
137
 
140
138
  /**
141
139
  * Default stylus template.
@@ -147,7 +145,7 @@ var stylus = [
147
145
  , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif'
148
146
  , 'a'
149
147
  , ' color: #00B7FF'
150
- ].join('\n');
148
+ ].join(eol);
151
149
 
152
150
  /**
153
151
  * App template.
@@ -159,7 +157,8 @@ var app = [
159
157
  , ' * Module dependencies.'
160
158
  , ' */'
161
159
  , ''
162
- , 'var express = require(\'express\');'
160
+ , 'var express = require(\'express\')'
161
+ , ' , routes = require(\'./routes\')'
163
162
  , ''
164
163
  , 'var app = module.exports = express.createServer();'
165
164
  , ''
@@ -184,16 +183,12 @@ var app = [
184
183
  , ''
185
184
  , '// Routes'
186
185
  , ''
187
- , 'app.get(\'/\', function(req, res){'
188
- , ' res.render(\'index\', {'
189
- , ' title: \'Express\''
190
- , ' });'
191
- , '});'
186
+ , 'app.get(\'/\', routes.index);'
192
187
  , ''
193
188
  , 'app.listen(3000);'
194
189
  , 'console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);'
195
190
  , ''
196
- ].join('\n');
191
+ ].join(eol);
197
192
 
198
193
  // Parse arguments
199
194
 
@@ -259,7 +254,16 @@ while (args.length) {
259
254
  */
260
255
 
261
256
  function createApplicationAt(path) {
257
+ console.log();
258
+ process.on('exit', function(){
259
+ console.log();
260
+ console.log(' dont forget to install dependencies:');
261
+ console.log(' $ cd %s && npm install', path);
262
+ console.log();
263
+ });
264
+
262
265
  mkdir(path, function(){
266
+ mkdir(path + '/public');
263
267
  mkdir(path + '/public/javascripts');
264
268
  mkdir(path + '/public/images');
265
269
  mkdir(path + '/public/stylesheets', function(){
@@ -267,16 +271,15 @@ function createApplicationAt(path) {
267
271
  case 'stylus':
268
272
  write(path + '/public/stylesheets/style.styl', stylus);
269
273
  break;
270
- case 'less':
271
- write(path + '/public/stylesheets/style.less', less);
272
- break;
273
- case 'sass':
274
- write(path + '/public/stylesheets/style.sass', sass);
275
- break;
276
274
  default:
277
275
  write(path + '/public/stylesheets/style.css', css);
278
276
  }
279
277
  });
278
+
279
+ mkdir(path + '/routes', function(){
280
+ write(path + '/routes/index.js', index);
281
+ });
282
+
280
283
  mkdir(path + '/views', function(){
281
284
  switch (templateEngine) {
282
285
  case 'ejs':
@@ -292,12 +295,8 @@ function createApplicationAt(path) {
292
295
 
293
296
  // CSS Engine support
294
297
  switch (cssEngine) {
295
- case 'sass':
296
- case 'less':
297
- app = app.replace('{css}', '\n app.use(express.compiler({ src: __dirname + \'/public\', enable: [\'' + cssEngine + '\'] }));');
298
- break;
299
298
  case 'stylus':
300
- app = app.replace('{css}', '\n app.use(require(\'stylus\').middleware({ src: __dirname + \'/public\' }));');
299
+ app = app.replace('{css}', eol + ' app.use(require(\'stylus\').middleware({ src: __dirname + \'/public\' }));');
301
300
  break;
302
301
  default:
303
302
  app = app.replace('{css}', '');
@@ -305,22 +304,22 @@ function createApplicationAt(path) {
305
304
 
306
305
  // Session support
307
306
  app = app.replace('{sess}', sessions
308
- ? '\n app.use(express.cookieParser());\n app.use(express.session({ secret: \'your secret here\' }));'
307
+ ? eol + ' app.use(express.cookieParser());' + eol + ' app.use(express.session({ secret: \'your secret here\' }));'
309
308
  : '');
310
309
 
311
310
  // Template support
312
311
  app = app.replace(':TEMPLATE', templateEngine);
313
312
 
314
313
  // package.json
315
- var json = '{\n';
316
- json += ' "name": "application-name"\n';
317
- json += ' , "version": "0.0.1"\n';
318
- json += ' , "private": true\n';
319
- json += ' , "dependencies": {\n';
320
- json += ' "express": "' + version + '"\n';
321
- if (cssEngine) json += ' , "' + cssEngine + '": ">= 0.0.1"\n';
322
- if (templateEngine) json += ' , "' + templateEngine + '": ">= 0.0.1"\n';
323
- json += ' }\n';
314
+ var json = '{' + eol;
315
+ json += ' "name": "application-name"' + eol;
316
+ json += ' , "version": "0.0.1"' + eol;
317
+ json += ' , "private": true' + eol;
318
+ json += ' , "dependencies": {' + eol;
319
+ json += ' "express": "' + version + '"' + eol;
320
+ if (cssEngine) json += ' , "' + cssEngine + '": ">= 0.0.1"' + eol;
321
+ if (templateEngine) json += ' , "' + templateEngine + '": ">= 0.0.1"' + eol;
322
+ json += ' }' + eol;
324
323
  json += '}';
325
324
 
326
325
 
@@ -398,9 +397,9 @@ function prompt(msg, fn) {
398
397
  */
399
398
 
400
399
  function mkdir(path, fn) {
401
- exec('mkdir -p ' + path, function(err){
400
+ mkdirp(path, 0755, function(err){
402
401
  if (err) throw err;
403
- console.log(' \x1b[36mcreate\x1b[0m : ' + path);
402
+ console.log(' \033[36mcreate\033[0m : ' + path);
404
403
  fn && fn();
405
404
  });
406
405
  }
@@ -28,7 +28,7 @@ var exports = module.exports = connect.middleware;
28
28
  * Framework version.
29
29
  */
30
30
 
31
- exports.version = '2.4.6';
31
+ exports.version = '2.5.6';
32
32
 
33
33
  /**
34
34
  * Shortcut for `new Server(...)`.
@@ -12,6 +12,7 @@
12
12
  var http = require('http')
13
13
  , req = http.IncomingMessage.prototype
14
14
  , utils = require('./utils')
15
+ , parse = require('url').parse
15
16
  , mime = require('mime');
16
17
 
17
18
  /**
@@ -87,6 +88,17 @@ req.get = function(field, param){
87
88
  return RegExp.$1 || RegExp.$2;
88
89
  };
89
90
 
91
+ /**
92
+ * Short-hand for `require('url').parse(req.url).pathname`.
93
+ *
94
+ * @return {String}
95
+ * @api public
96
+ */
97
+
98
+ req.__defineGetter__('path', function(){
99
+ return parse(this.url).pathname;
100
+ });
101
+
90
102
  /**
91
103
  * Check if the _Accept_ header is present, and includes the given `type`.
92
104
  *
@@ -217,10 +229,10 @@ req.flash = function(type, msg){
217
229
  , args = arguments
218
230
  , formatters = this.app.flashFormatters || {};
219
231
  formatters.__proto__ = flashFormatters;
220
- msg = utils.miniMarkdown(utils.escape(msg));
232
+ msg = utils.miniMarkdown(msg);
221
233
  msg = msg.replace(/%([a-zA-Z])/g, function(_, format){
222
234
  var formatter = formatters[format];
223
- if (formatter) return formatter(args[i++]);
235
+ if (formatter) return formatter(utils.escape(args[i++]));
224
236
  });
225
237
  return (msgs[type] = msgs[type] || []).push(msg);
226
238
  } else if (type) {
@@ -280,16 +292,18 @@ req.flash = function(type, msg){
280
292
  req.is = function(type){
281
293
  var fn = this.app.is(type);
282
294
  if (fn) return fn(this);
283
- var contentType = this.headers['content-type'];
284
- if (!contentType) return;
295
+ var ct = this.headers['content-type'];
296
+ if (!ct) return false;
297
+ ct = ct.split(';')[0];
285
298
  if (!~type.indexOf('/')) type = mime.lookup(type);
286
299
  if (~type.indexOf('*')) {
287
- type = type.split('/')
288
- contentType = contentType.split('/');
289
- if ('*' == type[0] && type[1] == contentType[1]) return true;
290
- if ('*' == type[1] && type[0] == contentType[0]) return true;
300
+ type = type.split('/');
301
+ ct = ct.split('/');
302
+ if ('*' == type[0] && type[1] == ct[1]) return true;
303
+ if ('*' == type[1] && type[0] == ct[0]) return true;
304
+ return false;
291
305
  }
292
- return !! ~contentType.indexOf(type);
306
+ return !! ~ct.indexOf(type);
293
307
  };
294
308
 
295
309
  // Callback for isXMLHttpRequest / xhr
@@ -105,7 +105,7 @@ res.send = function(body, headers, status){
105
105
 
106
106
  // respond
107
107
  this.statusCode = status;
108
- this.end('HEAD' == this.req.method ? undefined : body);
108
+ this.end('HEAD' == this.req.method ? null : body);
109
109
  return this;
110
110
  };
111
111
 
@@ -376,6 +376,7 @@ res.redirect = function(url, status){
376
376
  , req = this.req
377
377
  , base = app.set('basepath') || app.route
378
378
  , status = status || 302
379
+ , head = 'HEAD' == req.method
379
380
  , body;
380
381
 
381
382
  // Setup redirect map
@@ -418,7 +419,7 @@ res.redirect = function(url, status){
418
419
  // Respond
419
420
  this.statusCode = status;
420
421
  this.header('Location', url);
421
- this.end(body);
422
+ this.end(head ? null : body);
422
423
  };
423
424
 
424
425
  /**
@@ -5,6 +5,19 @@
5
5
  * MIT Licensed
6
6
  */
7
7
 
8
+ /**
9
+ * Check if `path` looks absolute.
10
+ *
11
+ * @param {String} path
12
+ * @return {Boolean}
13
+ * @api private
14
+ */
15
+
16
+ exports.isAbsolute = function(path){
17
+ if ('/' == path[0]) return true;
18
+ if (':' == path[1] && '\\' == path[2]) return true;
19
+ };
20
+
8
21
  /**
9
22
  * Merge object `b` with `a` giving precedence to
10
23
  * values in object `a`.
@@ -10,6 +10,7 @@
10
10
  */
11
11
 
12
12
  var path = require('path')
13
+ , utils = require('../utils')
13
14
  , extname = path.extname
14
15
  , dirname = path.dirname
15
16
  , basename = path.basename
@@ -99,7 +100,7 @@ View.prototype.resolvePath = function(){
99
100
  // Implicit engine
100
101
  if (!~this.basename.indexOf('.')) path += this.extension;
101
102
  // Absolute
102
- if ('/' == path[0]) return path;
103
+ if (utils.isAbsolute(path)) return path;
103
104
  // Relative to parent
104
105
  if (this.relative && this.parent) return this.parent.dirname + '/' + path;
105
106
  // Relative to root
@@ -47,7 +47,10 @@ exports.register = View.register;
47
47
  */
48
48
 
49
49
  exports.compile = function(view, cache, cid, options){
50
- if (cache && cid && cache[cid]) return cache[cid];
50
+ if (cache && cid && cache[cid]){
51
+ options.filename = cache[cid].path;
52
+ return cache[cid];
53
+ }
51
54
 
52
55
  // lookup
53
56
  view = exports.lookup(view, options);
@@ -58,13 +61,13 @@ exports.compile = function(view, cache, cid, options){
58
61
  var err = new Error('failed to locate view "' + view.original.view + '"');
59
62
  err.view = view.original;
60
63
  throw err;
61
- }
64
+ }
62
65
 
63
66
  // compile
64
67
  options.filename = view.path;
65
68
  view.fn = view.templateEngine.compile(view.contents, options);
66
69
  cache[cid] = view;
67
-
70
+
68
71
  return view;
69
72
  };
70
73
 
@@ -81,11 +84,11 @@ exports.compile = function(view, cache, cid, options){
81
84
  *
82
85
  * Lookup:
83
86
  *
84
- * - partial `_<name>`
85
- * - any `<name>/index`
86
- * - non-layout `../<name>/index`
87
- * - any `<root>/<name>`
88
- * - partial `<root>/_<name>`
87
+ * - partial `_<name>`
88
+ * - any `<name>/index`
89
+ * - non-layout `../<name>/index`
90
+ * - any `<root>/<name>`
91
+ * - partial `<root>/_<name>`
89
92
  *
90
93
  * @param {String} view
91
94
  * @param {Object} options
@@ -161,7 +164,7 @@ function renderPartial(res, view, options, parentLocals, parent){
161
164
 
162
165
  // Inherit locals from parent
163
166
  union(options, parentLocals);
164
-
167
+
165
168
  // Merge locals
166
169
  if (locals) merge(options, locals);
167
170
 
@@ -202,7 +205,7 @@ function renderPartial(res, view, options, parentLocals, parent){
202
205
  options.lastInCollection = i == len - 1;
203
206
  object = val;
204
207
  buf += render();
205
- }
208
+ }
206
209
  } else {
207
210
  keys = Object.keys(collection);
208
211
  len = keys.length;
@@ -227,20 +230,20 @@ function renderPartial(res, view, options, parentLocals, parent){
227
230
  };
228
231
 
229
232
  /**
230
- * Render `view` partial with the given `options`. Optionally a
233
+ * Render `view` partial with the given `options`. Optionally a
231
234
  * callback `fn(err, str)` may be passed instead of writing to
232
235
  * the socket.
233
236
  *
234
237
  * Options:
235
238
  *
236
- * - `object` Single object with name derived from the view (unless `as` is present)
239
+ * - `object` Single object with name derived from the view (unless `as` is present)
237
240
  *
238
241
  * - `as` Variable name for each `collection` value, defaults to the view name.
239
242
  * * as: 'something' will add the `something` local variable
240
243
  * * as: this will use the collection value as the template context
241
244
  * * as: global will merge the collection value's properties with `locals`
242
245
  *
243
- * - `collection` Array of objects, the name is derived from the view name itself.
246
+ * - `collection` Array of objects, the name is derived from the view name itself.
244
247
  * For example _video.html_ will have a object _video_ available to it.
245
248
  *
246
249
  * @param {String} view
@@ -294,7 +297,7 @@ res.partial = function(view, options, fn){
294
297
  * automatically, however otherwise a response of _200_ and _text/html_ is given.
295
298
  *
296
299
  * Options:
297
- *
300
+ *
298
301
  * - `scope` Template evaluation context (the value of `this`)
299
302
  * - `debug` Output debugging information
300
303
  * - `status` Response status code
@@ -430,7 +433,7 @@ res._render = function(view, opts, fn, parent, sub){
430
433
  // partial return
431
434
  } else if (partial) {
432
435
  return str;
433
- // render complete, and
436
+ // render complete, and
434
437
  // callback given
435
438
  } else if (fn) {
436
439
  fn(null, str);
@@ -454,4 +457,4 @@ function hintAtViewPaths(view, options) {
454
457
  console.error(' - %s', path);
455
458
  });
456
459
  console.error();
457
- }
460
+ }
@@ -26,7 +26,7 @@ exports = module.exports = createServer;
26
26
  * Framework version.
27
27
  */
28
28
 
29
- exports.version = '1.7.1';
29
+ exports.version = '1.8.5';
30
30
 
31
31
  /**
32
32
  * Initialize a new `connect.HTTPServer` with the middleware
@@ -163,10 +163,12 @@ Server.prototype.handle = function(req, res, out) {
163
163
 
164
164
  res.statusCode = 500;
165
165
  res.setHeader('Content-Type', 'text/plain');
166
+ if ('HEAD' == req.method) return res.end();
166
167
  res.end(msg);
167
168
  } else {
168
169
  res.statusCode = 404;
169
170
  res.setHeader('Content-Type', 'text/plain');
171
+ if ('HEAD' == req.method) return res.end();
170
172
  res.end('Cannot ' + req.method + ' ' + req.url);
171
173
  }
172
174
  return;