spade 0.0.8.1 → 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 (346) hide show
  1. data/.gitignore +0 -1
  2. data/.gitmodules +4 -4
  3. data/README.md +4 -0
  4. data/bin/spade +1 -1
  5. data/lib/spade.rb +0 -51
  6. data/lib/spade/cli.rb +10 -4
  7. data/lib/spade/version.rb +1 -1
  8. data/spade.gemspec +4 -21
  9. metadata +13 -482
  10. data/Gemfile +0 -3
  11. data/Gemfile.lock +0 -40
  12. data/lib/index.js +0 -14
  13. data/lib/node/loader.js +0 -146
  14. data/lib/node/sandbox.js +0 -44
  15. data/lib/spade.js +0 -1130
  16. data/lib/spade/bundle.rb +0 -171
  17. data/lib/spade/cli/base.rb +0 -354
  18. data/lib/spade/cli/owner.rb +0 -45
  19. data/lib/spade/cli/project_generator.rb +0 -58
  20. data/lib/spade/compiler.rb +0 -34
  21. data/lib/spade/console.rb +0 -39
  22. data/lib/spade/context.rb +0 -116
  23. data/lib/spade/credentials.rb +0 -36
  24. data/lib/spade/dependency_installer.rb +0 -103
  25. data/lib/spade/environment.rb +0 -35
  26. data/lib/spade/exports.rb +0 -71
  27. data/lib/spade/installer.rb +0 -40
  28. data/lib/spade/loader.rb +0 -238
  29. data/lib/spade/local.rb +0 -46
  30. data/lib/spade/package.rb +0 -157
  31. data/lib/spade/reactor.rb +0 -159
  32. data/lib/spade/remote.rb +0 -99
  33. data/lib/spade/repository.rb +0 -18
  34. data/lib/spade/server.rb +0 -66
  35. data/lib/spade/shell.rb +0 -36
  36. data/lib/spade/templates/project/LICENSE +0 -19
  37. data/lib/spade/templates/project/README.md +0 -21
  38. data/lib/spade/templates/project/lib/main.js +0 -9
  39. data/lib/spade/templates/project/project.json +0 -31
  40. data/lib/spade/templates/project/tests/main-test.js +0 -8
  41. data/package.json +0 -27
  42. data/packages/coffee-script/.gitignore +0 -8
  43. data/packages/coffee-script/.npmignore +0 -11
  44. data/packages/coffee-script/Cakefile +0 -229
  45. data/packages/coffee-script/LICENSE +0 -22
  46. data/packages/coffee-script/README +0 -47
  47. data/packages/coffee-script/Rakefile +0 -78
  48. data/packages/coffee-script/bin/cake +0 -7
  49. data/packages/coffee-script/bin/coffee +0 -7
  50. data/packages/coffee-script/documentation/coffee/aliases.coffee +0 -11
  51. data/packages/coffee-script/documentation/coffee/array_comprehensions.coffee +0 -2
  52. data/packages/coffee-script/documentation/coffee/block_comment.coffee +0 -6
  53. data/packages/coffee-script/documentation/coffee/cake_tasks.coffee +0 -9
  54. data/packages/coffee-script/documentation/coffee/classes.coffee +0 -25
  55. data/packages/coffee-script/documentation/coffee/comparisons.coffee +0 -5
  56. data/packages/coffee-script/documentation/coffee/conditionals.coffee +0 -13
  57. data/packages/coffee-script/documentation/coffee/default_args.coffee +0 -8
  58. data/packages/coffee-script/documentation/coffee/do.coffee +0 -4
  59. data/packages/coffee-script/documentation/coffee/embedded.coffee +0 -5
  60. data/packages/coffee-script/documentation/coffee/existence.coffee +0 -10
  61. data/packages/coffee-script/documentation/coffee/expressions.coffee +0 -9
  62. data/packages/coffee-script/documentation/coffee/expressions_assignment.coffee +0 -3
  63. data/packages/coffee-script/documentation/coffee/expressions_comprehension.coffee +0 -3
  64. data/packages/coffee-script/documentation/coffee/expressions_try.coffee +0 -7
  65. data/packages/coffee-script/documentation/coffee/fat_arrow.coffee +0 -6
  66. data/packages/coffee-script/documentation/coffee/functions.coffee +0 -2
  67. data/packages/coffee-script/documentation/coffee/heredocs.coffee +0 -7
  68. data/packages/coffee-script/documentation/coffee/heregexes.coffee +0 -11
  69. data/packages/coffee-script/documentation/coffee/interpolation.coffee +0 -6
  70. data/packages/coffee-script/documentation/coffee/multiple_return_values.coffee +0 -7
  71. data/packages/coffee-script/documentation/coffee/object_comprehensions.coffee +0 -4
  72. data/packages/coffee-script/documentation/coffee/object_extraction.coffee +0 -13
  73. data/packages/coffee-script/documentation/coffee/objects_and_arrays.coffee +0 -19
  74. data/packages/coffee-script/documentation/coffee/objects_reserved.coffee +0 -5
  75. data/packages/coffee-script/documentation/coffee/overview.coffee +0 -28
  76. data/packages/coffee-script/documentation/coffee/parallel_assignment.coffee +0 -6
  77. data/packages/coffee-script/documentation/coffee/patterns_and_splats.coffee +0 -7
  78. data/packages/coffee-script/documentation/coffee/prototypes.coffee +0 -3
  79. data/packages/coffee-script/documentation/coffee/range_comprehensions.coffee +0 -2
  80. data/packages/coffee-script/documentation/coffee/scope.coffee +0 -5
  81. data/packages/coffee-script/documentation/coffee/slices.coffee +0 -7
  82. data/packages/coffee-script/documentation/coffee/soaks.coffee +0 -1
  83. data/packages/coffee-script/documentation/coffee/splats.coffee +0 -27
  84. data/packages/coffee-script/documentation/coffee/splices.coffee +0 -5
  85. data/packages/coffee-script/documentation/coffee/strings.coffee +0 -8
  86. data/packages/coffee-script/documentation/coffee/switch.coffee +0 -10
  87. data/packages/coffee-script/documentation/coffee/try.coffee +0 -8
  88. data/packages/coffee-script/documentation/coffee/while.coffee +0 -10
  89. data/packages/coffee-script/documentation/css/docs.css +0 -374
  90. data/packages/coffee-script/documentation/css/idle.css +0 -64
  91. data/packages/coffee-script/documentation/docs/browser.html +0 -25
  92. data/packages/coffee-script/documentation/docs/cake.html +0 -43
  93. data/packages/coffee-script/documentation/docs/coffee-script.html +0 -51
  94. data/packages/coffee-script/documentation/docs/command.html +0 -161
  95. data/packages/coffee-script/documentation/docs/docco.css +0 -186
  96. data/packages/coffee-script/documentation/docs/grammar.html +0 -399
  97. data/packages/coffee-script/documentation/docs/helpers.html +0 -31
  98. data/packages/coffee-script/documentation/docs/index.html +0 -3
  99. data/packages/coffee-script/documentation/docs/lexer.html +0 -490
  100. data/packages/coffee-script/documentation/docs/nodes.html +0 -1338
  101. data/packages/coffee-script/documentation/docs/optparse.html +0 -78
  102. data/packages/coffee-script/documentation/docs/repl.html +0 -24
  103. data/packages/coffee-script/documentation/docs/rewriter.html +0 -251
  104. data/packages/coffee-script/documentation/docs/scope.html +0 -54
  105. data/packages/coffee-script/documentation/docs/underscore.html +0 -295
  106. data/packages/coffee-script/documentation/images/background.png +0 -0
  107. data/packages/coffee-script/documentation/images/banding.png +0 -0
  108. data/packages/coffee-script/documentation/images/button_bg.png +0 -0
  109. data/packages/coffee-script/documentation/images/button_bg_dark.gif +0 -0
  110. data/packages/coffee-script/documentation/images/button_bg_green.gif +0 -0
  111. data/packages/coffee-script/documentation/images/favicon.ico +0 -0
  112. data/packages/coffee-script/documentation/images/logo.png +0 -0
  113. data/packages/coffee-script/documentation/images/screenshadow.png +0 -0
  114. data/packages/coffee-script/documentation/index.html.erb +0 -1607
  115. data/packages/coffee-script/documentation/js/aliases.js +0 -17
  116. data/packages/coffee-script/documentation/js/array_comprehensions.js +0 -6
  117. data/packages/coffee-script/documentation/js/block_comment.js +0 -4
  118. data/packages/coffee-script/documentation/js/cake_tasks.js +0 -10
  119. data/packages/coffee-script/documentation/js/classes.js +0 -44
  120. data/packages/coffee-script/documentation/js/comparisons.js +0 -3
  121. data/packages/coffee-script/documentation/js/conditionals.js +0 -12
  122. data/packages/coffee-script/documentation/js/default_args.js +0 -7
  123. data/packages/coffee-script/documentation/js/do.js +0 -10
  124. data/packages/coffee-script/documentation/js/embedded.js +0 -4
  125. data/packages/coffee-script/documentation/js/existence.js +0 -6
  126. data/packages/coffee-script/documentation/js/expressions.js +0 -15
  127. data/packages/coffee-script/documentation/js/expressions_assignment.js +0 -2
  128. data/packages/coffee-script/documentation/js/expressions_comprehension.js +0 -9
  129. data/packages/coffee-script/documentation/js/expressions_try.js +0 -7
  130. data/packages/coffee-script/documentation/js/fat_arrow.js +0 -9
  131. data/packages/coffee-script/documentation/js/functions.js +0 -7
  132. data/packages/coffee-script/documentation/js/heredocs.js +0 -2
  133. data/packages/coffee-script/documentation/js/heregexes.js +0 -2
  134. data/packages/coffee-script/documentation/js/interpolation.js +0 -4
  135. data/packages/coffee-script/documentation/js/multiple_return_values.js +0 -5
  136. data/packages/coffee-script/documentation/js/object_comprehensions.js +0 -15
  137. data/packages/coffee-script/documentation/js/object_extraction.js +0 -10
  138. data/packages/coffee-script/documentation/js/objects_and_arrays.js +0 -17
  139. data/packages/coffee-script/documentation/js/objects_reserved.js +0 -4
  140. data/packages/coffee-script/documentation/js/overview.js +0 -35
  141. data/packages/coffee-script/documentation/js/parallel_assignment.js +0 -4
  142. data/packages/coffee-script/documentation/js/patterns_and_splats.js +0 -4
  143. data/packages/coffee-script/documentation/js/prototypes.js +0 -3
  144. data/packages/coffee-script/documentation/js/range_comprehensions.js +0 -9
  145. data/packages/coffee-script/documentation/js/scope.js +0 -8
  146. data/packages/coffee-script/documentation/js/slices.js +0 -4
  147. data/packages/coffee-script/documentation/js/soaks.js +0 -2
  148. data/packages/coffee-script/documentation/js/splats.js +0 -15
  149. data/packages/coffee-script/documentation/js/splices.js +0 -3
  150. data/packages/coffee-script/documentation/js/strings.js +0 -2
  151. data/packages/coffee-script/documentation/js/switch.js +0 -23
  152. data/packages/coffee-script/documentation/js/try.js +0 -8
  153. data/packages/coffee-script/documentation/js/while.js +0 -18
  154. data/packages/coffee-script/documentation/vendor/jquery-1.4.2.js +0 -6240
  155. data/packages/coffee-script/examples/beautiful_code/binary_search.coffee +0 -16
  156. data/packages/coffee-script/examples/beautiful_code/quicksort_runtime.coffee +0 -13
  157. data/packages/coffee-script/examples/beautiful_code/regular_expression_matcher.coffee +0 -34
  158. data/packages/coffee-script/examples/blocks.coffee +0 -54
  159. data/packages/coffee-script/examples/code.coffee +0 -167
  160. data/packages/coffee-script/examples/computer_science/README +0 -4
  161. data/packages/coffee-script/examples/computer_science/binary_search.coffee +0 -25
  162. data/packages/coffee-script/examples/computer_science/bubble_sort.coffee +0 -11
  163. data/packages/coffee-script/examples/computer_science/linked_list.coffee +0 -108
  164. data/packages/coffee-script/examples/computer_science/luhn_algorithm.coffee +0 -36
  165. data/packages/coffee-script/examples/computer_science/merge_sort.coffee +0 -19
  166. data/packages/coffee-script/examples/computer_science/selection_sort.coffee +0 -23
  167. data/packages/coffee-script/examples/poignant.coffee +0 -181
  168. data/packages/coffee-script/examples/potion.coffee +0 -206
  169. data/packages/coffee-script/examples/underscore.coffee +0 -682
  170. data/packages/coffee-script/examples/web_server.coffee +0 -12
  171. data/packages/coffee-script/extras/EXTRAS +0 -7
  172. data/packages/coffee-script/extras/coffee-script.js +0 -8
  173. data/packages/coffee-script/extras/jsl.conf +0 -44
  174. data/packages/coffee-script/index.html +0 -2515
  175. data/packages/coffee-script/lib/browser.js +0 -52
  176. data/packages/coffee-script/lib/cake.js +0 -76
  177. data/packages/coffee-script/lib/coffee-script.js +0 -82
  178. data/packages/coffee-script/lib/command.js +0 -263
  179. data/packages/coffee-script/lib/grammar.js +0 -581
  180. data/packages/coffee-script/lib/helpers.js +0 -66
  181. data/packages/coffee-script/lib/index.js +0 -8
  182. data/packages/coffee-script/lib/lexer.js +0 -633
  183. data/packages/coffee-script/lib/nodes.js +0 -2165
  184. data/packages/coffee-script/lib/optparse.js +0 -111
  185. data/packages/coffee-script/lib/parser.js +0 -649
  186. data/packages/coffee-script/lib/repl.js +0 -42
  187. data/packages/coffee-script/lib/rewriter.js +0 -353
  188. data/packages/coffee-script/lib/scope.js +0 -120
  189. data/packages/coffee-script/lib/spade-format.js +0 -45
  190. data/packages/coffee-script/package.json +0 -26
  191. data/packages/coffee-script/src/browser.coffee +0 -43
  192. data/packages/coffee-script/src/cake.coffee +0 -69
  193. data/packages/coffee-script/src/coffee-script.coffee +0 -92
  194. data/packages/coffee-script/src/command.coffee +0 -214
  195. data/packages/coffee-script/src/grammar.coffee +0 -590
  196. data/packages/coffee-script/src/helpers.coffee +0 -56
  197. data/packages/coffee-script/src/index.coffee +0 -2
  198. data/packages/coffee-script/src/lexer.coffee +0 -653
  199. data/packages/coffee-script/src/nodes.coffee +0 -1754
  200. data/packages/coffee-script/src/optparse.coffee +0 -99
  201. data/packages/coffee-script/src/repl.coffee +0 -42
  202. data/packages/coffee-script/src/rewriter.coffee +0 -326
  203. data/packages/coffee-script/src/scope.coffee +0 -94
  204. data/packages/coffee-script/test/arguments.coffee +0 -127
  205. data/packages/coffee-script/test/assignment.coffee +0 -98
  206. data/packages/coffee-script/test/break.coffee +0 -18
  207. data/packages/coffee-script/test/comments.coffee +0 -201
  208. data/packages/coffee-script/test/conditionals.coffee +0 -181
  209. data/packages/coffee-script/test/exception_handling.coffee +0 -90
  210. data/packages/coffee-script/test/helpers.coffee +0 -96
  211. data/packages/coffee-script/test/importing.coffee +0 -18
  212. data/packages/coffee-script/test/operators.coffee +0 -225
  213. data/packages/coffee-script/test/ranges_slices_and_splices.coffee +0 -186
  214. data/packages/coffee-script/test/regular_expressions.coffee +0 -56
  215. data/packages/coffee-script/test/test.html +0 -123
  216. data/packages/coffee-script/test/test_chaining.coffee +0 -77
  217. data/packages/coffee-script/test/test_classes.coffee +0 -372
  218. data/packages/coffee-script/test/test_compilation.coffee +0 -26
  219. data/packages/coffee-script/test/test_comprehensions.coffee +0 -318
  220. data/packages/coffee-script/test/test_existence.coffee +0 -165
  221. data/packages/coffee-script/test/test_functions.coffee +0 -379
  222. data/packages/coffee-script/test/test_heredocs.coffee +0 -111
  223. data/packages/coffee-script/test/test_literals.coffee +0 -270
  224. data/packages/coffee-script/test/test_option_parser.coffee +0 -27
  225. data/packages/coffee-script/test/test_pattern_matching.coffee +0 -162
  226. data/packages/coffee-script/test/test_returns.coffee +0 -63
  227. data/packages/coffee-script/test/test_splats.coffee +0 -102
  228. data/packages/coffee-script/test/test_strings.coffee +0 -118
  229. data/packages/coffee-script/test/test_switch.coffee +0 -103
  230. data/packages/coffee-script/test/test_while.coffee +0 -71
  231. data/packages/ivory/LICENSE.txt +0 -1
  232. data/packages/ivory/README.md +0 -19
  233. data/packages/ivory/lib/buffer.js +0 -111
  234. data/packages/ivory/lib/events.js +0 -137
  235. data/packages/ivory/lib/fs.js +0 -266
  236. data/packages/ivory/lib/main.js +0 -13
  237. data/packages/ivory/lib/path.js +0 -158
  238. data/packages/ivory/lib/ruby/buffer.rb +0 -145
  239. data/packages/ivory/lib/ruby/constants.rb +0 -585
  240. data/packages/ivory/lib/ruby/events.rb +0 -32
  241. data/packages/ivory/lib/ruby/fs.rb +0 -245
  242. data/packages/ivory/lib/ruby/process.rb +0 -28
  243. data/packages/ivory/lib/stream.js +0 -115
  244. data/packages/ivory/lib/util.js +0 -414
  245. data/packages/ivory/package.json +0 -11
  246. data/packages/jquery/main.js +0 -7179
  247. data/packages/jquery/package.json +0 -10
  248. data/packages/json/lib/main.js +0 -14
  249. data/packages/json/package.json +0 -8
  250. data/packages/lproj/README.md +0 -77
  251. data/packages/lproj/examples/demo-app/en.lproj/localized.strings +0 -2
  252. data/packages/lproj/examples/demo-app/fr.lproj/localized.strings +0 -3
  253. data/packages/lproj/examples/demo-app/index.html +0 -8
  254. data/packages/lproj/examples/demo-app/lib/main.js +0 -7
  255. data/packages/lproj/examples/demo-app/package.json +0 -9
  256. data/packages/lproj/lib/main.js +0 -78
  257. data/packages/lproj/lib/strings-format.js +0 -6
  258. data/packages/lproj/package.json +0 -9
  259. data/packages/optparse/README.md +0 -161
  260. data/packages/optparse/TODO +0 -1
  261. data/packages/optparse/examples/browser-test.html +0 -75
  262. data/packages/optparse/examples/nodejs-test.js +0 -90
  263. data/packages/optparse/lib/optparse.js +0 -309
  264. data/packages/optparse/package.json +0 -13
  265. data/packages/optparse/seed.yml +0 -5
  266. data/packages/text/lib/main.js +0 -8
  267. data/packages/text/package.json +0 -9
  268. data/packages/web-file/README.md +0 -7
  269. data/packages/web-file/lib/errors.js +0 -32
  270. data/packages/web-file/lib/file-reader.js +0 -10
  271. data/packages/web-file/lib/file-system.js +0 -234
  272. data/packages/web-file/lib/file-writer.js +0 -10
  273. data/packages/web-file/lib/file.js +0 -9
  274. data/packages/web-file/lib/main.js +0 -34
  275. data/packages/web-file/lib/platform.js +0 -25
  276. data/packages/web-file/lib/ruby/file.rb +0 -252
  277. data/packages/web-file/lib/ruby/file_reader.rb +0 -69
  278. data/packages/web-file/lib/ruby/file_system.rb +0 -134
  279. data/packages/web-file/lib/ruby/file_writer.rb +0 -78
  280. data/packages/web-file/package.json +0 -12
  281. data/packages/web-typed-array/README.md +0 -7
  282. data/packages/web-typed-array/lib/array-buffer-view.js +0 -9
  283. data/packages/web-typed-array/lib/array-buffer.js +0 -7
  284. data/packages/web-typed-array/lib/main.js +0 -33
  285. data/packages/web-typed-array/lib/platform.js +0 -20
  286. data/packages/web-typed-array/lib/ruby/array_buffer.rb +0 -31
  287. data/packages/web-typed-array/lib/ruby/array_buffer_view.rb +0 -130
  288. data/packages/web-typed-array/lib/ruby/typed_array.rb +0 -133
  289. data/packages/web-typed-array/lib/typed-array.js +0 -26
  290. data/packages/web-typed-array/package.json +0 -9
  291. data/spec/cli/build_spec.rb +0 -59
  292. data/spec/cli/install_spec.rb +0 -120
  293. data/spec/cli/installed_spec.rb +0 -55
  294. data/spec/cli/list_spec.rb +0 -75
  295. data/spec/cli/login_spec.rb +0 -76
  296. data/spec/cli/new_spec.rb +0 -5
  297. data/spec/cli/owner_spec.rb +0 -115
  298. data/spec/cli/push_spec.rb +0 -74
  299. data/spec/cli/uninstall_spec.rb +0 -58
  300. data/spec/cli/unpack_spec.rb +0 -73
  301. data/spec/cli/unyank_spec.rb +0 -74
  302. data/spec/cli/update_spec.rb +0 -8
  303. data/spec/cli/yank_spec.rb +0 -74
  304. data/spec/credentials_spec.rb +0 -24
  305. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  306. data/spec/fixtures/core-test-0.4.3.spd +0 -0
  307. data/spec/fixtures/core-test/bin/cot +0 -3
  308. data/spec/fixtures/core-test/lib/main.js +0 -1
  309. data/spec/fixtures/core-test/resources/runner.css +0 -0
  310. data/spec/fixtures/core-test/tests/test.js +0 -1
  311. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  312. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  313. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  314. data/spec/fixtures/package.json +0 -30
  315. data/spec/gauntlet_spec.rb +0 -27
  316. data/spec/javascript/async-test.js +0 -123
  317. data/spec/javascript/compiler/javascript.js +0 -13
  318. data/spec/javascript/compiler/ruby.js +0 -14
  319. data/spec/javascript/loader-test.js +0 -64
  320. data/spec/javascript/normalize-test.js +0 -73
  321. data/spec/javascript/packages-test.js +0 -44
  322. data/spec/javascript/relative-require-test.js +0 -72
  323. data/spec/javascript/require-test.js +0 -117
  324. data/spec/javascript/sandbox/compile.js +0 -37
  325. data/spec/javascript/sandbox/creation.js +0 -44
  326. data/spec/javascript/sandbox/format.js +0 -79
  327. data/spec/javascript/sandbox/misc.js +0 -57
  328. data/spec/javascript/sandbox/preprocessor.js +0 -81
  329. data/spec/javascript/sandbox/require.js +0 -48
  330. data/spec/javascript/sandbox/run-command.js +0 -21
  331. data/spec/javascript/spade/externs.js +0 -14
  332. data/spec/javascript/spade/load-factory.js +0 -15
  333. data/spec/javascript/spade/misc.js +0 -23
  334. data/spec/javascript/spade/ready.js +0 -12
  335. data/spec/javascript/spade/register.js +0 -13
  336. data/spec/javascript_spec.rb +0 -7
  337. data/spec/package_spec.rb +0 -267
  338. data/spec/spec_helper.rb +0 -30
  339. data/spec/support/cli.rb +0 -94
  340. data/spec/support/core_test.rb +0 -59
  341. data/spec/support/fake.rb +0 -44
  342. data/spec/support/fake_gem_server.rb +0 -66
  343. data/spec/support/fake_gemcutter.rb +0 -49
  344. data/spec/support/matchers.rb +0 -31
  345. data/spec/support/path.rb +0 -54
  346. data/test-spade.html +0 -8
