dima-jeweler 0.9.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/.gitignore +9 -0
  2. data/ChangeLog.markdown +54 -1
  3. data/README.markdown +89 -20
  4. data/ROADMAP +12 -0
  5. data/Rakefile +52 -12
  6. data/VERSION.yml +3 -3
  7. data/features/generator/cucumber.feature +83 -0
  8. data/features/generator/directory_layout.feature +76 -0
  9. data/features/generator/dotdocument.feature +14 -0
  10. data/features/generator/env_options.feature +9 -0
  11. data/features/generator/git.feature +94 -0
  12. data/features/generator/license.feature +11 -0
  13. data/features/generator/rakefile.feature +151 -0
  14. data/features/generator/readme.feature +12 -0
  15. data/features/generator/test.feature +41 -0
  16. data/features/generator/test_helper.feature +49 -0
  17. data/features/placeholder.feature +5 -0
  18. data/features/step_definitions/debug_steps.rb +6 -0
  19. data/features/step_definitions/filesystem_steps.rb +68 -0
  20. data/features/step_definitions/generator_steps.rb +284 -0
  21. data/features/step_definitions/task_steps.rb +6 -0
  22. data/features/support/env.rb +29 -0
  23. data/features/tasks/build_gem.feature +9 -0
  24. data/features/tasks/version.feature +24 -0
  25. data/features/tasks/version_bumping.feature +33 -0
  26. data/jeweler.gemspec +225 -0
  27. data/lib/jeweler.rb +39 -52
  28. data/lib/jeweler/commands.rb +2 -0
  29. data/lib/jeweler/commands/build_gem.rb +9 -0
  30. data/lib/jeweler/commands/check_dependencies.rb +52 -0
  31. data/lib/jeweler/commands/install_gem.rb +23 -2
  32. data/lib/jeweler/commands/release.rb +52 -12
  33. data/lib/jeweler/commands/release_to_rubyforge.rb +32 -9
  34. data/lib/jeweler/commands/setup_rubyforge.rb +57 -0
  35. data/lib/jeweler/commands/validate_gemspec.rb +9 -0
  36. data/lib/jeweler/commands/version/base.rb +13 -2
  37. data/lib/jeweler/commands/write_gemspec.rb +13 -0
  38. data/lib/jeweler/errors.rb +13 -1
  39. data/lib/jeweler/gemspec_helper.rb +31 -3
  40. data/lib/jeweler/generator.rb +80 -120
  41. data/lib/jeweler/generator/application.rb +12 -3
  42. data/lib/jeweler/generator/bacon_mixin.rb +43 -0
  43. data/lib/jeweler/generator/micronaut_mixin.rb +41 -0
  44. data/lib/jeweler/generator/minitest_mixin.rb +42 -0
  45. data/lib/jeweler/generator/options.rb +37 -3
  46. data/lib/jeweler/generator/rdoc_mixin.rb +9 -0
  47. data/lib/jeweler/generator/rspec_mixin.rb +42 -0
  48. data/lib/jeweler/generator/shoulda_mixin.rb +42 -0
  49. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  50. data/lib/jeweler/generator/yard_mixin.rb +14 -0
  51. data/lib/jeweler/rubyforge_tasks.rb +98 -0
  52. data/lib/jeweler/specification.rb +66 -0
  53. data/lib/jeweler/tasks.rb +72 -39
  54. data/lib/jeweler/templates/.document +5 -0
  55. data/lib/jeweler/templates/README.rdoc +12 -1
  56. data/lib/jeweler/templates/Rakefile +83 -49
  57. data/lib/jeweler/templates/bacon/helper.rb +1 -1
  58. data/lib/jeweler/templates/features/support/env.rb +4 -7
  59. data/lib/jeweler/templates/micronaut/helper.rb +1 -1
  60. data/lib/jeweler/templates/minitest/helper.rb +1 -1
  61. data/lib/jeweler/templates/rspec/flunking.rb +1 -1
  62. data/lib/jeweler/templates/rspec/helper.rb +4 -3
  63. data/lib/jeweler/templates/shoulda/helper.rb +1 -1
  64. data/lib/jeweler/templates/testunit/helper.rb +1 -1
  65. data/lib/jeweler/version_helper.rb +78 -33
  66. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  67. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  68. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  69. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  70. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  71. data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
  72. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  73. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
  74. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  75. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  76. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  77. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  78. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  79. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  80. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  81. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  82. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  83. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  84. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  85. data/test/fixtures/existing-project-with-version-yaml/bin/foo_the_ultimate_bin +0 -0
  86. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  87. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  88. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  89. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  90. data/test/jeweler/commands/test_build_gem.rb +20 -1
  91. data/test/jeweler/commands/test_install_gem.rb +74 -0
  92. data/test/jeweler/commands/test_release.rb +289 -77
  93. data/test/jeweler/commands/test_release_to_rubyforge.rb +66 -50
  94. data/test/jeweler/commands/test_setup_rubyforge.rb +182 -0
  95. data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
  96. data/test/jeweler/commands/test_write_gemspec.rb +34 -0
  97. data/test/jeweler/commands/version/test_base.rb +32 -0
  98. data/test/jeweler/commands/version/test_bump_major.rb +1 -0
  99. data/test/test_application.rb +31 -1
  100. data/test/test_gemspec_helper.rb +4 -0
  101. data/test/test_generator.rb +101 -114
  102. data/test/test_generator_initialization.rb +156 -0
  103. data/test/test_generator_mixins.rb +18 -0
  104. data/test/test_helper.rb +104 -16
  105. data/test/test_jeweler.rb +134 -96
  106. data/test/test_options.rb +59 -0
  107. data/test/test_specification.rb +61 -0
  108. data/test/test_tasks.rb +13 -18
  109. data/test/test_version_helper.rb +47 -9
  110. metadata +174 -43
  111. data/TODO +0 -11
  112. data/test/generators/initialization_test.rb +0 -146
