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.
- data/.gitignore +9 -0
- data/ChangeLog.markdown +111 -0
- data/LICENSE +20 -0
- data/README.markdown +185 -0
- data/ROADMAP +12 -0
- data/Rakefile +103 -0
- data/VERSION.yml +4 -0
- data/bin/jeweler +8 -0
- data/features/generator/cucumber.feature +83 -0
- data/features/generator/directory_layout.feature +76 -0
- data/features/generator/dotdocument.feature +14 -0
- data/features/generator/env_options.feature +9 -0
- data/features/generator/git.feature +94 -0
- data/features/generator/license.feature +11 -0
- data/features/generator/rakefile.feature +151 -0
- data/features/generator/readme.feature +12 -0
- data/features/generator/test.feature +41 -0
- data/features/generator/test_helper.feature +49 -0
- data/features/placeholder.feature +5 -0
- data/features/step_definitions/debug_steps.rb +6 -0
- data/features/step_definitions/filesystem_steps.rb +68 -0
- data/features/step_definitions/generator_steps.rb +284 -0
- data/features/step_definitions/task_steps.rb +6 -0
- data/features/support/env.rb +29 -0
- data/features/tasks/build_gem.feature +9 -0
- data/features/tasks/version.feature +24 -0
- data/features/tasks/version_bumping.feature +33 -0
- data/jeweler.gemspec +225 -0
- data/lib/jeweler.rb +153 -0
- data/lib/jeweler/commands.rb +14 -0
- data/lib/jeweler/commands/build_gem.rb +31 -0
- data/lib/jeweler/commands/check_dependencies.rb +52 -0
- data/lib/jeweler/commands/install_gem.rb +40 -0
- data/lib/jeweler/commands/release.rb +86 -0
- data/lib/jeweler/commands/release_to_rubyforge.rb +51 -0
- data/lib/jeweler/commands/setup_rubyforge.rb +57 -0
- data/lib/jeweler/commands/validate_gemspec.rb +30 -0
- data/lib/jeweler/commands/version/base.rb +41 -0
- data/lib/jeweler/commands/version/bump_major.rb +13 -0
- data/lib/jeweler/commands/version/bump_minor.rb +12 -0
- data/lib/jeweler/commands/version/bump_patch.rb +14 -0
- data/lib/jeweler/commands/version/write.rb +12 -0
- data/lib/jeweler/commands/write_gemspec.rb +39 -0
- data/lib/jeweler/errors.rb +20 -0
- data/lib/jeweler/gemspec_helper.rb +79 -0
- data/lib/jeweler/generator.rb +306 -0
- data/lib/jeweler/generator/application.rb +54 -0
- data/lib/jeweler/generator/bacon_mixin.rb +43 -0
- data/lib/jeweler/generator/micronaut_mixin.rb +41 -0
- data/lib/jeweler/generator/minitest_mixin.rb +42 -0
- data/lib/jeweler/generator/options.rb +102 -0
- data/lib/jeweler/generator/rdoc_mixin.rb +9 -0
- data/lib/jeweler/generator/rspec_mixin.rb +42 -0
- data/lib/jeweler/generator/shoulda_mixin.rb +42 -0
- data/lib/jeweler/generator/testunit_mixin.rb +39 -0
- data/lib/jeweler/generator/yard_mixin.rb +14 -0
- data/lib/jeweler/rubyforge_tasks.rb +98 -0
- data/lib/jeweler/specification.rb +66 -0
- data/lib/jeweler/tasks.rb +135 -0
- data/lib/jeweler/templates/.document +5 -0
- data/lib/jeweler/templates/.gitignore +5 -0
- data/lib/jeweler/templates/LICENSE +20 -0
- data/lib/jeweler/templates/README.rdoc +18 -0
- data/lib/jeweler/templates/Rakefile +153 -0
- data/lib/jeweler/templates/bacon/flunking.rb +7 -0
- data/lib/jeweler/templates/bacon/helper.rb +8 -0
- data/lib/jeweler/templates/features/default.feature +9 -0
- data/lib/jeweler/templates/features/support/env.rb +8 -0
- data/lib/jeweler/templates/micronaut/flunking.rb +7 -0
- data/lib/jeweler/templates/micronaut/helper.rb +17 -0
- data/lib/jeweler/templates/minitest/flunking.rb +7 -0
- data/lib/jeweler/templates/minitest/helper.rb +11 -0
- data/lib/jeweler/templates/rspec/flunking.rb +7 -0
- data/lib/jeweler/templates/rspec/helper.rb +10 -0
- data/lib/jeweler/templates/shoulda/flunking.rb +7 -0
- data/lib/jeweler/templates/shoulda/helper.rb +10 -0
- data/lib/jeweler/templates/testunit/flunking.rb +7 -0
- data/lib/jeweler/templates/testunit/helper.rb +9 -0
- data/lib/jeweler/version_helper.rb +128 -0
- data/test/fixtures/bar/VERSION.yml +4 -0
- data/test/fixtures/bar/bin/foo_the_ultimate_bin +1 -0
- data/test/fixtures/bar/hey_include_me_in_gemspec +0 -0
- data/test/fixtures/bar/lib/foo_the_ultimate_lib.rb +1 -0
- data/test/fixtures/existing-project-with-version-plaintext/.document +5 -0
- data/test/fixtures/existing-project-with-version-plaintext/.gitignore +5 -0
- data/test/fixtures/existing-project-with-version-plaintext/LICENSE +20 -0
- data/test/fixtures/existing-project-with-version-plaintext/README.rdoc +7 -0
- data/test/fixtures/existing-project-with-version-plaintext/Rakefile +82 -0
- data/test/fixtures/existing-project-with-version-plaintext/VERSION +1 -0
- data/test/fixtures/existing-project-with-version-plaintext/existing-project-with-version.gemspec +29 -0
- data/test/fixtures/existing-project-with-version-plaintext/lib/existing_project_with_version.rb +0 -0
- data/test/fixtures/existing-project-with-version-plaintext/test/existing_project_with_version_test.rb +7 -0
- data/test/fixtures/existing-project-with-version-plaintext/test/test_helper.rb +10 -0
- data/test/fixtures/existing-project-with-version-yaml/.document +5 -0
- data/test/fixtures/existing-project-with-version-yaml/.gitignore +5 -0
- data/test/fixtures/existing-project-with-version-yaml/LICENSE +20 -0
- data/test/fixtures/existing-project-with-version-yaml/README.rdoc +7 -0
- data/test/fixtures/existing-project-with-version-yaml/Rakefile +82 -0
- data/test/fixtures/existing-project-with-version-yaml/VERSION.yml +4 -0
- data/test/fixtures/existing-project-with-version-yaml/bin/foo_the_ultimate_bin +0 -0
- data/test/fixtures/existing-project-with-version-yaml/existing-project-with-version.gemspec +29 -0
- data/test/fixtures/existing-project-with-version-yaml/lib/existing_project_with_version.rb +0 -0
- data/test/fixtures/existing-project-with-version-yaml/test/existing_project_with_version_test.rb +7 -0
- data/test/fixtures/existing-project-with-version-yaml/test/test_helper.rb +10 -0
- data/test/geminstaller.yml +12 -0
- data/test/jeweler/commands/test_build_gem.rb +72 -0
- data/test/jeweler/commands/test_install_gem.rb +74 -0
- data/test/jeweler/commands/test_release.rb +362 -0
- data/test/jeweler/commands/test_release_to_rubyforge.rb +157 -0
- data/test/jeweler/commands/test_setup_rubyforge.rb +182 -0
- data/test/jeweler/commands/test_validate_gemspec.rb +27 -0
- data/test/jeweler/commands/test_write_gemspec.rb +92 -0
- data/test/jeweler/commands/version/test_base.rb +32 -0
- data/test/jeweler/commands/version/test_bump_major.rb +22 -0
- data/test/jeweler/commands/version/test_bump_minor.rb +19 -0
- data/test/jeweler/commands/version/test_bump_patch.rb +20 -0
- data/test/jeweler/commands/version/test_write.rb +23 -0
- data/test/shoulda_macros/jeweler_macros.rb +35 -0
- data/test/test_application.rb +139 -0
- data/test/test_gemspec_helper.rb +40 -0
- data/test/test_generator.rb +166 -0
- data/test/test_generator_initialization.rb +156 -0
- data/test/test_generator_mixins.rb +18 -0
- data/test/test_helper.rb +159 -0
- data/test/test_jeweler.rb +174 -0
- data/test/test_options.rb +149 -0
- data/test/test_specification.rb +61 -0
- data/test/test_tasks.rb +35 -0
- data/test/test_version_helper.rb +153 -0
- metadata +283 -0
@@ -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,43 @@
|
|
1
|
+
class Jeweler
|
2
|
+
class Generator
|
3
|
+
module BaconMixin
|
4
|
+
|
5
|
+
def self.extended(generator)
|
6
|
+
generator.development_dependencies << "bacon"
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_task
|
10
|
+
'spec'
|
11
|
+
end
|
12
|
+
|
13
|
+
def feature_support_require
|
14
|
+
'test/unit/assertions'
|
15
|
+
end
|
16
|
+
|
17
|
+
def feature_support_extend
|
18
|
+
'Test::Unit::Assertions' # NOTE can't use bacon inside of cucumber actually
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_dir
|
22
|
+
'spec'
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_task
|
26
|
+
'spec'
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_pattern
|
30
|
+
'spec/**/*_spec.rb'
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_filename
|
34
|
+
"#{require_name}_spec.rb"
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_helper_filename
|
38
|
+
"spec_helper.rb"
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Jeweler
|
2
|
+
class Generator
|
3
|
+
module MicronautMixin
|
4
|
+
def self.extended(generator)
|
5
|
+
generator.development_dependencies << "spicycode-micronaut"
|
6
|
+
end
|
7
|
+
|
8
|
+
def default_task
|
9
|
+
'examples'
|
10
|
+
end
|
11
|
+
|
12
|
+
def feature_support_require
|
13
|
+
'micronaut/expectations'
|
14
|
+
end
|
15
|
+
|
16
|
+
def feature_support_extend
|
17
|
+
'Micronaut::Matchers'
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_dir
|
21
|
+
'examples'
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_task
|
25
|
+
'examples'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_pattern
|
29
|
+
'examples/**/*_example.rb'
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_filename
|
33
|
+
"#{require_name}_example.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_helper_filename
|
37
|
+
"example_helper.rb"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Jeweler
|
2
|
+
class Generator
|
3
|
+
module MinitestMixin
|
4
|
+
def self.extended(generator)
|
5
|
+
generator.development_dependencies << "minitest"
|
6
|
+
end
|
7
|
+
|
8
|
+
def default_task
|
9
|
+
'test'
|
10
|
+
end
|
11
|
+
|
12
|
+
def feature_support_require
|
13
|
+
'mini/test'
|
14
|
+
end
|
15
|
+
|
16
|
+
def feature_support_extend
|
17
|
+
'Mini::Test::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
|
@@ -0,0 +1,102 @@
|
|
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
|
+
self[:documentation_framework] = :rdoc
|
12
|
+
|
13
|
+
@opts = OptionParser.new do |o|
|
14
|
+
o.banner = "Usage: #{File.basename($0)} [options] reponame\ne.g. #{File.basename($0)} the-perfect-gem"
|
15
|
+
|
16
|
+
o.on('--bacon', 'generate bacon specifications') do
|
17
|
+
self[:testing_framework] = :bacon
|
18
|
+
end
|
19
|
+
|
20
|
+
o.on('--shoulda', 'generate shoulda tests') do
|
21
|
+
self[:testing_framework] = :shoulda
|
22
|
+
end
|
23
|
+
|
24
|
+
o.on('--testunit', 'generate test/unit tests') do
|
25
|
+
self[:testing_framework] = :testunit
|
26
|
+
end
|
27
|
+
|
28
|
+
o.on('--minitest', 'generate minitest tests') do
|
29
|
+
self[:testing_framework] = :minitest
|
30
|
+
end
|
31
|
+
|
32
|
+
o.on('--rspec', 'generate rspec code examples') do
|
33
|
+
self[:testing_framework] = :rspec
|
34
|
+
end
|
35
|
+
|
36
|
+
o.on('--micronaut', 'generate micronaut examples') do
|
37
|
+
self[:testing_framework] = :micronaut
|
38
|
+
end
|
39
|
+
|
40
|
+
o.on('--cucumber', 'generate cucumber stories in addition to the other tests') do
|
41
|
+
self[:use_cucumber] = true
|
42
|
+
end
|
43
|
+
|
44
|
+
o.on('--reek', 'generate rake task for reek') do
|
45
|
+
self[:use_reek] = true
|
46
|
+
end
|
47
|
+
|
48
|
+
o.on('--roodi', 'generate rake task for roodi') do
|
49
|
+
self[:use_roodi] = true
|
50
|
+
end
|
51
|
+
|
52
|
+
o.on('--create-repo', 'create the repository on GitHub') do
|
53
|
+
self[:create_repo] = true
|
54
|
+
end
|
55
|
+
|
56
|
+
o.on('--gemcutter', 'setup project for gemcutter') do
|
57
|
+
self[:gemcutter] = true
|
58
|
+
end
|
59
|
+
|
60
|
+
o.on('--rubyforge', 'setup project for rubyforge') do
|
61
|
+
self[:rubyforge] = true
|
62
|
+
end
|
63
|
+
|
64
|
+
o.on('--summary [SUMMARY]', 'specify the summary of the project') do |summary|
|
65
|
+
self[:summary] = summary
|
66
|
+
end
|
67
|
+
|
68
|
+
o.on('--description [DESCRIPTION]', 'specify a description of the project') do |description|
|
69
|
+
self[:description] = description
|
70
|
+
end
|
71
|
+
|
72
|
+
o.on('--directory [DIRECTORY]', 'specify the directory to generate into') do |directory|
|
73
|
+
self[:directory] = directory
|
74
|
+
end
|
75
|
+
|
76
|
+
o.on('--yard', 'use yard for documentation') do
|
77
|
+
self[:documentation_framework] = :yard
|
78
|
+
end
|
79
|
+
|
80
|
+
o.on('--rdoc', 'use rdoc for documentation') do
|
81
|
+
self[:documentation_framework] = :rdoc
|
82
|
+
end
|
83
|
+
|
84
|
+
o.on_tail('-h', '--help', 'display this help and exit') do
|
85
|
+
self[:show_help] = true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
begin
|
90
|
+
@opts.parse!(args)
|
91
|
+
rescue OptionParser::InvalidOption => e
|
92
|
+
self[:invalid_argument] = e.message
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def merge(other)
|
97
|
+
self.class.new(@orig_args + other.orig_args)
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Jeweler
|
2
|
+
class Generator
|
3
|
+
module RspecMixin
|
4
|
+
def self.extended(generator)
|
5
|
+
generator.development_dependencies << "rspec"
|
6
|
+
end
|
7
|
+
|
8
|
+
def default_task
|
9
|
+
'spec'
|
10
|
+
end
|
11
|
+
|
12
|
+
def feature_support_require
|
13
|
+
'spec/expectations'
|
14
|
+
end
|
15
|
+
|
16
|
+
def feature_support_extend
|
17
|
+
nil # Cucumber is smart enough extend Spec::Expectations on its own
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_dir
|
21
|
+
'spec'
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_task
|
25
|
+
'spec'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_pattern
|
29
|
+
'spec/**/*_spec.rb'
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_filename
|
33
|
+
"#{require_name}_spec.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_helper_filename
|
37
|
+
"spec_helper.rb"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Jeweler
|
2
|
+
class Generator
|
3
|
+
module ShouldaMixin
|
4
|
+
def self.extended(generator)
|
5
|
+
generator.development_dependencies << "thoughtbot-shoulda"
|
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
|
@@ -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
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
require 'rake/contrib/sshpublisher'
|
4
|
+
|
5
|
+
|
6
|
+
class Jeweler
|
7
|
+
# Rake tasks for putting a Jeweler gem on Rubyforge.
|
8
|
+
#
|
9
|
+
# Jeweler::Tasks.new needs to be used before this.
|
10
|
+
#
|
11
|
+
# Basic usage:
|
12
|
+
#
|
13
|
+
# Jeweler::RubyforgeTasks.new
|
14
|
+
#
|
15
|
+
# Easy enough, right?
|
16
|
+
#
|
17
|
+
# There are a few options you can tweak:
|
18
|
+
#
|
19
|
+
# * project: the rubyforge project to operate on. This defaults to whatever you specified in your gemspec. Defaults to your gem name.
|
20
|
+
# * remote_doc_path: the place to upload docs to on Rubyforge under /var/www/gforge-projects/#{project}/
|
21
|
+
#
|
22
|
+
class RubyforgeTasks < ::Rake::TaskLib
|
23
|
+
# The RubyForge project to interact with. Defaults to whatever is in your jeweler gemspec.
|
24
|
+
attr_accessor :project
|
25
|
+
# The path to upload docs to. It is relative to /var/www/gforge-projects/#{project}/, and defaults to your gemspec's name
|
26
|
+
attr_accessor :remote_doc_path
|
27
|
+
# Task to be used for generating documentation, before they are uploaded. Defaults to rdoc.
|
28
|
+
attr_accessor :doc_task
|
29
|
+
|
30
|
+
attr_accessor :jeweler
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
yield self if block_given?
|
34
|
+
|
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
|
40
|
+
|
41
|
+
define
|
42
|
+
end
|
43
|
+
|
44
|
+
def define
|
45
|
+
namespace :rubyforge do
|
46
|
+
|
47
|
+
desc "Release gem and RDoc documentation to RubyForge"
|
48
|
+
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
49
|
+
|
50
|
+
namespace :release do
|
51
|
+
desc "Release the current gem version to RubyForge."
|
52
|
+
task :gem => [:gemspec, :build] do
|
53
|
+
begin
|
54
|
+
jeweler.release_gem_to_rubyforge
|
55
|
+
rescue NoRubyForgeProjectInGemspecError => e
|
56
|
+
abort "Setting up RubyForge requires that you specify a 'rubyforge_project' in your Jeweler::Tasks declaration"
|
57
|
+
rescue MissingRubyForgePackageError => e
|
58
|
+
abort "Rubyforge reported that the #{e.message} package isn't setup. Run rake rubyforge:setup to do so."
|
59
|
+
rescue RubyForgeProjectNotConfiguredError => e
|
60
|
+
abort "RubyForge reported that #{e.message} wasn't configured. This means you need to run 'rubyforge setup', 'rubyforge login', and 'rubyforge configure', or maybe the project doesn't exist on RubyForge"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
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
|
+
)
|
69
|
+
|
70
|
+
host = "#{config['username']}@rubyforge.org"
|
71
|
+
remote_dir = "/var/www/gforge-projects/#{project}/#{remote_doc_path}"
|
72
|
+
|
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
|
79
|
+
|
80
|
+
sh %{rsync -av --delete #{local_dir}/ #{host}:#{remote_dir}}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
desc "Setup a rubyforge project for this gem"
|
85
|
+
task :setup do
|
86
|
+
begin
|
87
|
+
jeweler.setup_rubyforge
|
88
|
+
rescue NoRubyForgeProjectInGemspecError => e
|
89
|
+
abort "Setting up RubyForge requires that you specify a 'rubyforge_project' in your Jeweler::Tasks declaration"
|
90
|
+
rescue RubyForgeProjectNotConfiguredError => e
|
91
|
+
abort "The RubyForge reported that #{e.message} wasn't configured. This means you need to run 'rubyforge setup', 'rubyforge login', and 'rubyforge configure', or maybe the project doesn't exist on RubyForge"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|