bpm 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 (261) hide show
  1. data/.gitignore +4 -0
  2. data/.gitmodules +0 -0
  3. data/Gemfile +16 -0
  4. data/README.md +55 -0
  5. data/TODO.md +3 -0
  6. data/bin/bpm +8 -0
  7. data/bpm.gemspec +41 -0
  8. data/lib/bpm.rb +18 -0
  9. data/lib/bpm/cli.rb +6 -0
  10. data/lib/bpm/cli/base.rb +358 -0
  11. data/lib/bpm/cli/owner.rb +46 -0
  12. data/lib/bpm/credentials.rb +36 -0
  13. data/lib/bpm/default.json +9 -0
  14. data/lib/bpm/generator.rb +69 -0
  15. data/lib/bpm/init_generator.rb +43 -0
  16. data/lib/bpm/libgems_ext.rb +11 -0
  17. data/lib/bpm/libgems_ext/config_file.rb +33 -0
  18. data/lib/bpm/libgems_ext/dependency_installer.rb +150 -0
  19. data/lib/bpm/libgems_ext/installer.rb +39 -0
  20. data/lib/bpm/libgems_ext/libgems.rb +39 -0
  21. data/lib/bpm/libgems_ext/spec_fetcher.rb +11 -0
  22. data/lib/bpm/local.rb +76 -0
  23. data/lib/bpm/package.rb +277 -0
  24. data/lib/bpm/pipeline.rb +100 -0
  25. data/lib/bpm/pipeline/directive_processor.rb +47 -0
  26. data/lib/bpm/pipeline/generated_asset.rb +68 -0
  27. data/lib/bpm/pipeline/transport_processor.rb +32 -0
  28. data/lib/bpm/project.rb +427 -0
  29. data/lib/bpm/project_generator.rb +34 -0
  30. data/lib/bpm/remote.rb +104 -0
  31. data/lib/bpm/repository.rb +18 -0
  32. data/lib/bpm/server.rb +44 -0
  33. data/lib/bpm/version.rb +3 -0
  34. data/spec/cli/add_spec.rb +159 -0
  35. data/spec/cli/build_spec.rb +87 -0
  36. data/spec/cli/fetch_spec.rb +135 -0
  37. data/spec/cli/fetched_spec.rb +52 -0
  38. data/spec/cli/init_spec.rb +50 -0
  39. data/spec/cli/list_spec.rb +74 -0
  40. data/spec/cli/login_spec.rb +110 -0
  41. data/spec/cli/new_spec.rb +92 -0
  42. data/spec/cli/owner_spec.rb +114 -0
  43. data/spec/cli/push_spec.rb +73 -0
  44. data/spec/cli/remove_spec.rb +84 -0
  45. data/spec/cli/unpack_spec.rb +72 -0
  46. data/spec/cli/unyank_spec.rb +73 -0
  47. data/spec/cli/yank_spec.rb +73 -0
  48. data/spec/credentials_spec.rb +23 -0
  49. data/spec/fixtures/badrake-0.8.7.spd +0 -0
  50. data/spec/fixtures/builder-3.0.0.spd +0 -0
  51. data/spec/fixtures/bundler-1.1.pre.spd +0 -0
  52. data/spec/fixtures/coffee-1.0.1.pre.spd +0 -0
  53. data/spec/fixtures/core-test-0.4.9.spd +0 -0
  54. data/spec/fixtures/core-test/bin/cot +3 -0
  55. data/spec/fixtures/core-test/lib/main.js +1 -0
  56. data/spec/fixtures/core-test/package.json +46 -0
  57. data/spec/fixtures/core-test/resources/runner.css +1 -0
  58. data/spec/fixtures/core-test/tests/test.js +1 -0
  59. data/spec/fixtures/custom_generator-1.0.spd +0 -0
  60. data/spec/fixtures/custom_generator/lib/main.js +1 -0
  61. data/spec/fixtures/custom_generator/package.json +12 -0
  62. data/spec/fixtures/custom_generator/templates/init/project.json +19 -0
  63. data/spec/fixtures/custom_generator/templates/project/app.js +1 -0
  64. data/spec/fixtures/custom_generator/templates/project/lib/main.js +0 -0
  65. data/spec/fixtures/custom_generator/templates/project_generator.rb +20 -0
  66. data/spec/fixtures/hello_world/LICENSE +19 -0
  67. data/spec/fixtures/hello_world/README.md +21 -0
  68. data/spec/fixtures/hello_world/assets/bpm_packages.js +13 -0
  69. data/spec/fixtures/hello_world/assets/bpm_styles.css +14 -0
  70. data/spec/fixtures/hello_world/assets/papa-smurf.jpg +0 -0
  71. data/spec/fixtures/hello_world/hello_world.json +20 -0
  72. data/spec/fixtures/hello_world/lib/main.js +9 -0
  73. data/spec/fixtures/hello_world/packages/custom_package/assets/dummy.txt +1 -0
  74. data/spec/fixtures/hello_world/packages/custom_package/css/sample_styles.css +3 -0
  75. data/spec/fixtures/hello_world/packages/custom_package/custom_dir/basic-module.js +1 -0
  76. data/spec/fixtures/hello_world/packages/custom_package/lib/main.js +1 -0
  77. data/spec/fixtures/hello_world/packages/custom_package/package.json +22 -0
  78. data/spec/fixtures/hello_world/tests/main-test.js +8 -0
  79. data/spec/fixtures/highline-1.6.1.spd +0 -0
  80. data/spec/fixtures/ivory-0.0.1.spd +0 -0
  81. data/spec/fixtures/jquery-1.4.3.spd +0 -0
  82. data/spec/fixtures/optparse-1.0.1.spd +0 -0
  83. data/spec/fixtures/rake-0.8.6.spd +0 -0
  84. data/spec/fixtures/rake-0.8.7.spd +0 -0
  85. data/spec/fixtures/simple_hello/assets/bpm_packages.js +1 -0
  86. data/spec/fixtures/simple_hello/lib/main.js +1 -0
  87. data/spec/fixtures/spade-0.5.0.spd +0 -0
  88. data/spec/fixtures/src/README.txt +1 -0
  89. data/spec/fixtures/src/bundler-1.1.pre/.gitignore +22 -0
  90. data/spec/fixtures/src/bundler-1.1.pre/CHANGELOG.md +646 -0
  91. data/spec/fixtures/src/bundler-1.1.pre/ISSUES.md +47 -0
  92. data/spec/fixtures/src/bundler-1.1.pre/LICENSE +21 -0
  93. data/spec/fixtures/src/bundler-1.1.pre/README.md +29 -0
  94. data/spec/fixtures/src/bundler-1.1.pre/UPGRADING.md +103 -0
  95. data/spec/fixtures/src/bundler-1.1.pre/bin/bundle +20 -0
  96. data/spec/fixtures/src/bundler-1.1.pre/lib/bundler.js +23 -0
  97. data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/definition.js +14 -0
  98. data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/dependency.js +15 -0
  99. data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/dsl.js +9 -0
  100. data/spec/fixtures/src/bundler-1.1.pre/lib/bundler/ui.js +6 -0
  101. data/spec/fixtures/src/bundler-1.1.pre/man/bundle-config.ronn +90 -0
  102. data/spec/fixtures/src/bundler-1.1.pre/man/bundle-exec.ronn +111 -0
  103. data/spec/fixtures/src/bundler-1.1.pre/man/bundle-install.ronn +314 -0
  104. data/spec/fixtures/src/bundler-1.1.pre/man/bundle-package.ronn +59 -0
  105. data/spec/fixtures/src/bundler-1.1.pre/man/bundle-update.ronn +176 -0
  106. data/spec/fixtures/src/bundler-1.1.pre/man/bundle.ronn +80 -0
  107. data/spec/fixtures/src/bundler-1.1.pre/man/gemfile.5.ronn +279 -0
  108. data/spec/fixtures/src/bundler-1.1.pre/man/index.txt +6 -0
  109. data/spec/fixtures/src/bundler-1.1.pre/package.json +19 -0
  110. data/spec/fixtures/src/coffee-1.0.1.pre/bin/cake +0 -0
  111. data/spec/fixtures/src/coffee-1.0.1.pre/bin/coffee +0 -0
  112. data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee.js +0 -0
  113. data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee/base.js +0 -0
  114. data/spec/fixtures/src/coffee-1.0.1.pre/lib/coffee/mocha/chai.js +0 -0
  115. data/spec/fixtures/src/coffee-1.0.1.pre/package.json +19 -0
  116. data/spec/fixtures/src/coffee-1.0.1.pre/qunit/coffee/test.js +0 -0
  117. data/spec/fixtures/src/coffee-1.0.1.pre/qunit/test.js +0 -0
  118. data/spec/fixtures/src/jquery/lib/main.js +7179 -0
  119. data/spec/fixtures/src/jquery/package.json +15 -0
  120. data/spec/fixtures/src/rake-0.8.6/CHANGES +436 -0
  121. data/spec/fixtures/src/rake-0.8.6/MIT-LICENSE +21 -0
  122. data/spec/fixtures/src/rake-0.8.6/README +196 -0
  123. data/spec/fixtures/src/rake-0.8.6/Rakefile +430 -0
  124. data/spec/fixtures/src/rake-0.8.6/TODO +20 -0
  125. data/spec/fixtures/src/rake-0.8.6/bin/rake +31 -0
  126. data/spec/fixtures/src/rake-0.8.6/doc/command_line_usage.rdoc +102 -0
  127. data/spec/fixtures/src/rake-0.8.6/doc/example/Rakefile1 +38 -0
  128. data/spec/fixtures/src/rake-0.8.6/doc/example/Rakefile2 +35 -0
  129. data/spec/fixtures/src/rake-0.8.6/doc/example/a.c +6 -0
  130. data/spec/fixtures/src/rake-0.8.6/doc/example/b.c +6 -0
  131. data/spec/fixtures/src/rake-0.8.6/doc/example/main.c +11 -0
  132. data/spec/fixtures/src/rake-0.8.6/doc/glossary.rdoc +51 -0
  133. data/spec/fixtures/src/rake-0.8.6/doc/jamis.rb +591 -0
  134. data/spec/fixtures/src/rake-0.8.6/doc/proto_rake.rdoc +127 -0
  135. data/spec/fixtures/src/rake-0.8.6/doc/rake.1.gz +0 -0
  136. data/spec/fixtures/src/rake-0.8.6/doc/rakefile.rdoc +534 -0
  137. data/spec/fixtures/src/rake-0.8.6/doc/rational.rdoc +151 -0
  138. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.4.14.rdoc +23 -0
  139. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.4.15.rdoc +35 -0
  140. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.0.rdoc +53 -0
  141. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.3.rdoc +78 -0
  142. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.5.4.rdoc +46 -0
  143. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.6.0.rdoc +141 -0
  144. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.0.rdoc +119 -0
  145. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.1.rdoc +59 -0
  146. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.2.rdoc +121 -0
  147. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.7.3.rdoc +47 -0
  148. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.0.rdoc +114 -0
  149. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.2.rdoc +165 -0
  150. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.3.rdoc +112 -0
  151. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.4.rdoc +147 -0
  152. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.5.rdoc +53 -0
  153. data/spec/fixtures/src/rake-0.8.6/doc/release_notes/rake-0.8.6.rdoc +55 -0
  154. data/spec/fixtures/src/rake-0.8.6/install.rb +88 -0
  155. data/spec/fixtures/src/rake-0.8.6/lib/rake.rb +2502 -0
  156. data/spec/fixtures/src/rake-0.8.6/lib/rake/alt_system.rb +108 -0
  157. data/spec/fixtures/src/rake-0.8.6/lib/rake/classic_namespace.rb +8 -0
  158. data/spec/fixtures/src/rake-0.8.6/lib/rake/clean.rb +33 -0
  159. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/compositepublisher.rb +24 -0
  160. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/ftptools.rb +153 -0
  161. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/publisher.rb +75 -0
  162. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  163. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/sshpublisher.rb +47 -0
  164. data/spec/fixtures/src/rake-0.8.6/lib/rake/contrib/sys.rb +209 -0
  165. data/spec/fixtures/src/rake-0.8.6/lib/rake/gempackagetask.rb +97 -0
  166. data/spec/fixtures/src/rake-0.8.6/lib/rake/loaders/makefile.rb +42 -0
  167. data/spec/fixtures/src/rake-0.8.6/lib/rake/packagetask.rb +184 -0
  168. data/spec/fixtures/src/rake-0.8.6/lib/rake/rake_test_loader.rb +5 -0
  169. data/spec/fixtures/src/rake-0.8.6/lib/rake/rdoctask.rb +209 -0
  170. data/spec/fixtures/src/rake-0.8.6/lib/rake/ruby182_test_unit_fix.rb +23 -0
  171. data/spec/fixtures/src/rake-0.8.6/lib/rake/runtest.rb +23 -0
  172. data/spec/fixtures/src/rake-0.8.6/lib/rake/tasklib.rb +23 -0
  173. data/spec/fixtures/src/rake-0.8.6/lib/rake/testtask.rb +161 -0
  174. data/spec/fixtures/src/rake-0.8.6/lib/rake/win32.rb +55 -0
  175. data/spec/fixtures/src/rake-0.8.6/package.json +18 -0
  176. data/spec/fixtures/src/rake-0.8.6/test/capture_stdout.rb +26 -0
  177. data/spec/fixtures/src/rake-0.8.7/CHANGES +440 -0
  178. data/spec/fixtures/src/rake-0.8.7/MIT-LICENSE +21 -0
  179. data/spec/fixtures/src/rake-0.8.7/README +196 -0
  180. data/spec/fixtures/src/rake-0.8.7/Rakefile +430 -0
  181. data/spec/fixtures/src/rake-0.8.7/TODO +20 -0
  182. data/spec/fixtures/src/rake-0.8.7/bin/rake +31 -0
  183. data/spec/fixtures/src/rake-0.8.7/doc/command_line_usage.rdoc +102 -0
  184. data/spec/fixtures/src/rake-0.8.7/doc/example/Rakefile1 +38 -0
  185. data/spec/fixtures/src/rake-0.8.7/doc/example/Rakefile2 +35 -0
  186. data/spec/fixtures/src/rake-0.8.7/doc/example/a.c +6 -0
  187. data/spec/fixtures/src/rake-0.8.7/doc/example/b.c +6 -0
  188. data/spec/fixtures/src/rake-0.8.7/doc/example/main.c +11 -0
  189. data/spec/fixtures/src/rake-0.8.7/doc/glossary.rdoc +51 -0
  190. data/spec/fixtures/src/rake-0.8.7/doc/jamis.rb +591 -0
  191. data/spec/fixtures/src/rake-0.8.7/doc/proto_rake.rdoc +127 -0
  192. data/spec/fixtures/src/rake-0.8.7/doc/rake.1.gz +0 -0
  193. data/spec/fixtures/src/rake-0.8.7/doc/rakefile.rdoc +534 -0
  194. data/spec/fixtures/src/rake-0.8.7/doc/rational.rdoc +151 -0
  195. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.4.14.rdoc +23 -0
  196. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.4.15.rdoc +35 -0
  197. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.0.rdoc +53 -0
  198. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.3.rdoc +78 -0
  199. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.5.4.rdoc +46 -0
  200. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.6.0.rdoc +141 -0
  201. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.0.rdoc +119 -0
  202. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.1.rdoc +59 -0
  203. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.2.rdoc +121 -0
  204. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.7.3.rdoc +47 -0
  205. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.0.rdoc +114 -0
  206. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.2.rdoc +165 -0
  207. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.3.rdoc +112 -0
  208. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.4.rdoc +147 -0
  209. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.5.rdoc +53 -0
  210. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.6.rdoc +55 -0
  211. data/spec/fixtures/src/rake-0.8.7/doc/release_notes/rake-0.8.7.rdoc +55 -0
  212. data/spec/fixtures/src/rake-0.8.7/install.rb +88 -0
  213. data/spec/fixtures/src/rake-0.8.7/lib/rake.rb +2506 -0
  214. data/spec/fixtures/src/rake-0.8.7/lib/rake/alt_system.rb +108 -0
  215. data/spec/fixtures/src/rake-0.8.7/lib/rake/classic_namespace.rb +8 -0
  216. data/spec/fixtures/src/rake-0.8.7/lib/rake/clean.rb +33 -0
  217. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/compositepublisher.rb +24 -0
  218. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/ftptools.rb +153 -0
  219. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/publisher.rb +75 -0
  220. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/rubyforgepublisher.rb +18 -0
  221. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/sshpublisher.rb +47 -0
  222. data/spec/fixtures/src/rake-0.8.7/lib/rake/contrib/sys.rb +209 -0
  223. data/spec/fixtures/src/rake-0.8.7/lib/rake/gempackagetask.rb +97 -0
  224. data/spec/fixtures/src/rake-0.8.7/lib/rake/loaders/makefile.rb +42 -0
  225. data/spec/fixtures/src/rake-0.8.7/lib/rake/packagetask.rb +184 -0
  226. data/spec/fixtures/src/rake-0.8.7/lib/rake/rake_test_loader.rb +5 -0
  227. data/spec/fixtures/src/rake-0.8.7/lib/rake/rdoctask.rb +209 -0
  228. data/spec/fixtures/src/rake-0.8.7/lib/rake/ruby182_test_unit_fix.rb +23 -0
  229. data/spec/fixtures/src/rake-0.8.7/lib/rake/runtest.rb +23 -0
  230. data/spec/fixtures/src/rake-0.8.7/lib/rake/tasklib.rb +23 -0
  231. data/spec/fixtures/src/rake-0.8.7/lib/rake/testtask.rb +161 -0
  232. data/spec/fixtures/src/rake-0.8.7/lib/rake/win32.rb +55 -0
  233. data/spec/fixtures/src/rake-0.8.7/package.json +18 -0
  234. data/spec/fixtures/src/rake-0.8.7/test/capture_stdout.rb +26 -0
  235. data/spec/fixtures/src/spade/lib/main.js +1 -0
  236. data/spec/fixtures/src/spade/package.json +15 -0
  237. data/spec/fixtures/transporter/lib/main.js +3 -0
  238. data/spec/fixtures/transporter/packages/transport/lib/wrapper.js +5 -0
  239. data/spec/fixtures/transporter/packages/transport/package.json +21 -0
  240. data/spec/fixtures/transporter/transporter.json +18 -0
  241. data/spec/gauntlet_spec.rb +33 -0
  242. data/spec/package_spec.rb +319 -0
  243. data/spec/pipeline_spec.rb +213 -0
  244. data/spec/project_spec.rb +130 -0
  245. data/spec/spec_helper.rb +42 -0
  246. data/spec/support/cli.rb +93 -0
  247. data/spec/support/env.rb +18 -0
  248. data/spec/support/fake.rb +53 -0
  249. data/spec/support/fake_gem_server.rb +72 -0
  250. data/spec/support/fake_gemcutter.rb +50 -0
  251. data/spec/support/matchers.rb +32 -0
  252. data/spec/support/path.rb +63 -0
  253. data/spec/support/project.rb +43 -0
  254. data/templates/init/assets/bpm_packages.js +7 -0
  255. data/templates/init/assets/bpm_styles.css +7 -0
  256. data/templates/init/project.json +16 -0
  257. data/templates/project/LICENSE +19 -0
  258. data/templates/project/README.md +21 -0
  259. data/templates/project/app.js +1 -0
  260. data/templates/project/index.html +13 -0
  261. metadata +627 -0
