bones 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|