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,73 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade unyank" 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 "unyanks a gem when sent with the right api key" do
19
+ spade "package", "yank", "core-test", "--undo", "-v", "1.4.3"
20
+
21
+ stdout.read.should include("Successfully unyanked gem: core-test (1.4.3)")
22
+ end
23
+
24
+ it "must unyank a valid gem" do
25
+ spade "package", "yank", "blahblah", "--undo", "-v", "0.0.1"
26
+
27
+ stdout.read.should include("This gem could not be found")
28
+ end
29
+
30
+ it "does not unyank and indexed gem" do
31
+ spade "package", "yank", "core-test", "--undo", "-v", "2.4.3"
32
+
33
+ stdout.read.should include("The version 2.4.3 is already indexed.")
34
+ end
35
+ end
36
+
37
+ it "shows rejection message if wrong api key is supplied" do
38
+ write_api_key("beefbeef")
39
+
40
+ spade "package", "yank", "core-test", "--undo", "-v", "1.4.3"
41
+
42
+ stdout.read.should include("One cannot simply walk into Mordor!")
43
+ end
44
+ end
45
+
46
+ describe "spade unyank with invalid api key" do
47
+ before do
48
+ cd(home)
49
+ env["HOME"] = home.to_s
50
+ env["RUBYGEMS_HOST"] = "http://localhost:9292"
51
+ write_api_key("beefbeef")
52
+ end
53
+
54
+ it "must require a version" do
55
+ spade "package", "yank", "core-test", "--undo"
56
+
57
+ stdout.read.should include("Version required")
58
+ end
59
+ end
60
+
61
+ describe "spade unyank 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", "yank", "core-test", "-v", "1.4.3", "--undo"
70
+
71
+ stdout.read.should include("Please login first with `spade login`")
72
+ end
73
+ end
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade yank" 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 "yanks a gem when sent with the right api key" do
19
+ spade "package", "yank", "core-test", "-v", "1.4.3"
20
+
21
+ stdout.read.should include("Successfully yanked gem: core-test (1.4.3)")
22
+ end
23
+
24
+ it "must yank a valid gem" do
25
+ spade "package", "yank", "blahblah", "-v", "0.0.1"
26
+
27
+ stdout.read.should include("This gem could not be found")
28
+ end
29
+
30
+ it "does not yank a yanked gem" do
31
+ spade "package", "yank", "core-test", "-v", "2.4.3"
32
+
33
+ stdout.read.should include("The version 2.4.3 has already been yanked.")
34
+ end
35
+ end
36
+
37
+ it "shows rejection message if wrong api key is supplied" do
38
+ write_api_key("beefbeef")
39
+
40
+ spade "package", "yank", "core-test", "-v", "1.4.3"
41
+
42
+ stdout.read.should include("One cannot simply walk into Mordor!")
43
+ end
44
+ end
45
+
46
+ describe "spade yank without api key" do
47
+ before do
48
+ cd(home)
49
+ env["HOME"] = home.to_s
50
+ env["RUBYGEMS_HOST"] = "http://localhost:9292"
51
+ write_api_key("beefbeef")
52
+ end
53
+
54
+ it "must require a version" do
55
+ spade "package", "yank", "core-test"
56
+
57
+ stdout.read.should include("Version required")
58
+ end
59
+ end
60
+
61
+ describe "spade yank 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", "yank", "core-test", "-v", "1.4.3"
70
+
71
+ stdout.read.should include("Please login first with `spade login`")
72
+ end
73
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spade::Packager::Credentials do
4
+ def new_creds
5
+ Spade::Packager::Credentials.new
6
+ end
7
+
8
+ around do |example|
9
+ cd(home)
10
+ LibGems.send(:set_home, home)
11
+ example.call
12
+ LibGems.clear_paths
13
+ end
14
+
15
+ subject { new_creds }
16
+
17
+ it "saves the api key and email" do
18
+ subject.save("someone@example.com", "secrets")
19
+
20
+ new_creds.api_key.should == "secrets"
21
+ new_creds.email.should == "someone@example.com"
22
+ end
23
+ end
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ # Placeholder for test, do not remove
@@ -0,0 +1 @@
1
+ // Placeholder for test, do not remove
File without changes
@@ -0,0 +1 @@
1
+ // Placeholder for test, do not remove
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "core-test",
3
+ "description": "Flexible testing library for JavaScript.",
4
+ "summary": "A fully featured asynchronous testing library for JavaScript, compatible with other frameworks.",
5
+ "keywords": ["javascript", "testing"],
6
+ "author": "Charles Jolley",
7
+ "homepage": "https://github.com/strobecorp/core-test",
8
+ "version": "0.4.3",
9
+ "licenses": [{
10
+ "type": "MIT",
11
+ "url": "https://github.com/strobecorp/core-test/raw/master/LICENSE"
12
+ }],
13
+ "engines": ["browser", "all"],
14
+ "directories": {
15
+ "lib": "./lib",
16
+ "resources": "./resources",
17
+ "test": "./tests"
18
+ },
19
+ "main": "./lib/main",
20
+ "bin": {
21
+ "cot": "./bin/cot"
22
+ },
23
+ "dependencies": {
24
+ "ivory": "= 0.0.1",
25
+ "optparse": "= 1.0.1"
26
+ }
27
+ }
28
+
29
+
30
+
Binary file
Binary file
@@ -0,0 +1,27 @@
1
+ require "spec_helper"
2
+
3
+ describe "spade build the gauntlet" do
4
+ before do
5
+ cd(home)
6
+ env["HOME"] = home.to_s
7
+ write_creds("user@example.com", "deadbeef")
8
+ end
9
+
10
+ {
11
+ "ivory" => "0.0.1",
12
+ "jquery" => "1.4.3",
13
+ "optparse" => "1.0.1",
14
+ "web-file" => "0.0.1",
15
+ "web-typed-array" => "0.0.1",
16
+ }.each do |package, version|
17
+ it "builds a spade from #{package}" do
18
+ FileUtils.cp_r root.join("packages/#{package}"), package
19
+ cd package
20
+ spade "package", "build"
21
+
22
+ exit_status.should be_success
23
+ stdout.read.should include("Successfully built package: #{package}-#{version}.spd")
24
+ File.exist?(tmp.join(package, "#{package}-#{version}.spd"))
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,267 @@
1
+ require "spec_helper"
2
+
3
+ describe Spade::Packager::Package, "#to_spec" do
4
+ let(:email) { "user@example.com" }
5
+
6
+ before do
7
+ cd(home)
8
+ FileUtils.mkdir_p(home("lib"))
9
+ FileUtils.mkdir_p(home("resources"))
10
+ FileUtils.mkdir_p(home("tests"))
11
+ end
12
+
13
+ subject do
14
+ package = Spade::Packager::Package.new(email)
15
+ package.json_path = fixtures("package.json")
16
+ if spec = package.to_spec
17
+ spec
18
+ else
19
+ puts "Errors: #{package.errors}"
20
+ nil
21
+ end
22
+ end
23
+
24
+ it "transforms the name" do
25
+ subject.name.should == "core-test"
26
+ end
27
+
28
+ it "transforms the version" do
29
+ subject.version.should == LibGems::Version.new("0.4.3")
30
+ end
31
+
32
+ it "transforms the author" do
33
+ subject.authors.should == ["Charles Jolley"]
34
+ end
35
+
36
+ it "transforms the email" do
37
+ subject.email.should == email
38
+ end
39
+
40
+ it "transforms the homepage" do
41
+ subject.homepage.should == "https://github.com/strobecorp/core-test"
42
+ end
43
+
44
+ it "transforms the description" do
45
+ subject.description.should == "Flexible testing library for JavaScript."
46
+ end
47
+
48
+ it "transforms the description" do
49
+ subject.summary.should == "A fully featured asynchronous testing library for JavaScript, compatible with other frameworks."
50
+ end
51
+
52
+ it "transforms the dependencies" do
53
+ subject.dependencies.map{|d| [d.name, d.requirement]}.should == [["ivory", "= 0.0.1"], ["optparse", "= 1.0.1"]]
54
+ end
55
+
56
+ it "packs metadata into requirements" do
57
+ metadata = JSON.parse(subject.requirements.first)
58
+ metadata["keywords"].should == %w[javascript testing]
59
+ metadata["licenses"].should == [
60
+ {"type" => "MIT",
61
+ "url" => "https://github.com/strobecorp/core-test/raw/master/LICENSE"}
62
+ ]
63
+ metadata["engines"].should == ["browser", "all"]
64
+ metadata["main"].should == "./lib/main"
65
+ metadata["bin"].should == {"cot" => "./bin/cot"}
66
+ end
67
+
68
+ def expand_sort(files)
69
+ files.map { |f| File.expand_path(f) }.sort
70
+ end
71
+
72
+ it "expands paths from the directories" do
73
+ others = ["tmp/blah.js", "tmp/whee.txt"]
74
+ files = ["bin/cot", "lib/main.js", "lib/core.js", "lib/test.js", "package.json", "resources/additions.css", "resources/runner.css"]
75
+ test_files = ["tests/apis/core-test.js", "tests/system/test/assert-test.js"]
76
+
77
+ FileUtils.mkdir_p(["bin/", "resources/", "lib/", "tests/apis", "tests/system/test", "tmp/"])
78
+ FileUtils.touch(files + test_files + others)
79
+
80
+ expand_sort(subject.files).should == expand_sort(files + test_files)
81
+ expand_sort(subject.test_files).should == expand_sort(test_files)
82
+ end
83
+
84
+ it "hacks the file name to return .spd" do
85
+ subject.file_name.should == "core-test-0.4.3.spd"
86
+ end
87
+
88
+ it "sets the rubyforge_project to appease older versions of rubygems" do
89
+ subject.rubyforge_project.should == "spade"
90
+ end
91
+ end
92
+
93
+ describe Spade::Packager::Package, "#to_s" do
94
+ let(:email) { "user@example.com" }
95
+
96
+ subject do
97
+ package = Spade::Packager::Package.new
98
+ package.json_path = fixtures("package.json")
99
+ package.valid?
100
+ package
101
+ end
102
+
103
+ it "gives the name and version" do
104
+ subject.to_full_name.should == "core-test-0.4.3"
105
+ end
106
+ end
107
+
108
+ describe Spade::Packager::Package, "converting" do
109
+ before do
110
+ cd(home)
111
+ end
112
+
113
+ subject do
114
+ package = Spade::Packager::Package.new
115
+ package.spade = fixtures("core-test-0.4.3.spd")
116
+ package.as_json
117
+ end
118
+
119
+ it "can recreate the same package.json from the package" do
120
+ subject.should == JSON.parse(File.read(fixtures("package.json")))
121
+ end
122
+ end
123
+
124
+ describe Spade::Packager::Package, "validating" do
125
+ before do
126
+ cd(home)
127
+ end
128
+
129
+ subject { Spade::Packager::Package.new }
130
+
131
+ shared_examples_for "a good parser" do
132
+ it "had a problem parsing package.json" do
133
+ subject.should have_error("There was a problem parsing package.json")
134
+ end
135
+ end
136
+
137
+ context "with a blank file" do
138
+ before do
139
+ FileUtils.touch("package.json")
140
+ subject.json_path = "package.json"
141
+ end
142
+ it_should_behave_like "a good parser"
143
+ end
144
+
145
+ context "with bad json" do
146
+ before do
147
+ File.open("package.json", "w") do |f|
148
+ f.write "---bad json---"
149
+ end
150
+ subject.json_path = "package.json"
151
+ end
152
+ it_should_behave_like "a good parser"
153
+ end
154
+
155
+ context "json can't be read" do
156
+ before do
157
+ FileUtils.cp fixtures("package.json"), "."
158
+ FileUtils.chmod 0000, "package.json"
159
+ subject.json_path = "package.json"
160
+ end
161
+ it_should_behave_like "a good parser"
162
+ end
163
+
164
+ context "json can't be found" do
165
+ before do
166
+ subject.json_path = "package.json"
167
+ end
168
+ it_should_behave_like "a good parser"
169
+ end
170
+
171
+ end
172
+
173
+ describe Spade::Packager::Package, "validation errors" do
174
+ let(:email) { "user@example.com" }
175
+
176
+ before do
177
+ cd(home)
178
+ FileUtils.mkdir_p(home("lib"))
179
+ FileUtils.mkdir_p(home("tests"))
180
+ end
181
+
182
+ subject do
183
+ Spade::Packager::Package.new(email)
184
+ end
185
+
186
+ def write_package
187
+ path = home("package.json")
188
+ package = JSON.parse(File.read(fixtures("package.json")))
189
+ yield package
190
+ File.open(path, "w") do |file|
191
+ file.write package.to_json
192
+ end
193
+ subject.json_path = path
194
+ end
195
+
196
+ %w[name description summary homepage author version directories].each do |field|
197
+ it "is invalid without a #{field} field" do
198
+ write_package do |package|
199
+ package.delete(field)
200
+ end
201
+
202
+ subject.should have_error("Package requires a '#{field}' field")
203
+ end
204
+
205
+ it "is invalid with a blank #{field} field" do
206
+ write_package do |package|
207
+ package[field] = ""
208
+ end
209
+
210
+ subject.should have_error("Package requires a '#{field}' field")
211
+ end
212
+ end
213
+
214
+ it "is invalid without a proper version number" do
215
+ write_package do |package|
216
+ package["version"] = "bad"
217
+ end
218
+
219
+ subject.should have_error("Malformed version number string bad")
220
+ end
221
+
222
+ it "is valid without specifying a test directory" do
223
+ write_package do |package|
224
+ package["directories"].delete("test")
225
+ end
226
+
227
+ subject.should be_valid
228
+ subject.to_spec.test_files.should == []
229
+ end
230
+
231
+ it "is valid and has files without specifying bin" do
232
+ write_package do |package|
233
+ package.delete("bin")
234
+ end
235
+
236
+ subject.should be_valid
237
+ subject.to_spec.files.should == ["package.json"]
238
+ end
239
+
240
+ %w[lib test].each do |dir|
241
+ it "is invalid without a #{dir} directory that exists" do
242
+ write_package do |package|
243
+ package["directories"][dir] = "nope"
244
+ end
245
+
246
+ subject.should have_error("'nope' specified for #{dir} directory, is not a directory")
247
+ end
248
+
249
+ it "is valid without a #{dir} directory that exists" do
250
+ FileUtils.mkdir_p(home("somewhere", "else"))
251
+ write_package do |package|
252
+ package["directories"][dir] = "./somewhere/else"
253
+ end
254
+
255
+ subject.should be_valid
256
+ end
257
+
258
+ it "is invalid if #{dir} points to a file" do
259
+ FileUtils.touch(home("somefile"))
260
+ write_package do |package|
261
+ package["directories"][dir] = "./somefile"
262
+ end
263
+
264
+ subject.should have_error("'./somefile' specified for #{dir} directory, is not a directory")
265
+ end
266
+ end
267
+ end