bones 2.0.3 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +11 -0
- data/Manifest.txt +20 -25
- data/README.txt +114 -83
- data/Rakefile +7 -6
- data/data/Rakefile.erb +7 -1
- data/data/bin/NAME.erb +1 -1
- data/data/lib/NAME.rb.erb +4 -11
- data/data/spec/NAME_spec.rb.erb +0 -1
- data/data/spec/spec_helper.rb.erb +0 -1
- data/lib/bones.rb +21 -8
- data/lib/bones/annotation_extractor.rb +1 -2
- data/lib/bones/debug.rb +0 -1
- data/lib/bones/main.rb +183 -109
- data/lib/bones/smtp_tls.rb +0 -1
- data/{data → lib/bones}/tasks/ann.rake +0 -1
- data/{data → lib/bones}/tasks/bones.rake +0 -1
- data/lib/bones/tasks/gem.rake +192 -0
- data/{data → lib/bones}/tasks/git.rake +0 -1
- data/{data → lib/bones}/tasks/manifest.rake +3 -4
- data/{data → lib/bones}/tasks/notes.rake +0 -1
- data/{data → lib/bones}/tasks/post_load.rake +2 -2
- data/{data → lib/bones}/tasks/rdoc.rake +0 -1
- data/{data → lib/bones}/tasks/rubyforge.rake +2 -4
- data/{data → lib/bones}/tasks/setup.rb +14 -3
- data/{data → lib/bones}/tasks/spec.rake +1 -2
- data/{data → lib/bones}/tasks/svn.rake +0 -1
- data/{data → lib/bones}/tasks/test.rake +3 -1
- data/spec/bones/main_spec.rb +157 -0
- data/spec/bones_spec.rb +18 -0
- data/spec/data/data/README.txt +0 -0
- data/spec/data/data/Rakefile +0 -0
- data/spec/data/foo/README.txt +0 -0
- data/spec/data/foo/Rakefile +0 -0
- data/spec/spec_helper.rb +22 -0
- data/tasks/ann.rake +0 -1
- data/tasks/bones.rake +0 -1
- data/tasks/gem.rake +98 -32
- data/tasks/git.rake +0 -1
- data/tasks/manifest.rake +3 -4
- data/tasks/notes.rake +0 -1
- data/tasks/post_load.rake +2 -2
- data/tasks/rdoc.rake +0 -1
- data/tasks/rubyforge.rake +2 -4
- data/tasks/setup.rb +14 -3
- data/tasks/spec.rake +1 -2
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +3 -1
- metadata +40 -17
- data/data/tasks/gem.rake +0 -126
data/lib/bones/smtp_tls.rb
CHANGED
@@ -0,0 +1,192 @@
|
|
1
|
+
|
2
|
+
require 'find'
|
3
|
+
require 'rake/packagetask'
|
4
|
+
require 'rubygems/user_interaction'
|
5
|
+
require 'rubygems/builder'
|
6
|
+
|
7
|
+
module Bones
|
8
|
+
class GemPackageTask < Rake::PackageTask
|
9
|
+
# Ruby GEM spec containing the metadata for this package. The
|
10
|
+
# name, version and package_files are automatically determined
|
11
|
+
# from the GEM spec and don't need to be explicitly provided.
|
12
|
+
#
|
13
|
+
attr_accessor :gem_spec
|
14
|
+
|
15
|
+
# Tasks from the Bones gem directory
|
16
|
+
attr_reader :bones_files
|
17
|
+
|
18
|
+
# Create a GEM Package task library. Automatically define the gem
|
19
|
+
# if a block is given. If no block is supplied, then +define+
|
20
|
+
# needs to be called to define the task.
|
21
|
+
#
|
22
|
+
def initialize(gem_spec)
|
23
|
+
init(gem_spec)
|
24
|
+
yield self if block_given?
|
25
|
+
define if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Initialization tasks without the "yield self" or define
|
29
|
+
# operations.
|
30
|
+
#
|
31
|
+
def init(gem)
|
32
|
+
super(gem.name, gem.version)
|
33
|
+
@gem_spec = gem
|
34
|
+
@package_files += gem_spec.files if gem_spec.files
|
35
|
+
@bones_files = []
|
36
|
+
|
37
|
+
local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
|
38
|
+
if !test(?e, local_setup)
|
39
|
+
Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
|
40
|
+
gem_spec.files = (gem_spec.files +
|
41
|
+
bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create the Rake tasks and actions specified by this
|
46
|
+
# GemPackageTask. (+define+ is automatically called if a block is
|
47
|
+
# given to +new+).
|
48
|
+
#
|
49
|
+
def define
|
50
|
+
super
|
51
|
+
task :prereqs
|
52
|
+
task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
|
53
|
+
file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
|
54
|
+
when_writing("Creating GEM") {
|
55
|
+
chdir(package_dir_path) do
|
56
|
+
Gem::Builder.new(gem_spec).build
|
57
|
+
verbose(true) {
|
58
|
+
mv gem_file, "../#{gem_file}"
|
59
|
+
}
|
60
|
+
end
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
file package_dir_path => bones_files do
|
65
|
+
mkdir_p package_dir rescue nil
|
66
|
+
bones_files.each do |fn|
|
67
|
+
base_fn = File.join('tasks', File.basename(fn))
|
68
|
+
f = File.join(package_dir_path, base_fn)
|
69
|
+
fdir = File.dirname(f)
|
70
|
+
mkdir_p(fdir) if !File.exist?(fdir)
|
71
|
+
if File.directory?(fn)
|
72
|
+
mkdir_p(f)
|
73
|
+
else
|
74
|
+
raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
|
75
|
+
safe_ln(fn, f)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def gem_file
|
82
|
+
if @gem_spec.platform == Gem::Platform::RUBY
|
83
|
+
"#{package_name}.gem"
|
84
|
+
else
|
85
|
+
"#{package_name}-#{@gem_spec.platform}.gem"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end # class GemPackageTask
|
89
|
+
end # module Bones
|
90
|
+
|
91
|
+
namespace :gem do
|
92
|
+
|
93
|
+
PROJ.gem._spec = Gem::Specification.new do |s|
|
94
|
+
s.name = PROJ.name
|
95
|
+
s.version = PROJ.version
|
96
|
+
s.summary = PROJ.summary
|
97
|
+
s.authors = Array(PROJ.authors)
|
98
|
+
s.email = PROJ.email
|
99
|
+
s.homepage = Array(PROJ.url).first
|
100
|
+
s.rubyforge_project = PROJ.rubyforge.name
|
101
|
+
|
102
|
+
s.description = PROJ.description
|
103
|
+
|
104
|
+
PROJ.gem.dependencies.each do |dep|
|
105
|
+
s.add_dependency(*dep)
|
106
|
+
end
|
107
|
+
|
108
|
+
PROJ.gem.development_dependencies.each do |dep|
|
109
|
+
s.add_development_dependency(*dep)
|
110
|
+
end
|
111
|
+
|
112
|
+
s.files = PROJ.gem.files
|
113
|
+
s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
|
114
|
+
s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
|
115
|
+
|
116
|
+
s.bindir = 'bin'
|
117
|
+
dirs = Dir["{#{PROJ.libs.join(',')}}"]
|
118
|
+
s.require_paths = dirs unless dirs.empty?
|
119
|
+
|
120
|
+
incl = Regexp.new(PROJ.rdoc.include.join('|'))
|
121
|
+
excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
|
122
|
+
excl = Regexp.new(excl.join('|'))
|
123
|
+
rdoc_files = PROJ.gem.files.find_all do |fn|
|
124
|
+
case fn
|
125
|
+
when excl; false
|
126
|
+
when incl; true
|
127
|
+
else false end
|
128
|
+
end
|
129
|
+
s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
|
130
|
+
s.extra_rdoc_files = rdoc_files
|
131
|
+
s.has_rdoc = true
|
132
|
+
|
133
|
+
if test ?f, PROJ.test.file
|
134
|
+
s.test_file = PROJ.test.file
|
135
|
+
else
|
136
|
+
s.test_files = PROJ.test.files.to_a
|
137
|
+
end
|
138
|
+
|
139
|
+
# Do any extra stuff the user wants
|
140
|
+
PROJ.gem.extras.each do |msg, val|
|
141
|
+
case val
|
142
|
+
when Proc
|
143
|
+
val.call(s.send(msg))
|
144
|
+
else
|
145
|
+
s.send "#{msg}=", val
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end # Gem::Specification.new
|
149
|
+
|
150
|
+
Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
|
151
|
+
pkg.need_tar = PROJ.gem.need_tar
|
152
|
+
pkg.need_zip = PROJ.gem.need_zip
|
153
|
+
end
|
154
|
+
|
155
|
+
desc 'Show information about the gem'
|
156
|
+
task :debug => 'gem:prereqs' do
|
157
|
+
puts PROJ.gem._spec.to_ruby
|
158
|
+
end
|
159
|
+
|
160
|
+
desc 'Install the gem'
|
161
|
+
task :install => [:clobber, 'gem:package'] do
|
162
|
+
sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
|
163
|
+
|
164
|
+
# use this version of the command for rubygems > 1.0.0
|
165
|
+
#sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
|
166
|
+
end
|
167
|
+
|
168
|
+
desc 'Uninstall the gem'
|
169
|
+
task :uninstall do
|
170
|
+
installed_list = Gem.source_index.find_name(PROJ.name)
|
171
|
+
if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
|
172
|
+
sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
desc 'Reinstall the gem'
|
177
|
+
task :reinstall => [:uninstall, :install]
|
178
|
+
|
179
|
+
desc 'Cleanup the gem'
|
180
|
+
task :cleanup do
|
181
|
+
sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
|
182
|
+
end
|
183
|
+
end # namespace :gem
|
184
|
+
|
185
|
+
|
186
|
+
desc 'Alias to gem:package'
|
187
|
+
task :gem => 'gem:package'
|
188
|
+
|
189
|
+
task :clobber => 'gem:clobber_package'
|
190
|
+
remove_desc_for_task 'gem:clobber_package'
|
191
|
+
|
192
|
+
# EOF
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require 'find'
|
4
3
|
|
@@ -15,9 +14,9 @@ namespace :manifest do
|
|
15
14
|
lines.map! do |line|
|
16
15
|
case line
|
17
16
|
when %r/^(-{3}|\+{3})/; nil
|
18
|
-
when %r/^@/;
|
19
|
-
when %r/^\+/;
|
20
|
-
when %r/^\-/;
|
17
|
+
when %r/^@/; ANSICode.blue line
|
18
|
+
when %r/^\+/; ANSICode.green line
|
19
|
+
when %r/^\-/; ANSICode.red line
|
21
20
|
else line end
|
22
21
|
end
|
23
22
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
# This file does not define any rake tasks. It is used to load some project
|
4
3
|
# settings if they are not defined by the user.
|
@@ -10,7 +9,8 @@ PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
|
|
10
9
|
|
11
10
|
flatten_arrays = lambda do |this,os|
|
12
11
|
os.instance_variable_get(:@table).each do |key,val|
|
13
|
-
next if key == :dependencies
|
12
|
+
next if key == :dependencies \
|
13
|
+
or key == :development_dependencies
|
14
14
|
case val
|
15
15
|
when Array; val.flatten!
|
16
16
|
when OpenStruct; this.call(this,val)
|
@@ -6,7 +6,7 @@ require 'rake/contrib/sshpublisher'
|
|
6
6
|
|
7
7
|
namespace :gem do
|
8
8
|
desc 'Package and upload to RubyForge'
|
9
|
-
task :release => [:clobber, 'gem
|
9
|
+
task :release => [:clobber, 'gem'] do |t|
|
10
10
|
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
11
11
|
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
12
12
|
pkg = "pkg/#{PROJ.gem._spec.full_name}"
|
@@ -26,9 +26,7 @@ namespace :gem do
|
|
26
26
|
c['release_changes'] = PROJ.changes if PROJ.changes
|
27
27
|
c['preformatted'] = true
|
28
28
|
|
29
|
-
files =
|
30
|
-
(PROJ.gem.need_zip ? "#{pkg}.zip" : nil),
|
31
|
-
"#{pkg}.gem"].compact
|
29
|
+
files = Dir.glob("#{pkg}*.*")
|
32
30
|
|
33
31
|
puts "Releasing #{PROJ.name} v. #{PROJ.version}"
|
34
32
|
rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require 'rubygems'
|
4
3
|
require 'rake'
|
@@ -8,6 +7,9 @@ require 'ostruct'
|
|
8
7
|
|
9
8
|
class OpenStruct; undef :gem; end
|
10
9
|
|
10
|
+
# TODO: make my own openstruct type object that includes descriptions
|
11
|
+
# TODO: use the descriptions to output help on the available bones options
|
12
|
+
|
11
13
|
PROJ = OpenStruct.new(
|
12
14
|
# Project Defaults
|
13
15
|
:name => nil,
|
@@ -48,6 +50,7 @@ PROJ = OpenStruct.new(
|
|
48
50
|
# Gem Packaging
|
49
51
|
:gem => OpenStruct.new(
|
50
52
|
:dependencies => [],
|
53
|
+
:development_dependencies => [],
|
51
54
|
:executables => nil,
|
52
55
|
:extensions => FileList['ext/**/extconf.rb'],
|
53
56
|
:files => nil,
|
@@ -110,8 +113,10 @@ PROJ = OpenStruct.new(
|
|
110
113
|
)
|
111
114
|
|
112
115
|
# Load the other rake files in the tasks folder
|
113
|
-
|
114
|
-
|
116
|
+
tasks_dir = File.expand_path(File.dirname(__FILE__))
|
117
|
+
post_load_fn = File.join(tasks_dir, 'post_load.rake')
|
118
|
+
rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
|
119
|
+
rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
|
115
120
|
import(*rakefiles)
|
116
121
|
|
117
122
|
# Setup the project libraries
|
@@ -162,6 +167,12 @@ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
|
|
162
167
|
HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
|
163
168
|
system("git --version 2>&1 > #{DEV_NULL}"))
|
164
169
|
|
170
|
+
# Add bones as a development dependency
|
171
|
+
#
|
172
|
+
if HAVE_BONES
|
173
|
+
PROJ.gem.development_dependencies << ['bones', ">= #{Bones::VERSION}"]
|
174
|
+
end
|
175
|
+
|
165
176
|
# Reads a file at +path+ and spits out an array of the +paragraphs+
|
166
177
|
# specified.
|
167
178
|
#
|
@@ -0,0 +1,157 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. spec_helper]))
|
4
|
+
|
5
|
+
describe Bones::Main do
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@main = Bones::Main.new
|
9
|
+
@skeleton_dir = File.join(@main.mrbones_dir, 'data')
|
10
|
+
@skeleton_dir = Bones.path('data') unless test(?e, @skeleton_dir)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has some defaults when initialized' do
|
14
|
+
@main.options.should == {
|
15
|
+
:skeleton_dir => @skeleton_dir,
|
16
|
+
:with_tasks => false,
|
17
|
+
:verbose => false,
|
18
|
+
:name => nil,
|
19
|
+
:output_dir => nil,
|
20
|
+
:action => nil
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'provides access to the output_dir' do
|
25
|
+
@main.output_dir.should be_nil
|
26
|
+
@main.options[:output_dir] = 'foo'
|
27
|
+
@main.output_dir.should == 'foo'
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'provides access to the skeleton_dir' do
|
31
|
+
@main.skeleton_dir.should == @skeleton_dir
|
32
|
+
@main.options[:skeleton_dir] = 'bar'
|
33
|
+
@main.skeleton_dir.should == 'bar'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'provides access to the project name' do
|
37
|
+
@main.name.should be_nil
|
38
|
+
@main.options[:name] = 'baz'
|
39
|
+
@main.name.should == 'baz'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'provides access to the project classname' do
|
43
|
+
@main.options[:name] = 'foo-bar'
|
44
|
+
@main.classname.should == 'FooBar'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'determines if a project should be updated' do
|
48
|
+
@main.options[:output_dir] = Bones.path
|
49
|
+
@main.update?.should == false
|
50
|
+
|
51
|
+
@main.options[:with_tasks] = true
|
52
|
+
@main.update?.should == true
|
53
|
+
|
54
|
+
@main.options[:output_dir] = Bones.path(%w[foo bar baz buz tmp])
|
55
|
+
@main.update?.should == false
|
56
|
+
end
|
57
|
+
|
58
|
+
# ------------------------------------------------------------------------
|
59
|
+
describe 'when parsing command line options' do
|
60
|
+
|
61
|
+
before :each do
|
62
|
+
@main.stub!(:mrbones_dir).and_return(Bones.path(%w[spec data]))
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'parses the project name' do
|
66
|
+
@main.parse %w[foo-bar]
|
67
|
+
@main.name.should == 'foo-bar'
|
68
|
+
@main.output_dir.should == 'foo-bar'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'parses the verbose flag' do
|
72
|
+
@main.parse %w[-v foo-bar]
|
73
|
+
@main.name.should == 'foo-bar'
|
74
|
+
@main.verbose?.should == true
|
75
|
+
|
76
|
+
@main = Bones::Main.new
|
77
|
+
@main.parse %w[--verbose foo-bar]
|
78
|
+
@main.name.should == 'foo-bar'
|
79
|
+
@main.verbose?.should == true
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'parses the directory flag' do
|
83
|
+
@main.parse %w[-d blah foo-bar]
|
84
|
+
@main.name.should == 'foo-bar'
|
85
|
+
@main.output_dir.should == 'blah'
|
86
|
+
|
87
|
+
@main = Bones::Main.new
|
88
|
+
@main.parse %w[--directory blah foo-bar]
|
89
|
+
@main.name.should == 'foo-bar'
|
90
|
+
@main.output_dir.should == 'blah'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'parses the directory flag' do
|
94
|
+
@main.parse %w[-d blah foo-bar]
|
95
|
+
@main.name.should == 'foo-bar'
|
96
|
+
@main.output_dir.should == 'blah'
|
97
|
+
|
98
|
+
@main = Bones::Main.new
|
99
|
+
@main.parse %w[--directory blah foo-bar]
|
100
|
+
@main.name.should == 'foo-bar'
|
101
|
+
@main.output_dir.should == 'blah'
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'parses the skeleton to use flag' do
|
105
|
+
@main.stub!(:mrbones_dir).and_return(Bones.path(%w[spec data]))
|
106
|
+
@main.parse %w[-s data foo-bar]
|
107
|
+
@main.name.should == 'foo-bar'
|
108
|
+
@main.skeleton_dir.should == Bones.path(%w[spec data data])
|
109
|
+
|
110
|
+
@main = Bones::Main.new
|
111
|
+
@main.stub!(:mrbones_dir).and_return(Bones.path(%w[spec data]))
|
112
|
+
@main.parse %w[--skeleton foo foo-bar]
|
113
|
+
@main.name.should == 'foo-bar'
|
114
|
+
@main.skeleton_dir.should == Bones.path(%w[spec data foo])
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'parses the with-tasks flag' do
|
118
|
+
@main.parse %w[--with-tasks foo-bar]
|
119
|
+
@main.name.should == 'foo-bar'
|
120
|
+
@main.with_tasks?.should == true
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'parses the freeze flag' do
|
124
|
+
@main.parse %w[--freeze]
|
125
|
+
@main.name.should be_nil
|
126
|
+
@main.options[:action].should == :freeze
|
127
|
+
|
128
|
+
@main = Bones::Main.new
|
129
|
+
@main.parse %w[--freeze foo-bar]
|
130
|
+
@main.name.should == 'foo-bar'
|
131
|
+
@main.options[:action].should == :freeze
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'parses the unfreeze flag' do
|
135
|
+
@main.parse %w[--unfreeze]
|
136
|
+
@main.name.should be_nil
|
137
|
+
@main.options[:action].should == :unfreeze
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'parses the info flag' do
|
141
|
+
@main.parse %w[--info]
|
142
|
+
@main.name.should be_nil
|
143
|
+
@main.options[:action].should == :info
|
144
|
+
|
145
|
+
@main = Bones::Main.new
|
146
|
+
@main.parse %w[-i]
|
147
|
+
@main.name.should be_nil
|
148
|
+
@main.options[:action].should == :info
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# ------------------------------------------------------------------------
|
153
|
+
#describe 'when archiving tasks'
|
154
|
+
|
155
|
+
end # describe Bones::Main
|
156
|
+
|
157
|
+
# EOF
|