@@ -1,171 +0,0 @@
1
- # ==========================================================================
2
- # Project: Spade - CommonJS Runtime
3
- # Copyright: ©2010 Strobe Inc. All rights reserved.
4
- # License: Licened under MIT license (see LICENSE)
5
- # ==========================================================================
6
-
7
- module Spade
8
- BOOT_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'));
9
-
10
- module Bundle
11
- class << self
12
-
13
- def update(rootdir, opts ={})
14
-
15
- verbose = opts[:verbose]
16
- spade_path = File.join(rootdir, SPADE_DIR)
17
- FileUtils.rm_r(spade_path) if File.exists? spade_path
18
-
19
- FileUtils.mkdir_p spade_path
20
- FileUtils.mkdir_p File.join(spade_path, 'packages')
21
-
22
- FileUtils.ln_s BOOT_PATH, File.join(spade_path, 'boot')
23
-
24
- installed = []
25
-
26
- # Do this to get the Gem.dir right
27
- env = Spade::Environment.new
28
-
29
- # In reverse order of precedence
30
- package_dirs = [File.join(env.spade_dir, 'gems')]
31
- package_dirs += %w[vendor/cache vendor/packages packages].map{|p| File.join(rootdir, p.split('/')) }
32
-
33
- for package_dir in package_dirs
34
- Dir.glob(File.join(package_dir, '*')).each do |path|
35
- json_file = File.join(path, 'package.json')
36
- next unless File.exists?(json_file)
37
-
38
- # How would this happen?
39
- next if installed.include? path
40
- installed << path
41
-
42
- json = JSON.load File.read(json_file)
43
- package_name = json['name']
44
- package_version = json['version']
45
-
46
- local = path.index(rootdir) == 0
47
-
48
- # Use relative paths if embedded
49
- old_path = if local
50
- # Figure out how many levels deep the spade_path is in the project
51
- levels = spade_path.sub(rootdir, '').split(File::SEPARATOR).reject{|p| p.empty? }.count + 1
52
- # Build relative path
53
- File.join(['..'] * levels, path.sub(rootdir, ''))
54
- else
55
- path
56
- end
57
-
58
- new_path = File.join(spade_path, 'packages', package_name)
59
-
60
- FileUtils.ln_s old_path, new_path, :force => true
61
-
62
- puts "Installing #{local ? "local" : "remote"} package #{package_name}" if verbose
63
- end
64
- end
65
-
66
- File.open(File.join(rootdir, 'spade-boot.js'), 'w+') do |fp|
67
- fp.write gen_spade_boot(rootdir, opts)
68
- end
69
- puts "Wrote spade-boot.js" if verbose
70
-
71
-
72
- end
73
-
74
- def gen_spade_boot(rootdir, opts={})
75
- verbose = opts[:verbose]
76
- spade_path = File.join(rootdir, SPADE_DIR, 'packages', '*')
77
- known_packages = Dir.glob(spade_path).map do |path|
78
- package_name = File.basename path
79
- info = JSON.load File.read(File.join(path, 'package.json'))
80
- info["sync"] = true
81
- info["root"] = "#{SPADE_DIR}/packages/#{package_name}"
82
- info["files"] = package_file_list(path)
83
- info
84
- end
85
-
86
- if File.exists? File.join(rootdir, 'package.json')
87
- info = JSON.load File.read(File.join(rootdir, 'package.json'))
88
- else
89
- info = {
90
- "name" => File.basename(rootdir),
91
- "directories" => { "lib" => "lib" }
92
- }
93
- end
94
-
95
- info["root"] = '.'
96
- info["sync"] = true
97
- info["files"] = package_file_list('.')
98
-
99
- packages = resolve_dependencies(info, known_packages)
100
-
101
- %[// GENERATED: #{Time.now.to_s}
102
- // This file is automatically generated by spade. To update run
103
- // 'spade update'. To use this file, reference it in your HTML file. Base
104
- // sure that your base URL is to the top level directory containing all of
105
- // your files.
106
-
107
- /*globals spade */
108
- //@ begin boot
109
- (function() {
110
- // load spade itself
111
- var script = document.createElement('script');
112
- script.src = "#{SPADE_DIR}/boot/spade.js";
113
- script.onload = function() {
114
-
115
- // Register remaining packages with spade
116
- #{packages.map{|p| %[spade.register("#{p["name"]}", #{JSON.pretty_generate(p)});\n] } * "\n"}
117
-
118
- // find the main module to run
119
- var main = null;
120
- var scripts = document.scripts || document.getElementsByTagName("script"),
121
- len = scripts.length;
122
- for(var idx=0;!main && idx<len;idx++) {
123
- main = scripts[idx].getAttribute('data-require');
124
- }
125
- scripts = null; // avoid memory leaks in IE
126
-
127
- if (main) spade.ready(function() { spade.require(main); });
128
- };
129
-
130
- var head = document.head || document.body || document;
131
- head.appendChild(script);
132
-
133
- script = head = null; // avoid memory leaks in IE
134
- })();
135
- //@ end boot
136
- ]
137
-
138
- end
139
-
140
- private
141
-
142
- def package_file_list(path)
143
- get_all_files(path).map{|p| p.sub(path+File::SEPARATOR, '') } - %w(package.json spade-boot.js)
144
- end
145
-
146
- # Supports recursive, be careful
147
- def get_all_files(path)
148
- Dir.glob(File.join(path, '**', '*')).
149
- map{|p| File.symlink?(p) ? get_all_files(p) : p }.
150
- flatten.
151
- reject{|p| File.extname(p).empty? }
152
- end
153
-
154
- def resolve_dependencies(package, available)
155
- # TODO: Should available be a hash to speed lookup?
156
- if package["dependencies"]
157
- # TODO: Check version numbers
158
- dependencies = package["dependencies"].keys
159
- packages = available.select{|p| dependencies.include?(p["name"]) }.
160
- map{|p| resolve_dependencies(p, available) }.
161
- flatten
162
- (packages << package).uniq
163
- else
164
- [package]
165
- end
166
- end
167
-
168
- end
169
-
170
- end
171
- end
@@ -1,354 +0,0 @@
1
- module Spade::CLI
2
- class Base < Thor
3
- include Thor::Actions
4
-
5
- source_root File.expand_path('../../templates', __FILE__)
6
-
7
- desc "owner", "Manage users for a package"
8
- subcommand "owner", Owner
9
-
10
- class_option :working, :required => false,
11
- :default => Spade.discover_root(Dir.pwd),
12
- :aliases => ['-w'],
13
- :desc => 'Root working directory.'
14
-
15
- class_option :verbose, :type => :boolean, :default => false,
16
- :aliases => ['-V'],
17
- :desc => 'Show additional debug information while running'
18
-
19
- class_option :require, :type => :array, :required => false,
20
- :aliases => ['-r'],
21
- :desc => "optional JS files to require before invoking main command"
22
-
23
- map "-i" => "console", "--interactive" => "console"
24
- desc "console", "Opens an interactive JavaScript console"
25
- def console
26
- require 'readline'
27
-
28
- shell = Spade::Shell.new
29
- context(:with => shell) do |ctx|
30
- shell.ctx = ctx
31
- puts "help() for help. quit() to quit."
32
- puts "Spade #{Spade::VERSION} (V8 #{V8::VERSION})"
33
- puts "WORKING=#{options[:working]}" if options[:verbose]
34
-
35
- trap("SIGINT") { puts "^C" }
36
- repl ctx
37
- end
38
- end
39
-
40
- map "-e" => "exec"
41
- desc "exec [FILENAME]", "Executes filename or stdin"
42
- def exec(*)
43
- exec_args = ARGV.dup
44
- arg = exec_args.shift while arg != "exec" && !exec_args.empty?
45
-
46
- filename = exec_args.shift
47
- puts "Filename: #{filename}" if options[:verbose]
48
-
49
- if filename
50
- puts "Working: #{options[:working]}" if options[:verbose]
51
- filename = File.expand_path filename, Dir.pwd
52
- throw "#{filename} not found" unless File.exists?(filename)
53
- fp = File.open filename
54
- source = File.basename filename
55
- rootdir = Spade.discover_root filename
56
-
57
- caller_id = nil
58
- if rootdir
59
- json_path = File.join(rootdir, 'package.json')
60
- if File.exist?(json_path)
61
- package_json = JSON.parse(File.read(json_path))
62
- caller_id = "#{package_json['name']}/main"
63
- end
64
- end
65
-
66
- # peek at first line. If it is poundhash, skip. else rewind file
67
- unless fp.readline =~ /^\#\!/
68
- fp.rewind
69
- end
70
-
71
- # Can't set pos on STDIN so we can only do this for files
72
- if options[:verbose]
73
- pos = fp.pos
74
- puts fp.read
75
- fp.pos = pos
76
- end
77
- else
78
- fp = $stdin
79
- source = '<stdin>'
80
- rootdir = options[:working]
81
- caller_id = nil
82
- end
83
-
84
- if options[:verbose]
85
- puts "source: #{source}"
86
- puts "rootdir: #{rootdir}"
87
- puts "caller_id: #{caller_id}"
88
- end
89
-
90
- begin
91
- # allow for poundhash
92
- context(:argv => exec_args, :rootdir => rootdir, :caller_id => caller_id) do |ctx|
93
- ctx.eval(fp, source) # eval the rest
94
- end
95
- rescue Interrupt => e
96
- puts; exit
97
- end
98
- end
99
-
100
- map "server" => "preview"
101
- desc "preview", "Starts a preview server for testing"
102
- long_desc %[
103
- The preview command starts a simple file server that can be used to
104
- load JavaScript-based apps in the browser. This is a convenient way to
105
- run apps in the browser instead of having to setup Apache on your
106
- local machine. If you are already loading apps through your own web
107
- server (for ex using Rails) the preview server is not required.
108
- ]
109
- method_option :port, :type => :string, :default => '4020',
110
- :aliases => ['-p'],
111
- :desc => 'Port number'
112
- def preview
113
- require 'spade/server'
114
- trap("SIGINT") { Spade::Server.shutdown }
115
- Spade::Server.run(options[:working], options[:port]);
116
- end
117
-
118
- desc "update", "Update package info in the current project"
119
- def update
120
- Spade::Bundle.update(options[:working], :verbose => options[:verbose])
121
- end
122
-
123
- desc "install [PACKAGE]", "Installs one or many spade packages"
124
- method_option :version, :type => :string, :default => ">= 0", :aliases => ['-v'], :desc => 'Specify a version to install'
125
- method_option :prerelease, :type => :boolean, :default => false, :aliases => ['--pre'], :desc => 'Install a prerelease version'
126
- def install(*packages)
127
- report_arity_error("install") and return if packages.size.zero?
128
-
129
- begin
130
- packages.each do |package|
131
- installed = Spade::Remote.new.install(package, options[:version], options[:prerelease])
132
- installed.each do |spec|
133
- say "Successfully installed #{spec.full_name}"
134
- end
135
- end
136
- rescue Gem::InstallError => e
137
- abort "Install error: #{e}"
138
- rescue Gem::GemNotFoundException => e
139
- abort "Can't find package #{e.name} #{e.version} available for install"
140
- rescue Errno::EACCES, Gem::FilePermissionError => e
141
- abort e.message
142
- end
143
- end
144
-
145
- desc "installed [PACKAGE]", "Shows what spade packages are installed"
146
- def installed(*packages)
147
- local = Spade::Local.new
148
- index = local.installed(packages)
149
- print_specs(packages, index)
150
- end
151
-
152
- desc "uninstall [PACKAGE]", "Uninstalls one or many packages"
153
- def uninstall(*packages)
154
- local = Spade::Local.new
155
- if packages.size > 0
156
- packages.each do |package|
157
- if !local.uninstall(package)
158
- abort %{No packages installed named "#{package}"}
159
- end
160
- end
161
- else
162
- report_arity_error('uninstall')
163
- end
164
- end
165
-
166
- desc "login", "Log in with your Spade credentials"
167
- def login
168
- highline = HighLine.new
169
- say "Enter your Spade credentials."
170
-
171
- begin
172
- email = highline.ask "\nEmail:" do |q|
173
- next unless STDIN.tty?
174
- q.readline = true
175
- end
176
-
177
- password = highline.ask "\nPassword:" do |q|
178
- next unless STDIN.tty?
179
- q.echo = "*"
180
- end
181
- rescue Interrupt => ex
182
- abort "Cancelled login."
183
- end
184
-
185
- say "\nLogging in as #{email}..."
186
-
187
- if Spade::Remote.new.login(email, password)
188
- say "Logged in!"
189
- else
190
- say "Incorrect email or password."
191
- login
192
- end
193
- end
194
-
195
- desc "push", "Distribute your spade package"
196
- def push(package)
197
- remote = Spade::Remote.new
198
- if remote.logged_in?
199
- say remote.push(package)
200
- else
201
- say LOGIN_MESSAGE
202
- end
203
- end
204
-
205
- desc "yank", "Remove a specific package version release from SproutCutter"
206
- method_option :version, :type => :string, :default => nil, :aliases => ['-v'], :desc => 'Specify a version to yank'
207
- method_option :undo, :type => :boolean, :default => false, :desc => 'Unyank package'
208
- def yank(package)
209
- if options[:version]
210
- remote = Spade::Remote.new
211
- if remote.logged_in?
212
- if options[:undo]
213
- say remote.unyank(package, options[:version])
214
- else
215
- say remote.yank(package, options[:version])
216
- end
217
- else
218
- say LOGIN_MESSAGE
219
- end
220
- else
221
- say "Version required"
222
- end
223
- end
224
-
225
- desc "list", "View available packages for download"
226
- method_option :all, :type => :boolean, :default => false, :aliases => ['-a'], :desc => 'List all versions available'
227
- method_option :prerelease, :type => :boolean, :default => false, :aliases => ['--pre'], :desc => 'List prerelease versions available'
228
- def list(*packages)
229
- remote = Spade::Remote.new
230
- index = remote.list_packages(packages, options[:all], options[:prerelease])
231
- print_specs(packages, index)
232
- end
233
-
234
- desc "new [NAME]", "Generate a new project skeleton"
235
- def new(name)
236
- ProjectGenerator.new(self,
237
- name, File.expand_path(name)).run
238
- end
239
-
240
- desc "build", "Build a spade package from a package.json"
241
- def build
242
- local = Spade::Local.new
243
- if local.logged_in?
244
- package = local.pack("package.json")
245
- if package.errors.empty?
246
- puts "Successfully built package: #{package.to_ext}"
247
- else
248
- failure_message = "Spade encountered the following problems building your package:"
249
- package.errors.each do |error|
250
- failure_message << "\n* #{error}"
251
- end
252
- abort failure_message
253
- end
254
- else
255
- abort LOGIN_MESSAGE
256
- end
257
- end
258
-
259
- desc "unpack [PACKAGE]", "Extract files from a spade package"
260
- method_option :target, :type => :string, :default => ".", :aliases => ['-t'], :desc => 'Unpack to given directory'
261
- def unpack(*paths)
262
- local = Spade::Local.new
263
-
264
- paths.each do |path|
265
- begin
266
- package = local.unpack(path, options[:target])
267
- unpack_path = File.expand_path(File.join(Dir.pwd, options[:target], package.to_full_name))
268
- puts "Unpacked spade into: #{unpack_path}"
269
- rescue Errno::EACCES, Gem::FilePermissionError => ex
270
- abort "There was a problem unpacking #{path}:\n#{ex.message}"
271
- end
272
- end
273
- end
274
-
275
- private
276
-
277
- def report_arity_error(name)
278
- self.class.handle_argument_error(self.class.tasks[name], nil)
279
- end
280
-
281
- def repl(ctx)
282
- ctx.reactor.next_tick do
283
- line = Readline.readline("spade> ", true)
284
- begin
285
- result = ctx.eval(line, '<console>')
286
- puts result unless result.nil?
287
- rescue V8::JSError => e
288
- puts e.message
289
- puts e.backtrace(:javascript)
290
- rescue StandardError => e
291
- puts e
292
- puts e.backtrace.join("\n")
293
- end
294
- repl(ctx)
295
- end
296
- end
297
-
298
- # Loads a JS file into the context. This is not a require; just load
299
- def load(cxt, libfile)
300
- begin
301
- content = File.readlines(libfile)
302
- content.shift if content.first && (content.first =~ /^\#\!/)
303
- cxt.eval(content*'')
304
- #cxt.load(libfile)
305
- rescue V8::JSError => e
306
- puts e.message
307
- puts e.backtrace(:javascript)
308
- rescue StandardError => e
309
- puts e
310
- end
311
- end
312
-
313
- # Initialize a context to work against. This will load also handle
314
- # autorequires
315
- def context(opts={})
316
- opts[:rootdir] ||= options[:working]
317
- opts[:verbose] = options[:verbose]
318
- Spade::MainContext.new(opts) do |ctx|
319
-
320
- requires = opts[:require]
321
- requires.each { |r| load(ctx, r) } if requires
322
-
323
- yield(ctx) if block_given?
324
- end
325
- end
326
-
327
- def print_specs(packages, index)
328
- spades = {}
329
-
330
- index.each do |(name, version, platform)|
331
- spades[name] ||= []
332
- spades[name] << version
333
- end
334
-
335
- if spades.size.zero?
336
- abort %{No packages found matching "#{packages.join('", "')}".}
337
- else
338
- spades.each do |name, versions|
339
- puts "#{name} (#{versions.sort.reverse.join(", ")})"
340
- end
341
- end
342
- end
343
-
344
- def method_missing(meth, *)
345
- if File.exist?(meth.to_s)
346
- ARGV.unshift("exec")
347
- invoke :exec
348
- else
349
- super
350
- end
351
- end
352
-
353
- end
354
- end