mcornick-jeweler 1.2.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 (130) hide show
  1. data/.gitignore +9 -0
  2. data/ChangeLog.markdown +111 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +185 -0
  5. data/ROADMAP +12 -0
  6. data/Rakefile +103 -0
  7. data/VERSION.yml +4 -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 +151 -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 +68 -0
  22. data/features/step_definitions/generator_steps.rb +284 -0
  23. data/features/step_definitions/task_steps.rb +6 -0
  24. data/features/support/env.rb +29 -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 +225 -0
  29. data/lib/jeweler.rb +153 -0
  30. data/lib/jeweler/commands.rb +14 -0
  31. data/lib/jeweler/commands/build_gem.rb +31 -0
  32. data/lib/jeweler/commands/check_dependencies.rb +52 -0
  33. data/lib/jeweler/commands/install_gem.rb +40 -0
  34. data/lib/jeweler/commands/release.rb +86 -0
  35. data/lib/jeweler/commands/release_to_rubyforge.rb +51 -0
  36. data/lib/jeweler/commands/setup_rubyforge.rb +57 -0
  37. data/lib/jeweler/commands/validate_gemspec.rb +30 -0
  38. data/lib/jeweler/commands/version/base.rb +41 -0
  39. data/lib/jeweler/commands/version/bump_major.rb +13 -0
  40. data/lib/jeweler/commands/version/bump_minor.rb +12 -0
  41. data/lib/jeweler/commands/version/bump_patch.rb +14 -0
  42. data/lib/jeweler/commands/version/write.rb +12 -0
  43. data/lib/jeweler/commands/write_gemspec.rb +39 -0
  44. data/lib/jeweler/errors.rb +20 -0
  45. data/lib/jeweler/gemspec_helper.rb +79 -0
  46. data/lib/jeweler/generator.rb +306 -0
  47. data/lib/jeweler/generator/application.rb +54 -0
  48. data/lib/jeweler/generator/bacon_mixin.rb +43 -0
  49. data/lib/jeweler/generator/micronaut_mixin.rb +41 -0
  50. data/lib/jeweler/generator/minitest_mixin.rb +42 -0
  51. data/lib/jeweler/generator/options.rb +102 -0
  52. data/lib/jeweler/generator/rdoc_mixin.rb +9 -0
  53. data/lib/jeweler/generator/rspec_mixin.rb +42 -0
  54. data/lib/jeweler/generator/shoulda_mixin.rb +42 -0
  55. data/lib/jeweler/generator/testunit_mixin.rb +39 -0
  56. data/lib/jeweler/generator/yard_mixin.rb +14 -0
  57. data/lib/jeweler/rubyforge_tasks.rb +98 -0
  58. data/lib/jeweler/specification.rb +66 -0
  59. data/lib/jeweler/tasks.rb +135 -0
  60. data/lib/jeweler/templates/.document +5 -0
  61. data/lib/jeweler/templates/.gitignore +5 -0
  62. data/lib/jeweler/templates/LICENSE +20 -0
  63. data/lib/jeweler/templates/README.rdoc +18 -0
  64. data/lib/jeweler/templates/Rakefile +153 -0
  65. data/lib/jeweler/templates/bacon/flunking.rb +7 -0
  66. data/lib/jeweler/templates/bacon/helper.rb +8 -0
  67. data/lib/jeweler/templates/features/default.feature +9 -0
  68. data/lib/jeweler/templates/features/support/env.rb +8 -0
  69. data/lib/jeweler/templates/micronaut/flunking.rb +7 -0
  70. data/lib/jeweler/templates/micronaut/helper.rb +17 -0
  71. data/lib/jeweler/templates/minitest/flunking.rb +7 -0
  72. data/lib/jeweler/templates/minitest/helper.rb +11 -0
  73. data/lib/jeweler/templates/rspec/flunking.rb +7 -0
  74. data/lib/jeweler/templates/rspec/helper.rb +10 -0
  75. data/lib/jeweler/templates/shoulda/flunking.rb +7 -0
  76. data/lib/jeweler/templates/shoulda/helper.rb +10 -0
  77. data/lib/jeweler/templates/testunit/flunking.rb +7 -0
  78. data/lib/jeweler/templates/testunit/helper.rb +9 -0
  79. data/lib/jeweler/version_helper.rb +128 -0
  80. data/test/fixtures/bar/VERSION.yml +4 -0
  81. data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
  82. data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
  83. data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
  84. data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
  85. data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
  86. data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
  87. data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
  88. data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
  89. data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
  90. data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
  91. data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
  92. data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
  93. data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
  94. data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
  95. data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
  96. data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
  97. data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
  98. data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
  99. data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
  100. data/test/fixtures/existing-project-with-version-yaml/bin/foo_the_ultimate_bin +0 -0
  101. data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
  102. data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
  103. data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
  104. data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
  105. data/test/geminstaller.yml +12 -0
  106. data/test/jeweler/commands/test_build_gem.rb +72 -0
  107. data/test/jeweler/commands/test_install_gem.rb +74 -0
  108. data/test/jeweler/commands/test_release.rb +362 -0
  109. data/test/jeweler/commands/test_release_to_rubyforge.rb +157 -0
  110. data/test/jeweler/commands/test_setup_rubyforge.rb +182 -0
  111. data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
  112. data/test/jeweler/commands/test_write_gemspec.rb +92 -0
  113. data/test/jeweler/commands/version/test_base.rb +32 -0
  114. data/test/jeweler/commands/version/test_bump_major.rb +22 -0
  115. data/test/jeweler/commands/version/test_bump_minor.rb +19 -0
  116. data/test/jeweler/commands/version/test_bump_patch.rb +20 -0
  117. data/test/jeweler/commands/version/test_write.rb +23 -0
  118. data/test/shoulda_macros/jeweler_macros.rb +35 -0
  119. data/test/test_application.rb +139 -0
  120. data/test/test_gemspec_helper.rb +40 -0
  121. data/test/test_generator.rb +166 -0
  122. data/test/test_generator_initialization.rb +156 -0
  123. data/test/test_generator_mixins.rb +18 -0
  124. data/test/test_helper.rb +159 -0
  125. data/test/test_jeweler.rb +174 -0
  126. data/test/test_options.rb +149 -0
  127. data/test/test_specification.rb +61 -0
  128. data/test/test_tasks.rb +35 -0
  129. data/test/test_version_helper.rb +153 -0
  130. metadata +283 -0