@@ -1,10 +1,11 @@
1
1
  require 'date'
2
+ require 'rubygems/user_interaction'
2
3
  require 'rubygems/builder'
3
4
  require 'rubyforge'
4
5
 
6
+ require 'jeweler/errors'
5
7
  require 'jeweler/version_helper'
6
8
  require 'jeweler/gemspec_helper'
7
- require 'jeweler/errors'
8
9
  require 'jeweler/generator'
9
10
  require 'jeweler/generator/options'
10
11
  require 'jeweler/generator/application'
@@ -12,22 +13,30 @@ require 'jeweler/generator/application'
12
13
  require 'jeweler/commands'
13
14
 
14
15
  require 'jeweler/tasks'
16
+ require 'jeweler/rubyforge_tasks'
17
+
18
+ require 'jeweler/specification'
15
19
 
16
20
  # A Jeweler helps you craft the perfect Rubygem. Give him a gemspec, and he takes care of the rest.
17
21
  class Jeweler
18
22
 
19
- attr_reader :gemspec, :gemspec_helper
20
- attr_accessor :base_dir, :output
23
+ attr_reader :gemspec, :gemspec_helper, :version_helper
24
+ attr_accessor :base_dir, :output, :repo, :commit, :rubyforge
21
25
 
22
26
  def initialize(gemspec, base_dir = '.')
23
27
  raise(GemspecError, "Can't create a Jeweler with a nil gemspec") if gemspec.nil?
24
28
 
29
+ @gemspec = gemspec
30
+ @gemspec.extend(Specification)
31
+ @gemspec.set_jeweler_defaults(base_dir)
32
+
25
33
  @base_dir = base_dir
26
- @gemspec = fill_in_gemspec_defaults(gemspec)
27
34
  @repo = Git.open(base_dir) if in_git_repo?
28
- @version_helper = Jeweler::VersionHelper.new(@base_dir)
35
+ @version_helper = Jeweler::VersionHelper.new(base_dir)
29
36
  @output = $stdout
