jeweler 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.gitignore +1 -0
  2. data/README.markdown +28 -40
  3. data/Rakefile +25 -31
  4. data/VERSION.yml +3 -2
  5. data/bin/jeweler +1 -4
  6. data/features/generator/cucumber.feature +3 -3
  7. data/features/generator/directory_layout.feature +6 -6
  8. data/features/generator/git.feature +6 -6
  9. data/features/generator/rakefile.feature +17 -17
  10. data/features/generator/test.feature +10 -3
  11. data/features/generator/test_helper.feature +16 -9
  12. data/features/step_definitions/filesystem_steps.rb +2 -2
  13. data/features/step_definitions/generator_steps.rb +11 -4
  14. data/features/support/env.rb +1 -1
  15. data/features/tasks/version.feature +7 -0
  16. data/features/tasks/version_bumping.feature +16 -0
  17. data/jeweler.gemspec +60 -34
  18. data/lib/jeweler.rb +49 -27
  19. data/lib/jeweler/commands.rb +22 -14
  20. data/lib/jeweler/commands/build_gem.rb +6 -1
  21. data/lib/jeweler/commands/install_gem.rb +1 -1
  22. data/lib/jeweler/commands/release_to_git.rb +57 -0
  23. data/lib/jeweler/commands/{release.rb → release_to_github.rb} +2 -22
  24. data/lib/jeweler/commands/release_to_rubyforge.rb +4 -3
  25. data/lib/jeweler/commands/setup_rubyforge.rb +7 -1
  26. data/lib/jeweler/commands/version/write.rb +2 -2
  27. data/lib/jeweler/commands/write_gemspec.rb +5 -3
  28. data/lib/jeweler/gemcutter_tasks.rb +2 -1
  29. data/lib/jeweler/gemspec_helper.rb +27 -14
  30. data/lib/jeweler/generator.rb +60 -82
  31. data/lib/jeweler/generator/application.rb +5 -7
  32. data/lib/jeweler/generator/bacon_mixin.rb +1 -1
  33. data/lib/jeweler/generator/github_mixin.rb +29 -0
  34. data/lib/jeweler/generator/micronaut_mixin.rb +1 -1
  35. data/lib/jeweler/generator/minitest_mixin.rb +6 -6
  36. data/lib/jeweler/generator/options.rb +67 -11
  37. data/lib/jeweler/generator/riot_mixin.rb +42 -0
  38. data/lib/jeweler/generator/rspec_mixin.rb +1 -1
  39. data/lib/jeweler/generator/shoulda_mixin.rb +4 -4
  40. data/lib/jeweler/generator/testspec_mixin.rb +42 -0
  41. data/lib/jeweler/generator/testunit_mixin.rb +3 -3
  42. data/lib/jeweler/generator/yard_mixin.rb +1 -1
  43. data/lib/jeweler/rubyforge_tasks.rb +42 -24
  44. data/lib/jeweler/specification.rb +11 -5
  45. data/lib/jeweler/tasks.rb +78 -41
  46. data/lib/jeweler/templates/.gitignore +17 -1
  47. data/lib/jeweler/templates/Rakefile +4 -8
  48. data/lib/jeweler/templates/minitest/flunking.rb +2 -2
  49. data/lib/jeweler/templates/minitest/helper.rb +3 -3
  50. data/lib/jeweler/templates/riot/flunking.rb +11 -0
  51. data/lib/jeweler/templates/riot/helper.rb +3 -0
  52. data/lib/jeweler/templates/rspec/spec.opts +1 -0
  53. data/lib/jeweler/templates/shoulda/flunking.rb +2 -2
  54. data/lib/jeweler/templates/testspec/flunking.rb +7 -0
  55. data/lib/jeweler/templates/testspec/helper.rb +7 -0
  56. data/lib/jeweler/templates/testunit/flunking.rb +2 -2
  57. data/lib/jeweler/version_helper.rb +14 -5
  58. data/test/fixtures/existing-project-with-version-constant/.document +5 -0
  59. data/test/fixtures/existing-project-with-version-constant/.gitignore +5 -0
  60. data/test/fixtures/existing-project-with-version-constant/LICENSE +20 -0
  61. data/test/fixtures/existing-project-with-version-constant/README.rdoc +7 -0
  62. data/test/fixtures/existing-project-with-version-constant/Rakefile +83 -0
  63. data/test/fixtures/existing-project-with-version-constant/existing-project-with-version.gemspec +29 -0
  64. data/test/fixtures/existing-project-with-version-constant/lib/existing_project_with_version.rb +0 -0
  65. data/test/fixtures/existing-project-with-version-constant/test/existing_project_with_version_test.rb +7 -0
  66. data/test/fixtures/existing-project-with-version-constant/test/test_helper.rb +10 -0
  67. data/test/jeweler/commands/test_build_gem.rb +54 -23
  68. data/test/jeweler/commands/test_install_gem.rb +4 -4
  69. data/test/jeweler/commands/test_release_to_git.rb +201 -0
  70. data/test/jeweler/commands/{test_release.rb → test_release_to_github.rb} +10 -49
  71. data/test/jeweler/commands/test_release_to_rubyforge.rb +0 -4
  72. data/test/jeweler/commands/test_setup_rubyforge.rb +0 -4
  73. data/test/jeweler/commands/test_write_gemspec.rb +11 -2
  74. data/test/jeweler/commands/version/test_write.rb +1 -2
  75. data/test/{test_application.rb → jeweler/generator/test_application.rb} +23 -50
  76. data/test/{test_options.rb → jeweler/generator/test_options.rb} +72 -8
  77. data/test/{test_gemspec_helper.rb → jeweler/test_gemspec_helper.rb} +5 -1
  78. data/test/{test_generator.rb → jeweler/test_generator.rb} +32 -76
  79. data/test/{test_generator_initialization.rb → jeweler/test_generator_initialization.rb} +43 -35
  80. data/test/{test_generator_mixins.rb → jeweler/test_generator_mixins.rb} +8 -3
  81. data/test/{test_specification.rb → jeweler/test_specification.rb} +0 -0
  82. data/test/jeweler/test_tasks.rb +50 -0
  83. data/test/{test_version_helper.rb → jeweler/test_version_helper.rb} +66 -5
  84. data/test/test_helper.rb +20 -2
  85. data/test/test_jeweler.rb +21 -8
  86. metadata +58 -26
  87. data/ROADMAP +0 -12
  88. data/test/test_tasks.rb +0 -35