@@ -0,0 +1,14 @@
1
+ require 'jeweler/commands/build_gem'
2
+ require 'jeweler/commands/install_gem'
3
+ require 'jeweler/commands/check_dependencies'
4
+ require 'jeweler/commands/release'
5
+ require 'jeweler/commands/release_to_gemcutter'
6
+ require 'jeweler/commands/release_to_rubyforge'
7
+ require 'jeweler/commands/setup_rubyforge'
8
+ require 'jeweler/commands/validate_gemspec'
9
+ require 'jeweler/commands/write_gemspec'
10
+ require 'jeweler/commands/version/base'
11
+ require 'jeweler/commands/version/bump_major'
12
+ require 'jeweler/commands/version/bump_minor'
13
+ require 'jeweler/commands/version/bump_patch'
14
+ require 'jeweler/commands/version/write'
@@ -0,0 +1,31 @@
1
+ class Jeweler
2
+ module Commands
3
+ class BuildGem
4
+ attr_accessor :base_dir, :gemspec_helper, :file_utils
5
+
6
+ def initialize
7
+ self.file_utils = FileUtils
8
+ end
9
+
10
+ def run
11
+ gemspec = gemspec_helper.parse
12
+ gem_file_name = Gem::Builder.new(gemspec).build
13
+
14
+ pkg_dir = File.join(base_dir, 'pkg')
15
+ file_utils.mkdir_p pkg_dir
16
+
17
+ gem_file_name = File.join(base_dir, gem_file_name)
18
+ file_utils.mv gem_file_name, pkg_dir
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
29
+ end
30
+ end
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
@@ -0,0 +1,40 @@
1
+ require 'rbconfig'
2
+
3
+ class Jeweler
4
+ module Commands
5
+ class InstallGem
6
+ attr_accessor :gemspec_helper, :output
7
+
8
+ def initialize
9
+ self.output = $stdout
10
+ end
11
+
12
+
13
+ def run
14
+ command = "gem install #{gemspec_helper.gem_path}"
15
+ output.puts "Executing #{command.inspect}:"
16
+
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
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,86 @@
1
+ class Jeweler
2
+ module Commands
3
+ class Release
4
+ attr_accessor :gemspec, :version, :repo, :output, :gemspec_helper, :base_dir
5
+
6
+ def initialize(attributes = {})
7
+ self.output = $stdout
8
+
9
+ attributes.each_pair do |key, value|
10
+ send("#{key}=", value)
11
+ end
12
+ end
13
+
14
+ def run
15
+ raise "Hey buddy, try committing them files first" unless clean_staging_area?
16
+
17
+ repo.checkout('master')
18
+
19
+ regenerate_gemspec!
20
+ commit_gemspec! if gemspec_changed?
21
+
22
+ output.puts "Pushing master to origin"
23
+ repo.push
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!
34
+ output.puts "Tagging #{release_tag}"
35
+ repo.add_tag(release_tag)
36
+
37
+ output.puts "Pushing #{release_tag} to origin"
38
+ repo.push('origin', release_tag)
39
+ end
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
50
+ end
51
+
52
+ def release_tag
53
+ "v#{version}"
54
+ end
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
+
67
+ def gemspec_helper
68
+ @gemspec_helper ||= Jeweler::GemSpecHelper.new(self.gemspec, self.base_dir)
69
+ end
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
+
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,51 @@
1
+ require 'rubyforge'
2
+
3
+ class Jeweler
4
+ module Commands
5
+ class ReleaseToRubyforge
6
+ attr_accessor :gemspec, :version, :output, :gemspec_helper, :rubyforge
7
+
8
+ def initialize
9
+ self.output = $stdout
10
+ end
11
+
12
+ def run
13
+ raise NoRubyForgeProjectInGemspecError unless @gemspec.rubyforge_project
14
+
15
+ @rubyforge.configure rescue nil
16
+
17
+ output.puts 'Logging in rubyforge'
18
+ @rubyforge.login
19
+
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
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,57 @@
1
+ class Jeweler
2
+ module Commands
3
+ class SetupRubyforge
4
+ attr_accessor :gemspec, :output, :rubyforge
5
+
6
+ def run
7
+ raise NoRubyForgeProjectInGemspecError unless @gemspec.rubyforge_project
8
+
9
+ @rubyforge.configure
10
+
11
+ output.puts "Logging into rubyforge"
12
+ @rubyforge.login
13
+
14
+ if package_exists?
15
+ output.puts "#{@gemspec.name} package already exists in the #{@gemspec.rubyforge_project} project"
16
+ return
17
+ end
18
+
19
+ output.puts "Creating #{@gemspec.name} package in the #{@gemspec.rubyforge_project} project"
20
+ create_package
21
+ end
22
+
23
+ def package_exists?
24
+ begin
25
+ @rubyforge.lookup 'package', @gemspec.name
26
+ true
27
+ rescue RuntimeError => e
28
+ raise unless e.message == "no <package_id> configured for <#{@gemspec.name}>"
29
+ false
30
+ end
31
+ end
32
+
33
+ def create_package
34
+ begin
35
+ @rubyforge.create_package(@gemspec.rubyforge_project, @gemspec.name)
36
+ rescue StandardError => e
37
+ case e.message
38
+ when /no <group_id> configured for <#{Regexp.escape @gemspec.rubyforge_project}>/
39
+ raise RubyForgeProjectNotConfiguredError, @gemspec.rubyforge_project
40
+ else
41
+ raise
42
+ end
43
+ end
44
+ end
45
+
46
+ def self.build_for(jeweler)
47
+ command = new
48
+
49
+ command.gemspec = jeweler.gemspec
50
+ command.output = jeweler.output
51
+ command.rubyforge = jeweler.rubyforge
52
+
53
+ command
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,30 @@
1
+ class Jeweler
2
+ module Commands
3
+ class ValidateGemspec
4
+ attr_accessor :gemspec_helper, :output
5
+
6
+ def initialize
7
+ self.output = $stdout
8
+ end
9
+
10
+ def run
11
+ begin
12
+ gemspec_helper.parse
13
+ output.puts "#{gemspec_helper.path} is valid."
14
+ rescue Exception => e
15
+ output.puts "#{gemspec_helper.path} is invalid. See the backtrace for more details."
16
+ raise
17
+ end
18
+ end
19
+
20
+ def self.build_for(jeweler)
21
+ command = new
22
+
23
+ command.gemspec_helper = jeweler.gemspec_helper
24
+ command.output = jeweler.output
25
+
26
+ command
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,41 @@
1
+ class Jeweler
2
+ module Commands
3
+ module Version
4
+ class Base
5
+
6
+ attr_accessor :repo, :version_helper, :gemspec, :commit
7
+
8
+ def run
9
+ update_version
10
+
11
+ self.version_helper.write
12
+ self.gemspec.version = self.version_helper.to_s
13
+
14
+ commit_version if self.repo && self.commit
15
+ end
16
+
17
+ def update_version
18
+ raise "Subclasses should implement this"
19
+ end
20
+
21
+ def commit_version
22
+ if self.repo
23
+ self.repo.add(version_helper.path)
24
+ self.repo.commit("Version bump to #{self.version_helper.to_s}")
25
+ end
26
+ end
27
+
28
+
29
+ def self.build_for(jeweler)
30
+ command = new
31
+ command.repo = jeweler.repo
32
+ command.version_helper = jeweler.version_helper
33
+ command.gemspec = jeweler.gemspec
34
+ command.commit = jeweler.commit
35
+
36
+ command
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ class Jeweler
2
+ module Commands
3
+ module Version
4
+ class BumpMajor < Base
5
+
6
+ def update_version
7
+ self.version_helper.bump_major
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ class Jeweler
2
+ module Commands
3
+ module Version
4
+ class BumpMinor < Base
5
+
6
+ def update_version
7
+ self.version_helper.bump_minor
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ class Jeweler
2
+ module Commands
3
+ module Version
4
+ class BumpPatch < Base
5
+
6
+ def update_version
7
+ self.version_helper.bump_patch
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
14
+