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,74 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade list" do
4
+ before do
5
+ goto_home
6
+ set_host
7
+ start_fake(FakeGemServer.new)
8
+ end
9
+
10
+ it "lists latest spades by default" do
11
+ spade "package", "list"
12
+
13
+ output = stdout.read
14
+ output.should include("builder (3.0.0)")
15
+ output.should include("rake (0.8.7)")
16
+ end
17
+
18
+ it "lists all spades when given the all argument" do
19
+ spade "package", "list", "-a"
20
+
21
+ output = stdout.read
22
+ output.should include("builder (3.0.0)")
23
+ output.should include("rake (0.8.7, 0.8.6)")
24
+ end
25
+
26
+ it "filters spades when given an argument" do
27
+ spade "package", "list", "builder"
28
+
29
+ output = stdout.read
30
+ output.should include("builder (3.0.0)")
31
+ output.should_not include("rake")
32
+ end
33
+
34
+ it "filters spades when given an argument and shows all versions" do
35
+ spade "package", "list", "rake", "-a"
36
+
37
+ output = stdout.read
38
+ output.should include("rake (0.8.7, 0.8.6)")
39
+ output.should_not include("builder")
40
+ end
41
+
42
+ it "filters multiple spades" do
43
+ spade "package", "list", "rake", "highline"
44
+
45
+ output = stdout.read
46
+ output.should include("highline (1.6.1)")
47
+ output.should include("rake (0.8.7)")
48
+ output.should_not include("builder")
49
+ end
50
+
51
+ it "shows prerelease spades" do
52
+ spade "package", "list", "--prerelease"
53
+
54
+ output = stdout.read
55
+ output.should include("bundler (1.1.pre)")
56
+ output.should_not include("highline")
57
+ output.should_not include("rake")
58
+ output.should_not include("builder")
59
+ end
60
+
61
+ it "says it couldn't find any if none found" do
62
+ spade "package", "list", "rails", :track_stderr => true
63
+
64
+ stderr.read.strip.should == 'No packages found matching "rails".'
65
+ exit_status.should_not be_success
66
+ end
67
+
68
+ it "says it couldn't find any if none found matching multiple packages" do
69
+ spade "package", "list", "rails", "bake", :track_stderr => true
70
+
71
+ stderr.read.strip.should == 'No packages found matching "rails", "bake".'
72
+ exit_status.should_not be_success
73
+ end
74
+ end
@@ -0,0 +1,75 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade login" do
4
+ let(:email) { "email@example.com" }
5
+ let(:password) { "secrets" }
6
+ let(:api_key) { "deadbeef" }
7
+ let(:creds) { spade_dir("credentials") }
8
+
9
+ before do
10
+ goto_home
11
+
12
+ fake = lambda { |env|
13
+ [200, {"Content-Type" => "text/plain"}, [api_key]]
14
+ }
15
+
16
+ protected_fake = Rack::Auth::Basic.new(fake) do |user, pass|
17
+ user == email && password == pass
18
+ end
19
+
20
+ LibGems.host = "http://localhost:9292"
21
+ start_fake(protected_fake)
22
+ end
23
+
24
+ it "says email that user is logging in as" do
25
+ spade "package", "login"
26
+ input email
27
+ input password
28
+ output = stdout.read
29
+ output.should include("Enter your Spade credentials.")
30
+ output.should include("Logging in as #{email}...")
31
+ end
32
+
33
+ it "makes a request out for the api key and stores it in SPADE_DIR/credentials" do
34
+ spade "package", "login"
35
+ input email
36
+ input password
37
+
38
+ stdout.read.should include("Logged in!")
39
+ File.exist?(creds).should be_true
40
+ YAML.load_file(creds)[:spade_api_key].should == api_key
41
+ YAML.load_file(creds)[:spade_email].should == email
42
+ end
43
+
44
+ it "notifies user if bad creds given" do
45
+ spade "package", "login", :track_stderr => true
46
+ input email
47
+ input "badpassword"
48
+ sleep 1
49
+ kill!
50
+
51
+ stdout.read.should include("Incorrect email or password.")
52
+ File.exist?(creds).should be_false
53
+ end
54
+
55
+ it "allows the user to retry if bad creds given" do
56
+ spade "package", "login"
57
+ input "bademail@example.com"
58
+ input "badpassword"
59
+
60
+ input email
61
+ input password
62
+
63
+ output = stdout.read.split("\n").select { |line| line.size > 0 }
64
+ output[0].should include("Enter your Spade credentials.")
65
+ output[3].should include("Logging in as bademail@example.com...")
66
+ output[4].should include("Incorrect email or password.")
67
+ output[5].should include("Enter your Spade credentials.")
68
+ output[8].should include("Logging in as #{email}...")
69
+ output[9].should include("Logged in!")
70
+
71
+ File.exist?(creds).should be_true
72
+ YAML.load_file(creds)[:spade_api_key].should == api_key
73
+ YAML.load_file(creds)[:spade_email].should == email
74
+ end
75
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade new" do
4
+ it "should be speced"
5
+ end
@@ -0,0 +1,114 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade owner" do
4
+ let(:api_key) { "deadbeef" }
5
+ let(:creds) { spade_dir("credentials") }
6
+
7
+ before do
8
+ goto_home
9
+ set_host
10
+ start_fake(FakeGemcutter.new(api_key))
11
+ end
12
+
13
+ context "with a good api key" do
14
+ before do
15
+ write_api_key(api_key)
16
+ end
17
+
18
+ it "registers new owners if package is owned" do
19
+ spade "package", "owner", "add", "rake", "geddy@example.com"
20
+
21
+ stdout.read.should include("Owner added successfully.")
22
+ end
23
+
24
+ it "removes owners if package is owned" do
25
+ spade "package", "owner", "remove", "rake", "geddy@example.com"
26
+
27
+ stdout.read.should include("Owner removed successfully.")
28
+ end
29
+
30
+ it "lists owners for a gem" do
31
+ spade "package", "owner", "list", "rake"
32
+
33
+ stdout.read.should == <<EOF
34
+ Owners for package: rake
35
+ - geddy@example.com
36
+ - lerxst@example.com
37
+ EOF
38
+ end
39
+ end
40
+
41
+ context "with wrong api key" do
42
+ before do
43
+ write_api_key("beefbeef")
44
+ end
45
+
46
+ it "shows rejection message for add if wrong api key is supplied" do
47
+ spade "package", "owner", "add", "rake", "geddy@example.com"
48
+
49
+ stdout.read.should include("One cannot simply walk into Mordor!")
50
+ end
51
+
52
+ it "shows rejection message for remove if wrong api key is supplied" do
53
+ spade "package", "owner", "remove", "rake", "geddy@example.com"
54
+
55
+ stdout.read.should include("One cannot simply walk into Mordor!")
56
+ end
57
+
58
+ it "shows rejection message for list if wrong api key is supplied" do
59
+ spade "package", "owner", "list", "rake"
60
+
61
+ stdout.read.should include("One cannot simply walk into Mordor!")
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "spade owner with wrong arguments" do
67
+ before do
68
+ cd(home)
69
+ env["HOME"] = home.to_s
70
+ env["RUBYGEMS_HOST"] = "http://localhost:9292"
71
+ end
72
+
73
+ it "asks for login first if api key does not exist" do
74
+ spade "package", "owner", "add", "rake", "geddy@example.com", :track_stderr => true
75
+
76
+ stderr.read.should include("Please login first with `spade login`")
77
+ end
78
+
79
+ it "asks for login first if api key does not exist" do
80
+ spade "package", "owner", "remove", "rake", "geddy@example.com", :track_stderr => true
81
+
82
+ stderr.read.should include("Please login first with `spade login`")
83
+ end
84
+
85
+ it "asks for login first if api key does not exist" do
86
+ spade "package", "owner", "list", "rake", :track_stderr => true
87
+
88
+ stderr.read.should include("Please login first with `spade login`")
89
+ end
90
+
91
+ it "requires a package name for add" do
92
+ spade "package", "owner", "add", :track_stderr => true
93
+
94
+ stderr.read.should include("called incorrectly")
95
+ end
96
+
97
+ it "requires a package name for remove" do
98
+ spade "package", "owner", "remove", :track_stderr => true
99
+
100
+ stderr.read.should include("called incorrectly")
101
+ end
102
+
103
+ it "requires a package name for list" do
104
+ spade "package", "owner", "list", :track_stderr => true
105
+
106
+ stderr.read.should include("called incorrectly")
107
+ end
108
+
109
+ it "requires a package name for list with default command" do
110
+ spade "package", "owner", :track_stderr => true
111
+
112
+ stderr.read.should include("called incorrectly")
113
+ end
114
+ end
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade push" do
4
+ let(:api_key) { "deadbeef" }
5
+ let(:creds) { spade_dir("credentials") }
6
+
7
+ before do
8
+ goto_home
9
+ set_host
10
+ start_fake(FakeGemcutter.new(api_key))
11
+ end
12
+
13
+ context "with a good api key" do
14
+ before do
15
+ write_api_key(api_key)
16
+ end
17
+
18
+ it "registers a gem when sent with the right api key" do
19
+ spade "package", "push", "../../spec/fixtures/rake-0.8.7.spd"
20
+
21
+ stdout.read.should include("Successfully registered rake (0.8.7)")
22
+ end
23
+ end
24
+
25
+ it "shows rejection message if wrong api key is supplied" do
26
+ write_api_key("beefbeef")
27
+
28
+ spade "package", "push", "../../spec/fixtures/rake-0.8.7.spd"
29
+
30
+ stdout.read.should include("One cannot simply walk into Mordor!")
31
+ end
32
+ end
33
+
34
+ describe "spade push without api key" do
35
+ before do
36
+ cd(home)
37
+ env["HOME"] = home.to_s
38
+ env["RUBYGEMS_HOST"] = "http://localhost:9292"
39
+ write_api_key("beefbeef")
40
+ end
41
+
42
+ it "ignores files that don't exist" do
43
+ spade "package", "push", "rake-1.0.0.spd"
44
+
45
+ stdout.read.should include("No such file")
46
+ end
47
+
48
+ it "must push a valid gem" do
49
+ spade "package", "push", "../../spec/fixtures/badrake-0.8.7.spd"
50
+
51
+ stdout.read.should include("There was a problem opening your package.")
52
+ end
53
+
54
+ it "does not allow pushing of random files" do
55
+ spade "package", "push", "../../Rakefile"
56
+
57
+ stdout.read.should include("There was a problem opening your package.")
58
+ end
59
+ end
60
+
61
+ describe "spade push without api key" do
62
+ before do
63
+ cd(home)
64
+ env["HOME"] = home.to_s
65
+ env["RUBYGEMS_HOST"] = "http://localhost:9292"
66
+ end
67
+
68
+ it "asks for login first if api key does not exist" do
69
+ spade "package", "push", "../../spec/fixtures/rake-0.8.7.spd"
70
+
71
+ stdout.read.should include("Please login first with `spade login`")
72
+ end
73
+ end
@@ -0,0 +1,58 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade uninstall" do
4
+ before do
5
+ goto_home
6
+ set_host
7
+ # TODO: Fix for LibGems
8
+ env["GEM_HOME"] = spade_dir.to_s
9
+ env["GEM_PATH"] = spade_dir.to_s
10
+ start_fake(FakeGemServer.new)
11
+ end
12
+
13
+ it "uninstalls a gem" do
14
+ spade "package", "install", "rake"
15
+ wait
16
+ spade "package", "uninstall", "rake"
17
+
18
+ stdout.read.should include("Successfully uninstalled rake-0.8.7")
19
+ "rake-0.8.7".should_not be_fetched
20
+ "rake-0.8.7".should_not be_unpacked
21
+ end
22
+
23
+ it "uninstalls multiple packages" do
24
+ spade "package", "install", "rake", "highline"
25
+ wait
26
+ spade "package", "uninstall", "rake", "highline"
27
+
28
+ output = stdout.read
29
+ output.should include("Successfully uninstalled rake-0.8.7")
30
+ output.should include("Successfully uninstalled highline-1.6.1")
31
+
32
+ "rake-0.8.7".should_not be_fetched
33
+ "rake-0.8.7".should_not be_unpacked
34
+ "highline-1.6.1".should_not be_fetched
35
+ "highline-1.6.1".should_not be_unpacked
36
+ end
37
+
38
+ it "requires at least one package to uninstall" do
39
+ spade "package", "uninstall", :track_stderr => true
40
+ stderr.read.should include("called incorrectly")
41
+ end
42
+
43
+ it "fails when a package is not found" do
44
+ spade "package", "uninstall", "webscale", :track_stderr => true
45
+ stderr.read.should include(%{No packages installed named "webscale"})
46
+ end
47
+
48
+ it "will attempt to uninstall packages even when nonexisting one is given" do
49
+ spade "package", "install", "rake", "highline"
50
+ wait
51
+ spade "package", "uninstall", "rake", "webscale", :track_stderr => true
52
+
53
+ stdout.read.should include("Successfully uninstalled rake-0.8.7")
54
+ "rake-0.8.7".should_not be_fetched
55
+ "rake-0.8.7".should_not be_unpacked
56
+ stderr.read.should include(%{No packages installed named "webscale"})
57
+ end
58
+ end
@@ -0,0 +1,72 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade unpack" do
4
+ before do
5
+ goto_home
6
+ end
7
+
8
+ it "builds a gem from a given package.json" do
9
+ FileUtils.cp fixtures("coffee-1.0.1.pre.spd"), "."
10
+ spade "package", "unpack", "coffee-1.0.1.pre.spd"
11
+
12
+ exit_status.should be_success
13
+ output = stdout.read
14
+ output.should include("Unpacked spade into: #{Dir.pwd}/coffee-1.0.1.pre")
15
+
16
+ home("coffee-1.0.1.pre/bin/coffee").should exist
17
+ home("coffee-1.0.1.pre/lib/coffee.js").should exist
18
+ home("coffee-1.0.1.pre/lib/coffee/base.js").should exist
19
+ home("coffee-1.0.1.pre/lib/coffee/mocha/chai.js").should exist
20
+ home("coffee-1.0.1.pre/qunit/coffee/test.js").should exist
21
+ home("coffee-1.0.1.pre/qunit/test.js").should exist
22
+ end
23
+
24
+ it "can unpack to a different directory" do
25
+ FileUtils.cp fixtures("coffee-1.0.1.pre.spd"), "."
26
+ spade "package", "unpack", "coffee-1.0.1.pre.spd", "--target", "star/bucks"
27
+
28
+ exit_status.should be_success
29
+ output = stdout.read
30
+ output.should include("Unpacked spade into: #{Dir.pwd}/star/bucks/coffee-1.0.1.pre")
31
+
32
+ home("star/bucks/coffee-1.0.1.pre/bin/coffee").should exist
33
+ end
34
+
35
+ it "can unpack more than one spade" do
36
+ FileUtils.cp fixtures("coffee-1.0.1.pre.spd"), "."
37
+ FileUtils.cp fixtures("jquery-1.4.3.spd"), "."
38
+ spade "package", "unpack", "coffee-1.0.1.pre.spd", "jquery-1.4.3.spd"
39
+
40
+ exit_status.should be_success
41
+ output = stdout.read
42
+ output.should include("Unpacked spade into: #{Dir.pwd}/coffee-1.0.1.pre")
43
+ output.should include("Unpacked spade into: #{Dir.pwd}/jquery-1.4.3")
44
+
45
+ home("coffee-1.0.1.pre/bin/coffee").should exist
46
+ home("jquery-1.4.3/main.js").should exist
47
+ end
48
+
49
+ it "shows a friendly error message if spade can't write to the given directory" do
50
+ FileUtils.mkdir_p(home("bad"))
51
+ cd(home("bad"))
52
+ FileUtils.cp fixtures("jquery-1.4.3.spd"), "."
53
+ FileUtils.chmod 0555, "."
54
+ spade "package", "unpack", "jquery-1.4.3.spd", :track_stderr => true
55
+
56
+ exit_status.should_not be_success
57
+ output = stderr.read
58
+ output.should include("There was a problem unpacking jquery-1.4.3.spd:")
59
+ output.should include("Permission denied")
60
+ end
61
+
62
+ it "shows a friendly error message if spade can't read the package" do
63
+ FileUtils.cp fixtures("jquery-1.4.3.spd"), "."
64
+ FileUtils.chmod 0000, "jquery-1.4.3.spd"
65
+ spade "package", "unpack", "jquery-1.4.3.spd", :track_stderr => true
66
+
67
+ exit_status.should_not be_success
68
+ output = stderr.read
69
+ output.should include("There was a problem unpacking jquery-1.4.3.spd:")
70
+ output.should include("Permission denied")
71
+ end
72
+ end