spade-packager 0.1.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 (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,32 @@
1
+ // ==========================================================================
2
+ // Project: Web File
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+
7
+ var messages = [
8
+ null,
9
+ 'File Not Found',
10
+ 'Security Error',
11
+ 'Operation aborted',
12
+ 'File not readable',
13
+ 'Encoding Error'
14
+ ];
15
+
16
+ var FileError = function(code) {
17
+ this.code = code;
18
+ this.message = messages[code];
19
+ };
20
+
21
+ FileError.prototype = new Error();
22
+ FileError.prototype.constructor = FileError;
23
+ FileError.prototype.toString = function() { return this.message; };
24
+
25
+ FileError.NOT_FOUND_ERR = 1;
26
+ FileError.SECURITY_ERR = 2;
27
+ FileError.ABORT_ERR = 3;
28
+ FileError.NOT_READABLE_ERR = 4;
29
+ FileError.ENCODING_ERR = 5;
30
+
31
+ exports.FileError = FileError;
32
+ exports.FileException = FileError;
@@ -0,0 +1,10 @@
1
+ // ==========================================================================
2
+ // Project: Web Typed Array
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+
7
+ var nat = require('./ruby/file_reader');
8
+
9
+ exports.FileReader = nat.FileReader;
10
+ exports.FileReaderSync = nat.FileReaderSync;
@@ -0,0 +1,234 @@
1
+ // ==========================================================================
2
+ // Project: Web Typed Array
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+
7
+ /**
8
+ On platforms that support it, the FileSystem API provides a way for you
9
+ to access and navigate files on disk. FileSystem instances may be provided
10
+ by the system that limits the visible scope of files.
11
+
12
+ To get the default file system look for the global fileSystem object.
13
+ */
14
+
15
+ var nat = require('./ruby/file_system');
16
+ var FileSystem;
17
+
18
+ // ..........................................................
19
+ // STAT Object
20
+ //
21
+ var Stat = function(nstat) {
22
+ this._nstat = nstat;
23
+ };
24
+
25
+ Stat.prototype = {
26
+ constructor: Stat,
27
+
28
+ get size() { return this._nstat.size; },
29
+ get blockSize() { return this._nstat.blksize; },
30
+ get blocks() { return this._nstat.blocks; },
31
+ get mode() { return this._nstat.mode; },
32
+
33
+ get uid() { return this._nstat.uid; },
34
+ get gid() { return this._nstat.uid; },
35
+
36
+ get device() { return this._nstat.dev; },
37
+ get inode() { return this._nstat.ino; },
38
+
39
+ get mtime() { return this._nstat.mtime; },
40
+ get ctime() { return this._nstat.ctime; },
41
+ get atime() { return this._nstat.atime; },
42
+
43
+ get isDirectory() { return this._nstat['directory?']; },
44
+ get isFile() { return this._nstat['file?']; },
45
+ get isSymlink() { return this._nstat['symlink?']; },
46
+ get isReadable() { return this._nstat['readable?']; },
47
+ get isWritable() { return this._nstat['writable?']; },
48
+ get isExecutable() { return this._nstat['executable?']; },
49
+ get isSticky() { return this._nstat['sticky?']; }
50
+
51
+ };
52
+
53
+ // ..........................................................
54
+ // FileSystem
55
+ //
56
+
57
+ function readOnlyError() {
58
+ throw new Error("FileSystem is read only");
59
+ }
60
+
61
+ // We want this to be secure. hence the reason we do it this way.
62
+ FileSystem = function() {
63
+ throw "Invalid constructor";
64
+ };
65
+
66
+ function createFileSystem(root, cwd, readOnly) {
67
+
68
+ readOnly = !!readOnly;
69
+
70
+ // create one off instance
71
+ fs = function() {};
72
+ fs.prototype = FileSystem.prototype;
73
+ fs = new fs();
74
+
75
+ fs.SEPARATOR = nat.SEPARATOR;
76
+
77
+
78
+ // Takes an absolute path, removes the root prefix
79
+ function denorm(path) {
80
+ return root==='/' ? path : path.slice(root.length);
81
+ }
82
+
83
+ // make prefixed
84
+ function norm(path) {
85
+ if(path[0] === fs.SEPARATOR) {
86
+ return nat.expand_path(nat.join_path(root, path));
87
+ } else {
88
+ return nat.expand_path(path, cwd);
89
+ }
90
+ }
91
+
92
+ fs.__defineGetter__('cwd', function() { return denorm(cwd); });
93
+ fs.__defineSetter__('cwd', function(v) {
94
+ cwd = norm(v);
95
+ return denorm(cwd);
96
+ });
97
+
98
+ // fs.cwd = function(path) {
99
+ // if (path !== undefined) cwd = norm(path);
100
+ // return denorm(cwd);
101
+ // };
102
+
103
+ fs.stat = function(path) {
104
+ return new Stat(nat.stat(norm(path)));
105
+ };
106
+
107
+ fs.open = function(path, opts) {
108
+ if (!opts) opts = {};
109
+ if (!('readable' in opts)) opts.readable = true;
110
+ if (!('writable' in opts) || readOnly) opts.writable = !readOnly;
111
+ if (!('executable' in opts)) opts.executable = false;
112
+ if (!('append' in opts)) opts.append = false;
113
+ if (!('modify' in opts) || opts.append) opts.modify = false;
114
+ return nat.open(norm(path), opts);
115
+ };
116
+
117
+ fs.exists = function(path) {
118
+ return nat.exists(norm(path));
119
+ };
120
+
121
+ fs.chroot = function(path, readOnly) {
122
+ path = path===undefined ? cwd : norm(path);
123
+ return createFileSystem(path, path, readOnly);
124
+ };
125
+
126
+
127
+ // ..........................................................
128
+ // PATH OPS
129
+ //
130
+
131
+ fs.join = function() {
132
+ return nat.join_path(Array.prototype.slice.call(arguments));
133
+ };
134
+
135
+ fs.split = function(path) {
136
+ return nat.split_path(path);
137
+ };
138
+
139
+ fs.dirname = function(path) {
140
+ return nat.dirname(path);
141
+ };
142
+
143
+ fs.basename = function(path, ext) {
144
+ return nat.basename(path, ext);
145
+ };
146
+
147
+ fs.ext = function(path) {
148
+ return nat.extname(path);
149
+ };
150
+
151
+ fs.expand = function(path, base) {
152
+ return nat.expand_path(path, base);
153
+ };
154
+
155
+ fs.glob = function(path) {
156
+ return nat.glob(norm(path)).map(function(x) { return denorm(x); });
157
+ };
158
+
159
+ // ..........................................................
160
+ // WRITABLE OPS
161
+ //
162
+
163
+ fs.mkdir = function(path, mode) {
164
+ if (readOnly) readOnlyError();
165
+ nat.mkdir(norm(path), mode);
166
+ return this;
167
+ };
168
+
169
+ fs.mkdirs = function(path, mode) {
170
+ if (readOnly) readOnlyError();
171
+ nat.mkdir_p(norm(path), mode);
172
+ return this;
173
+ };
174
+ fs.mkdir_p = fs.mkdirs;
175
+
176
+ fs.move = function(src, dst) {
177
+ if (readOnly) readOnlyError();
178
+ if (src && src.map) src = src.map(function(s) { return norm(s); });
179
+ else src = norm(src);
180
+
181
+ nat.mv(src, norm(dst));
182
+ return this;
183
+ };
184
+ fs.mv = fs.move;
185
+
186
+ fs.copy = function(src, dst, opts) {
187
+ if (readOnly) readOnlyError();
188
+
189
+ if (src && src.map) src = src.map(function(s) { return norm(s); });
190
+ else src = norm(src);
191
+
192
+ if (!opts) opts = {};
193
+ if (opts.recursive) nat.cp_r(src, norm(dst));
194
+ else nat.cp(src, norm(dst));
195
+
196
+ return this;
197
+ };
198
+ fs.cp = fs.copy;
199
+
200
+ fs.remove = function(src, opts) {
201
+ if (readOnly) readOnlyError();
202
+
203
+ if (src && src.map) src = src.map(function(s) { return norm(s); });
204
+ else src = norm(src);
205
+
206
+ if (!opts) opts = {};
207
+ if (opts.force) nat.rm_rf(src);
208
+ else if (opts.recursive) nat.rm_r(src);
209
+ else nat.rm(src)
210
+
211
+ return this;
212
+ };
213
+ fs.rm = fs.remove;
214
+
215
+ fs.link = function(src, dst, opts) {
216
+ if (readOnly) readOnlyError();
217
+
218
+ if (src && src.map) src = src.map(function(s) { return norm(s); });
219
+ else src = norm(src);
220
+
221
+ if (!opts) opts = {};
222
+ if (opts.symbolic) nat.ln_s(src, norm(dst));
223
+ else nat.ln(src, norm(dst));
224
+
225
+ return this;
226
+ };
227
+ fs.ln = fs.link;
228
+
229
+ return fs;
230
+
231
+ }
232
+
233
+ exports.FileSystem = FileSystem;
234
+ exports.fileSystem = createFileSystem('/', nat.cwd, false);
@@ -0,0 +1,10 @@
1
+ // ==========================================================================
2
+ // Project: File API
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+
7
+ var nat = require('./ruby/file_writer');
8
+
9
+ exports.FileWriter = nat.FileWriter;
10
+ exports.FileWriterSync = nat.FileWriterSync;
@@ -0,0 +1,9 @@
1
+ // ==========================================================================
2
+ // Project: Web Typed Array
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+
7
+ var nat = require('./ruby/file');
8
+ exports.Blob = nat.Blob;
9
+ exports.File = nat.File;
@@ -0,0 +1,34 @@
1
+ // ==========================================================================
2
+ // Project: Web Typed Array
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+ /*globals ENV File Blob FileReader FileReaderSync FileSystem fileSystem FileWriter FileWriterSync */
7
+
8
+ if (!require('./platform').isSupported) {
9
+ throw new Error('File API is not supported on this platform');
10
+ }
11
+
12
+ var exp;
13
+
14
+ // browser either supports it or doesn't.
15
+ if (ENV.SPADE_PLATFORM.ENGINE !== 'browser') {
16
+ exp = require('./file');
17
+ Blob = exp.Blob;
18
+ File = exp.File;
19
+
20
+ exp = require('./file-reader');
21
+ FileReader = exp.FileReader;
22
+ FileReaderSync = exp.FileReaderSync;
23
+
24
+ exp = require('./file-writer');
25
+ FileWriter = exp.FileWriter;
26
+ FileWriterSync = exp.FileWriterSync;
27
+
28
+ exp = require('./file-system');
29
+ FileSystem = exp.FileSystem;
30
+ fileSystem = exp.fileSystem;
31
+ }
32
+
33
+
34
+
@@ -0,0 +1,25 @@
1
+ // ==========================================================================
2
+ // Project: Web Typed Array
3
+ // Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ // License: Licened under MIT license (see __preamble__.js)
5
+ // ==========================================================================
6
+ /*globals ENV File */
7
+
8
+ var supported = false, fs = false;
9
+
10
+ switch(ENV.SPADE_PLATFORM.ENGINE) {
11
+ case 'browser':
12
+ supported = 'undefined' !== typeof File;
13
+ break;
14
+
15
+ case 'spade':
16
+ supported = true;
17
+ fs = true;
18
+ break;
19
+ }
20
+
21
+ exports.isSupported = supported;
22
+ exports.hasFileSystem = fs; // if true then you can nav filesystem
23
+
24
+
25
+
@@ -0,0 +1,252 @@
1
+ # ==========================================================================
2
+ # Project: File
3
+ # Copyright: ©2010 Strobe Inc. All rights reserved.
4
+ # License: Licened under MIT license (see LICENSE)
5
+ # ==========================================================================
6
+
7
+ require 'fileutils'
8
+
9
+ module WebFile
10
+ class FileExports < Spade::Runtime::Exports
11
+
12
+ class Blob
13
+
14
+ def size
15
+ 0
16
+ end
17
+
18
+ attr_reader :type
19
+
20
+ def readable
21
+ false
22
+ end
23
+
24
+ def writable
25
+ false
26
+ end
27
+
28
+ def executable
29
+ false
30
+ end
31
+
32
+ # If true, then writing to the file will not clear the contents.
33
+ def appends
34
+ false
35
+ end
36
+
37
+ def initialize
38
+ throw self.class.context['Error'].new("Illegal constructor")
39
+ end
40
+
41
+ def slice(offset, length, contentType=nil)
42
+ offset = size if offset > size
43
+ length = self.size-offset if offset+length > size
44
+ offset += @offset unless @offset.nil?
45
+ self.dup.setup_slice(offset, length, contentType || @type)
46
+ end
47
+
48
+ protected
49
+
50
+ def dup
51
+ self.class.new
52
+ end
53
+
54
+ def setup_slice(offset, length, contentType=nil)
55
+ @offset = offset
56
+ @length = length
57
+ @type = contentType unless contentType.nil?
58
+ self
59
+ end
60
+
61
+ end
62
+
63
+ class File < Blob
64
+
65
+ attr_reader :name, :lastModifiedDate
66
+
67
+ end
68
+
69
+ end
70
+
71
+ class RealFile < FileExports::File
72
+
73
+ def initialize(path, ctx, perms=nil, offset=nil, length=nil, type=nil)
74
+ @path = path
75
+ @ctx = ctx
76
+ @offset = offset.nil? ? 0 : offset
77
+ @length = length
78
+ @type = type
79
+
80
+ if perms.instance_of? V8::Object
81
+ @perms = {}
82
+ perms.each { |key, value| @perms[key.to_sym] = value }
83
+ else
84
+ @perms = perms || {}
85
+ end
86
+
87
+ @perms_checked = false
88
+ end
89
+
90
+ #############################################'
91
+ ## FILE PROPERTIES
92
+ ##
93
+
94
+ def name
95
+ @name ||= ::File.basename(@path)
96
+ end
97
+
98
+ def lastModifiedDate
99
+ @ctx['Date'].new(::File.mtime(@path))
100
+ end
101
+
102
+ def size
103
+ total_size = ::File.size(@path) - @offset
104
+ @length.nil? || total_size<@length ? total_size : @length
105
+ end
106
+
107
+ def type
108
+ require 'rack/mime'
109
+ @type ||= Rack::Mime.mime_type(::File.extname(@path))
110
+ end
111
+
112
+
113
+ #############################################'
114
+ ## PERMISSIONS
115
+ ##
116
+
117
+ def readable
118
+ check_perms if !@perms_checked
119
+ @perms[:readable] && exists
120
+ end
121
+
122
+ def writable
123
+ check_perms if !@perms_checked
124
+ @perms[:writable]
125
+ end
126
+
127
+ def appends
128
+ check_perms if !@perms_checked
129
+ @perms[:append]
130
+ end
131
+
132
+ def modifies
133
+ check_perms if !@perms_checked
134
+ @perms[:modify]
135
+ end
136
+
137
+ def executable
138
+ check_perms if !@perms_checked
139
+ @perms[:executable]
140
+ end
141
+
142
+ def exists
143
+ File.exists? @path
144
+ end
145
+
146
+
147
+ protected
148
+
149
+ def dup
150
+ self.class.new(@path, @ctx, @perms, @offset, @length, @type)
151
+ end
152
+
153
+ # restrict file permissions to actual permissions on disk\
154
+ def check_perms
155
+ @perms_checked = true
156
+ @perms = {} if @perms.nil?
157
+
158
+ if File.directory?(@path)
159
+ @perms[:readable] = @perms[:writable] = @perms[:executable] = false
160
+ else
161
+
162
+ path = @path
163
+ path = File.dirname(path) while(path!='/' && !File.exists?(path))
164
+
165
+ st = File.stat path
166
+ @perms[:readable] &&= st.readable?
167
+ @perms[:writable] &&= st.writable?
168
+ @perms[:executable] &&= (path == @path) ? st.executable? : false
169
+ end
170
+
171
+ @perms[:append] &&= @perms[:writable]
172
+ @perms[:modify] &&= @perms[:writable] && !@perms[:append]
173
+
174
+ # can only append if offset puts us at the start. i.e. slicing
175
+ # disables append
176
+ if @perms[:append] && @offset>0
177
+ @perms[:append] = false
178
+ @perms[:modify] = true
179
+ end
180
+
181
+ end
182
+
183
+ def read_sync(kind, encoding=nil)
184
+
185
+ throw "File #{name} is not readable" unless readable
186
+
187
+ case kind
188
+ when :buffer
189
+ @ctx.require 'web-typed-array'
190
+
191
+ buf = WebTypedArray::ArrayBufferExports::ArrayBuffer.new(size)
192
+ str = IO.read(@path, size, @offset||0)
193
+ buf.instance_eval do
194
+ @buf = str
195
+ end
196
+
197
+ buf
198
+
199
+ when :text
200
+ if encoding && encoding != 'utf8' && encoding != 'ascii'
201
+ throw "only utf8 and ascii encoding currently supported"
202
+ end
203
+ IO.read(@path, size, @offset||0)
204
+ # TODO: handle encoding
205
+
206
+ else
207
+ throw "do not (yet) know how to read #{kind}"
208
+ end
209
+ end
210
+
211
+ def write_sync(kind, data, encoding=nil)
212
+
213
+ throw "File #{name} is not writable" unless writable
214
+
215
+ case kind
216
+
217
+ when :buffer
218
+ str = data.buf
219
+ FileUtils.mkdir_p File.dirname(@path)
220
+ File.open(@path, appends || modifies ? 'a' : 'w') do |fd|
221
+
222
+ # write in filler if needed
223
+ fd.seek @offset||0 unless appends
224
+
225
+ # constrain only if this file has been sliced.
226
+ str = str[0...size] if !@length.nil? && size < str.size
227
+ fd.write(str)
228
+ end
229
+
230
+ when :text
231
+ FileUtils.mkdir_p File.dirname(@path)
232
+ File.open(@path, appends || modifies ? 'a' : 'w') do |fd|
233
+ fd.seek @offset unless appends
234
+
235
+ # constrain only if this file has been sliced.
236
+ data = data[0...size] if !@length.nil? && size < data.size
237
+ fd.write(data)
238
+ end
239
+
240
+
241
+
242
+ else
243
+ throw "do not (yet) know how to write #{kind}"
244
+ end
245
+ end
246
+
247
+
248
+ end
249
+
250
+ end
251
+
252
+ Spade.exports WebFile::FileExports