spade-packager 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. data/.gitignore +2 -0
  2. data/.gitmodules +6 -0
  3. data/bin/spadepkg +8 -0
  4. data/lib/libgems_ext.rb +8 -0
  5. data/lib/libgems_ext/config_file.rb +33 -0
  6. data/lib/libgems_ext/dependency_installer.rb +150 -0
  7. data/lib/libgems_ext/installer.rb +39 -0
  8. data/lib/libgems_ext/libgems.rb +39 -0
  9. data/lib/libgems_ext/spec_fetcher.rb +11 -0
  10. data/lib/spade-packager.rb +1 -0
  11. data/lib/spade/packager.rb +18 -0
  12. data/lib/spade/packager/cli.rb +9 -0
  13. data/lib/spade/packager/cli/base.rb +196 -0
  14. data/lib/spade/packager/cli/owner.rb +46 -0
  15. data/lib/spade/packager/cli/project_generator.rb +117 -0
  16. data/lib/spade/packager/credentials.rb +38 -0
  17. data/lib/spade/packager/local.rb +50 -0
  18. data/lib/spade/packager/package.rb +160 -0
  19. data/lib/spade/packager/remote.rb +98 -0
  20. data/lib/spade/packager/repository.rb +18 -0
  21. data/lib/spade/packager/version.rb +5 -0
  22. data/packages/coffee-script/.gitignore +8 -0
  23. data/packages/coffee-script/.npmignore +11 -0
  24. data/packages/coffee-script/Cakefile +229 -0
  25. data/packages/coffee-script/LICENSE +22 -0
  26. data/packages/coffee-script/README +47 -0
  27. data/packages/coffee-script/Rakefile +78 -0
  28. data/packages/coffee-script/bin/cake +7 -0
  29. data/packages/coffee-script/bin/coffee +7 -0
  30. data/packages/coffee-script/documentation/coffee/aliases.coffee +11 -0
  31. data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +2 -0
  32. data/packages/coffee-script/documentation/coffee/block_comment.coffee +6 -0
  33. data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +9 -0
  34. data/packages/coffee-script/documentation/coffee/classes.coffee +25 -0
  35. data/packages/coffee-script/documentation/coffee/comparisons.coffee +5 -0
  36. data/packages/coffee-script/documentation/coffee/conditionals.coffee +13 -0
  37. data/packages/coffee-script/documentation/coffee/default_args.coffee +8 -0
  38. data/packages/coffee-script/documentation/coffee/do.coffee +4 -0
  39. data/packages/coffee-script/documentation/coffee/embedded.coffee +5 -0
  40. data/packages/coffee-script/documentation/coffee/existence.coffee +10 -0
  41. data/packages/coffee-script/documentation/coffee/expressions.coffee +9 -0
  42. data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +3 -0
  43. data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +3 -0
  44. data/packages/coffee-script/documentation/coffee/expressions_try.coffee +7 -0
  45. data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +6 -0
  46. data/packages/coffee-script/documentation/coffee/functions.coffee +2 -0
  47. data/packages/coffee-script/documentation/coffee/heredocs.coffee +7 -0
  48. data/packages/coffee-script/documentation/coffee/heregexes.coffee +11 -0
  49. data/packages/coffee-script/documentation/coffee/interpolation.coffee +6 -0
  50. data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +7 -0
  51. data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +4 -0
  52. data/packages/coffee-script/documentation/coffee/object_extraction.coffee +13 -0
  53. data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +19 -0
  54. data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +5 -0
  55. data/packages/coffee-script/documentation/coffee/overview.coffee +28 -0
  56. data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +6 -0
  57. data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +7 -0
  58. data/packages/coffee-script/documentation/coffee/prototypes.coffee +3 -0
  59. data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +2 -0
  60. data/packages/coffee-script/documentation/coffee/scope.coffee +5 -0
  61. data/packages/coffee-script/documentation/coffee/slices.coffee +7 -0
  62. data/packages/coffee-script/documentation/coffee/soaks.coffee +1 -0
  63. data/packages/coffee-script/documentation/coffee/splats.coffee +27 -0
  64. data/packages/coffee-script/documentation/coffee/splices.coffee +5 -0
  65. data/packages/coffee-script/documentation/coffee/strings.coffee +8 -0
  66. data/packages/coffee-script/documentation/coffee/switch.coffee +10 -0
  67. data/packages/coffee-script/documentation/coffee/try.coffee +8 -0
  68. data/packages/coffee-script/documentation/coffee/while.coffee +10 -0
  69. data/packages/coffee-script/documentation/css/docs.css +374 -0
  70. data/packages/coffee-script/documentation/css/idle.css +64 -0
  71. data/packages/coffee-script/documentation/docs/browser.html +25 -0
  72. data/packages/coffee-script/documentation/docs/cake.html +43 -0
  73. data/packages/coffee-script/documentation/docs/coffee-script.html +51 -0
  74. data/packages/coffee-script/documentation/docs/command.html +161 -0
  75. data/packages/coffee-script/documentation/docs/docco.css +186 -0
  76. data/packages/coffee-script/documentation/docs/grammar.html +399 -0
  77. data/packages/coffee-script/documentation/docs/helpers.html +31 -0
  78. data/packages/coffee-script/documentation/docs/index.html +3 -0
  79. data/packages/coffee-script/documentation/docs/lexer.html +490 -0
  80. data/packages/coffee-script/documentation/docs/nodes.html +1338 -0
  81. data/packages/coffee-script/documentation/docs/optparse.html +78 -0
  82. data/packages/coffee-script/documentation/docs/repl.html +24 -0
  83. data/packages/coffee-script/documentation/docs/rewriter.html +251 -0
  84. data/packages/coffee-script/documentation/docs/scope.html +54 -0
  85. data/packages/coffee-script/documentation/docs/underscore.html +295 -0
  86. data/packages/coffee-script/documentation/images/background.png +0 -0
  87. data/packages/coffee-script/documentation/images/banding.png +0 -0
  88. data/packages/coffee-script/documentation/images/button_bg.png +0 -0
  89. data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
  90. data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
  91. data/packages/coffee-script/documentation/images/favicon.ico +0 -0
  92. data/packages/coffee-script/documentation/images/logo.png +0 -0
  93. data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
  94. data/packages/coffee-script/documentation/index.html.erb +1607 -0
  95. data/packages/coffee-script/documentation/js/aliases.js +17 -0
  96. data/packages/coffee-script/documentation/js/array_comprehensions.js +6 -0
  97. data/packages/coffee-script/documentation/js/block_comment.js +4 -0
  98. data/packages/coffee-script/documentation/js/cake_tasks.js +10 -0
  99. data/packages/coffee-script/documentation/js/classes.js +44 -0
  100. data/packages/coffee-script/documentation/js/comparisons.js +3 -0
  101. data/packages/coffee-script/documentation/js/conditionals.js +12 -0
  102. data/packages/coffee-script/documentation/js/default_args.js +7 -0
  103. data/packages/coffee-script/documentation/js/do.js +10 -0
  104. data/packages/coffee-script/documentation/js/embedded.js +4 -0
  105. data/packages/coffee-script/documentation/js/existence.js +6 -0
  106. data/packages/coffee-script/documentation/js/expressions.js +15 -0
  107. data/packages/coffee-script/documentation/js/expressions_assignment.js +2 -0
  108. data/packages/coffee-script/documentation/js/expressions_comprehension.js +9 -0
  109. data/packages/coffee-script/documentation/js/expressions_try.js +7 -0
  110. data/packages/coffee-script/documentation/js/fat_arrow.js +9 -0
  111. data/packages/coffee-script/documentation/js/functions.js +7 -0
  112. data/packages/coffee-script/documentation/js/heredocs.js +2 -0
  113. data/packages/coffee-script/documentation/js/heregexes.js +2 -0
  114. data/packages/coffee-script/documentation/js/interpolation.js +4 -0
  115. data/packages/coffee-script/documentation/js/multiple_return_values.js +5 -0
  116. data/packages/coffee-script/documentation/js/object_comprehensions.js +15 -0
  117. data/packages/coffee-script/documentation/js/object_extraction.js +10 -0
  118. data/packages/coffee-script/documentation/js/objects_and_arrays.js +17 -0
  119. data/packages/coffee-script/documentation/js/objects_reserved.js +4 -0
  120. data/packages/coffee-script/documentation/js/overview.js +35 -0
  121. data/packages/coffee-script/documentation/js/parallel_assignment.js +4 -0
  122. data/packages/coffee-script/documentation/js/patterns_and_splats.js +4 -0
  123. data/packages/coffee-script/documentation/js/prototypes.js +3 -0
  124. data/packages/coffee-script/documentation/js/range_comprehensions.js +9 -0
  125. data/packages/coffee-script/documentation/js/scope.js +8 -0
  126. data/packages/coffee-script/documentation/js/slices.js +4 -0
  127. data/packages/coffee-script/documentation/js/soaks.js +2 -0
  128. data/packages/coffee-script/documentation/js/splats.js +15 -0
  129. data/packages/coffee-script/documentation/js/splices.js +3 -0
  130. data/packages/coffee-script/documentation/js/strings.js +2 -0
  131. data/packages/coffee-script/documentation/js/switch.js +23 -0
  132. data/packages/coffee-script/documentation/js/try.js +8 -0
  133. data/packages/coffee-script/documentation/js/while.js +18 -0
  134. data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +6240 -0
  135. data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +16 -0
  136. data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +13 -0
  137. data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +34 -0
  138. data/packages/coffee-script/examples/blocks.coffee +54 -0
  139. data/packages/coffee-script/examples/code.coffee +167 -0
  140. data/packages/coffee-script/examples/computer_science/README +4 -0
  141. data/packages/coffee-script/examples/computer_science/binary_search.coffee +25 -0
  142. data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +11 -0
  143. data/packages/coffee-script/examples/computer_science/linked_list.coffee +108 -0
  144. data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +36 -0
  145. data/packages/coffee-script/examples/computer_science/merge_sort.coffee +19 -0
  146. data/packages/coffee-script/examples/computer_science/selection_sort.coffee +23 -0
  147. data/packages/coffee-script/examples/poignant.coffee +181 -0
  148. data/packages/coffee-script/examples/potion.coffee +206 -0
  149. data/packages/coffee-script/examples/underscore.coffee +682 -0
  150. data/packages/coffee-script/examples/web_server.coffee +12 -0
  151. data/packages/coffee-script/extras/EXTRAS +7 -0
  152. data/packages/coffee-script/extras/coffee-script.js +8 -0
  153. data/packages/coffee-script/extras/jsl.conf +44 -0
  154. data/packages/coffee-script/index.html +2515 -0
  155. data/packages/coffee-script/lib/browser.js +52 -0
  156. data/packages/coffee-script/lib/cake.js +76 -0
  157. data/packages/coffee-script/lib/coffee-script.js +82 -0
  158. data/packages/coffee-script/lib/command.js +263 -0
  159. data/packages/coffee-script/lib/grammar.js +581 -0
  160. data/packages/coffee-script/lib/helpers.js +66 -0
  161. data/packages/coffee-script/lib/index.js +8 -0
  162. data/packages/coffee-script/lib/lexer.js +633 -0
  163. data/packages/coffee-script/lib/nodes.js +2165 -0
  164. data/packages/coffee-script/lib/optparse.js +111 -0
  165. data/packages/coffee-script/lib/parser.js +649 -0
  166. data/packages/coffee-script/lib/repl.js +42 -0
  167. data/packages/coffee-script/lib/rewriter.js +353 -0
  168. data/packages/coffee-script/lib/scope.js +120 -0
  169. data/packages/coffee-script/lib/spade-format.js +45 -0
  170. data/packages/coffee-script/package.json +26 -0
  171. data/packages/coffee-script/src/browser.coffee +43 -0
  172. data/packages/coffee-script/src/cake.coffee +69 -0
  173. data/packages/coffee-script/src/coffee-script.coffee +92 -0
  174. data/packages/coffee-script/src/command.coffee +214 -0
  175. data/packages/coffee-script/src/grammar.coffee +590 -0
  176. data/packages/coffee-script/src/helpers.coffee +56 -0
  177. data/packages/coffee-script/src/index.coffee +2 -0
  178. data/packages/coffee-script/src/lexer.coffee +653 -0
  179. data/packages/coffee-script/src/nodes.coffee +1754 -0
  180. data/packages/coffee-script/src/optparse.coffee +99 -0
  181. data/packages/coffee-script/src/repl.coffee +42 -0
  182. data/packages/coffee-script/src/rewriter.coffee +326 -0
  183. data/packages/coffee-script/src/scope.coffee +94 -0
  184. data/packages/coffee-script/test/arguments.coffee +127 -0
  185. data/packages/coffee-script/test/assignment.coffee +98 -0
  186. data/packages/coffee-script/test/break.coffee +18 -0
  187. data/packages/coffee-script/test/comments.coffee +201 -0
  188. data/packages/coffee-script/test/conditionals.coffee +181 -0
  189. data/packages/coffee-script/test/exception_handling.coffee +90 -0
  190. data/packages/coffee-script/test/helpers.coffee +96 -0
  191. data/packages/coffee-script/test/importing.coffee +18 -0
  192. data/packages/coffee-script/test/operators.coffee +225 -0
  193. data/packages/coffee-script/test/ranges_slices_and_splices.coffee +186 -0
  194. data/packages/coffee-script/test/regular_expressions.coffee +56 -0
  195. data/packages/coffee-script/test/test.html +123 -0
  196. data/packages/coffee-script/test/test_chaining.coffee +77 -0
  197. data/packages/coffee-script/test/test_classes.coffee +372 -0
  198. data/packages/coffee-script/test/test_compilation.coffee +26 -0
  199. data/packages/coffee-script/test/test_comprehensions.coffee +318 -0
  200. data/packages/coffee-script/test/test_existence.coffee +165 -0
  201. data/packages/coffee-script/test/test_functions.coffee +379 -0
  202. data/packages/coffee-script/test/test_heredocs.coffee +111 -0
  203. data/packages/coffee-script/test/test_literals.coffee +270 -0
  204. data/packages/coffee-script/test/test_option_parser.coffee +27 -0
  205. data/packages/coffee-script/test/test_pattern_matching.coffee +162 -0
  206. data/packages/coffee-script/test/test_returns.coffee +63 -0
  207. data/packages/coffee-script/test/test_splats.coffee +102 -0
  208. data/packages/coffee-script/test/test_strings.coffee +118 -0
  209. data/packages/coffee-script/test/test_switch.coffee +103 -0
  210. data/packages/coffee-script/test/test_while.coffee +71 -0
  211. data/packages/ivory/LICENSE.txt +1 -0
  212. data/packages/ivory/README.md +19 -0
  213. data/packages/ivory/lib/buffer.js +111 -0
  214. data/packages/ivory/lib/events.js +137 -0
  215. data/packages/ivory/lib/fs.js +266 -0
  216. data/packages/ivory/lib/main.js +13 -0
  217. data/packages/ivory/lib/path.js +158 -0
  218. data/packages/ivory/lib/ruby/buffer.rb +145 -0
  219. data/packages/ivory/lib/ruby/constants.rb +585 -0
  220. data/packages/ivory/lib/ruby/events.rb +32 -0
  221. data/packages/ivory/lib/ruby/fs.rb +245 -0
  222. data/packages/ivory/lib/ruby/process.rb +28 -0
  223. data/packages/ivory/lib/stream.js +115 -0
  224. data/packages/ivory/lib/util.js +414 -0
  225. data/packages/ivory/package.json +11 -0
  226. data/packages/ivory/spade-boot.js +78 -0
  227. data/packages/jquery/main.js +7179 -0
  228. data/packages/jquery/package.json +10 -0
  229. data/packages/json/lib/main.js +14 -0
  230. data/packages/json/package.json +8 -0
  231. data/packages/lproj/README.md +77 -0
  232. data/packages/lproj/examples/demo-app/en.lproj/localized.strings +2 -0
  233. data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +3 -0
  234. data/packages/lproj/examples/demo-app/index.html +8 -0
  235. data/packages/lproj/examples/demo-app/lib/main.js +7 -0
  236. data/packages/lproj/examples/demo-app/package.json +9 -0
  237. data/packages/lproj/lib/main.js +78 -0
  238. data/packages/lproj/lib/strings-format.js +6 -0
  239. data/packages/lproj/package.json +9 -0
  240. data/packages/optparse/README.md +161 -0
  241. data/packages/optparse/TODO +1 -0
  242. data/packages/optparse/examples/browser-test.html +75 -0
  243. data/packages/optparse/examples/nodejs-test.js +90 -0
  244. data/packages/optparse/lib/optparse.js +309 -0
  245. data/packages/optparse/package.json +13 -0
  246. data/packages/optparse/seed.yml +5 -0
  247. data/packages/text/lib/main.js +8 -0
  248. data/packages/text/package.json +9 -0
  249. data/packages/web-file/README.md +7 -0
  250. data/packages/web-file/lib/errors.js +32 -0
  251. data/packages/web-file/lib/file-reader.js +10 -0
  252. data/packages/web-file/lib/file-system.js +234 -0
  253. data/packages/web-file/lib/file-writer.js +10 -0
  254. data/packages/web-file/lib/file.js +9 -0
  255. data/packages/web-file/lib/main.js +34 -0
  256. data/packages/web-file/lib/platform.js +25 -0
  257. data/packages/web-file/lib/ruby/file.rb +252 -0
  258. data/packages/web-file/lib/ruby/file_reader.rb +69 -0
  259. data/packages/web-file/lib/ruby/file_system.rb +134 -0
  260. data/packages/web-file/lib/ruby/file_writer.rb +78 -0
  261. data/packages/web-file/package.json +12 -0
  262. data/packages/web-typed-array/README.md +7 -0
  263. data/packages/web-typed-array/lib/array-buffer-view.js +9 -0
  264. data/packages/web-typed-array/lib/array-buffer.js +7 -0
  265. data/packages/web-typed-array/lib/main.js +33 -0
  266. data/packages/web-typed-array/lib/platform.js +20 -0
  267. data/packages/web-typed-array/lib/ruby/array_buffer.rb +31 -0
  268. data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +130 -0
  269. data/packages/web-typed-array/lib/ruby/typed_array.rb +133 -0
  270. data/packages/web-typed-array/lib/typed-array.js +26 -0
  271. data/packages/web-typed-array/package.json +9 -0
  272. data/spade-packager.gemspec +39 -0
  273. data/spec/cli/build_spec.rb +57 -0
  274. data/spec/cli/install_spec.rb +119 -0
  275. data/spec/cli/installed_spec.rb +55 -0
  276. data/spec/cli/list_spec.rb +74 -0
  277. data/spec/cli/login_spec.rb +75 -0
  278. data/spec/cli/new_spec.rb +5 -0
  279. data/spec/cli/owner_spec.rb +114 -0
  280. data/spec/cli/push_spec.rb +73 -0
  281. data/spec/cli/uninstall_spec.rb +58 -0
  282. data/spec/cli/unpack_spec.rb +72 -0
  283. data/spec/cli/unyank_spec.rb +73 -0
  284. data/spec/cli/yank_spec.rb +73 -0
  285. data/spec/credentials_spec.rb +23 -0
  286. data/spec/fixtures/badrake-0.8.7.spd +0 -0
  287. data/spec/fixtures/builder-3.0.0.spd +0 -0
  288. data/spec/fixtures/bundler-1.1.pre.spd +0 -0
  289. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  290. data/spec/fixtures/core-test-0.4.3.spd +0 -0
  291. data/spec/fixtures/core-test/bin/cot +3 -0
  292. data/spec/fixtures/core-test/lib/main.js +1 -0
  293. data/spec/fixtures/core-test/resources/runner.css +0 -0
  294. data/spec/fixtures/core-test/tests/test.js +1 -0
  295. data/spec/fixtures/highline-1.6.1.spd +0 -0
  296. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  297. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  298. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  299. data/spec/fixtures/package.json +30 -0
  300. data/spec/fixtures/rake-0.8.6.spd +0 -0
  301. data/spec/fixtures/rake-0.8.7.spd +0 -0
  302. data/spec/gauntlet_spec.rb +27 -0
  303. data/spec/package_spec.rb +267 -0
  304. data/spec/spec_helper.rb +32 -0
  305. data/spec/support/cli.rb +103 -0
  306. data/spec/support/fake.rb +48 -0
  307. data/spec/support/fake_gem_server.rb +67 -0
  308. data/spec/support/fake_gemcutter.rb +50 -0
  309. data/spec/support/matchers.rb +32 -0
  310. data/spec/support/path.rb +61 -0
  311. data/templates/project/LICENSE +19 -0
  312. data/templates/project/README.md +21 -0
  313. data/templates/project/lib/main.js +9 -0
  314. data/templates/project/project.json +31 -0
  315. data/templates/project/tests/main-test.js +8 -0
  316. metadata +484 -0