30
- @gemspec_helper = GemSpecHelper.new(@gemspec,base_dir)
37
+ @commit = true
38
+ @gemspec_helper = GemSpecHelper.new(gemspec, base_dir)
39
+ @rubyforge = RubyForge.new
31
40
  end
32
41
 
33
42
  # Major version, as defined by the gemspec's Version module.
@@ -55,13 +64,13 @@ class Jeweler
55
64
 
56
65
  # Writes out the gemspec
57
66
  def write_gemspec
58
- build_command(Jeweler::Commands::WriteGemspec).run
67
+ Jeweler::Commands::WriteGemspec.build_for(self).run
59
68
  end
60
69
 
61
70
  # Validates the project's gemspec from disk in an environment similar to how
62
71
  # GitHub would build from it. See http://gist.github.com/16215
63
72
  def validate_gemspec
64
- build_command(Jeweler::Commands::ValidateGemspec).run
73
+ Jeweler::Commands::ValidateGemspec.build_for(self).run
65
74
  end
66
75
 
67
76
  # is the project's gemspec from disk valid?
@@ -70,37 +79,37 @@ class Jeweler
70
79
  end
71
80
 
72
81
  def build_gem
73
- build_command(Jeweler::Commands::BuildGem).run
82
+ Jeweler::Commands::BuildGem.build_for(self).run
74
83
  end
75
84
 
76
85
  def install_gem
77
- build_command(Jeweler::Commands::InstallGem).run
86
+ Jeweler::Commands::InstallGem.build_for(self).run
78
87
  end
79
88
 
80
89
  # Bumps the patch version.
81
90
  #
82
91
  # 1.5.1 -> 1.5.2
83
- def bump_patch_version(options = {})
84
- build_command(Jeweler::Commands::Version::BumpPatch).run
92
+ def bump_patch_version()
93
+ Jeweler::Commands::Version::BumpPatch.build_for(self).run
85
94
  end
86
95
 
87
96
  # Bumps the minor version.
88
97
  #
89
98
  # 1.5.1 -> 1.6.0
90
- def bump_minor_version(options = {})
91
- build_command(Jeweler::Commands::Version::BumpMinor).run
99
+ def bump_minor_version()
100
+ Jeweler::Commands::Version::BumpMinor.build_for(self).run
92
101
  end
93
102
 
94
103
  # Bumps the major version.
95
104
  #
96
105
  # 1.5.1 -> 2.0.0
97
- def bump_major_version(options = {})
98
- build_command(Jeweler::Commands::Version::BumpMajor).run
106
+ def bump_major_version()
107
+ Jeweler::Commands::Version::BumpMajor.build_for(self).run
99
108
  end
100
109
 
101
110
  # Bumps the version, to the specific major/minor/patch version, writing out the appropriate version.rb, and then reloads it.
102
111
  def write_version(major, minor, patch, options = {})
103
- command = build_command(Jeweler::Commands::Version::Write)
112
+ command = Jeweler::Commands::Version::Write.build_for(self)
104
113
  command.major = major
105
114
  command.minor = minor
106
115
  command.patch = patch
@@ -109,53 +118,31 @@ class Jeweler
109
118
  end
110
119
 
111
120
  def release
112
- build_command(Jeweler::Commands::Release).run
121
+ Jeweler::Commands::Release.build_for(self).run
113
122
  end
114
123
 
115
124
  def release_gem_to_rubyforge
116
- build_command(Jeweler::Commands::ReleaseToRubyforge).run
125
+ Jeweler::Commands::ReleaseToRubyforge.build_for(self).run
126
+ end
127
+
128
+ def setup_rubyforge
129
+ Jeweler::Commands::SetupRubyforge.build_for(self).run
117
130
  end
118
131
 
119
- protected
132
+ def check_dependencies(type = nil)
133
+ command = Jeweler::Commands::CheckDependencies.build_for(self)
134
+ command.type = type
120
135
 
