bones 1.3.3 → 1.3.4
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 +13 -0
- data/README.txt +6 -4
- data/Rakefile +8 -6
- data/data/tasks/ann.rake +11 -12
- data/data/tasks/doc.rake +1 -2
- data/data/tasks/manifest.rake +7 -8
- data/data/tasks/post_load.rake +17 -9
- data/data/tasks/setup.rb +17 -11
- data/data/tasks/spec.rake +11 -0
- data/data/tasks/test.rake +4 -6
- data/lib/bones.rb +2 -2
- data/lib/bones/main.rb +23 -12
- data/tasks/ann.rake +12 -13
- data/tasks/doc.rake +1 -2
- data/tasks/gem.rake +1 -1
- data/tasks/manifest.rake +8 -9
- data/tasks/post_load.rake +17 -9
- data/tasks/setup.rb +18 -12
- data/tasks/spec.rake +11 -0
- data/tasks/test.rake +4 -6
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== 1.3.4 / 2008-02-20
|
2
|
+
|
3
|
+
* 4 minor enhancements
|
4
|
+
- Added more RCov options and tasks to verify a coverage
|
5
|
+
threshold (RSpec only)
|
6
|
+
- Can specify exact dependency version requirement
|
7
|
+
- Added a command line option to specify the output directory for
|
8
|
+
a new project
|
9
|
+
- The history, readme, and manifest file names can be configured
|
10
|
+
in the Rakefile
|
11
|
+
* 1 bug fix
|
12
|
+
- Now including the default rake/clean tasks
|
13
|
+
|
1
14
|
== 1.3.3 / 2008-02-18
|
2
15
|
|
3
16
|
* 4 minor enhancements
|
data/README.txt
CHANGED
@@ -16,8 +16,9 @@ Mr Bones provides the following rake tasks:
|
|
16
16
|
|
17
17
|
ann # Alias to ann:announcement
|
18
18
|
ann:announcement # Create an announcement file
|
19
|
-
ann:email # Send email announcement
|
20
|
-
|
19
|
+
ann:email # Send an email announcement
|
20
|
+
clean # Remove any temporary products.
|
21
|
+
clobber # Remove any generated file.
|
21
22
|
doc # Alias to doc:rdoc
|
22
23
|
doc:rdoc # Build the rdoc HTML Files
|
23
24
|
doc:release # Publish RDoc to RubyForge
|
@@ -25,9 +26,8 @@ Mr Bones provides the following rake tasks:
|
|
25
26
|
doc:ri # Generate ri locally for testing
|
26
27
|
gem # Alias to gem:package
|
27
28
|
gem:debug # Show information about the gem
|
28
|
-
gem:gem # Build the gem file bones-1.3.3.gem
|
29
29
|
gem:install # Install the gem
|
30
|
-
gem:package # Build
|
30
|
+
gem:package # Build the gem file bones-1.3.4.gem
|
31
31
|
gem:release # Package and upload to RubyForge
|
32
32
|
gem:repackage # Force a rebuild of the package files
|
33
33
|
gem:uninstall # Uninstall the gem
|
@@ -42,6 +42,7 @@ Mr Bones provides the following rake tasks:
|
|
42
42
|
spec:rcov # Run all specs with RCov
|
43
43
|
spec:run # Run all specs with basic output
|
44
44
|
spec:specdoc # Run all specs with text output
|
45
|
+
spec:verify # Verify that rcov coverage is at least 90.0%
|
45
46
|
svn:create_tag # Create a new tag in the SVN repository
|
46
47
|
svn:show_tags # Show tags from the SVN repository
|
47
48
|
test # Alias to test:run
|
@@ -74,6 +75,7 @@ following gems installed you will not get all that Mr Bones has to offer.
|
|
74
75
|
* rubyforge - for easy gem publishing to rubyforge.org
|
75
76
|
* rcov - for code coverage testing
|
76
77
|
* rspec - if that's the way you roll
|
78
|
+
* facets - for pretty colors
|
77
79
|
|
78
80
|
== INSTALL:
|
79
81
|
|
data/Rakefile
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
# $Id: Rakefile
|
1
|
+
# $Id: Rakefile 547 2008-02-20 20:30:47Z tim_pease $
|
2
2
|
|
3
3
|
$:.unshift('lib')
|
4
4
|
|
5
5
|
load 'tasks/setup.rb'
|
6
6
|
require 'bones'
|
7
7
|
|
8
|
-
task :default => 'spec:run'
|
9
|
-
|
10
8
|
PROJ.name = 'bones'
|
11
9
|
PROJ.authors = 'Tim Pease'
|
12
10
|
PROJ.email = 'tim.pease@gmail.com'
|
@@ -14,7 +12,7 @@ PROJ.url = 'http://codeforpeople.rubyforge.org/bones'
|
|
14
12
|
PROJ.rubyforge_name = 'codeforpeople'
|
15
13
|
PROJ.rdoc_remote_dir = 'bones'
|
16
14
|
PROJ.version = Bones::VERSION
|
17
|
-
PROJ.release_name = '
|
15
|
+
PROJ.release_name = 'Finite State Puppy'
|
18
16
|
|
19
17
|
PROJ.rdoc_exclude << '^data/'
|
20
18
|
PROJ.annotation_exclude = %w(^README\.txt$ ^data/ ^tasks/setup.rb$)
|
@@ -35,18 +33,22 @@ PROJ.ann_paragraphs = %w[install synopsis features requirements]
|
|
35
33
|
PROJ.ann_text = <<-ANN
|
36
34
|
== FUN FACT
|
37
35
|
|
38
|
-
|
36
|
+
A 'jiffy' is an actual unit of time for 1/100th of a second.
|
39
37
|
|
40
38
|
== POST SCRIPT
|
41
39
|
|
42
40
|
Blessings,
|
43
41
|
TwP
|
44
42
|
|
43
|
+
== POST POST SCRIPT
|
44
|
+
|
45
|
+
The "Finite State Puppy" is the only known pet that is Touring complete.
|
46
|
+
|
45
47
|
#{PROJ.post_install_message}
|
46
48
|
ANN
|
47
49
|
|
50
|
+
task :default => 'spec:run'
|
48
51
|
task 'gem:package' => 'manifest:assert'
|
49
|
-
|
50
52
|
task(:titlize) {PROJ.name = 'Mr Bones'}
|
51
53
|
task 'ann:announcement' => :titlize
|
52
54
|
|
data/data/tasks/ann.rake
CHANGED
@@ -9,9 +9,9 @@ require 'time'
|
|
9
9
|
|
10
10
|
namespace :ann do
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
File.open(
|
12
|
+
file PROJ.ann_file do
|
13
|
+
puts "Generating #{PROJ.ann_file}"
|
14
|
+
File.open(PROJ.ann_file,'w') do |fd|
|
15
15
|
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
16
16
|
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
17
17
|
fd.puts(" #{PROJ.url}") if PROJ.url
|
@@ -26,15 +26,18 @@ namespace :ann do
|
|
26
26
|
PROJ.ann_paragraphs.each do |p|
|
27
27
|
fd.puts "== #{p.upcase}"
|
28
28
|
fd.puts
|
29
|
-
fd.puts paragraphs_of(
|
29
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
30
30
|
fd.puts
|
31
31
|
end
|
32
32
|
fd.puts PROJ.ann_text if PROJ.ann_text
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
desc "
|
37
|
-
task :
|
36
|
+
desc "Create an announcement file"
|
37
|
+
task :announcement => PROJ.ann_file
|
38
|
+
|
39
|
+
desc "Send an email announcement"
|
40
|
+
task :email => PROJ.ann_file do
|
38
41
|
from = PROJ.ann_email[:from] || PROJ.email
|
39
42
|
to = Array(PROJ.ann_email[:to])
|
40
43
|
|
@@ -47,7 +50,7 @@ namespace :ann do
|
|
47
50
|
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
48
51
|
rfc822msg << "Message-Id: "
|
49
52
|
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
|
50
|
-
rfc822msg << File.read(
|
53
|
+
rfc822msg << File.read(PROJ.ann_file)
|
51
54
|
|
52
55
|
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
53
56
|
PROJ.ann_email[key]
|
@@ -63,15 +66,11 @@ namespace :ann do
|
|
63
66
|
### send email
|
64
67
|
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
65
68
|
end
|
66
|
-
|
67
|
-
task :clobber_announcement do
|
68
|
-
rm 'announcement.txt' rescue nil
|
69
|
-
end
|
70
69
|
end # namespace :ann
|
71
70
|
|
72
71
|
desc 'Alias to ann:announcement'
|
73
72
|
task :ann => 'ann:announcement'
|
74
73
|
|
75
|
-
|
74
|
+
CLOBBER << PROJ.ann_file
|
76
75
|
|
77
76
|
# EOF
|
data/data/tasks/doc.rake
CHANGED
@@ -31,7 +31,6 @@ namespace :doc do
|
|
31
31
|
sh "#{RDOC} --ri -o ri ."
|
32
32
|
end
|
33
33
|
|
34
|
-
desc 'Remove ri products'
|
35
34
|
task :clobber_ri do
|
36
35
|
rm_r 'ri' rescue nil
|
37
36
|
end
|
@@ -44,6 +43,6 @@ task :doc => 'doc:rdoc'
|
|
44
43
|
desc 'Remove all build products'
|
45
44
|
task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
|
46
45
|
|
47
|
-
remove_desc_for_task %w(doc:clobber_rdoc
|
46
|
+
remove_desc_for_task %w(doc:clobber_rdoc)
|
48
47
|
|
49
48
|
# EOF
|
data/data/tasks/manifest.rake
CHANGED
@@ -6,11 +6,11 @@ namespace :manifest do
|
|
6
6
|
|
7
7
|
desc 'Verify the manifest'
|
8
8
|
task :check do
|
9
|
-
fn = '
|
9
|
+
fn = PROJ.manifest_file + '.tmp'
|
10
10
|
files = manifest_files
|
11
11
|
|
12
12
|
File.open(fn, 'w') {|fp| fp.puts files}
|
13
|
-
lines = %x(#{DIFF} -du
|
13
|
+
lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
|
14
14
|
if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
|
15
15
|
lines.map! do |line|
|
16
16
|
case line
|
@@ -27,19 +27,18 @@ namespace :manifest do
|
|
27
27
|
|
28
28
|
desc 'Create a new manifest'
|
29
29
|
task :create do
|
30
|
-
fn = 'Manifest.txt'
|
31
30
|
files = manifest_files
|
32
|
-
unless test(?f,
|
33
|
-
files <<
|
31
|
+
unless test(?f, PROJ.manifest_file)
|
32
|
+
files << PROJ.manifest_file
|
34
33
|
files.sort!
|
35
34
|
end
|
36
|
-
File.open(
|
35
|
+
File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
|
37
36
|
end
|
38
37
|
|
39
38
|
task :assert do
|
40
39
|
files = manifest_files
|
41
|
-
manifest = File.read(
|
42
|
-
raise
|
40
|
+
manifest = File.read(PROJ.manifest_file).split($/)
|
41
|
+
raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
|
43
42
|
end
|
44
43
|
|
45
44
|
end # namespace :manifest
|
data/data/tasks/post_load.rake
CHANGED
@@ -3,16 +3,24 @@
|
|
3
3
|
# This file does not define any rake tasks. It is used to load some project
|
4
4
|
# settings if they are not defined by the user.
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
6
|
+
PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
7
|
+
PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
|
9
8
|
|
10
|
-
|
11
|
-
PROJ.description = paragraphs_of('README.txt', 'description').join("\n\n")
|
12
|
-
end
|
9
|
+
PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
|
12
|
+
|
13
|
+
PROJ.summary ||= PROJ.description.split('.').first
|
14
|
+
|
15
|
+
PROJ.files ||=
|
16
|
+
if test(?f, PROJ.manifest_file)
|
17
|
+
files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
|
18
|
+
files.delete ''
|
19
|
+
files
|
20
|
+
else [] end
|
21
|
+
|
22
|
+
PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
23
|
+
|
24
|
+
PROJ.rdoc_main ||= PROJ.readme_file
|
17
25
|
|
18
26
|
# EOF
|
data/data/tasks/setup.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rake'
|
5
|
+
require 'rake/clean'
|
5
6
|
require 'fileutils'
|
6
7
|
require 'ostruct'
|
7
8
|
|
@@ -16,8 +17,11 @@ PROJ.email = nil
|
|
16
17
|
PROJ.url = nil
|
17
18
|
PROJ.version = ENV['VERSION'] || '0.0.0'
|
18
19
|
PROJ.rubyforge_name = nil
|
19
|
-
PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/
|
20
|
+
PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/)
|
20
21
|
PROJ.release_name = ENV['RELEASE']
|
22
|
+
PROJ.history_file = 'History.txt'
|
23
|
+
PROJ.manifest_file = 'Manifest.txt'
|
24
|
+
PROJ.readme_file = 'README.txt'
|
21
25
|
|
22
26
|
# Rspec
|
23
27
|
PROJ.specs = FileList['spec/**/*_spec.rb']
|
@@ -29,13 +33,16 @@ PROJ.test_file = 'test/all.rb'
|
|
29
33
|
PROJ.test_opts = []
|
30
34
|
|
31
35
|
# Rcov
|
36
|
+
PROJ.rcov_dir = 'coverage'
|
32
37
|
PROJ.rcov_opts = ['--sort', 'coverage', '-T']
|
38
|
+
PROJ.rcov_threshold = 90.0
|
39
|
+
PROJ.rcov_threshold_exact = false
|
33
40
|
|
34
41
|
# Rdoc
|
35
42
|
PROJ.rdoc_opts = []
|
36
43
|
PROJ.rdoc_include = %w(^lib/ ^bin/ ^ext/ .txt$)
|
37
|
-
PROJ.rdoc_exclude = %w(extconf.rb$
|
38
|
-
PROJ.rdoc_main =
|
44
|
+
PROJ.rdoc_exclude = %w(extconf.rb$)
|
45
|
+
PROJ.rdoc_main = nil
|
39
46
|
PROJ.rdoc_dir = 'doc'
|
40
47
|
PROJ.rdoc_remote_dir = nil
|
41
48
|
|
@@ -46,13 +53,8 @@ PROJ.libs = []
|
|
46
53
|
%w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
|
47
54
|
|
48
55
|
# Gem Packaging
|
49
|
-
PROJ.files =
|
50
|
-
|
51
|
-
files = File.readlines('Manifest.txt').map {|fn| fn.chomp.strip}
|
52
|
-
files.delete ''
|
53
|
-
files
|
54
|
-
else [] end
|
55
|
-
PROJ.executables = PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
56
|
+
PROJ.files = nil
|
57
|
+
PROJ.executables = nil
|
56
58
|
PROJ.dependencies = []
|
57
59
|
PROJ.need_tar = true
|
58
60
|
PROJ.need_zip = false
|
@@ -71,6 +73,7 @@ PROJ.svn_tags = 'tags'
|
|
71
73
|
PROJ.svn_branches = 'branches'
|
72
74
|
|
73
75
|
# Announce
|
76
|
+
PROJ.ann_file = 'announcement.txt'
|
74
77
|
PROJ.ann_text = nil
|
75
78
|
PROJ.ann_paragraphs = []
|
76
79
|
PROJ.ann_email = {
|
@@ -166,7 +169,10 @@ def depend_on( name, version = nil )
|
|
166
169
|
spec = Gem.source_index.find_name(name).last
|
167
170
|
version = spec.version.to_s if version.nil? and !spec.nil?
|
168
171
|
|
169
|
-
PROJ.dependencies <<
|
172
|
+
PROJ.dependencies << case version
|
173
|
+
when nil; [name]
|
174
|
+
when %r/^\d/; [name, ">= #{version}"]
|
175
|
+
else [name, version] end
|
170
176
|
end
|
171
177
|
|
172
178
|
# Adds the given arguments to the include path if they are not already there
|
data/data/tasks/spec.rake
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# $Id$
|
2
2
|
|
3
3
|
if HAVE_SPEC_RAKE_SPECTASK
|
4
|
+
require 'spec/rake/verify_rcov'
|
4
5
|
|
5
6
|
namespace :spec do
|
6
7
|
|
7
8
|
desc 'Run all specs with basic output'
|
8
9
|
Spec::Rake::SpecTask.new(:run) do |t|
|
10
|
+
t.ruby_opts = PROJ.ruby_opts
|
9
11
|
t.spec_opts = PROJ.spec_opts
|
10
12
|
t.spec_files = PROJ.specs
|
11
13
|
t.libs += PROJ.libs
|
@@ -13,6 +15,7 @@ namespace :spec do
|
|
13
15
|
|
14
16
|
desc 'Run all specs with text output'
|
15
17
|
Spec::Rake::SpecTask.new(:specdoc) do |t|
|
18
|
+
t.ruby_opts = PROJ.ruby_opts
|
16
19
|
t.spec_opts = PROJ.spec_opts + ['--format', 'specdoc']
|
17
20
|
t.spec_files = PROJ.specs
|
18
21
|
t.libs += PROJ.libs
|
@@ -21,12 +24,20 @@ namespace :spec do
|
|
21
24
|
if HAVE_RCOV
|
22
25
|
desc 'Run all specs with RCov'
|
23
26
|
Spec::Rake::SpecTask.new(:rcov) do |t|
|
27
|
+
t.ruby_opts = PROJ.ruby_opts
|
24
28
|
t.spec_opts = PROJ.spec_opts
|
25
29
|
t.spec_files = PROJ.specs
|
26
30
|
t.libs += PROJ.libs
|
27
31
|
t.rcov = true
|
32
|
+
t.rcov_dir = PROJ.rcov_dir
|
28
33
|
t.rcov_opts = PROJ.rcov_opts + ['--exclude', 'spec']
|
29
34
|
end
|
35
|
+
|
36
|
+
RCov::VerifyTask.new(:verify) do |t|
|
37
|
+
t.threshold = PROJ.rcov_threshold
|
38
|
+
t.index_html = File.join(PROJ.rcov_dir, 'index.html')
|
39
|
+
t.require_exact_threshold = PROJ.rcov_threshold_exact
|
40
|
+
end
|
30
41
|
end
|
31
42
|
|
32
43
|
end # namespace :spec
|
data/data/tasks/test.rake
CHANGED
@@ -6,7 +6,7 @@ namespace :test do
|
|
6
6
|
|
7
7
|
Rake::TestTask.new(:run) do |t|
|
8
8
|
t.libs = PROJ.libs
|
9
|
-
t.test_files = if test
|
9
|
+
t.test_files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
10
10
|
else PROJ.tests end
|
11
11
|
t.ruby_opts += PROJ.ruby_opts
|
12
12
|
t.ruby_opts += PROJ.test_opts
|
@@ -15,14 +15,14 @@ namespace :test do
|
|
15
15
|
if HAVE_RCOV
|
16
16
|
desc 'Run rcov on the unit tests'
|
17
17
|
task :rcov => :clobber_rcov do
|
18
|
-
opts = PROJ.rcov_opts.
|
19
|
-
|
18
|
+
opts = PROJ.rcov_opts.dup << '-o' << PROJ.rcov_dir
|
19
|
+
opts = opts.join(' ')
|
20
|
+
files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
20
21
|
else PROJ.tests end
|
21
22
|
files = files.join(' ')
|
22
23
|
sh "#{RCOV} #{files} #{opts}"
|
23
24
|
end
|
24
25
|
|
25
|
-
desc 'Remove rcov products'
|
26
26
|
task :clobber_rcov do
|
27
27
|
rm_r 'coverage' rescue nil
|
28
28
|
end
|
@@ -35,6 +35,4 @@ task :test => 'test:run'
|
|
35
35
|
|
36
36
|
task :clobber => 'test:clobber_rcov' if HAVE_RCOV
|
37
37
|
|
38
|
-
remove_desc_for_task %w(test:clobber_rcov)
|
39
|
-
|
40
38
|
# EOF
|
data/lib/bones.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
# $Id: bones.rb
|
1
|
+
# $Id: bones.rb 542 2008-02-20 00:03:45Z tim_pease $
|
2
2
|
|
3
3
|
module Bones
|
4
4
|
|
5
5
|
# :stopdoc:
|
6
|
-
VERSION = '1.3.
|
6
|
+
VERSION = '1.3.4'
|
7
7
|
PATH = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
8
8
|
WIN32 = %r/win32/ =~ RUBY_PLATFORM
|
9
9
|
DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
|
data/lib/bones/main.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: main.rb
|
1
|
+
# $Id: main.rb 543 2008-02-20 04:36:46Z tim_pease $
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'optparse'
|
@@ -8,7 +8,7 @@ module Bones
|
|
8
8
|
class Main
|
9
9
|
|
10
10
|
attr_writer :update
|
11
|
-
attr_accessor :name, :data, :verbose
|
11
|
+
attr_accessor :name, :data, :verbose, :output_dir
|
12
12
|
|
13
13
|
# Create a new instance of Main, and run the +bones+ application given
|
14
14
|
# the command line _args_.
|
@@ -38,6 +38,8 @@ class Main
|
|
38
38
|
'update the rake tasks for the project') {self.update = true}
|
39
39
|
opts.on('-v', '--verbose',
|
40
40
|
'enable verbose output') {self.verbose = true}
|
41
|
+
opts.on('-d', '--directory DIRECTORY', String,
|
42
|
+
'project directory to create') {|dir| self.output_dir = dir}
|
41
43
|
|
42
44
|
opts.separator ''
|
43
45
|
opts.on('--freeze', 'freeze the project skeleton') {freeze; exit}
|
@@ -67,6 +69,8 @@ class Main
|
|
67
69
|
puts opts
|
68
70
|
::Kernel.abort
|
69
71
|
end
|
72
|
+
|
73
|
+
self.output_dir = name if output_dir.nil?
|
70
74
|
nil
|
71
75
|
end
|
72
76
|
|
@@ -88,23 +92,28 @@ class Main
|
|
88
92
|
#
|
89
93
|
def create
|
90
94
|
# see if the directory already exists
|
91
|
-
abort "'#{
|
95
|
+
abort "'#{output_dir}' already exists" if test ?e, output_dir
|
92
96
|
|
93
97
|
begin
|
94
98
|
files_to_copy.each {|fn| cp fn}
|
95
99
|
|
96
100
|
pwd = File.expand_path(FileUtils.pwd)
|
97
101
|
begin
|
98
|
-
FileUtils.cd
|
102
|
+
FileUtils.cd output_dir
|
99
103
|
system "rake manifest:create 2>&1 > #{::Bones::DEV_NULL}"
|
100
|
-
|
104
|
+
msg = "created '#{name}'"
|
105
|
+
msg << " in directory '#{output_dir}'" if name != output_dir
|
106
|
+
msg << "\nnow you need to fix these files"
|
107
|
+
STDOUT.puts msg
|
101
108
|
system "rake notes"
|
102
109
|
ensure
|
103
110
|
FileUtils.cd pwd
|
104
111
|
end
|
105
112
|
rescue Exception => err
|
106
|
-
FileUtils.rm_rf
|
107
|
-
|
113
|
+
FileUtils.rm_rf output_dir
|
114
|
+
msg = "could not create '#{name}'"
|
115
|
+
msg << " in directory '#{output_dir}'" if name != output_dir
|
116
|
+
abort msg
|
108
117
|
end
|
109
118
|
end
|
110
119
|
|
@@ -112,10 +121,10 @@ class Main
|
|
112
121
|
# copy in new tasks from the bones/data directory.
|
113
122
|
#
|
114
123
|
def update
|
115
|
-
abort "'#{
|
124
|
+
abort "'#{output_dir}' does not exist" unless test ?e, output_dir
|
116
125
|
|
117
|
-
task_dir = File.join(
|
118
|
-
abort "no tasks directory found in '#{
|
126
|
+
task_dir = File.join(output_dir, 'tasks')
|
127
|
+
abort "no tasks directory found in '#{output_dir}'" unless test ?d, task_dir
|
119
128
|
|
120
129
|
archive_dir = File.join(task_dir, 'archive')
|
121
130
|
FileUtils.rm_rf archive_dir
|
@@ -131,7 +140,9 @@ class Main
|
|
131
140
|
cp fn
|
132
141
|
end
|
133
142
|
|
134
|
-
|
143
|
+
msg = "updated tasks for '#{name}'"
|
144
|
+
msg << " in directory '#{output_dir}'" if name != output_dir
|
145
|
+
STDOUT.puts msg
|
135
146
|
end
|
136
147
|
|
137
148
|
# Freeze the project skeleton to the current Mr Bones gem. If the project
|
@@ -211,7 +222,7 @@ class Main
|
|
211
222
|
#
|
212
223
|
def cp( file )
|
213
224
|
dir = File.dirname(file).sub('NAME', name)
|
214
|
-
dir = (dir == '.' ?
|
225
|
+
dir = (dir == '.' ? output_dir : File.join(output_dir, dir))
|
215
226
|
dst = File.join(dir, File.basename(file, '.erb').sub('NAME', name))
|
216
227
|
src = File.join(data, file)
|
217
228
|
|
data/tasks/ann.rake
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id
|
1
|
+
# $Id$
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'bones/smtp_tls'
|
@@ -9,9 +9,9 @@ require 'time'
|
|
9
9
|
|
10
10
|
namespace :ann do
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
File.open(
|
12
|
+
file PROJ.ann_file do
|
13
|
+
puts "Generating #{PROJ.ann_file}"
|
14
|
+
File.open(PROJ.ann_file,'w') do |fd|
|
15
15
|
fd.puts("#{PROJ.name} version #{PROJ.version}")
|
16
16
|
fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
|
17
17
|
fd.puts(" #{PROJ.url}") if PROJ.url
|
@@ -26,15 +26,18 @@ namespace :ann do
|
|
26
26
|
PROJ.ann_paragraphs.each do |p|
|
27
27
|
fd.puts "== #{p.upcase}"
|
28
28
|
fd.puts
|
29
|
-
fd.puts paragraphs_of(
|
29
|
+
fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
|
30
30
|
fd.puts
|
31
31
|
end
|
32
32
|
fd.puts PROJ.ann_text if PROJ.ann_text
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
desc "
|
37
|
-
task :
|
36
|
+
desc "Create an announcement file"
|
37
|
+
task :announcement => PROJ.ann_file
|
38
|
+
|
39
|
+
desc "Send an email announcement"
|
40
|
+
task :email => PROJ.ann_file do
|
38
41
|
from = PROJ.ann_email[:from] || PROJ.email
|
39
42
|
to = Array(PROJ.ann_email[:to])
|
40
43
|
|
@@ -47,7 +50,7 @@ namespace :ann do
|
|
47
50
|
rfc822msg << "Date: #{Time.new.rfc822}\n"
|
48
51
|
rfc822msg << "Message-Id: "
|
49
52
|
rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
|
50
|
-
rfc822msg << File.read(
|
53
|
+
rfc822msg << File.read(PROJ.ann_file)
|
51
54
|
|
52
55
|
params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
|
53
56
|
PROJ.ann_email[key]
|
@@ -63,15 +66,11 @@ namespace :ann do
|
|
63
66
|
### send email
|
64
67
|
Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
|
65
68
|
end
|
66
|
-
|
67
|
-
task :clobber_announcement do
|
68
|
-
rm 'announcement.txt' rescue nil
|
69
|
-
end
|
70
69
|
end # namespace :ann
|
71
70
|
|
72
71
|
desc 'Alias to ann:announcement'
|
73
72
|
task :ann => 'ann:announcement'
|
74
73
|
|
75
|
-
|
74
|
+
CLOBBER << PROJ.ann_file
|
76
75
|
|
77
76
|
# EOF
|
data/tasks/doc.rake
CHANGED
@@ -31,7 +31,6 @@ namespace :doc do
|
|
31
31
|
sh "#{RDOC} --ri -o ri ."
|
32
32
|
end
|
33
33
|
|
34
|
-
desc 'Remove ri products'
|
35
34
|
task :clobber_ri do
|
36
35
|
rm_r 'ri' rescue nil
|
37
36
|
end
|
@@ -44,6 +43,6 @@ task :doc => 'doc:rdoc'
|
|
44
43
|
desc 'Remove all build products'
|
45
44
|
task :clobber => %w(doc:clobber_rdoc doc:clobber_ri)
|
46
45
|
|
47
|
-
remove_desc_for_task %w(doc:clobber_rdoc
|
46
|
+
remove_desc_for_task %w(doc:clobber_rdoc)
|
48
47
|
|
49
48
|
# EOF
|
data/tasks/gem.rake
CHANGED
data/tasks/manifest.rake
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id
|
1
|
+
# $Id$
|
2
2
|
|
3
3
|
require 'find'
|
4
4
|
|
@@ -6,11 +6,11 @@ namespace :manifest do
|
|
6
6
|
|
7
7
|
desc 'Verify the manifest'
|
8
8
|
task :check do
|
9
|
-
fn = '
|
9
|
+
fn = PROJ.manifest_file + '.tmp'
|
10
10
|
files = manifest_files
|
11
11
|
|
12
12
|
File.open(fn, 'w') {|fp| fp.puts files}
|
13
|
-
lines = %x(#{DIFF} -du
|
13
|
+
lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
|
14
14
|
if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
|
15
15
|
lines.map! do |line|
|
16
16
|
case line
|
@@ -27,19 +27,18 @@ namespace :manifest do
|
|
27
27
|
|
28
28
|
desc 'Create a new manifest'
|
29
29
|
task :create do
|
30
|
-
fn = 'Manifest.txt'
|
31
30
|
files = manifest_files
|
32
|
-
unless test(?f,
|
33
|
-
files <<
|
31
|
+
unless test(?f, PROJ.manifest_file)
|
32
|
+
files << PROJ.manifest_file
|
34
33
|
files.sort!
|
35
34
|
end
|
36
|
-
File.open(
|
35
|
+
File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
|
37
36
|
end
|
38
37
|
|
39
38
|
task :assert do
|
40
39
|
files = manifest_files
|
41
|
-
manifest = File.read(
|
42
|
-
raise
|
40
|
+
manifest = File.read(PROJ.manifest_file).split($/)
|
41
|
+
raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
|
43
42
|
end
|
44
43
|
|
45
44
|
end # namespace :manifest
|
data/tasks/post_load.rake
CHANGED
@@ -3,16 +3,24 @@
|
|
3
3
|
# This file does not define any rake tasks. It is used to load some project
|
4
4
|
# settings if they are not defined by the user.
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
end
|
6
|
+
PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
7
|
+
PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
|
9
8
|
|
10
|
-
|
11
|
-
PROJ.description = paragraphs_of('README.txt', 'description').join("\n\n")
|
12
|
-
end
|
9
|
+
PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
|
12
|
+
|
13
|
+
PROJ.summary ||= PROJ.description.split('.').first
|
14
|
+
|
15
|
+
PROJ.files ||=
|
16
|
+
if test(?f, PROJ.manifest_file)
|
17
|
+
files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
|
18
|
+
files.delete ''
|
19
|
+
files
|
20
|
+
else [] end
|
21
|
+
|
22
|
+
PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
23
|
+
|
24
|
+
PROJ.rdoc_main ||= PROJ.readme_file
|
17
25
|
|
18
26
|
# EOF
|
data/tasks/setup.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
# $Id
|
1
|
+
# $Id$
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rake'
|
5
|
+
require 'rake/clean'
|
5
6
|
require 'fileutils'
|
6
7
|
require 'ostruct'
|
7
8
|
|
@@ -16,8 +17,11 @@ PROJ.email = nil
|
|
16
17
|
PROJ.url = nil
|
17
18
|
PROJ.version = ENV['VERSION'] || '0.0.0'
|
18
19
|
PROJ.rubyforge_name = nil
|
19
|
-
PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/
|
20
|
+
PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/)
|
20
21
|
PROJ.release_name = ENV['RELEASE']
|
22
|
+
PROJ.history_file = 'History.txt'
|
23
|
+
PROJ.manifest_file = 'Manifest.txt'
|
24
|
+
PROJ.readme_file = 'README.txt'
|
21
25
|
|
22
26
|
# Rspec
|
23
27
|
PROJ.specs = FileList['spec/**/*_spec.rb']
|
@@ -29,13 +33,16 @@ PROJ.test_file = 'test/all.rb'
|
|
29
33
|
PROJ.test_opts = []
|
30
34
|
|
31
35
|
# Rcov
|
36
|
+
PROJ.rcov_dir = 'coverage'
|
32
37
|
PROJ.rcov_opts = ['--sort', 'coverage', '-T']
|
38
|
+
PROJ.rcov_threshold = 90.0
|
39
|
+
PROJ.rcov_threshold_exact = false
|
33
40
|
|
34
41
|
# Rdoc
|
35
42
|
PROJ.rdoc_opts = []
|
36
43
|
PROJ.rdoc_include = %w(^lib/ ^bin/ ^ext/ .txt$)
|
37
|
-
PROJ.rdoc_exclude = %w(extconf.rb$
|
38
|
-
PROJ.rdoc_main =
|
44
|
+
PROJ.rdoc_exclude = %w(extconf.rb$)
|
45
|
+
PROJ.rdoc_main = nil
|
39
46
|
PROJ.rdoc_dir = 'doc'
|
40
47
|
PROJ.rdoc_remote_dir = nil
|
41
48
|
|
@@ -46,13 +53,8 @@ PROJ.libs = []
|
|
46
53
|
%w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
|
47
54
|
|
48
55
|
# Gem Packaging
|
49
|
-
PROJ.files =
|
50
|
-
|
51
|
-
files = File.readlines('Manifest.txt').map {|fn| fn.chomp.strip}
|
52
|
-
files.delete ''
|
53
|
-
files
|
54
|
-
else [] end
|
55
|
-
PROJ.executables = PROJ.files.find_all {|fn| fn =~ %r/^bin/}
|
56
|
+
PROJ.files = nil
|
57
|
+
PROJ.executables = nil
|
56
58
|
PROJ.dependencies = []
|
57
59
|
PROJ.need_tar = true
|
58
60
|
PROJ.need_zip = false
|
@@ -71,6 +73,7 @@ PROJ.svn_tags = 'tags'
|
|
71
73
|
PROJ.svn_branches = 'branches'
|
72
74
|
|
73
75
|
# Announce
|
76
|
+
PROJ.ann_file = 'announcement.txt'
|
74
77
|
PROJ.ann_text = nil
|
75
78
|
PROJ.ann_paragraphs = []
|
76
79
|
PROJ.ann_email = {
|
@@ -166,7 +169,10 @@ def depend_on( name, version = nil )
|
|
166
169
|
spec = Gem.source_index.find_name(name).last
|
167
170
|
version = spec.version.to_s if version.nil? and !spec.nil?
|
168
171
|
|
169
|
-
PROJ.dependencies <<
|
172
|
+
PROJ.dependencies << case version
|
173
|
+
when nil; [name]
|
174
|
+
when %r/^\d/; [name, ">= #{version}"]
|
175
|
+
else [name, version] end
|
170
176
|
end
|
171
177
|
|
172
178
|
# Adds the given arguments to the include path if they are not already there
|
data/tasks/spec.rake
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# $Id$
|
2
2
|
|
3
3
|
if HAVE_SPEC_RAKE_SPECTASK
|
4
|
+
require 'spec/rake/verify_rcov'
|
4
5
|
|
5
6
|
namespace :spec do
|
6
7
|
|
7
8
|
desc 'Run all specs with basic output'
|
8
9
|
Spec::Rake::SpecTask.new(:run) do |t|
|
10
|
+
t.ruby_opts = PROJ.ruby_opts
|
9
11
|
t.spec_opts = PROJ.spec_opts
|
10
12
|
t.spec_files = PROJ.specs
|
11
13
|
t.libs += PROJ.libs
|
@@ -13,6 +15,7 @@ namespace :spec do
|
|
13
15
|
|
14
16
|
desc 'Run all specs with text output'
|
15
17
|
Spec::Rake::SpecTask.new(:specdoc) do |t|
|
18
|
+
t.ruby_opts = PROJ.ruby_opts
|
16
19
|
t.spec_opts = PROJ.spec_opts + ['--format', 'specdoc']
|
17
20
|
t.spec_files = PROJ.specs
|
18
21
|
t.libs += PROJ.libs
|
@@ -21,12 +24,20 @@ namespace :spec do
|
|
21
24
|
if HAVE_RCOV
|
22
25
|
desc 'Run all specs with RCov'
|
23
26
|
Spec::Rake::SpecTask.new(:rcov) do |t|
|
27
|
+
t.ruby_opts = PROJ.ruby_opts
|
24
28
|
t.spec_opts = PROJ.spec_opts
|
25
29
|
t.spec_files = PROJ.specs
|
26
30
|
t.libs += PROJ.libs
|
27
31
|
t.rcov = true
|
32
|
+
t.rcov_dir = PROJ.rcov_dir
|
28
33
|
t.rcov_opts = PROJ.rcov_opts + ['--exclude', 'spec']
|
29
34
|
end
|
35
|
+
|
36
|
+
RCov::VerifyTask.new(:verify) do |t|
|
37
|
+
t.threshold = PROJ.rcov_threshold
|
38
|
+
t.index_html = File.join(PROJ.rcov_dir, 'index.html')
|
39
|
+
t.require_exact_threshold = PROJ.rcov_threshold_exact
|
40
|
+
end
|
30
41
|
end
|
31
42
|
|
32
43
|
end # namespace :spec
|
data/tasks/test.rake
CHANGED
@@ -6,7 +6,7 @@ namespace :test do
|
|
6
6
|
|
7
7
|
Rake::TestTask.new(:run) do |t|
|
8
8
|
t.libs = PROJ.libs
|
9
|
-
t.test_files = if test
|
9
|
+
t.test_files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
10
10
|
else PROJ.tests end
|
11
11
|
t.ruby_opts += PROJ.ruby_opts
|
12
12
|
t.ruby_opts += PROJ.test_opts
|
@@ -15,14 +15,14 @@ namespace :test do
|
|
15
15
|
if HAVE_RCOV
|
16
16
|
desc 'Run rcov on the unit tests'
|
17
17
|
task :rcov => :clobber_rcov do
|
18
|
-
opts = PROJ.rcov_opts.
|
19
|
-
|
18
|
+
opts = PROJ.rcov_opts.dup << '-o' << PROJ.rcov_dir
|
19
|
+
opts = opts.join(' ')
|
20
|
+
files = if test(?f, PROJ.test_file) then [PROJ.test_file]
|
20
21
|
else PROJ.tests end
|
21
22
|
files = files.join(' ')
|
22
23
|
sh "#{RCOV} #{files} #{opts}"
|
23
24
|
end
|
24
25
|
|
25
|
-
desc 'Remove rcov products'
|
26
26
|
task :clobber_rcov do
|
27
27
|
rm_r 'coverage' rescue nil
|
28
28
|
end
|
@@ -35,6 +35,4 @@ task :test => 'test:run'
|
|
35
35
|
|
36
36
|
task :clobber => 'test:clobber_rcov' if HAVE_RCOV
|
37
37
|
|
38
|
-
remove_desc_for_task %w(test:clobber_rcov)
|
39
|
-
|
40
38
|
# EOF
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bones
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Pease
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-02-
|
12
|
+
date: 2008-02-21 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|