@@ -0,0 +1,135 @@
1
+ require "spec_helper"
2
+
3
+ describe 'bpm fetch' do
4
+
5
+ before do
6
+ goto_home
7
+ FileUtils.cp_r(fixtures('hello_world'), '.')
8
+ set_host
9
+ start_fake(FakeGemServer.new)
10
+ end
11
+
12
+ it "fetches all dependencies in a project when called without command" do
13
+ cd home('hello_world')
14
+ bpm "fetch"
15
+
16
+ stdout.read.should include("Fetched dependent packages for hello_world")
17
+
18
+ # note: ivory is a soft dependency from core-test
19
+ %w(spade-0.5.0 core-test-0.4.9 ivory-0.0.1 optparse-1.0.1).each do |package_name|
20
+ package_name.should be_fetched
21
+ package_name.should be_unpacked
22
+ end
23
+
24
+ end
25
+
26
+ it "fetches a valid package" do
27
+ bpm "fetch", "rake"
28
+
29
+ stdout.read.should include("Successfully fetched rake (0.8.7)")
30
+
31
+ "rake-0.8.7".should be_fetched
32
+ "rake-0.8.7".should be_unpacked
33
+ end
34
+
35
+ it "fetches a multiple gems" do
36
+ bpm "fetch", "rake", "builder"
37
+
38
+ output = stdout.read
39
+
40
+ %w(builder-3.0.0 rake-0.8.7).each do |pkg|
41
+ output.should include("Successfully fetched #{pkg.sub(/-[^-]*$/,'')} (#{pkg.sub(/^.*-/, '')})")
42
+ pkg.should be_fetched
43
+ pkg.should be_unpacked
44
+ end
45
+ end
46
+
47
+ it "fetches valid gems while ignoring invalid ones" do
48
+ bpm "fetch", "rake", "fake", :track_stderr => true
49
+
50
+ stdout.read.should include("Successfully fetched rake (0.8.7)")
51
+ stderr.read.should include("Can't find package fake")
52
+
53
+ "rake-0.8.7".should be_fetched
54
+ "rake-0.8.7".should be_unpacked
55
+ "fake-0".should_not be_fetched
56
+ "fake-0".should_not be_unpacked
57
+ end
58
+
59
+ it "fails when fetching an invalid gem" do
60
+ bpm "fetch", "fake", :track_stderr => true
61
+
62
+ stderr.read.should include("Can't find package fake")
63
+ "rake-0.8.7".should_not be_fetched
64
+ "rake-0.8.7".should_not be_unpacked
65
+ "fake-0".should_not be_fetched
66
+ "fake-0".should_not be_unpacked
67
+ end
68
+
69
+ it "fails if bpm can't write to the bpm directory" do
70
+ FileUtils.mkdir_p bpm_dir
71
+ FileUtils.chmod 0555, bpm_dir
72
+
73
+ bpm "fetch", "rake", :track_stderr => true
74
+ exit_status.should_not be_success
75
+
76
+ "rake-0.8.7".should_not be_fetched
77
+ "rake-0.8.7".should_not be_unpacked
78
+ end
79
+
80
+ it "fetches gems with a different version" do
81
+ bpm "fetch", "rake", "-v", "0.8.6"
82
+
83
+ stdout.read.should include("Successfully fetched rake (0.8.6)")
84
+
85
+ "rake-0.8.7".should_not be_fetched
86
+ "rake-0.8.7".should_not be_unpacked
87
+ "rake-0.8.6".should be_fetched
88
+ "rake-0.8.6".should be_unpacked
89
+ end
90
+
91
+ it "fetches a valid prerelease package" do
92
+ bpm "fetch", "bundler", "--pre"
93
+
94
+ stdout.read.should include("Successfully fetched bundler (1.1.pre)")
95
+
96
+ "bundler-1.1.pre".should be_fetched
97
+ "bundler-1.1.pre".should be_unpacked
98
+ end
99
+
100
+ it "does not fetch the normal package when asking for a prerelease" do
101
+ bpm "fetch", "rake", "--pre", :track_stderr => true
102
+
103
+ stderr.read.should include("Can't find package rake")
104
+
105
+ "rake-0.8.7".should_not be_fetched
106
+ "rake-0.8.7".should_not be_unpacked
107
+ "rake-0.8.6".should_not be_fetched
108
+ "rake-0.8.6".should_not be_unpacked
109
+ end
110
+
111
+ it "requires at least one package to fetch (when not in a project)" do
112
+ bpm "fetch", :track_stderr => true
113
+ stderr.read.should include("called incorrectly")
114
+ end
115
+
116
+ it "does not make a .gem directory" do
117
+ bpm "fetch", "rake"
118
+ wait
119
+ home(".gem").exist?.should be_false
120
+ end
121
+
122
+ it "fetches package dependencies" do
123
+ bpm "fetch", "core-test"
124
+
125
+ output = stdout.read
126
+
127
+ %w(ivory-0.0.1 optparse-1.0.1 core-test-0.4.9).each do |name|
128
+ output.should include("Successfully fetched #{name.sub(/-[^-]*$/,'')} (#{name.sub(/^.*-/, '')})")
129
+
130
+ name.should be_fetched
131
+ name.should be_unpacked
132
+ end
133
+ end
134
+
135
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe "bpm fetched" do
4
+ before do
5
+ goto_home
6
+ set_host
7
+ start_fake(FakeGemServer.new)
8
+ end
9
+
10
+ it "lists fetched packages" do
11
+ bpm "fetch", "rake"
12
+ wait
13
+ bpm "fetched"
14
+
15
+ output = stdout.read
16
+ output.should include("rake (0.8.7)")
17
+ output.should_not include("0.8.6")
18
+ output.should_not include("builder")
19
+ output.should_not include("bundler")
20
+ output.should_not include("highline")
21
+ end
22
+
23
+ it "lists all installed packages from different versions" do
24
+ bpm "fetch", "rake"
25
+ wait
26
+ bpm "fetch", "rake", "-v", "0.8.6"
27
+ wait
28
+ bpm "fetched"
29
+
30
+ output = stdout.read
31
+ output.should include("rake (0.8.7, 0.8.6)")
32
+ end
33
+
34
+ it "filters packages when given an argument" do
35
+ bpm "fetch", "rake"
36
+ wait
37
+ bpm "fetch", "builder"
38
+ wait
39
+ bpm "fetched", "builder"
40
+
41
+ output = stdout.read
42
+ output.should_not include("rake")
43
+ output.should include("builder (3.0.0)")
44
+ end
45
+
46
+ it "says it couldn't find any if none found" do
47
+ bpm "fetched", "rails", :track_stderr => true
48
+
49
+ stderr.read.strip.should == 'No packages found matching "rails".'
50
+ exit_status.should_not be_success
51
+ end
52
+ end
@@ -0,0 +1,50 @@
1
+ require "spec_helper"
2
+
3
+ describe "bpm init" do
4
+
5
+ before do
6
+ @project_path = home("new_project")
7
+ FileUtils.mkdir @project_path
8
+ cd @project_path
9
+ end
10
+
11
+ it "should create files" do
12
+ bpm 'init'
13
+
14
+ files = %w(new_project.json assets assets/bpm_packages.js assets/bpm_styles.css)
15
+
16
+ output = stdout.read.gsub(/\e\[\d+m/,'') #without colors
17
+
18
+ files.each do |file|
19
+ output.should =~ /create\s+#{file}$/
20
+ File.join(@project_path, file).should exist
21
+ end
22
+ end
23
+
24
+ it "should fetch dependencies"
25
+
26
+ it "should build"
27
+
28
+ it "should not overwrite existing files" do
29
+ File.open("new_project.json", 'w'){|f| f.print "Valuable info!" }
30
+
31
+ bpm 'init', '--skip' # skip, since we can't test the prompt
32
+
33
+ output = stdout.read.gsub(/\e\[\d+m/,'') # without colors
34
+
35
+ output.should =~ /skip\s+new_project.json/
36
+ File.read("new_project.json").should == "Valuable info!"
37
+ end
38
+
39
+ it "should allow a name to be specified" do
40
+ bpm 'init', '--name=DifferentName' and wait
41
+
42
+ File.join(@project_path, "DifferentName.json").should exist
43
+ File.join(@project_path, "new_project.json").should_not exist
44
+ end
45
+
46
+ it "should initialize multiple at once"
47
+
48
+ it "should not allow a name when initializing multiple"
49
+
50
+ end
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe "bpm list" do
4
+ before do
5
+ goto_home
6
+ set_host
7
+ start_fake(FakeGemServer.new)
8
+ end
9
+
10
+ it "lists latest packages by default" do
11
+ bpm "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 packages when given the all argument" do
19
+ bpm "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 packages when given an argument" do
27
+ bpm "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 packages when given an argument and shows all versions" do
35
+ bpm "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 packages" do
43
+ bpm "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 packages" do
52
+ bpm "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
+ bpm "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
+ bpm "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,110 @@
1
+ require "spec_helper"
2
+
3
+ describe "bpm login" do
4
+ let(:email) { "email@example.com" }
5
+ let(:password) { "secrets" }
6
+ let(:api_key) { "deadbeef" }
7
+ let(:creds) { bpm_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
+ set_host
21
+ start_fake(protected_fake)
22
+ end
23
+
24
+ it "says email that user is logging in as" do
25
+ bpm "login"
26
+ input email
27
+ input password
28
+ output = stdout.read
29
+ output.should include("Enter your BPM 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 BPM_DIR/credentials" do
34
+ bpm "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)[:bpm_api_key].should == api_key
41
+ YAML.load_file(creds)[:bpm_email].should == email
42
+ end
43
+
44
+ it "notifies user if bad creds given" do
45
+ bpm "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
+ bpm "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 BPM 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 BPM 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)[:bpm_api_key].should == api_key
73
+ YAML.load_file(creds)[:bpm_email].should == email
74
+ end
75
+
76
+ it "will login with credentials provided as cli arguments" do
77
+ bpm "login", "-u", email, "-p", password
78
+ output = stdout.read
79
+ output.should_not include("Enter your BPM credentials.")
80
+ output.should include("Logging in as #{email}...")
81
+ end
82
+
83
+ it "will not retry on failure if username and password are provided as cli arguments" do
84
+ bpm "login", "-u", email, "-p", "badpassword"
85
+ output = stdout.read
86
+ output.should_not include("Enter your BPM credentials.")
87
+ output.should include("Logging in as #{email}...")
88
+ output.should include("Incorrect email or password.")
89
+ end
90
+
91
+ it "will only prompt for username if password is provided" do
92
+ bpm "login", "-p", password
93
+ input email
94
+ output = stdout.read
95
+ output.should include("Enter your BPM credentials.")
96
+ output.should include("Email:")
97
+ output.should_not include("Password:")
98
+ output.should include("Logging in as #{email}...")
99
+ end
100
+
101
+ it "will only prompt for password if username is provided" do
102
+ bpm "login", "-u", email
103
+ input password
104
+ output = stdout.read
105
+ output.should include("Enter your BPM credentials.")
106
+ output.should_not include("Email:")
107
+ output.should include("Password:")
108
+ output.should include("Logging in as #{email}...")
109
+ end
110
+ end
@@ -0,0 +1,92 @@
1
+ require "spec_helper"
2
+
3
+ describe "bpm new" do
4
+
5
+ describe "normal" do
6
+
7
+ before do
8
+ cd home
9
+ end
10
+
11
+ it "should create files" do
12
+ bpm 'new', 'BpmTest'
13
+
14
+ files = %w(LICENSE README.md index.html app.js BpmTest.json assets assets/bpm_packages.js assets/bpm_styles.css)
15
+
16
+ # output without coloration
17
+ output = stdout.read.gsub(/\e\[\d+m/,'')
18
+
19
+ files.each do |file|
20
+ output.should =~ /create\s+#{file}$/
21
+ home("bpm_test", file).should exist
22
+ end
23
+ end
24
+
25
+ it "should fetch dependencies"
26
+
27
+ it "should build"
28
+
29
+ it "should not generate into existing directory" do
30
+ FileUtils.mkdir 'bpm_test'
31
+
32
+ bpm 'new', 'BpmTest'
33
+
34
+ stdout.read.should_not include("create")
35
+ `ls #{home("bpm_test")}`.should be_empty
36
+ end
37
+
38
+ it "should allow a path to be specified" do
39
+ bpm 'new', 'BpmTest', '--path=DifferentLocation' and wait
40
+
41
+ home("DifferentLocation").should exist
42
+ home("DifferentLocation", "BpmTest.json").should exist
43
+ home("DifferentLocation", "DifferentLocation.json").should_not exist
44
+ home("bpm_test").should_not exist
45
+ end
46
+
47
+ end
48
+
49
+ describe "package templates" do
50
+
51
+ before do
52
+ goto_home
53
+
54
+ # Install package
55
+ cd fixtures
56
+ with_env do
57
+ BPM::Remote.new.install("custom_generator-1.0.spd", ">= 0", false)
58
+ end
59
+ cd home
60
+ end
61
+
62
+ it "should create custom files" do
63
+ bpm 'new', 'BpmTest', '--package=custom_generator'
64
+
65
+ files = %w(lib lib/main.js app.js BpmTest.json assets assets/bpm_packages.js assets/bpm_styles.css)
66
+
67
+ # output without coloration
68
+ output = stdout.read.gsub(/\e\[\d+m/,'')
69
+
70
+ files.each do |file|
71
+ output.should =~ /create\s+#{file}$/
72
+ home("bpm_test", file).should exist
73
+ end
74
+ end
75
+
76
+ it "should create custom app.js with explicit generator" do
77
+ bpm 'new', 'BpmTest', '--package=custom_generator' and wait
78
+
79
+ File.read(home("bpm_test", "app.js")).should == "require('BpmTest/main.js')\n"
80
+ end
81
+
82
+ it "should create custom project.json without explicit generator" do
83
+ bpm 'new', 'BpmTest', '--package=custom_generator' and wait
84
+
85
+ File.read(home("bpm_test", "BpmTest.json")).should =~ /"spade": ">= 0"/
86
+ end
87
+
88
+ it "should install the package if it doesn't exist locally"
89
+
90
+ end
91
+
92
+ end