121
- def build_command(command_class)
122
- command = command_class.new
123
- command.repo = @repo if command.respond_to?(:repo=)
124
- command.version_helper = @version_helper if command.respond_to?(:version_helper=)
125
- command.gemspec = @gemspec if command.respond_to?(:gemspec=)
126
- command.commit = true if command.respond_to?(:commit=)
127
- command.version = self.version if command.respond_to?(:version=)
128
- command.output = output if command.respond_to?(:output=)
129
- command.base_dir = @base_dir if command.respond_to?(:base_dir=)
130
- command.gemspec_helper = GemSpecHelper.new(@gemspec, @base_dir) if command.respond_to?(:gemspec_helper)
131
- command.ruby_forge = RubyForge.new if command.respond_to?(:ruby_forge=)
132
-
133
- command
136
+ command.run
134
137
  end
135
138
 
136
139
  def in_git_repo?
137
140
  File.exists?(File.join(self.base_dir, '.git'))
138
141
  end
139
142
 
140
- def fill_in_gemspec_defaults(gemspec)
141
- if gemspec.files.nil? || gemspec.files.empty?
142
- gemspec.files = FileList["[A-Z]*.*", "{bin,generators,lib,test,spec}/**/*"]
143
- end
144
-
145
- if gemspec.executables.nil? || gemspec.executables.empty?
146
- gemspec.executables = Dir["#{@base_dir}/bin/*"].map do |f|
147
- File.basename(f)
148
- end
149
- end
150
-
151
- gemspec.has_rdoc = true
152
- gemspec.rdoc_options << '--inline-source' << '--charset=UTF-8'
153
-
154
- if gemspec.extra_rdoc_files.nil? || gemspec.extra_rdoc_files.empty?
155
- gemspec.extra_rdoc_files = FileList["README*", "ChangeLog*", "LICENSE*"]
156
- end
157
-
158
- gemspec
143
+ def version_exists?
144
+ File.exists?(@version_helper.plaintext_path) || File.exists?(@version_helper.yaml_path)
159
145
  end
146
+
160
147
  end
161
148
 
@@ -1,7 +1,9 @@
1
1
  require 'jeweler/commands/build_gem'
2
2
  require 'jeweler/commands/install_gem'
3
+ require 'jeweler/commands/check_dependencies'
3
4
  require 'jeweler/commands/release'
4
5
  require 'jeweler/commands/release_to_rubyforge'
6
+ require 'jeweler/commands/setup_rubyforge'
5
7
  require 'jeweler/commands/validate_gemspec'
6
8
  require 'jeweler/commands/write_gemspec'
7
9
  require 'jeweler/commands/version/base'
@@ -17,6 +17,15 @@ class Jeweler
17
17
  gem_file_name = File.join(base_dir, gem_file_name)
18
18
  file_utils.mv gem_file_name, pkg_dir
19
19
  end
20
+
21
+ def self.build_for(jeweler)
22
+ command = new
23
+
24
+ command.base_dir = jeweler.base_dir
25
+ command.gemspec_helper = jeweler.gemspec_helper
26
+
27
+ command
28
+ end
20
29
  end
21
30
  end
22
31
  end
