spade 0.0.8.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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