jeweler 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.markdown +30 -0
- data/README.markdown +61 -26
- data/Rakefile +10 -14
- data/VERSION.yml +1 -1
- data/bin/jeweler +2 -2
- data/features/generator/rakefile.feature +2 -2
- data/features/step_definitions/generator_steps.rb +1 -1
- data/jeweler.gemspec +13 -4
- data/lib/jeweler/commands/install_gem.rb +4 -14
- data/lib/jeweler/generator.rb +9 -23
- data/lib/jeweler/generator/options.rb +3 -2
- data/lib/jeweler/rubyforge_tasks.rb +2 -0
- data/lib/jeweler/specification.rb +34 -12
- data/lib/jeweler/tasks.rb +8 -2
- data/lib/jeweler/templates/README.rdoc +1 -2
- data/lib/jeweler/templates/Rakefile +2 -145
- data/lib/jeweler/templates/jeweler_tasks.erb +29 -0
- data/lib/jeweler/templates/other_tasks.erb +117 -0
- data/test/jeweler/commands/test_install_gem.rb +3 -42
- data/test/jeweler/generator/test_options.rb +18 -0
- data/test/jeweler/test_specification.rb +202 -32
- data/test/test_helper.rb +3 -0
- data/test/test_jeweler.rb +1 -1
- metadata +34 -2
@@ -10,6 +10,7 @@ class Jeweler
|
|
10
10
|
@orig_args = args.clone
|
11
11
|
self[:testing_framework] = :shoulda
|
12
12
|
self[:documentation_framework] = :rdoc
|
13
|
+
self[:gemcutter] = true
|
13
14
|
|
14
15
|
git_config = Git.global_config
|
15
16
|
self[:user_name] = git_config['user.name']
|
@@ -77,8 +78,8 @@ class Jeweler
|
|
77
78
|
|
78
79
|
o.separator ""
|
79
80
|
|
80
|
-
o.on('--gemcutter', 'setup project for gemcutter') do
|
81
|
-
self[:gemcutter] =
|
81
|
+
o.on('--[no-]gemcutter', 'setup project for gemcutter') do |v|
|
82
|
+
self[:gemcutter] = v
|
82
83
|
end
|
83
84
|
|
84
85
|
o.on('--rubyforge', 'setup project for rubyforge') do
|
@@ -54,6 +54,7 @@ class Jeweler
|
|
54
54
|
namespace :release do
|
55
55
|
desc "Release the current gem version to RubyForge."
|
56
56
|
task :gem => [:gemspec, :build] do
|
57
|
+
$stderr.puts "DEPRECATION: Releasing gems to RubyForge is deprecated. You should see about releasing to Gemcutter instead: http://wiki.github.com/technicalpickles/jeweler/gemcutter"
|
57
58
|
begin
|
58
59
|
jeweler.release_gem_to_rubyforge
|
59
60
|
rescue NoRubyForgeProjectInGemspecError => e
|
@@ -95,6 +96,7 @@ class Jeweler
|
|
95
96
|
|
96
97
|
desc "Setup a rubyforge project for this gem"
|
97
98
|
task :setup do
|
99
|
+
$stderr.puts "DEPRECATION: Releasing gems to RubyForge is deprecated. You should see about releasing to Gemcutter instead: http://wiki.github.com/technicalpickles/jeweler/gemcutter"
|
98
100
|
begin
|
99
101
|
jeweler.setup_rubyforge
|
100
102
|
rescue NoRubyForgeProjectInGemspecError => e
|
@@ -7,12 +7,15 @@ class Jeweler
|
|
7
7
|
# [files] a Rake::FileList of anything that is in git and not gitignored. You can include/exclude this default set, or override it entirely
|
8
8
|
# [test_files] Similar to gem.files, except it's only things under the spec, test, or examples directory.
|
9
9
|
# [extra_rdoc_files] a Rake::FileList including files like README*, ChangeLog*, and LICENSE*
|
10
|
-
# [executables] uses anything found in the bin/ directory.
|
10
|
+
# [executables] uses anything found in the bin/ directory.
|
11
11
|
module Specification
|
12
12
|
|
13
13
|
def self.filelist_attribute(name)
|
14
14
|
code = %{
|
15
15
|
def #{name}
|
16
|
+
if @#{name} && @#{name}.class != FileList
|
17
|
+
@#{name} = FileList[@#{name}]
|
18
|
+
end
|
16
19
|
@#{name} ||= FileList[]
|
17
20
|
end
|
18
21
|
def #{name}=(value)
|
@@ -29,28 +32,47 @@ class Jeweler
|
|
29
32
|
|
30
33
|
# Assigns the Jeweler defaults to the Gem::Specification
|
31
34
|
def set_jeweler_defaults(base_dir, git_base_dir = nil)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
base_dir = File.expand_path(base_dir)
|
36
|
+
#breakpoint
|
37
|
+
git_base_dir = if git_base_dir
|
38
|
+
File.expand_path(git_base_dir)
|
39
|
+
else
|
40
|
+
base_dir
|
41
|
+
end
|
42
|
+
can_git = git_base_dir && base_dir.include?(git_base_dir) && File.directory?(File.join(git_base_dir, '.git'))
|
43
|
+
|
44
|
+
Dir.chdir(git_base_dir) do
|
45
|
+
if can_git
|
46
|
+
require 'git'
|
47
|
+
repo = Git.open(git_base_dir) if can_git
|
48
|
+
end
|
49
|
+
|
50
|
+
if blank?(files) && repo
|
51
|
+
base_dir_with_trailing_separator = File.join(base_dir, "")
|
52
|
+
|
53
|
+
self.files = (repo.ls_files(base_dir).keys - repo.lib.ignored_files).map do |file|
|
54
|
+
#breakpoint
|
55
|
+
File.expand_path(file).sub(base_dir_with_trailing_separator, "")
|
56
|
+
end
|
38
57
|
end
|
39
58
|
|
40
|
-
if blank?(test_files) &&
|
41
|
-
repo = Git.open(base_dir)
|
59
|
+
if blank?(test_files) && repo
|
42
60
|
self.test_files = FileList['{spec,test,examples}/**/*.rb'] - repo.lib.ignored_files
|
43
61
|
end
|
44
62
|
|
45
63
|
if blank?(executables)
|
46
|
-
self.executables = Dir[
|
64
|
+
self.executables = Dir['bin/*'].map { |f| File.basename(f) }
|
65
|
+
end
|
66
|
+
|
67
|
+
if blank?(extensions)
|
68
|
+
self.extensions = FileList['ext/**/extconf.rb']
|
47
69
|
end
|
48
70
|
|
49
71
|
self.has_rdoc = true
|
50
72
|
rdoc_options << '--charset=UTF-8'
|
51
73
|
|
52
74
|
if blank?(extra_rdoc_files)
|
53
|
-
self.extra_rdoc_files = FileList[
|
75
|
+
self.extra_rdoc_files = FileList['README*', 'ChangeLog*', 'LICENSE*', 'TODO']
|
54
76
|
end
|
55
77
|
end
|
56
78
|
end
|
@@ -58,7 +80,7 @@ class Jeweler
|
|
58
80
|
# Used by Specification#to_ruby to generate a ruby-respresentation of a Gem::Specification
|
59
81
|
def ruby_code(obj)
|
60
82
|
case obj
|
61
|
-
when Rake::FileList then obj.to_a.inspect
|
83
|
+
when Rake::FileList then obj.uniq.to_a.inspect
|
62
84
|
else super
|
63
85
|
end
|
64
86
|
end
|
data/lib/jeweler/tasks.rb
CHANGED
@@ -68,12 +68,12 @@ class Jeweler
|
|
68
68
|
end
|
69
69
|
|
70
70
|
desc "Build gem"
|
71
|
-
task :build do
|
71
|
+
task :build => :gemspec do
|
72
72
|
jeweler.build_gem
|
73
73
|
end
|
74
74
|
|
75
75
|
desc "Install gem using sudo"
|
76
|
-
task :install => [
|
76
|
+
task :install => [:build] do
|
77
77
|
jeweler.install_gem
|
78
78
|
end
|
79
79
|
|
@@ -133,7 +133,12 @@ class Jeweler
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
+
desc "Release gem"
|
137
|
+
task :release do
|
138
|
+
end
|
139
|
+
|
136
140
|
namespace :github do
|
141
|
+
desc "Release Gem to GitHub"
|
137
142
|
task :release do
|
138
143
|
jeweler.release_gem_to_github
|
139
144
|
end
|
@@ -142,6 +147,7 @@ class Jeweler
|
|
142
147
|
task :release => 'github:release'
|
143
148
|
|
144
149
|
namespace :git do
|
150
|
+
desc "Tag a release in Git"
|
145
151
|
task :release do
|
146
152
|
jeweler.release_to_git
|
147
153
|
end
|
@@ -9,8 +9,7 @@ Description goes here.
|
|
9
9
|
* Add tests for it. This is important so I don't break it in a
|
10
10
|
future version unintentionally.
|
11
11
|
* Commit, do not mess with rakefile, version, or history.
|
12
|
-
(if you want to have your own version, that is fine but
|
13
|
-
bump version in a commit by itself I can ignore when I pull)
|
12
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
14
13
|
* Send me a pull request. Bonus points for topic branches.
|
15
14
|
|
16
15
|
== Copyright
|
@@ -1,149 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
-
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "<%= project_name %>"
|
8
|
-
gem.summary = %Q{<%= summary %>}
|
9
|
-
gem.description = %Q{<%= description %>}
|
10
|
-
gem.email = "<%= user_email %>"
|
11
|
-
gem.homepage = "<%= homepage %>"
|
12
|
-
gem.authors = ["<%= user_name %>"]
|
13
|
-
<% if should_setup_rubyforge %>
|
14
|
-
gem.rubyforge_project = "<%= project_name %>"
|
15
|
-
<% end %>
|
16
|
-
<% development_dependencies.each do |name, version| %>
|
17
|
-
gem.add_development_dependency "<%= name %>", "<%= version %>"
|
18
|
-
<% end %>
|
19
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
20
|
-
end
|
21
|
-
<% if should_setup_gemcutter %>
|
22
|
-
Jeweler::GemcutterTasks.new
|
23
|
-
<% end %>
|
24
|
-
<% if should_setup_rubyforge %>
|
25
|
-
Jeweler::RubyforgeTasks.new do |rubyforge|
|
26
|
-
rubyforge.doc_task = "<%= doc_task %>"
|
27
|
-
end
|
28
|
-
<% end %>
|
29
|
-
rescue LoadError
|
30
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
31
|
-
end
|
4
|
+
<%= render_template 'jeweler_tasks.erb' %>
|
32
5
|
|
33
|
-
|
34
|
-
<% when :rspec %>
|
35
|
-
require 'spec/rake/spectask'
|
36
|
-
Spec::Rake::SpecTask.new(:<%= test_task %>) do |<%= test_task %>|
|
37
|
-
<%= test_task %>.libs << 'lib' << '<%= test_dir %>'
|
38
|
-
<%= test_task %>.spec_files = FileList['<%= test_pattern %>']
|
39
|
-
end
|
40
|
-
<% when :micronaut %>
|
41
|
-
require 'micronaut/rake_task'
|
42
|
-
Micronaut::RakeTask.new(<%= test_task %>) do |<%= test_task %>|
|
43
|
-
<%= test_task %>.pattern = '<%= test_pattern %>'
|
44
|
-
<%= test_task %>.ruby_opts << '-Ilib -I<%= test_dir %>'
|
45
|
-
end
|
46
|
-
<% else %>
|
47
|
-
require 'rake/testtask'
|
48
|
-
Rake::TestTask.new(:<%= test_task %>) do |<%= test_task %>|
|
49
|
-
<%= test_task %>.libs << 'lib' << '<%= test_dir %>'
|
50
|
-
<%= test_task %>.pattern = '<%= test_pattern %>'
|
51
|
-
<%= test_task %>.verbose = true
|
52
|
-
end
|
53
|
-
<% end %>
|
54
|
-
|
55
|
-
<% case testing_framework %>
|
56
|
-
<% when :rspec %>
|
57
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
58
|
-
spec.libs << 'lib' << 'spec'
|
59
|
-
spec.pattern = '<%= test_pattern %>'
|
60
|
-
spec.rcov = true
|
61
|
-
end
|
62
|
-
<% when :micronaut %>
|
63
|
-
Micronaut::RakeTask.new(:rcov) do |examples|
|
64
|
-
examples.pattern = '<%= test_pattern %>'
|
65
|
-
examples.rcov_opts = '-Ilib -I<%= test_dir %>'
|
66
|
-
examples.rcov = true
|
67
|
-
end
|
68
|
-
<% else %>
|
69
|
-
begin
|
70
|
-
require 'rcov/rcovtask'
|
71
|
-
Rcov::RcovTask.new do |<%= test_task %>|
|
72
|
-
<%= test_task %>.libs << '<%= test_dir %>'
|
73
|
-
<%= test_task %>.pattern = '<%= test_pattern %>'
|
74
|
-
<%= test_task %>.verbose = true
|
75
|
-
end
|
76
|
-
rescue LoadError
|
77
|
-
task :rcov do
|
78
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
<% end %>
|
82
|
-
|
83
|
-
task :<%= test_task %> => :check_dependencies
|
84
|
-
|
85
|
-
<% if should_use_cucumber %>
|
86
|
-
begin
|
87
|
-
require 'cucumber/rake/task'
|
88
|
-
Cucumber::Rake::Task.new(:features)
|
89
|
-
|
90
|
-
task :features => :check_dependencies
|
91
|
-
rescue LoadError
|
92
|
-
task :features do
|
93
|
-
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
<% end %>
|
97
|
-
|
98
|
-
<% if should_use_reek %>
|
99
|
-
begin
|
100
|
-
require 'reek/rake_task'
|
101
|
-
Reek::RakeTask.new do |t|
|
102
|
-
t.fail_on_error = true
|
103
|
-
t.verbose = false
|
104
|
-
t.source_files = 'lib/**/*.rb'
|
105
|
-
end
|
106
|
-
rescue LoadError
|
107
|
-
task :reek do
|
108
|
-
abort "Reek is not available. In order to run reek, you must: sudo gem install reek"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
<% end %>
|
112
|
-
|
113
|
-
<% if should_use_roodi %>
|
114
|
-
begin
|
115
|
-
require 'roodi'
|
116
|
-
require 'roodi_task'
|
117
|
-
RoodiTask.new do |t|
|
118
|
-
t.verbose = false
|
119
|
-
end
|
120
|
-
rescue LoadError
|
121
|
-
task :roodi do
|
122
|
-
abort "Roodi is not available. In order to run roodi, you must: sudo gem install roodi"
|
123
|
-
end
|
124
|
-
end
|
125
|
-
<% end %>
|
126
|
-
|
127
|
-
task :default => :<%= default_task %>
|
128
|
-
|
129
|
-
<% case documentation_framework %>
|
130
|
-
<% when :rdoc %>
|
131
|
-
require 'rake/rdoctask'
|
132
|
-
Rake::RDocTask.new do |rdoc|
|
133
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
134
|
-
|
135
|
-
rdoc.rdoc_dir = 'rdoc'
|
136
|
-
rdoc.title = "<%= project_name %> #{version}"
|
137
|
-
rdoc.rdoc_files.include('README*')
|
138
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
139
|
-
end
|
140
|
-
<% when :yard %>
|
141
|
-
begin
|
142
|
-
require 'yard'
|
143
|
-
YARD::Rake::YardocTask.new
|
144
|
-
rescue LoadError
|
145
|
-
task :yardoc do
|
146
|
-
abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
|
147
|
-
end
|
148
|
-
end
|
149
|
-
<% end %>
|
6
|
+
<%= render_template 'other_tasks.erb' %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |gem|
|
4
|
+
gem.name = "<%= project_name %>"
|
5
|
+
gem.summary = %Q{<%= summary %>}
|
6
|
+
gem.description = %Q{<%= description %>}
|
7
|
+
gem.email = "<%= user_email %>"
|
8
|
+
gem.homepage = "<%= homepage %>"
|
9
|
+
gem.authors = ["<%= user_name %>"]
|
10
|
+
<% if should_setup_rubyforge %>
|
11
|
+
gem.rubyforge_project = "<%= project_name %>"
|
12
|
+
<% end %>
|
13
|
+
<% development_dependencies.each do |name, version| %>
|
14
|
+
gem.add_development_dependency "<%= name %>", "<%= version %>"
|
15
|
+
<% end %>
|
16
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
|
+
end
|
18
|
+
<% if should_setup_gemcutter %>
|
19
|
+
Jeweler::GemcutterTasks.new
|
20
|
+
<% end %>
|
21
|
+
<% if should_setup_rubyforge %>
|
22
|
+
Jeweler::RubyforgeTasks.new do |rubyforge|
|
23
|
+
rubyforge.doc_task = "<%= doc_task %>"
|
24
|
+
end
|
25
|
+
<% end %>
|
26
|
+
rescue LoadError
|
27
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,117 @@
|
|
1
|
+
<% case testing_framework %>
|
2
|
+
<% when :rspec %>
|
3
|
+
require 'spec/rake/spectask'
|
4
|
+
Spec::Rake::SpecTask.new(:<%= test_task %>) do |<%= test_task %>|
|
5
|
+
<%= test_task %>.libs << 'lib' << '<%= test_dir %>'
|
6
|
+
<%= test_task %>.spec_files = FileList['<%= test_pattern %>']
|
7
|
+
end
|
8
|
+
<% when :micronaut %>
|
9
|
+
require 'micronaut/rake_task'
|
10
|
+
Micronaut::RakeTask.new(<%= test_task %>) do |<%= test_task %>|
|
11
|
+
<%= test_task %>.pattern = '<%= test_pattern %>'
|
12
|
+
<%= test_task %>.ruby_opts << '-Ilib -I<%= test_dir %>'
|
13
|
+
end
|
14
|
+
<% else %>
|
15
|
+
require 'rake/testtask'
|
16
|
+
Rake::TestTask.new(:<%= test_task %>) do |<%= test_task %>|
|
17
|
+
<%= test_task %>.libs << 'lib' << '<%= test_dir %>'
|
18
|
+
<%= test_task %>.pattern = '<%= test_pattern %>'
|
19
|
+
<%= test_task %>.verbose = true
|
20
|
+
end
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<% case testing_framework %>
|
24
|
+
<% when :rspec %>
|
25
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
26
|
+
spec.libs << 'lib' << 'spec'
|
27
|
+
spec.pattern = '<%= test_pattern %>'
|
28
|
+
spec.rcov = true
|
29
|
+
end
|
30
|
+
<% when :micronaut %>
|
31
|
+
Micronaut::RakeTask.new(:rcov) do |examples|
|
32
|
+
examples.pattern = '<%= test_pattern %>'
|
33
|
+
examples.rcov_opts = '-Ilib -I<%= test_dir %>'
|
34
|
+
examples.rcov = true
|
35
|
+
end
|
36
|
+
<% else %>
|
37
|
+
begin
|
38
|
+
require 'rcov/rcovtask'
|
39
|
+
Rcov::RcovTask.new do |<%= test_task %>|
|
40
|
+
<%= test_task %>.libs << '<%= test_dir %>'
|
41
|
+
<%= test_task %>.pattern = '<%= test_pattern %>'
|
42
|
+
<%= test_task %>.verbose = true
|
43
|
+
end
|
44
|
+
rescue LoadError
|
45
|
+
task :rcov do
|
46
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
task :<%= test_task %> => :check_dependencies
|
52
|
+
|
53
|
+
<% if should_use_cucumber %>
|
54
|
+
begin
|
55
|
+
require 'cucumber/rake/task'
|
56
|
+
Cucumber::Rake::Task.new(:features)
|
57
|
+
|
58
|
+
task :features => :check_dependencies
|
59
|
+
rescue LoadError
|
60
|
+
task :features do
|
61
|
+
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
<% end %>
|
65
|
+
|
66
|
+
<% if should_use_reek %>
|
67
|
+
begin
|
68
|
+
require 'reek/adapters/rake_task'
|
69
|
+
Reek::RakeTask.new do |t|
|
70
|
+
t.fail_on_error = true
|
71
|
+
t.verbose = false
|
72
|
+
t.source_files = 'lib/**/*.rb'
|
73
|
+
end
|
74
|
+
rescue LoadError
|
75
|
+
task :reek do
|
76
|
+
abort "Reek is not available. In order to run reek, you must: sudo gem install reek"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
<% end %>
|
80
|
+
|
81
|
+
<% if should_use_roodi %>
|
82
|
+
begin
|
83
|
+
require 'roodi'
|
84
|
+
require 'roodi_task'
|
85
|
+
RoodiTask.new do |t|
|
86
|
+
t.verbose = false
|
87
|
+
end
|
88
|
+
rescue LoadError
|
89
|
+
task :roodi do
|
90
|
+
abort "Roodi is not available. In order to run roodi, you must: sudo gem install roodi"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
<% end %>
|
94
|
+
|
95
|
+
task :default => :<%= default_task %>
|
96
|
+
|
97
|
+
<% case documentation_framework %>
|
98
|
+
<% when :rdoc %>
|
99
|
+
require 'rake/rdoctask'
|
100
|
+
Rake::RDocTask.new do |rdoc|
|
101
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
102
|
+
|
103
|
+
rdoc.rdoc_dir = 'rdoc'
|
104
|
+
rdoc.title = "<%= project_name %> #{version}"
|
105
|
+
rdoc.rdoc_files.include('README*')
|
106
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
107
|
+
end
|
108
|
+
<% when :yard %>
|
109
|
+
begin
|
110
|
+
require 'yard'
|
111
|
+
YARD::Rake::YardocTask.new
|
112
|
+
rescue LoadError
|
113
|
+
task :yardoc do
|
114
|
+
abort "YARD is not available. In order to run yardoc, you must: sudo gem install yard"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
<% end %>
|