@@ -0,0 +1,52 @@
1
+ class Jeweler
2
+ module Commands
3
+ class CheckDependencies
4
+ class MissingDependenciesError < RuntimeError
5
+ attr_accessor :dependencies, :type
6
+ end
7
+
8
+ attr_accessor :gemspec, :type
9
+
10
+ def run
11
+ missing_dependencies = dependencies.select do |dependency|
12
+ begin
13
+ Gem.activate dependency.name, dependency.version_requirements.to_s
14
+ false
15
+ rescue LoadError => e
16
+ true
17
+ end
18
+ end
19
+
20
+ if missing_dependencies.empty?
21
+ puts "#{type || 'All'} dependencies seem to be installed."
22
+ else
23
+ puts "Missing some dependencies. Install them with the following commands:"
24
+ missing_dependencies.each do |dependency|
25
+ puts %Q{\tgem install #{dependency.name} --version "#{dependency.version_requirements}"}
26
+ end
27
+
28
+ abort "Run the specified gem commands before trying to run this again: #{$0} #{ARGV.join(' ')}"
29
+ end
30
+
31
+ end
32
+
33
+ def dependencies
34
+ case type
35
+ when :runtime, :development
36
+ gemspec.send("#{type}_dependencies")
37
+ else
38
+ gemspec.dependencies
39
+ end
40
+
41
+ end
42
+
43
+ def self.build_for(jeweler)
44
+ command = new
45
+
46
+ command.gemspec = jeweler.gemspec
47
+
48
+ command
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,3 +1,5 @@
1
+ require 'rbconfig'
2
+
1
3
  class Jeweler
2
4
  module Commands
3
5
  class InstallGem
@@ -9,10 +11,29 @@ class Jeweler
9
11
 
10
12
 
11
13
  def run
12
- command = "sudo gem install #{gemspec_helper.gem_path}"
14
+ command = "gem install #{gemspec_helper.gem_path}"
13
15
  output.puts "Executing #{command.inspect}:"
14
16
 
15
- sh command # TODO where does sh actually come from!?
17
+ sh sudo_wrapper(command) # TODO where does sh actually come from!? - rake, apparently
18
+ end
19
+
20
+ def sudo_wrapper(command)
21
+ use_sudo? ? "sudo #{command}" : command
22
+ end
23
+
24
+ def use_sudo?
25
+ host_os !~ /mswin|windows|cygwin/i
26
+ end
27
+
28
+ def host_os
29
+ Config::CONFIG['host_os']
30
+ end
31
+
32
+ def self.build_for(jeweler)
33
+ command = new
34
+ command.output = jeweler.output
35
+ command.gemspec_helper = jeweler.gemspec_helper
36
+ command
16
37
  end
17
38
  end
18
39
  end
@@ -3,44 +3,84 @@ class Jeweler
3
3
  class Release
4
4
  attr_accessor :gemspec, :version, :repo, :output, :gemspec_helper, :base_dir
5
5
 
6
- def initialize
6
+ def initialize(attributes = {})
7
7
  self.output = $stdout
8
+
9
+ attributes.each_pair do |key, value|
10
+ send("#{key}=", value)
11
+ end
8
12
  end
9
13
 
10
14
  def run
11
- repo.checkout('master')
15
+ raise "Hey buddy, try committing them files first" unless clean_staging_area?
12
16
 
13
- raise "Hey buddy, try committing them files first" if any_pending_changes?
14
-
15
- gemspec_helper.update_version(version)
16
- gemspec_helper.write
17
+ repo.checkout('master')
17
18
 
18
- repo.add(gemspec_helper.path)
19
- output.puts "Committing #{gemspec_helper.path}"
20
- repo.commit("Regenerated gemspec for version #{version}")
19
+ regenerate_gemspec!
20
+ commit_gemspec! if gemspec_changed?
21
21
 
22
22
  output.puts "Pushing master to origin"
23
23
  repo.push
24
24
 
25
+ tag_release! if release_not_tagged?
26
+ end
27
+
28
+ def clean_staging_area?
29
+ status = repo.status
30
+ status.added.empty? && status.deleted.empty? && status.changed.empty?
31
+ end
32
+
33
+ def tag_release!
25
34
  output.puts "Tagging #{release_tag}"
26
35
  repo.add_tag(release_tag)
27
36
 
28
37
  output.puts "Pushing #{release_tag} to origin"
29
38
  repo.push('origin', release_tag)
30
39
  end
31
-
32
- def any_pending_changes?
33
- !(@repo.status.added.empty? && @repo.status.deleted.empty? && @repo.status.changed.empty?)
40
+
41
+ def commit_gemspec!
42
+ repo.add(gemspec_helper.path)
43
+ output.puts "Committing #{gemspec_helper.path}"
44
+ repo.commit "Regenerated gemspec for version #{version}"
45
+ end
46
+
47
+ def regenerate_gemspec!
48
+ gemspec_helper.update_version(version)
49
+ gemspec_helper.write
34
50
  end
35
51
 
36
52
  def release_tag
37
53
  "v#{version}"
38
54
  end
39
55
 
56
+ def release_not_tagged?
57
+ tag = repo.tag(release_tag) rescue nil
58
+ tag.nil?
59
+ end
60
+
61
+ def gemspec_changed?
62
+ `git status` # OMGHAX. status always ends up being 'M' unless this runs
63
+ status = repo.status[gemspec_helper.path]
64
+ ! status.type.nil?
65
+ end
66
+
40
67
  def gemspec_helper
41
68
  @gemspec_helper ||= Jeweler::GemSpecHelper.new(self.gemspec, self.base_dir)
42
69
  end
43
70
 
71
+ def self.build_for(jeweler)
72
+ command = self.new
73
+
74
+ command.base_dir = jeweler.base_dir
75
+ command.gemspec = jeweler.gemspec
76
+ command.version = jeweler.version
77
+ command.repo = jeweler.repo
78
+ command.output = jeweler.output
79
+ command.gemspec_helper = jeweler.gemspec_helper
80
+
81
+ command
82
+ end
83
+
44
84
  end
45
85
  end
46
86
  end
@@ -3,24 +3,47 @@ require 'rubyforge'
3
3
  class Jeweler
4
4
  module Commands
5
5
  class ReleaseToRubyforge
6
- attr_accessor :gemspec, :version, :repo, :output, :gemspec_helper, :ruby_forge
6
+ attr_accessor :gemspec, :version, :output, :gemspec_helper, :rubyforge
7
7
 
8
8
  def initialize
9
9
  self.output = $stdout
10
10
  end
11
11
 
12
12
  def run
13
- raise "rubyforge_project not configured. Add this to the Jeweler::Tasks block in your Rakefile." if @gemspec.rubyforge_project.nil?
13
+ raise NoRubyForgeProjectInGemspecError unless @gemspec.rubyforge_project
14
14
 
15
- @ruby_forge.configure rescue nil
16
- output.puts 'Logging in'
17
- @ruby_forge.login
15
+ @rubyforge.configure rescue nil
18
16
 
19
- @ruby_forge.userconfig['release_notes'] = @gemspec.description if @gemspec.description
20
- @ruby_forge.userconfig['preformatted'] = true
17
+ output.puts 'Logging in rubyforge'
18
+ @rubyforge.login
21
19
 
22
- output.puts "Releasing #{@gemspec.name} v. #{@version} as #{@gemspec.rubyforge_project}"
23
- @ruby_forge.add_release(@gemspec.rubyforge_project, @gemspec.name, @version.to_s, @gemspec_helper.gem_path)
20
+ @rubyforge.userconfig['release_notes'] = @gemspec.description if @gemspec.description
21
+ @rubyforge.userconfig['preformatted'] = true
22
+
23
+ output.puts "Releasing #{@gemspec.name}-#{@version} to #{@gemspec.rubyforge_project}"
24
+ begin
25
+ @rubyforge.add_release(@gemspec.rubyforge_project, @gemspec.name, @version.to_s, @gemspec_helper.gem_path)
26
+ rescue StandardError => e
27
+ case e.message
28
+ when /no <group_id> configured for <#{Regexp.escape @gemspec.rubyforge_project}>/
29
+ raise RubyForgeProjectNotConfiguredError, @gemspec.rubyforge_project
30
+ when /no <package_id> configured for <#{Regexp.escape @gemspec.name}>/i
31
+ raise MissingRubyForgePackageError, @gemspec.name
32
+ else
33
+ raise
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.build_for(jeweler)
39
+ command = new
40
+ command.gemspec = jeweler.gemspec
41
+ command.gemspec_helper = jeweler.gemspec_helper
42
+ command.version = jeweler.version
43
+ command.rubyforge = jeweler.rubyforge
44
+ command.output = jeweler.output
45
+
46
+ command
24
47
  end
25
48
 
26
49
  end