juwelier 2.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 (164) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.document +8 -0
  4. data/.semver +5 -0
  5. data/.travis.yml +7 -0
  6. data/.yardopts +2 -0
  7. data/ChangeLog.markdown +230 -0
  8. data/Gemfile +40 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.markdown +252 -0
  11. data/Rakefile +78 -0
  12. data/bin/juwelier +9 -0
  13. data/features/generator/cucumber.feature +103 -0
  14. data/features/generator/directory_layout.feature +86 -0
  15. data/features/generator/dotdocument.feature +13 -0
  16. data/features/generator/env_options.feature +9 -0
  17. data/features/generator/gemfile.feature +81 -0
  18. data/features/generator/git.feature +102 -0
  19. data/features/generator/license.feature +20 -0
  20. data/features/generator/rakefile.feature +158 -0
  21. data/features/generator/readme.feature +12 -0
  22. data/features/generator/test.feature +54 -0
  23. data/features/generator/test_helper.feature +149 -0
  24. data/features/placeholder.feature +5 -0
  25. data/features/step_definitions/debug_steps.rb +6 -0
  26. data/features/step_definitions/filesystem_steps.rb +70 -0
  27. data/features/step_definitions/generator_steps.rb +387 -0
  28. data/features/step_definitions/task_steps.rb +6 -0
  29. data/features/support/env.rb +41 -0
  30. data/features/tasks/build_gem.feature +9 -0
  31. data/features/tasks/version.feature +31 -0
  32. data/features/tasks/version_bumping.feature +49 -0
  33. data/juwelier.gemspec +241 -0
  34. data/lib/juwelier.rb +178 -0
  35. data/lib/juwelier/commands.rb +20 -0
  36. data/lib/juwelier/commands/build_gem.rb +40 -0
  37. data/lib/juwelier/commands/check_dependencies.rb +66 -0
  38. data/lib/juwelier/commands/install_gem.rb +31 -0
  39. data/lib/juwelier/commands/release_gemspec.rb +87 -0
  40. data/lib/juwelier/commands/release_to_git.rb +64 -0
  41. data/lib/juwelier/commands/release_to_rubygems.rb +28 -0
  42. data/lib/juwelier/commands/validate_gemspec.rb +30 -0
  43. data/lib/juwelier/commands/version/base.rb +55 -0
  44. data/lib/juwelier/commands/version/bump_major.rb +13 -0
  45. data/lib/juwelier/commands/version/bump_minor.rb +12 -0
  46. data/lib/juwelier/commands/version/bump_patch.rb +14 -0
  47. data/lib/juwelier/commands/version/write.rb +12 -0
  48. data/lib/juwelier/commands/write_gemspec.rb +39 -0
  49. data/lib/juwelier/errors.rb +8 -0
  50. data/lib/juwelier/gemcutter_tasks.rb +8 -0
  51. data/lib/juwelier/gemspec_helper.rb +87 -0
  52. data/lib/juwelier/generator.rb +304 -0
  53. data/lib/juwelier/generator/application.rb +63 -0
  54. data/lib/juwelier/generator/bacon_mixin.rb +43 -0
  55. data/lib/juwelier/generator/github_mixin.rb +22 -0
  56. data/lib/juwelier/generator/micronaut_mixin.rb +41 -0
  57. data/lib/juwelier/generator/minitest_mixin.rb +42 -0
  58. data/lib/juwelier/generator/options.rb +172 -0
  59. data/lib/juwelier/generator/rdoc_mixin.rb +13 -0
  60. data/lib/juwelier/generator/riot_mixin.rb +42 -0
  61. data/lib/juwelier/generator/rspec_mixin.rb +42 -0
  62. data/lib/juwelier/generator/shindo_mixin.rb +44 -0
  63. data/lib/juwelier/generator/shoulda_mixin.rb +42 -0
  64. data/lib/juwelier/generator/testspec_mixin.rb +42 -0
  65. data/lib/juwelier/generator/testunit_mixin.rb +39 -0
  66. data/lib/juwelier/generator/yard_mixin.rb +15 -0
  67. data/lib/juwelier/rubyforge_tasks.rb +95 -0
  68. data/lib/juwelier/rubygems_dot_org_tasks.rb +38 -0
  69. data/lib/juwelier/rubygems_tasks.rb +38 -0
  70. data/lib/juwelier/specification.rb +110 -0
  71. data/lib/juwelier/tasks.rb +239 -0
  72. data/lib/juwelier/templates/.document +5 -0
  73. data/lib/juwelier/templates/.gitignore +49 -0
  74. data/lib/juwelier/templates/Gemfile +12 -0
  75. data/lib/juwelier/templates/LICENSE.txt +20 -0
  76. data/lib/juwelier/templates/README.rdoc +19 -0
  77. data/lib/juwelier/templates/Rakefile +9 -0
  78. data/lib/juwelier/templates/bacon/flunking.rb +7 -0
  79. data/lib/juwelier/templates/bacon/helper.rb +10 -0
  80. data/lib/juwelier/templates/bundler_setup.erb +10 -0
  81. data/lib/juwelier/templates/features/default.feature +9 -0
  82. data/lib/juwelier/templates/features/support/env.rb +11 -0
  83. data/lib/juwelier/templates/juwelier_tasks.erb +31 -0
  84. data/lib/juwelier/templates/micronaut/flunking.rb +7 -0
  85. data/lib/juwelier/templates/micronaut/helper.rb +19 -0
  86. data/lib/juwelier/templates/minitest/flunking.rb +7 -0
  87. data/lib/juwelier/templates/minitest/helper.rb +13 -0
  88. data/lib/juwelier/templates/other_tasks.erb +70 -0
  89. data/lib/juwelier/templates/riot/flunking.rb +11 -0
  90. data/lib/juwelier/templates/riot/helper.rb +5 -0
  91. data/lib/juwelier/templates/rspec/.rspec +1 -0
  92. data/lib/juwelier/templates/rspec/flunking.rb +7 -0
  93. data/lib/juwelier/templates/rspec/helper.rb +14 -0
  94. data/lib/juwelier/templates/shindo/flunking.rb +8 -0
  95. data/lib/juwelier/templates/shindo/helper.rb +7 -0
  96. data/lib/juwelier/templates/shoulda/flunking.rb +7 -0
  97. data/lib/juwelier/templates/shoulda/helper.rb +12 -0
  98. data/lib/juwelier/templates/simplecov.erb +16 -0
  99. data/lib/juwelier/templates/testspec/flunking.rb +7 -0
  100. data/lib/juwelier/templates/testspec/helper.rb +7 -0
  101. data/lib/juwelier/templates/testunit/flunking.rb +7 -0
  102. data/lib/juwelier/templates/testunit/helper.rb +11 -0
  103. data/lib/juwelier/version.rb +10 -0
  104. data/lib/juwelier/version_helper.rb +141 -0
  105. data/test/fixtures/bar/VERSION.yml +4 -0
  106. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  107. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  108. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  109. data/test/fixtures/existing-project-with-version-constant/.document +5 -0
  110. data/test/fixtures/existing-project-with-version-constant/.gitignore +5 -0
  111. data/test/fixtures/existing-project-with-version-constant/LICENSE.txt +20 -0
  112. data/test/fixtures/existing-project-with-version-constant/README.rdoc +7 -0
  113. data/test/fixtures/existing-project-with-version-constant/Rakefile +85 -0
  114. data/test/fixtures/existing-project-with-version-constant/existing-project-with-version.gemspec +29 -0
  115. data/test/fixtures/existing-project-with-version-constant/lib/existing_project_with_version.rb +0 -0
  116. data/test/fixtures/existing-project-with-version-constant/test/existing_project_with_version_test.rb +7 -0
  117. data/test/fixtures/existing-project-with-version-constant/test/test_helper.rb +10 -0
  118. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  119. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  120. data/test/fixtures/existing-project-with-version-plaintext/LICENSE.txt +20 -0
  121. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  122. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +84 -0
  123. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  124. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  125. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  126. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  127. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  128. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  129. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  130. data/test/fixtures/existing-project-with-version-yaml/LICENSE.txt +20 -0
  131. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  132. data/test/fixtures/existing-project-with-version-yaml/Rakefile +84 -0
  133. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  134. data/test/fixtures/existing-project-with-version-yaml/bin/foo_the_ultimate_bin +0 -0
  135. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  136. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  137. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  138. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  139. data/test/geminstaller.yml +12 -0
  140. data/test/juwelier/commands/test_build_gem.rb +112 -0
  141. data/test/juwelier/commands/test_install_gem.rb +35 -0
  142. data/test/juwelier/commands/test_release_to_gemcutter.rb +39 -0
  143. data/test/juwelier/commands/test_release_to_git.rb +271 -0
  144. data/test/juwelier/commands/test_release_to_github.rb +477 -0
  145. data/test/juwelier/commands/test_validate_gemspec.rb +27 -0
  146. data/test/juwelier/commands/test_write_gemspec.rb +103 -0
  147. data/test/juwelier/commands/version/test_base.rb +53 -0
  148. data/test/juwelier/commands/version/test_bump_major.rb +22 -0
  149. data/test/juwelier/commands/version/test_bump_minor.rb +19 -0
  150. data/test/juwelier/commands/version/test_bump_patch.rb +20 -0
  151. data/test/juwelier/commands/version/test_write.rb +22 -0
  152. data/test/juwelier/generator/test_application.rb +142 -0
  153. data/test/juwelier/generator/test_options.rb +227 -0
  154. data/test/juwelier/test_gemspec_helper.rb +44 -0
  155. data/test/juwelier/test_generator.rb +140 -0
  156. data/test/juwelier/test_generator_initialization.rb +150 -0
  157. data/test/juwelier/test_generator_mixins.rb +23 -0
  158. data/test/juwelier/test_specification.rb +245 -0
  159. data/test/juwelier/test_tasks.rb +50 -0
  160. data/test/juwelier/test_version_helper.rb +214 -0
  161. data/test/shoulda_macros/juwelier_macros.rb +35 -0
  162. data/test/test_helper.rb +174 -0
  163. data/test/test_juwelier.rb +177 -0
  164. metadata +396 -0
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 5
4
+ :patch: 3
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{existing-project-with-version}
5
+ s.version = "1.5.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Josh Nichols"]
9
+ s.date = %q{2009-03-13}
10
+ s.email = %q{fred.mitchell@gmx.com}
11
+ s.extra_rdoc_files = ["README.rdoc", "LICENSE"]
12
+ s.files = ["README.rdoc", "VERSION.yml", "lib/existing_project_with_version.rb", "test/existing_project_with_version_test.rb", "test/test_helper.rb", "LICENSE"]
13
+ s.has_rdoc = true
14
+ s.homepage = %q{http://github.com/flajann2/existing-project-with-version}
15
+ s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
16
+ s.require_paths = ["lib"]
17
+ s.rubygems_version = %q{1.3.1}
18
+ s.summary = %q{Summarize your gem}
19
+
20
+ if s.respond_to? :specification_version then
21
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
+ s.specification_version = 2
23
+
24
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
+ else
26
+ end
27
+ else
28
+ end
29
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class ExistingProjectWithVersionTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'existing_project_with_version'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,12 @@
1
+ # Dependencies required to run the test suite
2
+ gems:
3
+ - name: rspec
4
+ version: '~> 1.1.12'
5
+ - name: Shoulda
6
+ version: '~> 1.2.0'
7
+ - name: ruby-debug
8
+ version: '~> 0.10.3'
9
+ - name: rr
10
+ version: '~> 0.7.1'
11
+ - name: mhennemeyer-output_catcher
12
+ version: '~> 1.0.1'
@@ -0,0 +1,112 @@
1
+ require 'test_helper'
2
+ require 'juwelier/commands/build_gem'
3
+
4
+ class Juwelier
5
+ module Commands
6
+ class TestBuildGem < Test::Unit::TestCase
7
+
8
+ context "after running without a version" do
9
+ setup do
10
+ initialize_build_gem_environment
11
+ @command.run
12
+ end
13
+
14
+ should "check if the gemspec helper has a version" do
15
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.has_version? }
16
+ end
17
+
18
+ should "update version of gemspec helper if the gemspec doesn't have a version" do
19
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.update_version(@version_helper)}
20
+ end
21
+
22
+ should "call gemspec helper's parse" do
23
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.parse }
24
+ end
25
+
26
+ should "build from parsed gemspec" do
27
+ if Gem::Version.new(`gem -v`) >= Gem::Version.new("2.0.0.a")
28
+ assert_received(Gem::Package) {|builder_class| builder_class.build(@gemspec) }
29
+ else
30
+ assert_received(Gem::Builder) {|builder_class| builder_class.new(@gemspec) }
31
+ assert_received(@builder) {|builder| builder.build }
32
+ end
33
+ end
34
+
35
+ should 'make package directory' do
36
+ assert_received(@file_utils) {|file_utils| file_utils.mkdir_p './pkg'}
37
+ end
38
+
39
+ should 'move built gem into package directory' do
40
+ assert_received(@file_utils) {|file_utils| file_utils.mv './zomg-1.2.3.gem', './pkg'}
41
+ end
42
+ end
43
+
44
+ context 'after running with a version' do
45
+ setup do
46
+ initialize_build_gem_environment true
47
+ @command.run
48
+ end
49
+
50
+ should "check if the gemspec helper has a version" do
51
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.has_version? }
52
+ end
53
+
54
+ should "update version of gemspec helper if the gemspec doesn't have a version" do
55
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.update_version(@version_helper).never }
56
+ end
57
+
58
+ end
59
+
60
+ build_command_context "build for juwelier" do
61
+ setup do
62
+ @command = Juwelier::Commands::BuildGem.build_for(@juwelier)
63
+ end
64
+
65
+ should "assign base_dir" do
66
+ assert_same @base_dir, @juwelier.base_dir
67
+ end
68
+
69
+ should "assign gemspec_helper" do
70
+ assert_same @gemspec_helper, @juwelier.gemspec_helper
71
+ end
72
+
73
+ should "return BuildGem" do
74
+ assert_kind_of Juwelier::Commands::BuildGem, @command
75
+ end
76
+ end
77
+
78
+ def initialize_build_gem_environment(has_version = false)
79
+ @gemspec = Object.new
80
+ stub(@gemspec).file_name { 'zomg-1.2.3.gem' }
81
+
82
+ @gemspec_helper = Object.new
83
+ stub(@gemspec_helper).parse { @gemspec }
84
+ stub(@gemspec_helper).update_version
85
+ stub(@gemspec_helper).has_version? { has_version }
86
+
87
+ @version_helper = "Juwelier::VersionHelper"
88
+
89
+ @builder = Object.new
90
+ if Gem::Version.new(`gem -v`) >= Gem::Version.new("2.0.0.a")
91
+ stub(Gem::Package).build { 'zomg-1.2.3.gem' }
92
+ else
93
+ stub(Gem::Builder).new { @builder }
94
+ stub(@builder).build { 'zomg-1.2.3.gem' }
95
+ end
96
+
97
+ @file_utils = Object.new
98
+ stub(@file_utils).mkdir_p './pkg'
99
+ stub(@file_utils).mv './zomg-1.2.3.gem', './pkg'
100
+
101
+ @base_dir = '.'
102
+
103
+ @command = Juwelier::Commands::BuildGem.new
104
+ @command.base_dir = @base_dir
105
+ @command.file_utils = @file_utils
106
+ @command.gemspec_helper = @gemspec_helper
107
+ @command.version_helper = @version_helper
108
+ end
109
+
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ class Juwelier
4
+ module Commands
5
+ class TestInstallGem < Test::Unit::TestCase
6
+ rubyforge_command_context "running" do
7
+ setup do
8
+ stub(@gemspec_helper).gem_path { 'pkg/zomg-1.1.1.gem' }
9
+ stub(@command).gem_command { 'ruby -S gem' }
10
+ stub(@command).sh
11
+
12
+ @command.run
13
+ end
14
+
15
+ should "call sh with gem install" do
16
+ assert_received(@command) {|command| command.sh 'ruby -S gem install pkg/zomg-1.1.1.gem' }
17
+ end
18
+ end
19
+
20
+ build_command_context "build for juwelier" do
21
+ setup do
22
+ @command = Juwelier::Commands::InstallGem.build_for(@juwelier)
23
+ end
24
+
25
+ should "assign gemspec helper" do
26
+ assert_equal @gemspec_helper, @command.gemspec_helper
27
+ end
28
+
29
+ should "assign output" do
30
+ assert_equal @output, @command.output
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ require 'test_helper'
2
+
3
+ class Juwelier
4
+ module Commands
5
+ class TestReleaseToRubygems < Test::Unit::TestCase
6
+ def self.subject
7
+ Juwelier::Commands::ReleaseToRubygems.new
8
+ end
9
+
10
+ gemcutter_command_context "rubyforge_project is defined in gemspec and package exists on rubyforge" do
11
+ setup do
12
+ stub(@gemspec_helper).gem_path {'pkg/zomg-1.2.3.gem'}
13
+ stub(@command).sh
14
+ @command.run
15
+ end
16
+
17
+ should "push to rubygems" do
18
+ push_command = "gem push #{@gemspec_helper.gem_path}"
19
+ assert_received(@command) { |command| command.sh(push_command) }
20
+ end
21
+ end
22
+
23
+ build_command_context "build for juwelier" do
24
+ setup do
25
+ @command = Juwelier::Commands::ReleaseToRubygems.build_for(@juwelier)
26
+ end
27
+
28
+ should "assign gemspec helper" do
29
+ assert_equal @gemspec_helper, @command.gemspec_helper
30
+ end
31
+
32
+ should "assign output" do
33
+ assert_equal @output, @command.output
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,271 @@
1
+ require 'test_helper'
2
+
3
+ class Juwelier
4
+ module Commands
5
+ class TestReleaseToGit < Test::Unit::TestCase
6
+
7
+ rubyforge_command_context "running" do
8
+ context "happily" do
9
+ setup do
10
+ stub(@command).clean_staging_area? { true }
11
+
12
+ stub(@repo).checkout(anything)
13
+ stub(@repo) do
14
+ add_tag(anything)
15
+ push(anything, anything)
16
+ end
17
+
18
+ stub(@repo).push
19
+
20
+ stub(@command).release_not_tagged? { true }
21
+
22
+ @command.run
23
+ end
24
+
25
+ should "checkout master" do
26
+ assert_received(@repo) {|repo| repo.checkout('master') }
27
+ end
28
+
29
+ should "push" do
30
+ assert_received(@repo) {|repo| repo.push('origin', 'master:master') }
31
+ end
32
+
33
+ end
34
+
35
+ context "happily with different remote, local branch and remote branch" do
36
+ setup do
37
+ stub(@command).clean_staging_area? { true }
38
+ stub(@command).release_tag { "v1.2.0" }
39
+
40
+ stub(@repo).checkout(anything)
41
+ stub(@repo) do
42
+ add_tag(anything)
43
+ push(anything, anything)
44
+ end
45
+
46
+ stub(@repo).push
47
+
48
+ stub(@command).release_not_tagged? { true }
49
+
50
+ @command.run({:remote => 'upstream', :local_branch => 'feature', :remote_branch => 'v1'})
51
+ end
52
+
53
+ should "checkout master" do
54
+ assert_received(@repo) {|repo| repo.checkout('feature') }
55
+ end
56
+
57
+ should "tag version" do
58
+ assert_received(@repo) {|repo| repo.add_tag('v1.2.0') }
59
+ end
60
+
61
+ should "push" do
62
+ assert_received(@repo) {|repo| repo.push('upstream', 'feature:v1') }
63
+ end
64
+
65
+ end
66
+
67
+ context "happily with different branch" do
68
+ setup do
69
+ stub(@command).clean_staging_area? { true }
70
+ stub(@command).release_tag { "v3.2.0" }
71
+
72
+ stub(@repo).checkout(anything)
73
+ stub(@repo) do
74
+ add_tag(anything)
75
+ push(anything, anything)
76
+ end
77
+
78
+ stub(@repo).push
79
+
80
+ stub(@command).release_not_tagged? { true }
81
+
82
+ @command.run({:branch => 'v3'})
83
+ end
84
+
85
+ should "checkout master" do
86
+ assert_received(@repo) {|repo| repo.checkout('v3') }
87
+ end
88
+
89
+ should "tag version" do
90
+ assert_received(@repo) {|repo| repo.add_tag('v3.2.0') }
91
+ end
92
+
93
+ should "push" do
94
+ assert_received(@repo) {|repo| repo.push('origin', 'v3:v3') }
95
+ end
96
+ end
97
+
98
+ context "with an unclean staging area" do
99
+ setup do
100
+ stub(@command).clean_staging_area? { false }
101
+ stub(@command).system
102
+ end
103
+
104
+ should 'raise error' do
105
+ assert_raises RuntimeError, /try commiting/i do
106
+ @command.run
107
+ end
108
+ end
109
+
110
+ should 'display git status' do
111
+ @command.run rescue nil
112
+ assert_received(@command) {|command| command.system("git status") }
113
+ end
114
+ end
115
+
116
+ context "with a release already tagged" do
117
+ setup do
118
+ stub(@command).clean_staging_area? { true }
119
+
120
+ stub(@repo).checkout(anything)
121
+
122
+ stub(@repo).push
123
+
124
+ stub(@command).release_not_tagged? { false }
125
+
126
+ @command.run
127
+ end
128
+
129
+ should "checkout master" do
130
+ assert_received(@repo) {|repo| repo.checkout('master') }
131
+ end
132
+
133
+ should "push" do
134
+ assert_received(@repo) {|repo| repo.push('origin', 'master:master') }
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+
141
+
142
+ build_command_context "building from juwelier" do
143
+ setup do
144
+ @command = Juwelier::Commands::ReleaseToGit.build_for(@juwelier)
145
+ end
146
+
147
+ should "assign gemspec" do
148
+ assert_same @gemspec, @command.gemspec
149
+ end
150
+
151
+ should "assign version" do
152
+ assert_same @version, @command.version
153
+ end
154
+
155
+ should "assign repo" do
156
+ assert_same @repo, @command.repo
157
+ end
158
+
159
+ should "assign output" do
160
+ assert_same @output, @command.output
161
+ end
162
+
163
+ should "assign gemspec_helper" do
164
+ assert_same @gemspec_helper, @command.gemspec_helper
165
+ end
166
+
167
+ should "assign base_dir" do
168
+ assert_same @base_dir, @command.base_dir
169
+ end
170
+ end
171
+
172
+ # FIXME this code had its ruby-git stuff replaced with `` and system, which is much harder to test, so re-enable these someday
173
+ #context "clean_staging_area?" do
174
+
175
+ # should "be false if there added files" do
176
+ # repo = build_repo :added => %w(README)
177
+
178
+ # command = Juwelier::Commands::ReleaseToGit.new :repo => repo
179
+
180
+ # assert ! command.clean_staging_area?
181
+ # end
182
+
183
+ # should "be false if there are changed files" do
184
+ # repo = build_repo :changed => %w(README)
185
+
186
+ # command = Juwelier::Commands::ReleaseToGit.new
187
+ # command.repo = repo
188
+
189
+ # assert ! command.clean_staging_area?
190
+ # end
191
+
192
+ # should "be false if there are deleted files" do
193
+ # repo = build_repo :deleted => %w(README)
194
+
195
+ # command = Juwelier::Commands::ReleaseToGit.new
196
+ # command.repo = repo
197
+
198
+ # assert ! command.clean_staging_area?
199
+ # end
200
+
201
+ # should "be true if nothing added, changed, or deleted" do
202
+ # repo = build_repo
203
+
204
+ # command = Juwelier::Commands::ReleaseToGit.new
205
+ # command.repo = repo
206
+
207
+ # assert command.clean_staging_area?
208
+ # end
209
+ #end
210
+
211
+ context "release_tagged? when no tag exists" do
212
+ setup do
213
+ @repo = Object.new
214
+ stub(@repo).tag('v1.2.3') { raise Git::GitTagNameDoesNotExist, tag }
215
+
216
+ @output = StringIO.new
217
+
218
+ @command = Juwelier::Commands::ReleaseToGit.new
219
+ @command.output = @output
220
+ @command.repo = @repo
221
+ @command.version = '1.2.3'
222
+ end
223
+
224
+ should_eventually "be true" do
225
+ assert @command.release_not_tagged?
226
+ end
227
+
228
+ end
229
+
230
+ context "release_tagged? when tag exists" do
231
+ setup do
232
+ @repo = Object.new
233
+ stub(@repo) do
234
+ tag('v1.2.3') { Object.new }
235
+ end
236
+
237
+ @output = StringIO.new
238
+
239
+ @command = Juwelier::Commands::ReleaseToGit.new
240
+ @command.output = @output
241
+ @command.repo = @repo
242
+ @command.version = '1.2.3'
243
+ end
244
+
245
+ should_eventually "be false" do
246
+ assert @command.release_not_tagged?
247
+ end
248
+
249
+ end
250
+
251
+ def build_repo(options = {})
252
+ status = build_status options
253
+ repo = Object.new
254
+ stub(repo).status { status }
255
+ repo
256
+ end
257
+
258
+ def build_status(options = {})
259
+ options = {:added => [], :deleted => [], :changed => []}.merge(options)
260
+
261
+ status = Object.new
262
+ stub(status) do
263
+ added { options[:added] }
264
+ deleted { options[:deleted] }
265
+ changed { options[:changed] }
266
+ end
267
+
268
+ end
269
+ end
270
+ end
271
+ end