gohanlonllc-jeweler 0.11.1.20090513153819

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 (127) hide show
  1. data/.gitignore +7 -0
  2. data/ChangeLog.markdown +83 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +170 -0
  5. data/ROADMAP +12 -0
  6. data/Rakefile +106 -0
  7. data/VERSION.yml +5 -0
  8. data/bin/jeweler +8 -0
  9. data/features/generator/cucumber.feature +83 -0
  10. data/features/generator/directory_layout.feature +76 -0
  11. data/features/generator/dotdocument.feature +14 -0
  12. data/features/generator/env_options.feature +9 -0
  13. data/features/generator/git.feature +94 -0
  14. data/features/generator/license.feature +11 -0
  15. data/features/generator/rakefile.feature +110 -0
  16. data/features/generator/readme.feature +12 -0
  17. data/features/generator/test.feature +41 -0
  18. data/features/generator/test_helper.feature +49 -0
  19. data/features/placeholder.feature +5 -0
  20. data/features/step_definitions/debug_steps.rb +6 -0
  21. data/features/step_definitions/filesystem_steps.rb +65 -0
  22. data/features/step_definitions/generator_steps.rb +251 -0
  23. data/features/step_definitions/task_steps.rb +6 -0
  24. data/features/support/env.rb +19 -0
  25. data/features/tasks/build_gem.feature +9 -0
  26. data/features/tasks/version.feature +24 -0
  27. data/features/tasks/version_bumping.feature +33 -0
  28. data/jeweler.gemspec +205 -0
  29. data/lib/jeweler/commands/build_gem.rb +31 -0
  30. data/lib/jeweler/commands/install_gem.rb +26 -0
  31. data/lib/jeweler/commands/release.rb +83 -0
  32. data/lib/jeweler/commands/release_to_rubyforge.rb +51 -0
  33. data/lib/jeweler/commands/setup_rubyforge.rb +38 -0
  34. data/lib/jeweler/commands/validate_gemspec.rb +30 -0
  35. data/lib/jeweler/commands/version/base.rb +41 -0
  36. data/lib/jeweler/commands/version/bump_major.rb +13 -0
  37. data/lib/jeweler/commands/version/bump_minor.rb +12 -0
  38. data/lib/jeweler/commands/version/bump_patch.rb +14 -0
  39. data/lib/jeweler/commands/version/bump_timestamp.rb +14 -0
  40. data/lib/jeweler/commands/version/write.rb +12 -0
  41. data/lib/jeweler/commands/write_gemspec.rb +39 -0
  42. data/lib/jeweler/commands.rb +13 -0
  43. data/lib/jeweler/errors.rb +20 -0
  44. data/lib/jeweler/gemspec_helper.rb +76 -0
  45. data/lib/jeweler/generator/application.rb +54 -0
  46. data/lib/jeweler/generator/bacon_mixin.rb +39 -0
  47. data/lib/jeweler/generator/micronaut_mixin.rb +38 -0
  48. data/lib/jeweler/generator/minitest_mixin.rb +39 -0
  49. data/lib/jeweler/generator/options.rb +77 -0
  50. data/lib/jeweler/generator/rspec_mixin.rb +39 -0
  51. data/lib/jeweler/generator/shoulda_mixin.rb +39 -0
  52. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  53. data/lib/jeweler/generator.rb +284 -0
  54. data/lib/jeweler/rubyforge_tasks.rb +46 -0
  55. data/lib/jeweler/specification.rb +65 -0
  56. data/lib/jeweler/tasks.rb +131 -0
  57. data/lib/jeweler/templates/.document +5 -0
  58. data/lib/jeweler/templates/.gitignore +5 -0
  59. data/lib/jeweler/templates/LICENSE +20 -0
  60. data/lib/jeweler/templates/README.rdoc +7 -0
  61. data/lib/jeweler/templates/Rakefile +102 -0
  62. data/lib/jeweler/templates/bacon/flunking.rb +7 -0
  63. data/lib/jeweler/templates/bacon/helper.rb +8 -0
  64. data/lib/jeweler/templates/features/default.feature +9 -0
  65. data/lib/jeweler/templates/features/support/env.rb +8 -0
  66. data/lib/jeweler/templates/micronaut/flunking.rb +7 -0
  67. data/lib/jeweler/templates/micronaut/helper.rb +17 -0
  68. data/lib/jeweler/templates/minitest/flunking.rb +7 -0
  69. data/lib/jeweler/templates/minitest/helper.rb +11 -0
  70. data/lib/jeweler/templates/rspec/flunking.rb +7 -0
  71. data/lib/jeweler/templates/rspec/helper.rb +9 -0
  72. data/lib/jeweler/templates/shoulda/flunking.rb +7 -0
  73. data/lib/jeweler/templates/shoulda/helper.rb +10 -0
  74. data/lib/jeweler/templates/testunit/flunking.rb +7 -0
  75. data/lib/jeweler/templates/testunit/helper.rb +9 -0
  76. data/lib/jeweler/version_helper.rb +140 -0
  77. data/lib/jeweler.rb +155 -0
  78. data/test/fixtures/bar/VERSION.yml +4 -0
  79. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  80. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  81. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  82. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  83. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  84. data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
  85. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  86. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
  87. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  88. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  89. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  90. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  91. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  92. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  93. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  94. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  95. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  96. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  97. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  98. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  99. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  100. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  101. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  102. data/test/geminstaller.yml +12 -0
  103. data/test/jeweler/commands/test_build_gem.rb +72 -0
  104. data/test/jeweler/commands/test_install_gem.rb +21 -0
  105. data/test/jeweler/commands/test_release.rb +405 -0
  106. data/test/jeweler/commands/test_release_to_rubyforge.rb +157 -0
  107. data/test/jeweler/commands/test_setup_rubyforge.rb +88 -0
  108. data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
  109. data/test/jeweler/commands/test_write_gemspec.rb +92 -0
  110. data/test/jeweler/commands/version/test_base.rb +32 -0
  111. data/test/jeweler/commands/version/test_bump_major.rb +22 -0
  112. data/test/jeweler/commands/version/test_bump_minor.rb +19 -0
  113. data/test/jeweler/commands/version/test_bump_patch.rb +20 -0
  114. data/test/jeweler/commands/version/test_write.rb +23 -0
  115. data/test/shoulda_macros/jeweler_macros.rb +35 -0
  116. data/test/test_application.rb +139 -0
  117. data/test/test_gemspec_helper.rb +40 -0
  118. data/test/test_generator.rb +154 -0
  119. data/test/test_generator_initialization.rb +113 -0
  120. data/test/test_generator_mixins.rb +18 -0
  121. data/test/test_helper.rb +133 -0
  122. data/test/test_jeweler.rb +174 -0
  123. data/test/test_options.rb +116 -0
  124. data/test/test_specification.rb +61 -0
  125. data/test/test_tasks.rb +51 -0
  126. data/test/test_version_helper.rb +153 -0
  127. metadata +229 -0
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "existing-project-with-version"
8
+ gem.summary = %Q{TODO}
9
+ gem.email = "josh@technicalpickles.com"
10
+ gem.homepage = "http://github.com/technicalpickles/existing-project-with-version"
11
+ gem.authors = ["Josh Nichols"]
12
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
+ end
14
+ rescue LoadError
15
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
16
+ end
17
+
18
+ require 'rake/testtask'
19
+ Rake::TestTask.new(:test) do |test|
20
+ test.libs << 'lib' << 'test'
21
+ test.pattern = 'test/**/*_test.rb'
22
+ test.verbose = false
23
+ end
24
+
25
+ begin
26
+ require 'rcov/rcovtask'
27
+ Rcov::RcovTask.new do |test|
28
+ test.libs << 'test'
29
+ test.pattern = 'test/**/*_test.rb'
30
+ test.verbose = true
31
+ end
32
+ rescue LoadError
33
+ task :rcov do
34
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
35
+ end
36
+ end
37
+
38
+
39
+ task :default => :test
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ if File.exist?('VERSION.yml')
44
+ config = YAML.load(File.read('VERSION.yml'))
45
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
46
+ else
47
+ version = ""
48
+ end
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "existing-project-with-version #{version}"
52
+ rdoc.options << '--line-numbers' << '--inline-source'
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
57
+ # Rubyforge documentation task
58
+ begin
59
+ require 'rake/contrib/sshpublisher'
60
+ namespace :rubyforge do
61
+
62
+ desc "Release gem and RDoc documentation to RubyForge"
63
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
64
+
65
+ namespace :release do
66
+ desc "Publish RDoc to RubyForge."
67
+ task :docs => [:rdoc] do
68
+ config = YAML.load(
69
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
70
+ )
71
+
72
+ host = "#{config['username']}@rubyforge.org"
73
+ remote_dir = "/var/www/gforge-projects/existing-project-with-version/"
74
+ local_dir = 'rdoc'
75
+
76
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
77
+ end
78
+ end
79
+ end
80
+ rescue LoadError
81
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
82
+ end
@@ -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{josh@technicalpickles.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/technicalpickles/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{TODO}
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,72 @@
1
+ # not sure why I need to use this form instead of just require 'test_helper'
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'test_helper'))
3
+
4
+ class Jeweler
5
+ module Commands
6
+ class TestBuildGem < Test::Unit::TestCase
7
+
8
+ context "after running" do
9
+ setup do
10
+ @gemspec = Object.new
11
+ stub(@gemspec).file_name { 'zomg-1.2.3.gem' }
12
+
13
+ @gemspec_helper = Object.new
14
+ stub(@gemspec_helper).parse { @gemspec }
15
+
16
+ @builder = Object.new
17
+ stub(Gem::Builder).new { @builder }
18
+ stub(@builder).build { 'zomg-1.2.3.gem' }
19
+
20
+ @file_utils = Object.new
21
+ stub(@file_utils).mkdir_p './pkg'
22
+ stub(@file_utils).mv './zomg-1.2.3.gem', './pkg'
23
+
24
+ @base_dir = '.'
25
+
26
+ @command = Jeweler::Commands::BuildGem.new
27
+ @command.base_dir = @base_dir
28
+ @command.file_utils = @file_utils
29
+ @command.gemspec_helper = @gemspec_helper
30
+
31
+ @command.run
32
+ end
33
+
34
+ should "call gemspec helper's parse" do
35
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.parse }
36
+ end
37
+
38
+ should "build from parsed gemspec" do
39
+ assert_received(Gem::Builder) {|builder_class| builder_class.new(@gemspec) }
40
+ assert_received(@builder) {|builder| builder.build }
41
+ end
42
+
43
+ should 'make package directory' do
44
+ assert_received(@file_utils) {|file_utils| file_utils.mkdir_p './pkg'}
45
+ end
46
+
47
+ should 'move built gem into package directory' do
48
+ assert_received(@file_utils) {|file_utils| file_utils.mv './zomg-1.2.3.gem', './pkg'}
49
+ end
50
+ end
51
+
52
+ build_command_context "build for jeweler" do
53
+ setup do
54
+ @command = Jeweler::Commands::BuildGem.build_for(@jeweler)
55
+ end
56
+
57
+ should "assign base_dir" do
58
+ assert_same @base_dir, @jeweler.base_dir
59
+ end
60
+
61
+ should "assign gemspec_helper" do
62
+ assert_same @gemspec_helper, @jeweler.gemspec_helper
63
+ end
64
+
65
+ should "return BuildGem" do
66
+ assert_kind_of Jeweler::Commands::BuildGem, @command
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class Jeweler
4
+ module Commands
5
+ class TestInstallGem < Test::Unit::TestCase
6
+ build_command_context "build for jeweler" do
7
+ setup do
8
+ @command = Jeweler::Commands::InstallGem.build_for(@jeweler)
9
+ end
10
+
11
+ should "assign gemspec helper" do
12
+ assert_equal @gemspec_helper, @command.gemspec_helper
13
+ end
14
+
15
+ should "assign output" do
16
+ assert_equal @output, @command.output
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,405 @@
1
+ require 'test_helper'
2
+
3
+ class Jeweler
4
+ module Commands
5
+ class TestRelease < Test::Unit::TestCase
6
+
7
+ context "with pending changes" do
8
+ setup do
9
+ @repo = Object.new
10
+ stub(@repo).checkout(anything)
11
+ stub(@repo).status { status }
12
+
13
+ @command = Jeweler::Commands::Release.new
14
+ @command.output = @output
15
+ @command.repo = @repo
16
+ @command.gemspec_helper = @gemspec_helper
17
+ @command.version = '1.2.3'
18
+
19
+ stub(@command).any_pending_changes? { true }
20
+ end
21
+
22
+ should 'raise error' do
23
+ assert_raises RuntimeError, /try commiting/i do
24
+ @command.run
25
+ end
26
+ end
27
+ end
28
+
29
+ context "run without pending changes, and gemspec changed, and tagged not created already" do
30
+ setup do
31
+ @repo = Object.new
32
+ stub(@repo) do
33
+ checkout(anything)
34
+ add(anything)
35
+ commit(anything)
36
+ push
37
+ end
38
+
39
+ @gemspec_helper = Object.new
40
+ stub(@gemspec_helper) do
41
+ write
42
+ path {'zomg.gemspec'}
43
+ update_version('1.2.3')
44
+ end
45
+
46
+ @output = StringIO.new
47
+
48
+ @command = Jeweler::Commands::Release.new :output => @output,
49
+ :repo => @repo,
50
+ :gemspec_helper => @gemspec_helper,
51
+ :version => '1.2.3'
52
+
53
+ stub(@command).tag_release!
54
+ stub(@command).gemspec_changed? { true }
55
+ stub(@command).any_pending_changes? { false }
56
+ stub(@command).regenerate_gemspec!
57
+ stub(@command).commit_gemspec!
58
+ stub(@command).release_tagged? { false }
59
+
60
+ @command.run
61
+ end
62
+
63
+ should "checkout master" do
64
+ assert_received(@repo) {|repo| repo.checkout('master') }
65
+ end
66
+
67
+ should "regenerate gemspec" do
68
+ assert_received(@command) {|command| command.regenerate_gemspec! }
69
+ end
70
+
71
+ should "commit gemspec" do
72
+ assert_received(@command) {|command| command.commit_gemspec! }
73
+ end
74
+
75
+ should "tag release" do
76
+ assert_received(@command) {|command| command.tag_release! }
77
+ end
78
+ end
79
+
80
+ context "run without pending changes, and gemspec didn't change, and tagged not created already" do
81
+ setup do
82
+ @repo = Object.new
83
+ stub(@repo) do
84
+ checkout(anything)
85
+ add(anything)
86
+ commit(anything)
87
+ push
88
+ end
89
+
90
+ @gemspec_helper = Object.new
91
+ stub(@gemspec_helper) do
92
+ write
93
+ path {'zomg.gemspec'}
94
+ update_version('1.2.3')
95
+ end
96
+
97
+ @output = StringIO.new
98
+
99
+ @command = Jeweler::Commands::Release.new :output => @output,
100
+ :repo => @repo,
101
+ :gemspec_helper => @gemspec_helper,
102
+ :version => '1.2.3'
103
+
104
+ stub(@command).tag_release!
105
+ stub(@command).any_pending_changes? { false }
106
+ stub(@command).gemspec_changed? { false }
107
+ stub(@command).regenerate_gemspec!
108
+ stub(@command).release_tagged? { false }
109
+
110
+ @command.run
111
+ end
112
+
113
+ should "checkout master" do
114
+ assert_received(@repo) {|repo| repo.checkout('master') }
115
+ end
116
+
117
+ should "regenerate gemspec" do
118
+ assert_received(@command) {|command| command.regenerate_gemspec! }
119
+ end
120
+
121
+ should_eventually "not commit gemspec" do
122
+ # need a way to assert it wasn't received short of not stubbing it
123
+ #assert_received(@command) {|command| command.commit_gemspec! }
124
+ end
125
+
126
+ should "tag release" do
127
+ assert_received(@command) {|command| command.tag_release! }
128
+ end
129
+ end
130
+
131
+ context "run without pending changes and tagged already" do
132
+ setup do
133
+ @repo = Object.new
134
+ stub(@repo) do
135
+ checkout(anything)
136
+ add(anything)
137
+ commit(anything)
138
+ push
139
+ end
140
+
141
+ @gemspec_helper = Object.new
142
+ stub(@gemspec_helper) do
143
+ write
144
+ path {'zomg.gemspec'}
145
+ update_version('1.2.3')
146
+ end
147
+
148
+ @output = StringIO.new
149
+
150
+ @command = Jeweler::Commands::Release.new :output => @output,
151
+ :repo => @repo,
152
+ :gemspec_helper => @gemspec_helper,
153
+ :version => '1.2.3'
154
+
155
+ #stub(@command).tag_release!
156
+ stub(@command).any_pending_changes? { false }
157
+ stub(@command).regenerate_gemspec!
158
+ stub(@command).release_tagged? { true }
159
+
160
+ @command.run
161
+ end
162
+
163
+ should "checkout master" do
164
+ assert_received(@repo) {|repo| repo.checkout('master') }
165
+ end
166
+
167
+ should "regenerate gemspec" do
168
+ assert_received(@command) {|command| command.regenerate_gemspec! }
169
+ end
170
+
171
+ should_eventually "not tag release" do
172
+ # need to have a way to verify tag_release! not being called, short of not stubbing it
173
+ end
174
+ end
175
+
176
+ build_command_context "building from jeweler" do
177
+ setup do
178
+ @command = Jeweler::Commands::Release.build_for(@jeweler)
179
+ end
180
+
181
+ should "assign gemspec" do
182
+ assert_same @gemspec, @command.gemspec
183
+ end
184
+
185
+ should "assign version" do
186
+ assert_same @version, @command.version
187
+ end
188
+
189
+ should "assign repo" do
190
+ assert_same @repo, @command.repo
191
+ end
192
+
193
+ should "assign output" do
194
+ assert_same @output, @command.output
195
+ end
196
+
197
+ should "assign gemspec_helper" do
198
+ assert_same @gemspec_helper, @command.gemspec_helper
199
+ end
200
+
201
+ should "assign base_dir" do
202
+ assert_same @base_dir, @command.base_dir
203
+ end
204
+ end
205
+
206
+ context "any_pending_changes?" do
207
+
208
+ should "be true if there added files" do
209
+ repo = build_repo :added => %w(README)
210
+
211
+ command = Jeweler::Commands::Release.new :repo => repo
212
+
213
+ assert command.any_pending_changes?
214
+ end
215
+
216
+ should "be true if there are changed files" do
217
+ repo = build_repo :changed => %w(README)
218
+
219
+ command = Jeweler::Commands::Release.new
220
+ command.repo = repo
221
+
222
+ assert command.any_pending_changes?
223
+ end
224
+
225
+ should "be true if there are deleted files" do
226
+ repo = build_repo :deleted => %w(README)
227
+
228
+ command = Jeweler::Commands::Release.new
229
+ command.repo = repo
230
+
231
+ assert command.any_pending_changes?
232
+ end
233
+
234
+ should "be false if nothing added, changed, or deleted" do
235
+ repo = build_repo
236
+
237
+ command = Jeweler::Commands::Release.new
238
+ command.repo = repo
239
+
240
+ assert ! command.any_pending_changes?
241
+ end
242
+ end
243
+
244
+ context "tag_release!" do
245
+ setup do
246
+ @repo = Object.new
247
+ stub(@repo) do
248
+ add_tag(anything)
249
+ push(anything, anything)
250
+ end
251
+
252
+ @output = StringIO.new
253
+
254
+ @command = Jeweler::Commands::Release.new
255
+ @command.output = @output
256
+ @command.repo = @repo
257
+ @command.gemspec_helper = @gemspec_helper
258
+ @command.version = '1.2.3'
259
+
260
+ @command.tag_release!
261
+ end
262
+
263
+ should "tag release" do
264
+ assert_received(@repo) {|repo| repo.add_tag("v1.2.3")}
265
+ end
266
+
267
+ should "push tag to repository" do
268
+ assert_received(@repo) {|repo| repo.push('origin', 'v1.2.3')}
269
+ end
270
+ end
271
+
272
+ context "regenerate_gemspec!" do
273
+ setup do
274
+ @repo = Object.new
275
+ stub(@repo) do
276
+ add(anything)
277
+ commit(anything)
278
+ end
279
+
280
+ @gemspec_helper = Object.new
281
+ stub(@gemspec_helper) do
282
+ write
283
+ path {'zomg.gemspec'}
284
+ update_version('1.2.3')
285
+ end
286
+
287
+ @output = StringIO.new
288
+
289
+ @command = Jeweler::Commands::Release.new :output => @output,
290
+ :repo => @repo,
291
+ :gemspec_helper => @gemspec_helper,
292
+ :version => '1.2.3'
293
+
294
+ @command.regenerate_gemspec!
295
+ end
296
+
297
+ should "refresh gemspec version" do
298
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.update_version('1.2.3') }
299
+ end
300
+
301
+ should "write gemspec" do
302
+ assert_received(@gemspec_helper) {|gemspec_helper| gemspec_helper.write }
303
+ end
304
+ end
305
+
306
+ context "commit_gemspec!" do
307
+ setup do
308
+ @repo = Object.new
309
+ stub(@repo) do
310
+ add(anything)
311
+ commit(anything)
312
+ end
313
+
314
+ @gemspec_helper = Object.new
315
+ stub(@gemspec_helper) do
316
+ path {'zomg.gemspec'}
317
+ update_version('1.2.3')
318
+ end
319
+
320
+ @output = StringIO.new
321
+
322
+ @command = Jeweler::Commands::Release.new :output => @output,
323
+ :repo => @repo,
324
+ :gemspec_helper => @gemspec_helper,
325
+ :version => '1.2.3'
326
+
327
+ @command.commit_gemspec!
328
+ end
329
+
330
+ should "add gemspec to repository" do
331
+ assert_received(@repo) {|repo| repo.add('zomg.gemspec') }
332
+ end
333
+
334
+ should "commit with commit message including version" do
335
+ assert_received(@repo) {|repo| repo.commit("Regenerated gemspec for version 1.2.3") }
336
+ end
337
+
338
+ end
339
+
340
+ context "release_tagged? when no tag exists" do
341
+ setup do
342
+ @repo = Object.new
343
+ stub(@repo).tag('v1.2.3') {raise Git::GitTagNameDoesNotExist, tag}
344
+ #stub(@repo) do
345
+ #tag('v1.2.3') do |tag|
346
+ #raise Git::GitTagNameDoesNotExist, tag
347
+ #end
348
+ #end
349
+
350
+ @output = StringIO.new
351
+
352
+ @command = Jeweler::Commands::Release.new
353
+ @command.output = @output
354
+ @command.repo = @repo
355
+ @command.version = '1.2.3'
356
+ end
357
+
358
+ should_eventually "be false" do
359
+ assert ! @command.release_tagged?
360
+ end
361
+
362
+ end
363
+
364
+ context "release_tagged? when tag exists" do
365
+ setup do
366
+ @repo = Object.new
367
+ stub(@repo) do
368
+ tag('v1.2.3') { Object.new }
369
+ end
370
+
371
+ @output = StringIO.new
372
+
373
+ @command = Jeweler::Commands::Release.new
374
+ @command.output = @output
375
+ @command.repo = @repo
376
+ @command.version = '1.2.3'
377
+ end
378
+
379
+ should_eventually "be true" do
380
+ assert @command.release_tagged?
381
+ end
382
+
383
+ end
384
+
385
+ def build_repo(options = {})
386
+ status = build_status options
387
+ repo = Object.new
388
+ stub(repo).status { status }
389
+ repo
390
+ end
391
+
392
+ def build_status(options = {})
393
+ options = {:added => [], :deleted => [], :changed => []}.merge(options)
394
+
395
+ status = Object.new
396
+ stub(status) do
397
+ added { options[:added] }
398
+ deleted { options[:deleted] }
399
+ changed { options[:changed] }
400
+ end
401
+
402
+ end
403
+ end
404
+ end
405
+ end