hoe 1.8.3 → 1.9.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/History.txt +17 -0
- data/Manifest.txt +8 -0
- data/README.txt +29 -25
- data/bin/sow +47 -38
- data/lib/hoe.rb +238 -116
- data/template/.autotest.erb +23 -0
- data/template/History.txt.erb +6 -0
- data/template/Manifest.txt.erb +7 -0
- data/template/README.txt.erb +48 -0
- data/template/Rakefile.erb +12 -0
- data/template/bin/file_name.erb +3 -0
- data/template/lib/file_name.rb.erb +3 -0
- data/template/test/test_file_name.rb.erb +8 -0
- data/test/test_hoe.rb +13 -2
- metadata +12 -4
data/History.txt
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
=== 1.9.0 / 2009-02-26:
|
2
|
+
|
3
|
+
* 7 minor enhancements:
|
4
|
+
|
5
|
+
* Added flog, flay, and rdoc tasks.
|
6
|
+
* Added ~/.hoe_template and basic erb templating to sow.
|
7
|
+
* install_gem automatically installs missing dependencies. From Dr. Nic.
|
8
|
+
* Parameterized history and readme paths for github users (*sigh*).
|
9
|
+
* Added rspec support including having both tests and specs.
|
10
|
+
* Match RubyGems' RDoc behavior and removed rdoc_pattern attribute. Use
|
11
|
+
extra_rdoc_files instead.
|
12
|
+
* Added testlib and SUPPORTED_TEST_FRAMEWORKS to switch your testing library.
|
13
|
+
|
14
|
+
* 1 bug fix:
|
15
|
+
|
16
|
+
* Fixed rdoc title command-line parameters.
|
17
|
+
|
1
18
|
=== 1.8.3 / 2009-01-20:
|
2
19
|
|
3
20
|
* 1 minor enhancement:
|
data/Manifest.txt
CHANGED
@@ -4,4 +4,12 @@ README.txt
|
|
4
4
|
Rakefile
|
5
5
|
bin/sow
|
6
6
|
lib/hoe.rb
|
7
|
+
template/.autotest.erb
|
8
|
+
template/History.txt.erb
|
9
|
+
template/Manifest.txt.erb
|
10
|
+
template/README.txt.erb
|
11
|
+
template/Rakefile.erb
|
12
|
+
template/bin/file_name.erb
|
13
|
+
template/lib/file_name.rb.erb
|
14
|
+
template/test/test_file_name.rb.erb
|
7
15
|
test/test_hoe.rb
|
data/README.txt
CHANGED
@@ -12,31 +12,35 @@ testing, packaging, and deployment.
|
|
12
12
|
|
13
13
|
Tasks Provided:
|
14
14
|
|
15
|
-
* announce
|
16
|
-
* audit
|
17
|
-
*
|
18
|
-
*
|
19
|
-
*
|
20
|
-
*
|
21
|
-
*
|
22
|
-
*
|
23
|
-
* deps:
|
24
|
-
* deps:
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*
|
28
|
-
*
|
29
|
-
*
|
30
|
-
*
|
31
|
-
*
|
32
|
-
*
|
33
|
-
*
|
34
|
-
*
|
35
|
-
*
|
36
|
-
*
|
37
|
-
*
|
38
|
-
*
|
39
|
-
*
|
15
|
+
* announce - Create news email file and post to rubyforge.
|
16
|
+
* audit - Run ZenTest against the package.
|
17
|
+
* check_extra_deps - Install missing dependencies.
|
18
|
+
* check_manifest - Verify the manifest.
|
19
|
+
* clean - Clean up all the extras.
|
20
|
+
* config_hoe - Create a fresh ~/.hoerc file.
|
21
|
+
* debug_gem - Show information about the gem.
|
22
|
+
* default - Run the default task(s).
|
23
|
+
* deps:email - Print a contact list for gems dependent on this gem
|
24
|
+
* deps:fetch - Fetch all the dependent gems of this gem into tarballs
|
25
|
+
* deps:list - List all the dependent gems of this gem
|
26
|
+
* docs - Build the docs HTML Files
|
27
|
+
* email - Generate email announcement file.
|
28
|
+
* flay - Analyze for code duplication.
|
29
|
+
* flog - Analyze code complexity.
|
30
|
+
* gem - Build the gem file hoe-1.9.0.gem
|
31
|
+
* generate_key - Generate a key for signing your gems.
|
32
|
+
* install_gem - Install the package as a gem.
|
33
|
+
* multi - Run the test suite using multiruby.
|
34
|
+
* package - Build all the packages
|
35
|
+
* post_blog - Post announcement to blog.
|
36
|
+
* post_news - Post announcement to rubyforge.
|
37
|
+
* publish_docs - Publish RDoc to RubyForge.
|
38
|
+
* rcov - Analyze code coverage with tests
|
39
|
+
* release - Package and upload the release to rubyforge.
|
40
|
+
* ridocs - Generate ri locally for testing.
|
41
|
+
* tasks - Generate a list of tasks for doco.
|
42
|
+
* test - Run the test suite.
|
43
|
+
* test_deps - Show which test files fail when run alone.
|
40
44
|
|
41
45
|
See class rdoc for help. Hint: ri Hoe
|
42
46
|
|
data/bin/sow
CHANGED
@@ -1,69 +1,78 @@
|
|
1
1
|
#!/usr/bin/env ruby -ws
|
2
2
|
|
3
|
+
$h ||= false
|
3
4
|
$t ||= false
|
4
5
|
$d ||= false
|
5
6
|
|
6
7
|
require 'rubygems'
|
7
8
|
require 'hoe'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'erb'
|
8
11
|
|
9
|
-
if
|
10
|
-
puts "usage: #{File.dirname
|
12
|
+
if $h || ARGV.empty? || ($t && $d) then
|
13
|
+
puts "usage: #{File.dirname $0} [-d|-t] project"
|
11
14
|
puts " -t = add project to subdir under 'trunk'"
|
12
15
|
puts " -d = add project to subdir under 'dev'"
|
16
|
+
exit
|
13
17
|
end
|
14
18
|
|
15
|
-
abort "You must specify only one of -t or -d" if $t and $d
|
16
|
-
|
17
19
|
project = ARGV.shift
|
18
20
|
|
19
|
-
# prevents false positives on my tag reporter
|
20
|
-
X = 'FI' + 'X'
|
21
|
-
|
22
|
-
abort "You must supply a project name on the commandline" unless project
|
23
21
|
abort "Project #{project} seems to exist" if test ?d, project
|
24
|
-
puts "creating project #{project}"
|
25
22
|
|
23
|
+
# variables for erb:
|
24
|
+
XIF = 'FI' + 'X' # prevents extra hits on my TAG reporter
|
26
25
|
project, file_name, klass = Hoe.normalize_names project
|
26
|
+
template_path = File.expand_path("~/.hoe_template")
|
27
|
+
source_path = File.join(File.dirname(File.dirname(__FILE__)),
|
28
|
+
"template")
|
29
|
+
|
30
|
+
unless File.directory? template_path then
|
31
|
+
FileUtils.cp_r source_path, template_path, :verbose => true
|
32
|
+
paths = (Dir["#{template_path}/**/*"] +
|
33
|
+
Dir["#{template_path}/**/.*"]).select { |f| File.file? f }
|
34
|
+
FileUtils.chmod 0644, paths, :verbose => true
|
35
|
+
FileUtils.chmod 0755, paths.grep(/bin\//), :verbose => true
|
36
|
+
end
|
27
37
|
|
28
|
-
|
29
|
-
Dir.chdir project do
|
38
|
+
FileUtils.cp_r template_path, project, :verbose => true
|
30
39
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
Dir.mkdir "trunk"
|
36
|
-
Dir.chdir "trunk"
|
40
|
+
Dir.chdir project do
|
41
|
+
dirs = Dir["**/*"].select { |f| File.directory? f }.sort
|
42
|
+
dirs.grep(/file_name/).each do |file|
|
43
|
+
FileUtils.mv file, file.gsub(/file_name/, file_name), :verbose => true
|
37
44
|
end
|
38
45
|
|
39
|
-
|
40
|
-
|
41
|
-
|
46
|
+
paths = (Dir["**/*"] + Dir["**/.*"]).select { |f| File.file? f }.sort
|
47
|
+
paths.each do |path|
|
48
|
+
file = File.read path
|
42
49
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
"bin/#{file_name}" => "",
|
48
|
-
"lib/#{file_name}.rb" => "class #{klass}\n VERSION = '1.0.0'\nend",
|
49
|
-
"test/test_#{file_name}.rb" => "",
|
50
|
-
"Rakefile" => "# -*- ruby -*-\n\nrequire 'rubygems'\nrequire 'hoe'\nrequire './lib/#{file_name}.rb'\n\nHoe.new('#{project}', #{klass}::VERSION) do |p|\n # p.rubyforge_name = '#{project}x' # if different than lowercase project name\n # p.developer('#{X}', '#{X}@example.com')\nend\n\n# vim: syntax=Ruby\n"
|
51
|
-
}
|
52
|
-
|
53
|
-
files["Manifest.txt"] = files.keys.sort.join("\n")
|
54
|
-
|
55
|
-
files.each do |file, content|
|
56
|
-
File.open(file, "w") do |f|
|
57
|
-
f.write content
|
50
|
+
warn "erb: #{path}"
|
51
|
+
|
52
|
+
File.open path, "w" do |f|
|
53
|
+
f.puts ERB.new(file).result(binding)
|
58
54
|
end
|
59
55
|
end
|
56
|
+
|
57
|
+
paths.grep(/file_name|\.erb$/).each do |file|
|
58
|
+
new_file = file.sub(/file_name/, file_name).sub(/\.erb$/, '')
|
59
|
+
FileUtils.mv file, new_file, :verbose => true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if $d || $t then
|
64
|
+
temp_dir = "#{project}.#{$$}"
|
65
|
+
FileUtils.mv project, temp_dir, :verbose => true
|
66
|
+
FileUtils.mkdir project, :verbose => true
|
67
|
+
FileUtils.mv temp_dir, "#{project}/#{$d ? 'dev' : 'trunk'}", :verbose => true
|
60
68
|
end
|
61
69
|
|
62
70
|
WINDOZE = /mswin|mingw/ =~ RUBY_PLATFORM
|
63
71
|
|
64
|
-
puts
|
72
|
+
puts
|
73
|
+
puts "... done, now go fix all occurrences of '#{XIF}':"
|
65
74
|
if WINDOZE then
|
66
|
-
puts `findstr /N /S /C:#{
|
75
|
+
puts `findstr /N /S /C:#{XIF} #{project}\\*`
|
67
76
|
else
|
68
|
-
puts `find #{project} -type f | xargs grep -n #{
|
77
|
+
puts `find #{project} -type f | xargs grep -n #{XIF}`.gsub(/\A|\n/, "\n ")
|
69
78
|
end
|
data/lib/hoe.rb
CHANGED
@@ -28,9 +28,11 @@ end
|
|
28
28
|
# Use this as a minimal starting point:
|
29
29
|
#
|
30
30
|
# require 'hoe'
|
31
|
+
# require './lib/project.rb'
|
31
32
|
#
|
32
|
-
# Hoe.new("project_name",
|
33
|
+
# Hoe.new("project_name", Project::VERSION) do |p|
|
33
34
|
# p.rubyforge_name = "rf_project"
|
35
|
+
# p.developer("Joe Blow", "joe@example.com")
|
34
36
|
# # add other details here
|
35
37
|
# end
|
36
38
|
#
|
@@ -38,31 +40,35 @@ end
|
|
38
40
|
#
|
39
41
|
# === Tasks Provided:
|
40
42
|
#
|
41
|
-
# announce::
|
42
|
-
# audit::
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
# deps:
|
50
|
-
# deps:
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#
|
59
|
-
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
43
|
+
# announce:: Create news email file and post to rubyforge.
|
44
|
+
# audit:: Run ZenTest against the package.
|
45
|
+
# check_extra_deps:: Install missing dependencies.
|
46
|
+
# check_manifest:: Verify the manifest.
|
47
|
+
# clean:: Clean up all the extras.
|
48
|
+
# config_hoe:: Create a fresh ~/.hoerc file.
|
49
|
+
# debug_gem:: Show information about the gem.
|
50
|
+
# default:: Run the default task(s).
|
51
|
+
# deps:email:: Print a contact list for gems dependent on this gem
|
52
|
+
# deps:fetch:: Fetch all the dependent gems of this gem into tarballs
|
53
|
+
# deps:list:: List all the dependent gems of this gem
|
54
|
+
# docs:: Build the docs HTML Files
|
55
|
+
# email:: Generate email announcement file.
|
56
|
+
# flay:: Analyze for code duplication.
|
57
|
+
# flog:: Analyze code complexity.
|
58
|
+
# gem:: Build the gem file hoe-1.9.0.gem
|
59
|
+
# generate_key:: Generate a key for signing your gems.
|
60
|
+
# install_gem:: Install the package as a gem.
|
61
|
+
# multi:: Run the test suite using multiruby.
|
62
|
+
# package:: Build all the packages
|
63
|
+
# post_blog:: Post announcement to blog.
|
64
|
+
# post_news:: Post announcement to rubyforge.
|
65
|
+
# publish_docs:: Publish RDoc to RubyForge.
|
66
|
+
# rcov:: Analyze code coverage with tests
|
67
|
+
# release:: Package and upload the release to rubyforge.
|
68
|
+
# ridocs:: Generate ri locally for testing.
|
69
|
+
# tasks:: Generate a list of tasks for doco.
|
70
|
+
# test:: Run the test suite.
|
71
|
+
# test_deps:: Show which test files fail when run alone.
|
66
72
|
#
|
67
73
|
# === Extra Configuration Options:
|
68
74
|
#
|
@@ -124,16 +130,19 @@ end
|
|
124
130
|
#
|
125
131
|
|
126
132
|
class Hoe
|
127
|
-
VERSION = '1.
|
133
|
+
VERSION = '1.9.0'
|
128
134
|
GEMURL = URI.parse 'http://gems.rubyforge.org' # for namespace :deps below
|
129
135
|
|
130
136
|
ruby_prefix = Config::CONFIG['prefix']
|
131
137
|
sitelibdir = Config::CONFIG['sitelibdir']
|
132
138
|
|
133
139
|
##
|
134
|
-
#
|
140
|
+
# Configuration for the supported test frameworks for test task.
|
135
141
|
|
136
|
-
|
142
|
+
SUPPORTED_TEST_FRAMEWORKS = {
|
143
|
+
:testunit => "test/unit",
|
144
|
+
:minitest => "minitest/autorun",
|
145
|
+
}
|
137
146
|
|
138
147
|
##
|
139
148
|
# Used to add extra flags to RUBY_FLAGS.
|
@@ -150,17 +159,13 @@ class Hoe
|
|
150
159
|
|
151
160
|
##
|
152
161
|
# Used to add flags to test_unit (e.g., -n test_borked).
|
162
|
+
#
|
163
|
+
# eg FILTER="-n test_blah"
|
153
164
|
|
154
|
-
FILTER = ENV['FILTER']
|
165
|
+
FILTER = ENV['FILTER'] || ENV['TESTOPTS']
|
155
166
|
|
156
167
|
# :stopdoc:
|
157
168
|
|
158
|
-
RUBYLIB = if PREFIX == ruby_prefix then
|
159
|
-
sitelibdir
|
160
|
-
else
|
161
|
-
File.join(PREFIX, sitelibdir[ruby_prefix.size..-1])
|
162
|
-
end
|
163
|
-
|
164
169
|
DLEXT = Config::CONFIG['DLEXT']
|
165
170
|
|
166
171
|
WINDOZE = /mswin|mingw/ =~ RUBY_PLATFORM unless defined? WINDOZE
|
@@ -178,8 +183,7 @@ class Hoe
|
|
178
183
|
# :startdoc:
|
179
184
|
|
180
185
|
##
|
181
|
-
# *
|
182
|
-
# Really. Set this or we'll tease you.
|
186
|
+
# *MANDATORY*: The author(s) of the package. (can be array)
|
183
187
|
|
184
188
|
attr_accessor :author
|
185
189
|
|
@@ -214,7 +218,7 @@ class Hoe
|
|
214
218
|
attr_accessor :description_sections
|
215
219
|
|
216
220
|
##
|
217
|
-
# *
|
221
|
+
# *MANDATORY*: The author's email address(es). (can be array)
|
218
222
|
|
219
223
|
attr_accessor :email
|
220
224
|
|
@@ -228,6 +232,18 @@ class Hoe
|
|
228
232
|
|
229
233
|
attr_accessor :extra_dev_deps
|
230
234
|
|
235
|
+
##
|
236
|
+
# Optional: Extra files you want to add to RDoc.
|
237
|
+
#
|
238
|
+
# .txt files are automatically included (excluding the obvious).
|
239
|
+
|
240
|
+
attr_accessor :extra_rdoc_files
|
241
|
+
|
242
|
+
##
|
243
|
+
# Optional: The filename for the project history. [default: History.txt]
|
244
|
+
|
245
|
+
attr_accessor :history_file
|
246
|
+
|
231
247
|
##
|
232
248
|
# Populated automatically from the manifest. List of library files.
|
233
249
|
|
@@ -259,15 +275,25 @@ class Hoe
|
|
259
275
|
attr_accessor :post_install_message
|
260
276
|
|
261
277
|
##
|
262
|
-
# Optional:
|
278
|
+
# Optional: The filename for the project readme. [default: README.txt]
|
263
279
|
|
264
|
-
attr_accessor :
|
280
|
+
attr_accessor :readme_file
|
265
281
|
|
266
282
|
##
|
267
283
|
# Optional: Name of RDoc destination directory on Rubyforge. [default: +name+]
|
268
284
|
|
269
285
|
attr_accessor :remote_rdoc_dir
|
270
286
|
|
287
|
+
##
|
288
|
+
# Optional: RSpec dirs. [default: %w(spec lib)]
|
289
|
+
|
290
|
+
attr_accessor :rspec_dirs
|
291
|
+
|
292
|
+
##
|
293
|
+
# Optional: RSpec options. [default: []]
|
294
|
+
|
295
|
+
attr_accessor :rspec_options
|
296
|
+
|
271
297
|
##
|
272
298
|
# Optional: Flags for RDoc rsync. [default: "-av --delete"]
|
273
299
|
|
@@ -309,7 +335,7 @@ class Hoe
|
|
309
335
|
attr_accessor :test_globs
|
310
336
|
|
311
337
|
##
|
312
|
-
# Optional: What test library to require [default:
|
338
|
+
# Optional: What test library to require [default: :testunit]
|
313
339
|
|
314
340
|
attr_accessor :testlib
|
315
341
|
|
@@ -351,36 +377,40 @@ class Hoe
|
|
351
377
|
end
|
352
378
|
|
353
379
|
def initialize(name, version) # :nodoc:
|
354
|
-
self.name
|
380
|
+
self.name = name
|
355
381
|
self.version = version
|
356
382
|
|
357
383
|
# Defaults
|
358
|
-
self.author
|
359
|
-
self.
|
360
|
-
|
384
|
+
self.author = []
|
385
|
+
self.blog_categories = [name]
|
386
|
+
self.clean_globs = %w(diff diff.txt email.txt ri deps .source_index
|
387
|
+
*.gem **/*~ **/.*~ **/*.rbc)
|
361
388
|
self.description_sections = %w(description)
|
362
|
-
self.
|
363
|
-
self.
|
364
|
-
self.
|
365
|
-
self.
|
366
|
-
self.
|
367
|
-
self.
|
368
|
-
self.
|
369
|
-
self.
|
370
|
-
self.remote_rdoc_dir = name
|
371
|
-
self.rsync_args = '-av --delete'
|
372
|
-
self.rubyforge_name = name.downcase
|
373
|
-
self.spec_extras = {}
|
374
|
-
self.summary_sentences = 1
|
375
|
-
self.test_globs = ['test/**/test_*.rb']
|
376
|
-
self.testlib = 'test/unit'
|
389
|
+
self.email = []
|
390
|
+
self.extra_deps = []
|
391
|
+
self.extra_dev_deps = []
|
392
|
+
self.extra_rdoc_files = []
|
393
|
+
self.history_file = "History.txt"
|
394
|
+
self.multiruby_skip = []
|
395
|
+
self.need_tar = true
|
396
|
+
self.need_zip = false
|
377
397
|
self.post_install_message = nil
|
398
|
+
self.readme_file = "README.txt"
|
399
|
+
self.remote_rdoc_dir = name
|
400
|
+
self.rspec_dirs = %w(spec lib)
|
401
|
+
self.rspec_options = []
|
402
|
+
self.rsync_args = '-av --delete'
|
403
|
+
self.rubyforge_name = name.downcase
|
404
|
+
self.spec_extras = {}
|
405
|
+
self.summary_sentences = 1
|
406
|
+
self.test_globs = ['test/**/test_*.rb']
|
407
|
+
self.testlib = :testunit
|
378
408
|
|
379
409
|
yield self if block_given?
|
380
410
|
|
381
411
|
# Intuit values:
|
382
412
|
|
383
|
-
readme
|
413
|
+
readme = File.read(readme_file).split(/^(=+ .*)$/)[1..-1] rescue ''
|
384
414
|
unless readme.empty? then
|
385
415
|
sections = readme.map { |s|
|
386
416
|
s =~ /^=/ ? s.strip.downcase.chomp(':').split.last : s.strip
|
@@ -390,17 +420,17 @@ class Hoe
|
|
390
420
|
summ = desc.split(/\.\s+/).first(summary_sentences).join(". ")
|
391
421
|
|
392
422
|
self.description ||= desc
|
393
|
-
self.summary
|
394
|
-
self.url
|
423
|
+
self.summary ||= summ
|
424
|
+
self.url ||= readme[1].gsub(/^\* /, '').split(/\n/).grep(/\S+/)
|
395
425
|
else
|
396
|
-
missing
|
426
|
+
missing readme_file
|
397
427
|
end
|
398
428
|
|
399
429
|
self.changes ||= begin
|
400
|
-
h = File.read(
|
430
|
+
h = File.read(history_file)
|
401
431
|
h.split(/^(===.*)/)[1..2].join.strip
|
402
432
|
rescue
|
403
|
-
missing
|
433
|
+
missing history_file
|
404
434
|
''
|
405
435
|
end
|
406
436
|
|
@@ -448,31 +478,104 @@ class Hoe
|
|
448
478
|
end
|
449
479
|
|
450
480
|
def define_tasks # :nodoc:
|
451
|
-
|
452
|
-
task :default => :test
|
481
|
+
default_tasks = []
|
453
482
|
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
483
|
+
if File.directory? "test" then
|
484
|
+
desc 'Run the test suite. Use FILTER or TESTOPTS to add flags/args.'
|
485
|
+
task :test do
|
486
|
+
run_tests
|
487
|
+
end
|
488
|
+
|
489
|
+
desc 'Run the test suite using multiruby.'
|
490
|
+
task :multi do
|
491
|
+
run_tests :multi
|
492
|
+
end
|
493
|
+
|
494
|
+
desc 'Show which test files fail when run alone.'
|
495
|
+
task :test_deps do
|
496
|
+
tests = Dir["test/**/test_*.rb"] + Dir["test/**/*_test.rb"]
|
497
|
+
|
498
|
+
paths = ['bin', 'lib', 'test'].join(File::PATH_SEPARATOR)
|
499
|
+
null_dev = WINDOZE ? '> NUL 2>&1' : '&> /dev/null'
|
500
|
+
|
501
|
+
tests.each do |test|
|
502
|
+
if not system "ruby -I#{paths} #{test} #{null_dev}" then
|
503
|
+
puts "Dependency Issues: #{test}"
|
504
|
+
end
|
505
|
+
end
|
506
|
+
end
|
458
507
|
|
459
|
-
|
460
|
-
|
461
|
-
tests = Dir["test/**/test_*.rb"] + Dir["test/**/*_test.rb"]
|
508
|
+
default_tasks << :test
|
509
|
+
end
|
462
510
|
|
463
|
-
|
464
|
-
|
511
|
+
if File.directory? "spec" then
|
512
|
+
begin
|
513
|
+
require 'spec/rake/spectask'
|
465
514
|
|
466
|
-
|
467
|
-
|
468
|
-
|
515
|
+
desc "Run all specifications"
|
516
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
517
|
+
t.libs = self.rspec_dirs
|
518
|
+
t.spec_opts = self.rspec_options
|
469
519
|
end
|
520
|
+
rescue LoadError
|
521
|
+
# do nothing
|
522
|
+
end
|
523
|
+
default_tasks << :spec
|
524
|
+
end
|
525
|
+
|
526
|
+
desc 'Run the default task(s).'
|
527
|
+
task :default => default_tasks
|
528
|
+
|
529
|
+
begin # take a whack at defining rcov tasks
|
530
|
+
require 'rcov/rcovtask'
|
531
|
+
|
532
|
+
Rcov::RcovTask.new do |t|
|
533
|
+
pattern = ENV['PATTERN'] || 'test/test_*.rb'
|
534
|
+
|
535
|
+
t.test_files = FileList[pattern]
|
536
|
+
t.verbose = true
|
537
|
+
t.rcov_opts << "--threshold 80"
|
538
|
+
t.rcov_opts << "--no-color"
|
539
|
+
t.rcov_opts << "-x ^/"
|
470
540
|
end
|
541
|
+
|
542
|
+
# this is for autotest's rcov... also used by my emacs integration
|
543
|
+
task :rcov_info do
|
544
|
+
pattern = ENV['PATTERN'] || "test/test_*.rb"
|
545
|
+
ruby "-Ilib -S rcov --text-report --save coverage.info --test-unit-only #{pattern}"
|
546
|
+
end
|
547
|
+
|
548
|
+
# this is for my emacs rcov overlay stuff on emacswiki.
|
549
|
+
task :rcov_overlay do
|
550
|
+
rcov, eol = Marshal.load(File.read("coverage.info")).last[ENV["FILE"]], 1
|
551
|
+
puts rcov[:lines].zip(rcov[:coverage]).map { |line, coverage|
|
552
|
+
bol, eol = eol, eol + line.length
|
553
|
+
[bol, eol, "#ffcccc"] unless coverage
|
554
|
+
}.compact.inspect
|
555
|
+
end
|
556
|
+
rescue LoadError
|
557
|
+
# skip
|
471
558
|
end
|
472
559
|
|
473
|
-
desc
|
474
|
-
task :
|
475
|
-
|
560
|
+
desc "Analyze for code duplication."
|
561
|
+
task :flay do
|
562
|
+
sh "find lib test -name \*.rb | xargs flay"
|
563
|
+
end
|
564
|
+
|
565
|
+
desc "Analyze code complexity."
|
566
|
+
task :flog do
|
567
|
+
print "lib : "
|
568
|
+
sh "flog -s lib"
|
569
|
+
|
570
|
+
if File.directory? "test" then
|
571
|
+
print "test: "
|
572
|
+
sh "flog -s test"
|
573
|
+
end
|
574
|
+
|
575
|
+
if File.directory? "spec" then
|
576
|
+
print "spec: "
|
577
|
+
sh "flog -s spec"
|
578
|
+
end
|
476
579
|
end
|
477
580
|
|
478
581
|
############################################################
|
@@ -521,8 +624,11 @@ class Hoe
|
|
521
624
|
dirs = Dir['{lib,ext}']
|
522
625
|
s.require_paths = dirs unless dirs.empty?
|
523
626
|
|
524
|
-
s.rdoc_options = ['--main',
|
525
|
-
|
627
|
+
s.rdoc_options = ['--main', readme_file]
|
628
|
+
|
629
|
+
s.extra_rdoc_files += s.files.grep(/txt$/)
|
630
|
+
s.extra_rdoc_files.reject! { |f| f =~ %r%^(test|spec|vendor|template|data|tmp)/% }
|
631
|
+
s.extra_rdoc_files += @extra_rdoc_files
|
526
632
|
s.has_rdoc = true
|
527
633
|
|
528
634
|
s.post_install_message = post_install_message
|
@@ -530,7 +636,7 @@ class Hoe
|
|
530
636
|
if test ?f, "test/test_all.rb" then
|
531
637
|
s.test_file = "test/test_all.rb"
|
532
638
|
else
|
533
|
-
s.test_files = Dir[*test_globs]
|
639
|
+
s.test_files = Dir[*self.test_globs]
|
534
640
|
end
|
535
641
|
|
536
642
|
if signing_key and cert_chain then
|
@@ -589,8 +695,8 @@ class Hoe
|
|
589
695
|
puts spec.to_ruby
|
590
696
|
end
|
591
697
|
|
592
|
-
self.lib_files
|
593
|
-
self.bin_files
|
698
|
+
self.lib_files = spec.files.grep(/^(lib|ext)/)
|
699
|
+
self.bin_files = spec.files.grep(/^bin/)
|
594
700
|
self.test_files = spec.files.grep(/^test/)
|
595
701
|
|
596
702
|
Rake::GemPackageTask.new spec do |pkg|
|
@@ -599,7 +705,7 @@ class Hoe
|
|
599
705
|
end
|
600
706
|
|
601
707
|
desc 'Install the package as a gem.'
|
602
|
-
task :install_gem => [:clean, :package] do
|
708
|
+
task :install_gem => [:clean, :package, :check_extra_deps] do
|
603
709
|
gem = Dir['pkg/*.gem'].first
|
604
710
|
sh "#{'sudo ' unless WINDOZE}gem install --local #{gem}"
|
605
711
|
end
|
@@ -636,18 +742,18 @@ class Hoe
|
|
636
742
|
# Doco
|
637
743
|
|
638
744
|
Rake::RDocTask.new(:docs) do |rd|
|
639
|
-
rd.main =
|
640
|
-
rd.options << '-d' if
|
641
|
-
|
745
|
+
rd.main = readme_file
|
746
|
+
rd.options << '-d' if (`which dot` =~ /\/dot/) unless
|
747
|
+
ENV['NODOT'] || WINDOZE
|
642
748
|
rd.rdoc_dir = 'doc'
|
643
|
-
|
644
|
-
|
645
|
-
rd.rdoc_files.
|
749
|
+
|
750
|
+
rd.rdoc_files += spec.require_paths
|
751
|
+
rd.rdoc_files += spec.extra_rdoc_files
|
646
752
|
|
647
753
|
title = "#{name}-#{version} Documentation"
|
648
754
|
title = "#{rubyforge_name}'s " + title if rubyforge_name != name
|
649
755
|
|
650
|
-
rd.options << "-t
|
756
|
+
rd.options << "-t" << title
|
651
757
|
end
|
652
758
|
|
653
759
|
desc 'Generate ri locally for testing.'
|
@@ -809,14 +915,30 @@ class Hoe
|
|
809
915
|
sh "zentest -I=#{libs} #{spec.files.grep(/^(lib|test)/).join(' ')}"
|
810
916
|
end
|
811
917
|
|
918
|
+
task :clobber_rcov # in case rcov didn't load
|
919
|
+
|
812
920
|
desc 'Clean up all the extras.'
|
813
|
-
task :clean => [ :clobber_docs, :clobber_package ] do
|
921
|
+
task :clean => [ :clobber_docs, :clobber_package, :clobber_rcov ] do
|
814
922
|
clean_globs.each do |pattern|
|
815
923
|
files = Dir[pattern]
|
816
924
|
rm_rf files, :verbose => true unless files.empty?
|
817
925
|
end
|
818
926
|
end
|
819
927
|
|
928
|
+
desc 'Install missing dependencies.'
|
929
|
+
task :check_extra_deps do
|
930
|
+
# extra_deps = [["rubyforge", ">= 1.0.0"], ["rake", ">= 0.8.1"]]
|
931
|
+
extra_deps.each do |dep|
|
932
|
+
begin
|
933
|
+
gem(*dep)
|
934
|
+
rescue Gem::LoadError
|
935
|
+
dep_gem, dep_version = dep
|
936
|
+
dep_version = "--version '#{dep_version}'" if dep_version
|
937
|
+
sh "#{'sudo ' unless WINDOZE}gem install #{dep_gem} #{dep_version}"
|
938
|
+
end
|
939
|
+
end
|
940
|
+
end
|
941
|
+
|
820
942
|
desc 'Create a fresh ~/.hoerc file.'
|
821
943
|
task :config_hoe do
|
822
944
|
with_config do |config, path|
|
@@ -975,6 +1097,24 @@ class Hoe
|
|
975
1097
|
|
976
1098
|
end # end define
|
977
1099
|
|
1100
|
+
def run_tests(multi=false) # :nodoc:
|
1101
|
+
framework = SUPPORTED_TEST_FRAMEWORKS[testlib]
|
1102
|
+
raise "unsupported test framework #{testlib}" unless framework
|
1103
|
+
|
1104
|
+
tests = ["rubygems", framework] +
|
1105
|
+
test_globs.map { |g| Dir.glob(g) }.flatten
|
1106
|
+
tests.map! {|f| %(require "#{f}")}
|
1107
|
+
|
1108
|
+
cmd = "#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
|
1109
|
+
|
1110
|
+
if multi then
|
1111
|
+
ENV['EXCLUDED_VERSIONS'] = multiruby_skip.join ":"
|
1112
|
+
cmd = "-S multiruby #{cmd}"
|
1113
|
+
end
|
1114
|
+
|
1115
|
+
ruby cmd
|
1116
|
+
end
|
1117
|
+
|
978
1118
|
def announcement # :nodoc:
|
979
1119
|
changes = self.changes.rdoc_to_markdown
|
980
1120
|
subject = "#{name} #{version} Released"
|
@@ -985,24 +1125,6 @@ class Hoe
|
|
985
1125
|
return subject, title, body, urls
|
986
1126
|
end
|
987
1127
|
|
988
|
-
def run_tests(multi=false) # :nodoc:
|
989
|
-
msg = multi ? :sh : :ruby
|
990
|
-
cmd = if test ?f, 'test/test_all.rb' then
|
991
|
-
"#{RUBY_FLAGS} test/test_all.rb #{FILTER}"
|
992
|
-
else
|
993
|
-
tests = ["rubygems", self.testlib] +
|
994
|
-
test_globs.map { |g| Dir.glob(g) }.flatten
|
995
|
-
tests.map! {|f| %Q(require "#{f}")}
|
996
|
-
"#{RUBY_FLAGS} -e '#{tests.join("; ")}' #{FILTER}"
|
997
|
-
end
|
998
|
-
|
999
|
-
excludes = multiruby_skip.join(":")
|
1000
|
-
ENV['EXCLUDED_VERSIONS'] = excludes
|
1001
|
-
cmd = "multiruby #{cmd}" if multi
|
1002
|
-
|
1003
|
-
send msg, cmd
|
1004
|
-
end
|
1005
|
-
|
1006
1128
|
##
|
1007
1129
|
# Reads a file at +path+ and spits out an array of the +paragraphs+ specified.
|
1008
1130
|
#
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'autotest/restart'
|
4
|
+
|
5
|
+
# Autotest.add_hook :initialize do |at|
|
6
|
+
# at.extra_files << "../some/external/dependency.rb"
|
7
|
+
#
|
8
|
+
# at.libs << ":../some/external"
|
9
|
+
#
|
10
|
+
# at.add_exception 'vendor'
|
11
|
+
#
|
12
|
+
# at.add_mapping(/dependency.rb/) do |f, _|
|
13
|
+
# at.files_matching(/test_.*rb$/)
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# %w(TestA TestB).each do |klass|
|
17
|
+
# at.extra_class_map[klass] = "test/test_misc.rb"
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# Autotest.add_hook :run_command do |at|
|
22
|
+
# system "rake build"
|
23
|
+
# end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
= <%= project %>
|
2
|
+
|
3
|
+
* <%= XIF %> (url)
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
<%= XIF %> (describe your package)
|
8
|
+
|
9
|
+
== FEATURES/PROBLEMS:
|
10
|
+
|
11
|
+
* <%= XIF %> (list of features or problems)
|
12
|
+
|
13
|
+
== SYNOPSIS:
|
14
|
+
|
15
|
+
<%= XIF %> (code sample of usage)
|
16
|
+
|
17
|
+
== REQUIREMENTS:
|
18
|
+
|
19
|
+
* <%= XIF %> (list of requirements)
|
20
|
+
|
21
|
+
== INSTALL:
|
22
|
+
|
23
|
+
* <%= XIF %> (sudo gem install, anything else)
|
24
|
+
|
25
|
+
== LICENSE:
|
26
|
+
|
27
|
+
(The MIT License)
|
28
|
+
|
29
|
+
Copyright (c) <%= Time.new.strftime("%Y") %> <%= XIF %>
|
30
|
+
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
32
|
+
a copy of this software and associated documentation files (the
|
33
|
+
'Software'), to deal in the Software without restriction, including
|
34
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
35
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
36
|
+
permit persons to whom the Software is furnished to do so, subject to
|
37
|
+
the following conditions:
|
38
|
+
|
39
|
+
The above copyright notice and this permission notice shall be
|
40
|
+
included in all copies or substantial portions of the Software.
|
41
|
+
|
42
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
43
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
45
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
46
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
require './lib/<%= project %>.rb'
|
6
|
+
|
7
|
+
Hoe.new('<%= project %>', <%= klass %>::VERSION) do |p|
|
8
|
+
# p.rubyforge_name = '<%= project %>x' # if different than lowercase project name
|
9
|
+
# p.developer('<%= XIF %>', '<%= XIF %>@example.com')
|
10
|
+
end
|
11
|
+
|
12
|
+
# vim: syntax=Ruby
|
data/test/test_hoe.rb
CHANGED
@@ -14,9 +14,15 @@ class TestHoe < Test::Unit::TestCase
|
|
14
14
|
# everything is forked out.
|
15
15
|
|
16
16
|
def test_basics
|
17
|
-
boring = %w(clobber_docs
|
17
|
+
boring = %w(clobber_docs
|
18
|
+
clobber_package
|
19
|
+
clobber_rcov
|
20
|
+
gem
|
21
|
+
redocs
|
22
|
+
repackage)
|
18
23
|
expected = %w(audit
|
19
24
|
announce
|
25
|
+
check_extra_deps
|
20
26
|
check_manifest
|
21
27
|
clean
|
22
28
|
config_hoe
|
@@ -27,6 +33,8 @@ class TestHoe < Test::Unit::TestCase
|
|
27
33
|
deps:list
|
28
34
|
docs
|
29
35
|
email
|
36
|
+
flay
|
37
|
+
flog
|
30
38
|
generate_key
|
31
39
|
install_gem
|
32
40
|
multi
|
@@ -34,6 +42,7 @@ class TestHoe < Test::Unit::TestCase
|
|
34
42
|
post_blog
|
35
43
|
post_news
|
36
44
|
publish_docs
|
45
|
+
rcov
|
37
46
|
release
|
38
47
|
ridocs
|
39
48
|
test
|
@@ -63,6 +72,8 @@ class TestHoe < Test::Unit::TestCase
|
|
63
72
|
|
64
73
|
spec = hoe.spec
|
65
74
|
|
75
|
+
text_files = files.grep(/txt$/).reject { |f| f =~ /template/ }
|
76
|
+
|
66
77
|
assert_equal 'blah', spec.name
|
67
78
|
assert_equal '1.2.3', spec.version.to_s
|
68
79
|
assert_equal '>= 0', spec.required_rubygems_version.to_s
|
@@ -73,7 +84,7 @@ class TestHoe < Test::Unit::TestCase
|
|
73
84
|
assert_match(/Hoe.*Rakefiles/, spec.description)
|
74
85
|
assert_equal ['email'], spec.email
|
75
86
|
assert_equal ['sow'], spec.executables
|
76
|
-
assert_equal
|
87
|
+
assert_equal text_files, spec.extra_rdoc_files
|
77
88
|
assert_equal files, spec.files
|
78
89
|
assert_equal true, spec.has_rdoc
|
79
90
|
assert_equal "http://rubyforge.org/projects/seattlerb/", spec.homepage
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Davis
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-02-26 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.0.
|
23
|
+
version: 1.0.3
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.8.3
|
34
34
|
version:
|
35
|
-
description: "Hoe is a simple rake/rubygems helper for project Rakefiles. It generates all the usual tasks for projects including rdoc generation, testing, packaging, and deployment. Tasks Provided: * announce
|
35
|
+
description: "Hoe is a simple rake/rubygems helper for project Rakefiles. It generates all the usual tasks for projects including rdoc generation, testing, packaging, and deployment. Tasks Provided: * announce - Create news email file and post to rubyforge. * audit - Run ZenTest against the package. * check_extra_deps - Install missing dependencies. * check_manifest - Verify the manifest. * clean - Clean up all the extras. * config_hoe - Create a fresh ~/.hoerc file. * debug_gem - Show information about the gem. * default - Run the default task(s). * deps:email - Print a contact list for gems dependent on this gem * deps:fetch - Fetch all the dependent gems of this gem into tarballs * deps:list - List all the dependent gems of this gem * docs - Build the docs HTML Files * email - Generate email announcement file. * flay - Analyze for code duplication. * flog - Analyze code complexity. * gem - Build the gem file hoe-1.9.0.gem * generate_key - Generate a key for signing your gems. * install_gem - Install the package as a gem. * multi - Run the test suite using multiruby. * package - Build all the packages * post_blog - Post announcement to blog. * post_news - Post announcement to rubyforge. * publish_docs - Publish RDoc to RubyForge. * rcov - Analyze code coverage with tests * release - Package and upload the release to rubyforge. * ridocs - Generate ri locally for testing. * tasks - Generate a list of tasks for doco. * test - Run the test suite. * test_deps - Show which test files fail when run alone. See class rdoc for help. Hint: ri Hoe"
|
36
36
|
email:
|
37
37
|
- ryand-ruby@zenspider.com
|
38
38
|
executables:
|
@@ -50,6 +50,14 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- bin/sow
|
52
52
|
- lib/hoe.rb
|
53
|
+
- template/.autotest.erb
|
54
|
+
- template/History.txt.erb
|
55
|
+
- template/Manifest.txt.erb
|
56
|
+
- template/README.txt.erb
|
57
|
+
- template/Rakefile.erb
|
58
|
+
- template/bin/file_name.erb
|
59
|
+
- template/lib/file_name.rb.erb
|
60
|
+
- template/test/test_file_name.rb.erb
|
53
61
|
- test/test_hoe.rb
|
54
62
|
has_rdoc: true
|
55
63
|
homepage: http://rubyforge.org/projects/seattlerb/
|