@@ -0,0 +1 @@
1
+ // TODO: Add MIT License here
@@ -0,0 +1,19 @@
1
+ # Ivory - A basic filesystem
2
+
3
+ Ivory is a basic filesystem API for JS. It is based mostly on the node.js
4
+ API but internally uses a ruby binding for use with the spade runtime.
5
+
6
+ Currently Ivory is considered unstable. The API can change at any time. In
7
+ general we try to keep it close to node.js.
8
+
9
+ ## Usage
10
+
11
+ You can use the API just like the node.js format:
12
+
13
+ var fs = require('ivory/fs');
14
+
15
+ You can also import the entire API into a global context.
16
+
17
+ require('ivory/fs');
18
+ $fs.open(..);
19
+
@@ -0,0 +1,111 @@
1
+ // ==========================================================================
2
+ // Project: Ivory
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license
5
+ // ==========================================================================
6
+
7
+ var SlowBuffer = require('./ruby/buffer').SlowBuffer;
8
+ var Buffer;
9
+
10
+ var pool;
11
+
12
+ function allocPool() {
13
+ pool = new SlowBuffer(Buffer.poolSize);
14
+ pool.used = 0;
15
+ }
16
+
17
+
18
+ function toHex(n) {
19
+ if (n < 16) return '0' + n.toString(16);
20
+ return n.toString(16);
21
+ }
22
+
23
+
24
+ SlowBuffer.prototype.inspect = function() {
25
+ var out = [],
26
+ len = this.length;
27
+ for (var i = 0; i < len; i++) {
28
+ out[i] = toHex(this[i]);
29
+ }
30
+ return '<SlowBuffer ' + out.join(' ') + '>';
31
+ };
32
+
33
+
34
+ SlowBuffer.prototype.toString = function(encoding, start, end) {
35
+ encoding = String(encoding || 'utf8').toLowerCase();
36
+ start = +start || 0;
37
+ if (typeof end == 'undefined') end = this.length;
38
+
39
+ // Fastpath empty strings
40
+ if (+end == start) {
41
+ return '';
42
+ }
43
+
44
+ switch (encoding) {
45
+ case 'utf8':
46
+ case 'utf-8':
47
+ return this.utf8Slice(start, end);
48
+
49
+ case 'ascii':
50
+ return this.asciiSlice(start, end);
51
+
52
+ case 'binary':
53
+ return this.binarySlice(start, end);
54
+
55
+ case 'base64':
56
+ return this.base64Slice(start, end);
57
+
58
+ default:
59
+ throw new Error('Unknown encoding');
60
+ }
61
+ };
62
+
63
+
64
+ SlowBuffer.prototype.write = function(string, offset, encoding) {
65
+ // Support both (string, offset, encoding)
66
+ // and the legacy (string, encoding, offset)
67
+ if (!isFinite(offset)) {
68
+ var swap = encoding;
69
+ encoding = offset;
70
+ offset = swap;
71
+ }
72
+
73
+ offset = +offset || 0;
74
+ encoding = String(encoding || 'utf8').toLowerCase();
75
+
76
+ switch (encoding) {
77
+ case 'utf8':
78
+ case 'utf-8':
79
+ return this.utf8Write(string, offset);
80
+
81
+ case 'ascii':
82
+ return this.asciiWrite(string, offset);
83
+
84
+ case 'binary':
85
+ return this.binaryWrite(string, offset);
86
+
87
+ case 'base64':
88
+ return this.base64Write(string, offset);
89
+
90
+ default:
91
+ throw new Error('Unknown encoding');
92
+ }
93
+ };
94
+
95
+
96
+ // slice(start, end)
97
+ SlowBuffer.prototype.slice = function(start, end) {
98
+ if (end > this.length) {
99
+ throw new Error('oob');
100
+ }
101
+ if (start > end) {
102
+ throw new Error('oob');
103
+ }
104
+
105
+ return new Buffer(this, end - start, +start);
106
+ };
107
+
108
+ exports.Buffer = exports.SlowBuffer = SlowBuffer;
109
+
110
+ // TODO: reintroduce some of the enhancements from node 0.3
111
+
@@ -0,0 +1,137 @@
1
+ // ==========================================================================
2
+ // Project: Ivory
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license
5
+ // ==========================================================================
6
+
7
+ var EventEmitter = require('./ruby/events').EventEmitter;
8
+ exports.EventEmitter = EventEmitter;
9
+
10
+ var isArray = Array.isArray;
11
+
12
+ EventEmitter.prototype.emit = function(type) {
13
+ // If there is no 'error' event listener then throw.
14
+ if (type === 'error') {
15
+ if (!this._events || !this._events.error ||
16
+ (isArray(this._events.error) && !this._events.error.length))
17
+ {
18
+ if (arguments[1] instanceof Error) {
19
+ throw arguments[1]; // Unhandled 'error' event
20
+ } else {
21
+ throw new Error("Uncaught, unspecified 'error' event.");
22
+ }
23
+ return false;
24
+ }
25
+ }
26
+
27
+ if (!this._events) return false;
28
+ var handler = this._events[type];
29
+ if (!handler) return false;
30
+
31
+ if (typeof handler == 'function') {
32
+ switch (arguments.length) {
33
+ // fast cases
34
+ case 1:
35
+ handler.call(this);
36
+ break;
37
+ case 2:
38
+ handler.call(this, arguments[1]);
39
+ break;
40
+ case 3:
41
+ handler.call(this, arguments[1], arguments[2]);
42
+ break;
43
+ // slower
44
+ default:
45
+ var args = Array.prototype.slice.call(arguments, 1);
46
+ handler.apply(this, args);
47
+ }
48
+ return true;
49
+
50
+ } else if (isArray(handler)) {
51
+ var args = Array.prototype.slice.call(arguments, 1);
52
+
53
+ var listeners = handler.slice();
54
+ for (var i = 0, l = listeners.length; i < l; i++) {
55
+ listeners[i].apply(this, args);
56
+ }
57
+ return true;
58
+
59
+ } else {
60
+ return false;
61
+ }
62
+ };
63
+
64
+ // EventEmitter is defined in src/node_events.cc
65
+ // EventEmitter.prototype.emit() is also defined there.
66
+ EventEmitter.prototype.addListener = function(type, listener) {
67
+ if ('function' !== typeof listener) {
68
+ throw new Error('addListener only takes instances of Function');
69
+ }
70
+
71
+ if (!this._events) this._events = {};
72
+
73
+ // To avoid recursion in the case that type == "newListeners"! Before
74
+ // adding it to the listeners, first emit "newListeners".
75
+ this.emit('newListener', type, listener);
76
+
77
+ if (!this._events[type]) {
78
+ // Optimize the case of one listener. Don't need the extra array object.
79
+ this._events[type] = listener;
80
+ } else if (isArray(this._events[type])) {
81
+ // If we've already got an array, just append.
82
+ this._events[type].push(listener);
83
+ } else {
84
+ // Adding the second element, need to change to array.
85
+ this._events[type] = [this._events[type], listener];
86
+ }
87
+
88
+ return this;
89
+ };
90
+
91
+ EventEmitter.prototype.on = EventEmitter.prototype.addListener;
92
+
93
+ EventEmitter.prototype.once = function(type, listener) {
94
+ var self = this;
95
+ self.on(type, function g() {
96
+ self.removeListener(type, g);
97
+ listener.apply(this, arguments);
98
+ });
99
+ };
100
+
101
+ EventEmitter.prototype.removeListener = function(type, listener) {
102
+ if ('function' !== typeof listener) {
103
+ throw new Error('removeListener only takes instances of Function');
104
+ }
105
+
106
+ // does not use listeners(), so no side effect of creating _events[type]
107
+ if (!this._events || !this._events[type]) return this;
108
+
109
+ var list = this._events[type];
110
+
111
+ if (isArray(list)) {
112
+ var i = list.indexOf(listener);
113
+ if (i < 0) return this;
114
+ list.splice(i, 1);
115
+ if (list.length == 0)
116
+ delete this._events[type];
117
+ } else if (this._events[type] === listener) {
118
+ delete this._events[type];
119
+ }
120
+
121
+ return this;
122
+ };
123
+
124
+ EventEmitter.prototype.removeAllListeners = function(type) {
125
+ // does not use listeners(), so no side effect of creating _events[type]
126
+ if (type && this._events && this._events[type]) this._events[type] = null;
127
+ return this;
128
+ };
129
+
130
+ EventEmitter.prototype.listeners = function(type) {
131
+ if (!this._events) this._events = {};
132
+ if (!this._events[type]) this._events[type] = [];
133
+ if (!isArray(this._events[type])) {
134
+ this._events[type] = [this._events[type]];
135
+ }
136
+ return this._events[type];
137
+ };
@@ -0,0 +1,266 @@
1
+ // ==========================================================================
2
+ // Project: Ivory
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license
5
+ // ==========================================================================
6
+
7
+ // borrows from node.js
8
+ var Buffer = require('./buffer').Buffer;
9
+
10
+ var util = require('./util');
11
+
12
+ var binding = require('./ruby/fs');
13
+ var constants = require('./ruby/constants');
14
+ var fs = exports;
15
+
16
+ for(var key in constants) fs[key] = constants[key];
17
+
18
+ fs.STDIN = binding.stdin;
19
+ fs.STDOUT = binding.stdout;
20
+
21
+ fs.Stats = binding.Stats;
22
+
23
+ fs.Stats.prototype._checkModeProperty = function(property) {
24
+ return ((this.mode & constants.S_IFMT) === property);
25
+ };
26
+
27
+ fs.Stats.prototype.isDirectory = function() {
28
+ return this._checkModeProperty(constants.S_IFDIR);
29
+ };
30
+
31
+ fs.Stats.prototype.isFile = function() {
32
+ return this._checkModeProperty(constants.S_IFREG);
33
+ };
34
+
35
+ fs.Stats.prototype.isBlockDevice = function() {
36
+ return this._checkModeProperty(constants.S_IFBLK);
37
+ };
38
+
39
+ fs.Stats.prototype.isCharacterDevice = function() {
40
+ return this._checkModeProperty(constants.S_IFCHR);
41
+ };
42
+
43
+ fs.Stats.prototype.isSymbolicLink = function() {
44
+ return this._checkModeProperty(constants.S_IFLNK);
45
+ };
46
+
47
+ fs.Stats.prototype.isFIFO = function() {
48
+ return this._checkModeProperty(constants.S_IFIFO);
49
+ };
50
+
51
+ fs.Stats.prototype.isSocket = function() {
52
+ return this._checkModeProperty(constants.S_IFSOCK);
53
+ };
54
+
55
+ fs.readFile = function(path, encoding_) {
56
+ var encoding = typeof(encoding_) === 'string' ? encoding_ : null;
57
+ var callback = arguments[arguments.length - 1];
58
+ if (typeof(callback) !== 'function') callback = null;
59
+ return binding.readFile(path, encoding, callback);
60
+ };
61
+
62
+
63
+ // Used by binding.open and friends
64
+ function stringToFlags(flag) {
65
+ // Only mess with strings
66
+ if (typeof flag !== 'string') {
67
+ return flag;
68
+ }
69
+ switch (flag) {
70
+ case 'r':
71
+ return constants.O_RDONLY;
72
+
73
+ case 'r+':
74
+ return constants.O_RDWR;
75
+
76
+ case 'w':
77
+ return constants.O_CREAT | constants.O_TRUNC | constants.O_WRONLY;
78
+
79
+ case 'w+':
80
+ return constants.O_CREAT | constants.O_TRUNC | constants.O_RDWR;
81
+
82
+ case 'a':
83
+ return constants.O_APPEND | constants.O_CREAT | constants.O_WRONLY;
84
+
85
+ case 'a+':
86
+ return constants.O_APPEND | constants.O_CREAT | constants.O_RDWR;
87
+
88
+ default:
89
+ throw new Error('Unknown file open flag: ' + flag);
90
+ }
91
+ }
92
+
93
+ function noop() {}
94
+
95
+ // Yes, the follow could be easily DRYed up but I provide the explicit
96
+ // list to make the arguments clear.
97
+
98
+ fs.close = function(fd, callback) {
99
+ binding.close(fd, callback);
100
+ };
101
+
102
+ fs.open = function(path, flags, mode_, callback) {
103
+ var mode = (typeof(mode_) === 'number' ? mode_ : 0666);
104
+ var callback_ = arguments[arguments.length - 1];
105
+ callback = (typeof(callback_) == 'function' ? callback_ : null);
106
+
107
+ return binding.open(path, stringToFlags(flags), mode, callback);
108
+ };
109
+
110
+ fs.read = function(fd, buffer, offset, length, position, callback) {
111
+ return binding.read(fd, buffer, offset, length, position, callback);
112
+ };
113
+
114
+ fs.write = function(fd, buffer, offset, length, position, callback) {
115
+ return binding.write(fd, buffer, offset, length, position, callback);
116
+ };
117
+
118
+ fs.rename = function(oldPath, newPath, callback) {
119
+ return binding.rename(oldPath, newPath, callback);
120
+ };
121
+
122
+ fs.truncate = function(fd, len, callback) {
123
+ return binding.truncate(fd, len, callback);
124
+ };
125
+
126
+ fs.rmdir = function(path, callback) {
127
+ return binding.rmdir(path, callback);
128
+ };
129
+
130
+ fs.fdatasync = function(fd, callback) {
131
+ return binding.fdatasync(fd, callback);
132
+ };
133
+
134
+ fs.fsync = function(fd, callback) {
135
+ return binding.fsync(fd, callback);
136
+ };
137
+
138
+ fs.mkdir = function(path, mode, callback) {
139
+ return binding.mkdir(path, mode, callback);
140
+ };
141
+
142
+ fs.mkdir_p = function(path, mode, callback) {
143
+ return binding.mkdir_p(path, mode, callback);
144
+ };
145
+
146
+ fs.sendfile = function(outFd, inFd, inOffset, length, callback) {
147
+ return binding.sendfile(outFd, inFd, inOffset, length, callback);
148
+ };
149
+
150
+ fs.readdir = function(path, callback) {
151
+ return binding.readdir(path, callback);
152
+ };
153
+
154
+ fs.readdir_p = function(path, callback) {
155
+ if (!fs.exists(path)) {
156
+ if (callback) callback(null, []);
157
+ else return [];
158
+ } else return fs.readdir(path, callback);
159
+ };
160
+
161
+ fs.fstat = function(fd, callback) {
162
+ return binding.fstat(fd, callback);
163
+ };
164
+
165
+ fs.lstat = function(path, callback) {
166
+ return binding.lstat(path, callback);
167
+ };
168
+
169
+ fs.stat = function(path, callback) {
170
+ return binding.stat(path, callback);
171
+ };
172
+
173
+ fs.readlink = function(path, callback) {
174
+ return binding.readlink(path, callback);
175
+ };
176
+
177
+ fs.symlink = function(destination, path, callback) {
178
+ return binding.symlink(destination, path, callback);
179
+ };
180
+
181
+ fs.link = function(srcpath, dstpath, callback) {
182
+ return binding.link(srcpath, dstpath, callback);
183
+ };
184
+
185
+ fs.unlink = function(path, callback) {
186
+ return binding.unlink(path, callback);
187
+ };
188
+
189
+ fs.chmod = function(path, mode, callback) {
190
+ return binding.chmod(path, mode, callback);
191
+ };
192
+
193
+ fs.chown = function(path, uid, gid, callback) {
194
+ return binding.chown(path, uid, gid, callback);
195
+ };
196
+
197
+ function writeAll(fd, buffer, offset, length, callback) {
198
+ // write(fd, buffer, offset, length, position, callback)
199
+ fs.write(fd, buffer, offset, length, offset, function(writeErr, written) {
200
+ if (writeErr) {
201
+ fs.close(fd, function() {
202
+ if (callback) callback(writeErr);
203
+ });
204
+ } else {
205
+ if (written === length) {
206
+ fs.close(fd, callback);
207
+ } else {
208
+ writeAll(fd, buffer, offset + written, length - written, callback);
209
+ }
210
+ }
211
+ });
212
+ }
213
+
214
+ fs.writeFile = function(path, data, encoding_, callback) {
215
+ var encoding = (typeof(encoding_) == 'string' ? encoding_ : 'utf8');
216
+ var callback_ = arguments[arguments.length - 1];
217
+ callback = (typeof(callback_) == 'function' ? callback_ : null);
218
+ binding.writeFile(path, data, encoding, callback);
219
+ };
220
+
221
+ // Stat Change Watchers
222
+
223
+ var statWatchers = {};
224
+
225
+ fs.watchFile = function(filename) {
226
+ var stat;
227
+ var options;
228
+ var listener;
229
+
230
+ if ('object' == typeof arguments[1]) {
231
+ options = arguments[1];
232
+ listener = arguments[2];
233
+ } else {
234
+ options = {};
235
+ listener = arguments[1];
236
+ }
237
+
238
+ if (options.persistent === undefined) options.persistent = true;
239
+ if (options.interval === undefined) options.interval = 0;
240
+
241
+ if (statWatchers[filename]) {
242
+ stat = statWatchers[filename];
243
+ } else {
244
+ statWatchers[filename] = new binding.StatWatcher();
245
+ stat = statWatchers[filename];
246
+ stat.start(filename, options.persistent, options.interval);
247
+ }
248
+ stat.addListener('change', listener);
249
+ return stat;
250
+ };
251
+
252
+ fs.unwatchFile = function(filename) {
253
+ var stat;
254
+ if (statWatchers[filename]) {
255
+ stat = statWatchers[filename];
256
+ stat.stop();
257
+ statWatchers[filename] = undefined;
258
+ }
259
+ };
260
+
261
+ fs.exists = function(path, callback) {
262
+ var ret = binding.exists(path);
263
+ if (callback) callback(false, ret);
264
+ return ret ;
265
+ };
266
+