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,39 @@
1
+ class Jeweler
2
+ module Commands
3
+ class WriteGemspec
4
+ attr_accessor :base_dir, :gemspec, :version, :output, :gemspec_helper, :version_helper
5
+
6
+ def initialize
7
+ self.output = $stdout
8
+ end
9
+
10
+ def run
11
+ version_helper.refresh
12
+ gemspec_helper.spec.version = version_helper.to_s
13
+ gemspec_helper.spec.date = Time.now
14
+
15
+ gemspec_helper.write
16
+
17
+ output.puts "Generated: #{gemspec_helper.path}"
18
+ end
19
+
20
+ def gemspec_helper
21
+ @gemspec_helper ||= GemSpecHelper.new(self.gemspec, self.base_dir)
22
+ end
23
+
24
+ def self.build_for(jeweler)
25
+ command = new
26
+
27
+ command.base_dir = jeweler.base_dir
28
+ command.gemspec = jeweler.gemspec
29
+ command.version = jeweler.version
30
+ command.output = jeweler.output
31
+ command.gemspec_helper = jeweler.gemspec_helper
32
+ command.version_helper = jeweler.version_helper
33
+
34
+ command
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,13 @@
1
+ require 'jeweler/commands/build_gem'
2
+ require 'jeweler/commands/install_gem'
3
+ require 'jeweler/commands/release'
4
+ require 'jeweler/commands/release_to_rubyforge'
5
+ require 'jeweler/commands/setup_rubyforge'
6
+ require 'jeweler/commands/validate_gemspec'
7
+ require 'jeweler/commands/write_gemspec'
8
+ require 'jeweler/commands/version/base'
9
+ require 'jeweler/commands/version/bump_major'
10
+ require 'jeweler/commands/version/bump_minor'
11
+ require 'jeweler/commands/version/bump_patch'
12
+ require 'jeweler/commands/version/bump_timestamp'
13
+ require 'jeweler/commands/version/write'
@@ -0,0 +1,20 @@
1
+ class Jeweler
2
+ # Gemspec related error
3
+ class GemspecError < StandardError
4
+ end
5
+
6
+ class VersionYmlError < StandardError
7
+ end
8
+
9
+ # Occurs when interacting with RubyForge, and an expected project isn't available on RubyForge.
10
+ class MissingRubyForgePackageError < StandardError
11
+ end
12
+
13
+ # Occurs when interacting with RubyForge, and 'rubyforge_project' isn't set on the Gem::Specification
14
+ class NoRubyForgeProjectInGemspecError < StandardError
15
+ end
16
+
17
+ # Occurs when interacting with RubyForge, and the 'rubyforge_project' isn't setup in ~/.rubyforge/autoconfig.yml or it doesn't exist on RubyForge
18
+ class RubyForgeProjectNotConfiguredError < StandardError
19
+ end
20
+ end
@@ -0,0 +1,76 @@
1
+ class Jeweler
2
+
3
+ class GemSpecHelper
4
+
5
+ attr_accessor :spec, :base_dir
6
+
7
+ def initialize(spec, base_dir = nil)
8
+ self.spec = spec
9
+ self.base_dir = base_dir || ''
10
+
11
+ yield spec if block_given?
12
+ end
13
+
14
+ def valid?
15
+ begin
16
+ parse
17
+ true
18
+ rescue
19
+ false
20
+ end
21
+ end
22
+
23
+ def write
24
+ normalize_files(:files)
25
+ normalize_files(:files)
26
+ normalize_files(:extra_rdoc_files)
27
+
28
+ File.open(path, 'w') do |f|
29
+ gemspec_ruby = @spec.to_ruby
30
+ gemspec_ruby = prettyify_array(gemspec_ruby, :files)
31
+ gemspec_ruby = prettyify_array(gemspec_ruby, :test_files)
32
+ gemspec_ruby = prettyify_array(gemspec_ruby, :extra_rdoc_files)
33
+ f.write gemspec_ruby
34
+ end
35
+ end
36
+
37
+ def path
38
+ denormalized_path = File.join(@base_dir, "#{@spec.name}.gemspec")
39
+ absolute_path = File.expand_path(denormalized_path)
40
+ absolute_path.gsub(Dir.getwd + File::SEPARATOR, '')
41
+ end
42
+
43
+ def parse
44
+ data = File.read(path)
45
+ parsed_gemspec = nil
46
+ Thread.new { parsed_gemspec = eval("$SAFE = 3\n#{data}", binding, path) }.join
47
+ parsed_gemspec
48
+ end
49
+
50
+ def normalize_files(array_name)
51
+ array = @spec.send(array_name)
52
+ # only keep files, no directories, and sort
53
+ array = array.select do |path|
54
+ File.file? File.join(@base_dir, path)
55
+ end.sort
56
+
57
+ @spec.send("#{array_name}=", array)
58
+ end
59
+
60
+ def prettyify_array(gemspec_ruby, array_name)
61
+ gemspec_ruby.gsub(/s\.#{array_name.to_s} = \[.+?\]/) do |match|
62
+ leadin, files = match[0..-2].split("[")
63
+ leadin + "[\n #{files.split(",").join(",\n ")}\n ]"
64
+ end
65
+ end
66
+
67
+ def gem_path
68
+ File.join(@base_dir, 'pkg', parse.file_name)
69
+ end
70
+
71
+ def update_version(version)
72
+ @spec.version = version.to_s
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,54 @@
1
+ class Jeweler
2
+ class Generator
3
+ class Application
4
+ class << self
5
+ def run!(*arguments)
6
+ env_opts = if ENV['JEWELER_OPTS']
7
+ Jeweler::Generator::Options.new(ENV['JEWELER_OPTS'].split(' '))
8
+ end
9
+ options = Jeweler::Generator::Options.new(arguments)
10
+ options = options.merge(env_opts) if env_opts
11
+
12
+ if options[:invalid_argument]
13
+ $stderr.puts options[:invalid_argument]
14
+ options[:show_help] = true
15
+ end
16
+
17
+ if options[:show_help]
18
+ $stderr.puts options.opts
19
+ return 1
20
+ end
21
+
22
+ unless arguments.size == 1
23
+ $stderr.puts options.opts
24
+ return 1
25
+ end
26
+
27
+ project_name = arguments.first
28
+
29
+ begin
30
+ generator = Jeweler::Generator.new(project_name, options)
31
+ generator.run
32
+ return 0
33
+ rescue Jeweler::NoGitUserName
34
+ $stderr.puts %Q{No user.name found in ~/.gitconfig. Please tell git about yourself (see http://github.com/guides/tell-git-your-user-name-and-email-address for details). For example: git config --global user.name "mad voo"}
35
+ return 1
36
+ rescue Jeweler::NoGitUserEmail
37
+ $stderr.puts %Q{No user.email found in ~/.gitconfig. Please tell git about yourself (see http://github.com/guides/tell-git-your-user-name-and-email-address for details). For example: git config --global user.email mad.vooo@gmail.com}
38
+ return 1
39
+ rescue Jeweler::NoGitHubUser
40
+ $stderr.puts %Q{No github.user found in ~/.gitconfig. Please tell git about your GitHub account (see http://github.com/blog/180-local-github-config for details). For example: git config --global github.user defunkt}
41
+ return 1
42
+ rescue Jeweler::NoGitHubToken
43
+ $stderr.puts %Q{No github.token found in ~/.gitconfig. Please tell git about your GitHub account (see http://github.com/blog/180-local-github-config for details). For example: git config --global github.token 6ef8395fecf207165f1a82178ae1b984}
44
+ return 1
45
+ rescue Jeweler::FileInTheWay
46
+ $stderr.puts "The directory #{project_name} already exists. Maybe move it out of the way before continuing?"
47
+ return 1
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ class Generator
3
+ module BaconMixin
4
+
5
+ def default_task
6
+ 'spec'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'test/unit/assertions'
11
+ end
12
+
13
+ def feature_support_extend
14
+ 'Test::Unit::Assertions' # NOTE can't use bacon inside of cucumber actually
15
+ end
16
+
17
+ def test_dir
18
+ 'spec'
19
+ end
20
+
21
+ def test_task
22
+ 'spec'
23
+ end
24
+
25
+ def test_pattern
26
+ 'spec/**/*_spec.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_spec.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "spec_helper.rb"
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,38 @@
1
+ class Jeweler
2
+ class Generator
3
+ module MicronautMixin
4
+
5
+ def default_task
6
+ 'examples'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'micronaut/expectations'
11
+ end
12
+
13
+ def feature_support_extend
14
+ 'Micronaut::Matchers'
15
+ end
16
+
17
+ def test_dir
18
+ 'examples'
19
+ end
20
+
21
+ def test_task
22
+ 'examples'
23
+ end
24
+
25
+ def test_pattern
26
+ 'examples/**/*_example.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_example.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "example_helper.rb"
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ class Generator
3
+ module MinitestMixin
4
+
5
+ def default_task
6
+ 'test'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'mini/test'
11
+ end
12
+
13
+ def feature_support_extend
14
+ 'Mini::Test::Assertions'
15
+ end
16
+
17
+ def test_dir
18
+ 'test'
19
+ end
20
+
21
+ def test_task
22
+ 'test'
23
+ end
24
+
25
+ def test_pattern
26
+ 'test/**/*_test.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_test.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "test_helper.rb"
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,77 @@
1
+ class Jeweler
2
+ class Generator
3
+ class Options < Hash
4
+ attr_reader :opts, :orig_args
5
+
6
+ def initialize(args)
7
+ super()
8
+
9
+ @orig_args = args.clone
10
+ self[:testing_framework] = :shoulda
11
+
12
+ @opts = OptionParser.new do |o|
13
+ o.banner = "Usage: #{File.basename($0)} [options] reponame\ne.g. #{File.basename($0)} the-perfect-gem"
14
+
15
+ o.on('--bacon', 'generate bacon specifications') do
16
+ self[:testing_framework] = :bacon
17
+ end
18
+
19
+ o.on('--shoulda', 'generate shoulda tests') do
20
+ self[:testing_framework] = :shoulda
21
+ end
22
+
23
+ o.on('--testunit', 'generate test/unit tests') do
24
+ self[:testing_framework] = :testunit
25
+ end
26
+
27
+ o.on('--minitest', 'generate minitest tests') do
28
+ self[:testing_framework] = :minitest
29
+ end
30
+
31
+ o.on('--rspec', 'generate rspec code examples') do
32
+ self[:testing_framework] = :rspec
33
+ end
34
+
35
+ o.on('--micronaut', 'generate micronaut examples') do
36
+ self[:testing_framework] = :micronaut
37
+ end
38
+
39
+ o.on('--cucumber', 'generate cucumber stories in addition to the other tests') do
40
+ self[:use_cucumber] = true
41
+ end
42
+
43
+ o.on('--create-repo', 'create the repository on GitHub') do
44
+ self[:create_repo] = true
45
+ end
46
+
47
+ o.on('--rubyforge', 'setup project for rubyforge') do
48
+ self[:rubyforge] = true
49
+ end
50
+
51
+ o.on('--summary [SUMMARY]', 'specify the summary of the project') do |summary|
52
+ self[:summary] = summary
53
+ end
54
+
55
+ o.on('--directory [DIRECTORY]', 'specify the directory to generate into') do |directory|
56
+ self[:directory] = directory
57
+ end
58
+
59
+ o.on_tail('-h', '--help', 'display this help and exit') do
60
+ self[:show_help] = true
61
+ end
62
+ end
63
+
64
+ begin
65
+ @opts.parse!(args)
66
+ rescue OptionParser::InvalidOption => e
67
+ self[:invalid_argument] = e.message
68
+ end
69
+ end
70
+
71
+ def merge(other)
72
+ self.class.new(@orig_args + other.orig_args)
73
+ end
74
+
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ class Generator
3
+ module RspecMixin
4
+
5
+ def default_task
6
+ 'spec'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'spec/expectations'
11
+ end
12
+
13
+ def feature_support_extend
14
+ nil # Cucumber is smart enough extend Spec::Expectations on its own
15
+ end
16
+
17
+ def test_dir
18
+ 'spec'
19
+ end
20
+
21
+ def test_task
22
+ 'spec'
23
+ end
24
+
25
+ def test_pattern
26
+ 'spec/**/*_spec.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_spec.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "spec_helper.rb"
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ class Generator
3
+ module ShouldaMixin
4
+
5
+ def default_task
6
+ 'test'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'test/unit/assertions'
11
+ end
12
+
13
+ def feature_support_extend
14
+ 'Test::Unit::Assertions'
15
+ end
16
+
17
+ def test_dir
18
+ 'test'
19
+ end
20
+
21
+ def test_task
22
+ 'test'
23
+ end
24
+
25
+ def test_pattern
26
+ 'test/**/*_test.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_test.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "test_helper.rb"
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ class Jeweler
2
+ class Generator
3
+ module TestunitMixin
4
+
5
+ def default_task
6
+ 'test'
7
+ end
8
+
9
+ def feature_support_require
10
+ 'test/unit/assertions'
11
+ end
12
+
13
+ def feature_support_extend
14
+ 'Test::Unit::Assertions'
15
+ end
16
+
17
+ def test_dir
18
+ 'test'
19
+ end
20
+
21
+ def test_task
22
+ 'test'
23
+ end
24
+
25
+ def test_pattern
26
+ 'test/**/*_test.rb'
27
+ end
28
+
29
+ def test_filename
30
+ "#{require_name}_test.rb"
31
+ end
32
+
33
+ def test_helper_filename
34
+ "test_helper.rb"
35
+ end
36
+
37
+ end
38
+ end
39
+ end