@@ -19,22 +19,20 @@ class Jeweler
19
19
  return 1
20
20
  end
21
21
 
22
- unless arguments.size == 1
22
+ if options[:project_name].nil? || options[:project_name].squeeze.strip == ""
23
23
  $stderr.puts options.opts
24
24
  return 1
25
25
  end
26
26
 
27
- project_name = arguments.first
28
-
29
27
  begin
30
- generator = Jeweler::Generator.new(project_name, options)
28
+ generator = Jeweler::Generator.new(options)
31
29
  generator.run
32
30
  return 0
33
31
  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"}
32
+ $stderr.puts %Q{No user.name found in ~/.gitconfig. Please tell git about yourself (see http://help.github.com/git-email-settings/ for details). For example: git config --global user.name "mad voo"}
35
33
  return 1
36
34
  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}
35
+ $stderr.puts %Q{No user.email found in ~/.gitconfig. Please tell git about yourself (see http://help.github.com/git-email-settings/ for details). For example: git config --global user.email mad.vooo@gmail.com}
38
36
  return 1
39
37
  rescue Jeweler::NoGitHubUser
40
38
  $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}
@@ -43,7 +41,7 @@ class Jeweler
43
41
  $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
42
  return 1
45
43
  rescue Jeweler::FileInTheWay
46
- $stderr.puts "The directory #{project_name} already exists. Maybe move it out of the way before continuing?"
44
+ $stderr.puts "The directory #{options[:project_name]} already exists. Maybe move it out of the way before continuing?"
47
45
  return 1
48
46
  end
49
47
  end
@@ -3,7 +3,7 @@ class Jeweler
3
3
  module BaconMixin
4
4
 
5
5
  def self.extended(generator)
6
- generator.development_dependencies << "bacon"
6
+ generator.development_dependencies << ["bacon", ">= 0"]
7
7
  end
8
8
 
9
9
  def default_task
@@ -0,0 +1,29 @@
1
+ class Jeweler
2
+ class Generator
3
+ module GithubMixin
4
+ def self.extended(generator)
5
+ generator.github_username = generator.options[:github_username]
6
+ generator.github_token = generator.options[:github_token]
7
+ generator.should_create_remote_repo = generator.options[:create_repo]
8
+
9
+ unless generator.github_username
10
+ raise NoGitHubUser
11
+ end
12
+
13
+ if generator.should_create_remote_repo
14
+ unless generator.github_token
15
+ raise NoGitHubToken
16
+ end
17
+ end
18
+ end
19
+
20
+ def git_remote
21
+ @git_remote ||= "git@github.com:#{github_username}/#{project_name}.git"
22
+ end
23
+
24
+ def homepage
25
+ @homepage ||= "http://github.com/#{github_username}/#{project_name}"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,7 +2,7 @@ class Jeweler
2
2
  class Generator
3
3
  module MicronautMixin
4
4
  def self.extended(generator)
5
- generator.development_dependencies << "spicycode-micronaut"
5
+ generator.development_dependencies << ["spicycode-micronaut", ">= 0"]
6
6
  end
7
7
 
8
8
  def default_task
@@ -2,7 +2,7 @@ class Jeweler
2
2
  class Generator
3
3
  module MinitestMixin
4
4
  def self.extended(generator)
5
- generator.development_dependencies << "minitest"
5
+ generator.development_dependencies << ["minitest", ">= 0"]
6
6
  end
7
7
 
8
8
  def default_task
@@ -10,11 +10,11 @@ class Jeweler
10
10
  end
11
11
 
12
12
  def feature_support_require
13
- 'mini/test'
13
+ 'minitest/unit'
14
14
  end
15
15
 
16
16
  def feature_support_extend
17
- 'Mini::Test::Assertions'
17
+ 'MiniTest::Assertions'
18
18
  end
19
19
 
20
20
  def test_dir
@@ -26,15 +26,15 @@ class Jeweler
26
26
  end
27
27
 
28
28
  def test_pattern
29
- 'test/**/*_test.rb'
29
+ 'test/**/test_*.rb'
30
30
  end
31
31
 
32
32
  def test_filename
33
- "#{require_name}_test.rb"
33
+ "test_#{require_name}.rb"
34
34
  end
35
35
 
36
36
  def test_helper_filename
37
- "test_helper.rb"
37
+ "helper.rb"
38
38
  end
39
39
 
40
40
  end
@@ -1,3 +1,4 @@
1
+
1
2
  class Jeweler
2
3
  class Generator
3
4
  class Options < Hash
@@ -10,11 +11,24 @@ class Jeweler
10
11
  self[:testing_framework] = :shoulda
11
12
  self[:documentation_framework] = :rdoc
12
13
 
14
+ git_config = Git.global_config
15
+ self[:user_name] = git_config['user.name']
16
+ self[:user_email] = git_config['user.email']
17
+ self[:github_username] = git_config['github.user']
18
+ self[:github_token] = git_config['github.token']
19
+
20
+ require 'optparse'
13
21
  @opts = OptionParser.new do |o|
14
22
  o.banner = "Usage: #{File.basename($0)} [options] reponame\ne.g. #{File.basename($0)} the-perfect-gem"
15
23
 
16
- o.on('--bacon', 'generate bacon specifications') do
17
- self[:testing_framework] = :bacon
24
+ o.on('--directory [DIRECTORY]', 'specify the directory to generate into') do |directory|
25
+ self[:directory] = directory
26
+ end
27
+
28
+ o.separator ""
29
+
30
+ o.on('--rspec', 'generate rspec code examples') do
31
+ self[:testing_framework] = :rspec
18
32
  end
19
33
 
20
34
  o.on('--shoulda', 'generate shoulda tests') do
@@ -25,22 +39,34 @@ class Jeweler
25
39
  self[:testing_framework] = :testunit
26
40
  end
27
41
 
28
- o.on('--minitest', 'generate minitest tests') do
29
- self[:testing_framework] = :minitest
42
+ o.on('--bacon', 'generate bacon specifications') do
43
+ self[:testing_framework] = :bacon
30
44
  end
31
45
 
32
- o.on('--rspec', 'generate rspec code examples') do
33
- self[:testing_framework] = :rspec
46
+ o.on('--testspec', 'generate test/spec tests') do
47
+ self[:testing_framework] = :testspec
48
+ end
49
+
50
+ o.on('--minitest', 'generate minitest tests') do
51
+ self[:testing_framework] = :minitest
34
52
  end
35
53
 
36
54
  o.on('--micronaut', 'generate micronaut examples') do
37
55
  self[:testing_framework] = :micronaut
38
56
  end
39
57
 
58
+ o.on('--riot', 'generate riot tests') do
59
+ self[:testing_framework] = :riot
60
+ end
61
+
62
+ o.separator ""
63
+
40
64
  o.on('--cucumber', 'generate cucumber stories in addition to the other tests') do
41
65
  self[:use_cucumber] = true
42
66
  end
43
67
 
68
+ o.separator ""
69
+
44
70
  o.on('--reek', 'generate rake task for reek') do
45
71
  self[:use_reek] = true
46
72
  end
@@ -49,9 +75,7 @@ class Jeweler
49
75
  self[:use_roodi] = true
50
76
  end
51
77
 
52
- o.on('--create-repo', 'create the repository on GitHub') do
53
- self[:create_repo] = true
54
- end
78
+ o.separator ""
55
79
 
56
80
  o.on('--gemcutter', 'setup project for gemcutter') do
57
81
  self[:gemcutter] = true
@@ -69,10 +93,41 @@ class Jeweler
69
93
  self[:description] = description
70
94
  end
71
95
 
72
- o.on('--directory [DIRECTORY]', 'specify the directory to generate into') do |directory|
73
- self[:directory] = directory
96
+ o.separator ""
97
+
98
+ o.on('--user-name [USER_NAME]', "the user's name, ie that is credited in the LICENSE") do |user_name|
99
+ self[:user_name] = user_name
100
+ end
101
+
102
+ o.on('--user-email [USER_EMAIL]', "the user's email, ie that is credited in the Gem specification") do |user_email|
103
+ self[:user_email] = user_email
104
+ end
105
+
106
+ o.separator ""
107
+
108
+ o.on('--github-username [GITHUB_USERNAME]', "name of the user on GitHub to set the project up under") do |github_username|
109
+ self[:github_username] = github_username
74
110
  end
75
111
 
112
+ o.on('--github-token [GITHUB_TOKEN]', "GitHub token to use for interacting with the GitHub API") do |github_token|
113
+ self[:github_token] = github_token
114
+ end
115
+
116
+ o.on('--git-remote [GIT_REMOTE]', 'URI to set the git origin remote to') do |git_remote|
117
+ self[:git_remote] = git_remote
118
+ end
119
+
120
+ o.on('--homepage [HOMEPAGE]', "the homepage for your project (defaults to the GitHub repo)") do |homepage|
121
+ self[:homepage] = homepage
122
+ end
123
+
124
+ o.on('--create-repo', 'create the repository on GitHub') do
125
+ self[:create_repo] = true
126
+ end
127
+
128
+
129
+ o.separator ""
130
+
76
131
  o.on('--yard', 'use yard for documentation') do
77
132
  self[:documentation_framework] = :yard
78
133
  end
@@ -88,6 +143,7 @@ class Jeweler
88
143
 
89
144
  begin
90
145
  @opts.parse!(args)
146
+ self[:project_name] = args.shift
91
147
  rescue OptionParser::InvalidOption => e
92
148
  self[:invalid_argument] = e.message
93
149
  end
@@ -0,0 +1,42 @@
1
+ class Jeweler
2
+ class Generator
3
+ module RiotMixin
4
+ def self.extended(generator)
5
+ generator.development_dependencies << ["riot", ">= 0"]
6
+ end
7
+
8
+ def default_task
9
+ 'test'
10
+ end
11
+
12
+ def feature_support_require
13
+ 'riot/context'
14
+ end
15
+
16
+ def feature_support_extend
17
+ 'Riot::Context'
18
+ end
19
+
20
+ def test_dir
21
+ 'test'
22
+ end
23
+
24
+ def test_task
25
+ 'test'
26
+ end
27
+
28
+ def test_pattern
29
+ 'test/**/*_test.rb'
30
+ end
31
+
32
+ def test_filename
33
+ "#{require_name}_test.rb"
34
+ end
35
+
36
+ def test_helper_filename
37
+ "teststrap.rb"
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -2,7 +2,7 @@ class Jeweler
2
2
  class Generator
3
3
  module RspecMixin
4
4
  def self.extended(generator)
5
- generator.development_dependencies << "rspec"
5
+ generator.development_dependencies << ["rspec", ">= 1.2.9"]
6
6
  end
7
7
 
8
8
  def default_task
@@ -2,7 +2,7 @@ class Jeweler
2
2
  class Generator
3
3
  module ShouldaMixin
4
4
  def self.extended(generator)
5
- generator.development_dependencies << "thoughtbot-shoulda"
5
+ generator.development_dependencies << ["thoughtbot-shoulda", ">= 0"]
6
6
  end
7
7
 
8
8
  def default_task
@@ -26,15 +26,15 @@ class Jeweler
26
26
  end
27
27
 
28
28
  def test_pattern
29
- 'test/**/*_test.rb'
29
+ 'test/**/test_*.rb'
30
30
  end
31
31
 
32
32
  def test_filename
33
- "#{require_name}_test.rb"
33
+ "test_#{require_name}.rb"
34
34
  end
35
35
 
36
36
  def test_helper_filename
37
- "test_helper.rb"
37
+ "helper.rb"
38
38
  end
39
39
 
40
40
  end
@@ -0,0 +1,42 @@
1
+ class Jeweler
2
+ class Generator
3
+ module TestspecMixin
4
+ def self.extended(generator)
5
+ generator.development_dependencies << ["test-spec", ">= 0"]
6
+ end
7
+
8
+ def default_task
9
+ 'test'
10
+ end
11
+
12
+ def feature_support_require
13
+ 'test/unit/assertions'
14
+ end
15
+
16
+ def feature_support_extend
17
+ 'Test::Unit::Assertions'
18
+ end
19
+
20
+ def test_dir
21
+ 'test'
22
+ end
23
+
24
+ def test_task
25
+ 'test'
26
+ end
27
+
28
+ def test_pattern
29
+ 'test/**/*_test.rb'
30
+ end
31
+
32
+ def test_filename
33
+ "#{require_name}_test.rb"
34
+ end
35
+
36
+ def test_helper_filename
37
+ "test_helper.rb"
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -23,15 +23,15 @@ class Jeweler
23
23
  end
24
24
 
25
25
  def test_pattern
26
- 'test/**/*_test.rb'
26
+ 'test/**/test_*.rb'
27
27
  end
28
28
 
29
29
  def test_filename
30
- "#{require_name}_test.rb"
30
+ "test_#{require_name}.rb"
31
31
  end
32
32
 
33
33
  def test_helper_filename
34
- "test_helper.rb"
34
+ "helper.rb"
35
35
  end
36
36
 
37
37
  end
@@ -2,7 +2,7 @@ class Jeweler
2
2
  class Generator
3
3
  module YardMixin
4
4
  def self.extended(generator)
5
- generator.development_dependencies << "yard"
5
+ generator.development_dependencies << ["yard", ">= 0"]
6
6
  end
7
7
 
8
8
  def doc_task
@@ -1,7 +1,5 @@
1
1
  require 'rake'
2
2
  require 'rake/tasklib'
3
- require 'rake/contrib/sshpublisher'
4
-
5
3
 
6
4
  class Jeweler
7
5
  # Rake tasks for putting a Jeweler gem on Rubyforge.
@@ -19,6 +17,7 @@ class Jeweler
19
17
  # * project: the rubyforge project to operate on. This defaults to whatever you specified in your gemspec. Defaults to your gem name.
20
18
  # * remote_doc_path: the place to upload docs to on Rubyforge under /var/www/gforge-projects/#{project}/
21
19
  #
20
+ # See also http://wiki.github.com/technicalpickles/jeweler/rubyforge
22
21
  class RubyforgeTasks < ::Rake::TaskLib
23
22
  # The RubyForge project to interact with. Defaults to whatever is in your jeweler gemspec.
24
23
  attr_accessor :project
@@ -32,21 +31,26 @@ class Jeweler
32
31
  def initialize
33
32
  yield self if block_given?
34
33
 
35
- self.jeweler = Rake.application.jeweler
36
-
37
- self.remote_doc_path ||= jeweler.gemspec.name
38
- self.project ||= jeweler.gemspec.rubyforge_project
39
- self.doc_task ||= :rdoc
34
+ self.doc_task = :rdoc if self.doc_task == nil # be sure to allow it to be set to false, to allow disabling
40
35
 
41
36
  define
42
37
  end
43
38
 
39
+ def jeweler
40
+ @jeweler ||= Rake.application.jeweler
41
+ end
42
+
43
+ def remote_doc_path
44
+ @remote_doc_path ||= jeweler.gemspec.name
45
+ end
46
+
47
+ def project
48
+ @project ||= jeweler.gemspec.rubyforge_project
49
+ end
50
+
44
51
  def define
45
52
  namespace :rubyforge do
46
53
 
47
- desc "Release gem and RDoc documentation to RubyForge"
48
- task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
49
-
50
54
  namespace :release do
51
55
  desc "Release the current gem version to RubyForge."
52
56
  task :gem => [:gemspec, :build] do
@@ -61,26 +65,34 @@ class Jeweler
61
65
  end
62
66
  end
63
67
 
64
- desc "Publish docs to RubyForge."
65
- task :docs => doc_task do
66
- config = YAML.load(
67
- File.read(File.expand_path('~/.rubyforge/user-config.yml'))
68
- )
68
+ if publish_documentation?
69
+ desc "Publish docs to RubyForge."
70
+ task :docs => doc_task do
71
+ config = YAML.load(
72
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
73
+ )
69
74
 
70
- host = "#{config['username']}@rubyforge.org"
71
- remote_dir = "/var/www/gforge-projects/#{project}/#{remote_doc_path}"
75
+ host = "#{config['username']}@rubyforge.org"
76
+ remote_dir = "/var/www/gforge-projects/#{project}/#{remote_doc_path}"
72
77
 
73
- local_dir = case self.doc_task.to_sym
74
- when :rdoc then 'rdoc'
75
- when :yardoc then 'doc'
76
- else
77
- raise "Unsure what to run to generate documentation. Please set doc_task and re-run."
78
- end
78
+ local_dir = case self.doc_task.to_sym
79
+ when :rdoc then 'rdoc'
80
+ when :yardoc then 'doc'
81
+ else
82
+ raise "Unsure what to run to generate documentation. Please set doc_task and re-run."
83
+ end
79
84
 
80
- sh %{rsync -av --delete #{local_dir}/ #{host}:#{remote_dir}}
85
+ sh %{rsync --archive --verbose --delete #{local_dir}/ #{host}:#{remote_dir}}
86
+ end
81
87
  end
82
88
  end
83
89
 
90
+
91
+ desc "Release gem and RDoc documentation to RubyForge"
92
+ task :release => "rubyforge:release:gem"
93
+ task :release => "rubyforge:release:docs" if publish_documentation?
94
+
95
+
84
96
  desc "Setup a rubyforge project for this gem"
85
97
  task :setup do
86
98
  begin
@@ -93,6 +105,12 @@ class Jeweler
93
105
  end
94
106
 
95
107
  end
108
+
109
+ task :release => 'rubyforge:release'
110
+ end
111
+
112
+ def publish_documentation?
113
+ ! (doc_task == false || doc_task == :none)
96
114
  end
97
115
  end
98
116
  end