toe 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History +3 -0
- data/MIT-LICENSE +22 -0
- data/README +19 -0
- data/lib/toe.rb +2 -0
- data/lib/toe/gem.rb +21 -0
- data/lib/toe/gem_task.rb +19 -0
- data/lib/toe/manifest.rb +36 -0
- data/lib/toe/rdoc.rb +46 -0
- data/lib/toe/setup/gh_pages.rb +55 -0
- data/lib/toe/test.rb +84 -0
- data/lib/toe/version.rb +7 -0
- data/tap.yml +0 -0
- metadata +93 -0
data/History
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2009-2010, Simon Chiang
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
= Toe
|
2
|
+
|
3
|
+
Project management tasks
|
4
|
+
|
5
|
+
== Description
|
6
|
+
|
7
|
+
Toe provides boilerplate management tasks for ruby projects, for example test
|
8
|
+
and gem packaging tasks. Use like any {Tap}[http://tap.rubyforge.org] tasks.
|
9
|
+
|
10
|
+
== Installation
|
11
|
+
|
12
|
+
Available as a gem from Gemcutter[http://gemcutter.org/gems/toe].
|
13
|
+
|
14
|
+
% gem install toe
|
15
|
+
|
16
|
+
== Info
|
17
|
+
|
18
|
+
Copyright (c) 2009-2010, Simon Chiang
|
19
|
+
License:: {MIT-Style}[link:files/MIT-LICENSE.html]
|
data/lib/toe.rb
ADDED
data/lib/toe/gem.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'toe/gem_task'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Toe
|
5
|
+
# ::task package a gem
|
6
|
+
class Gem < GemTask
|
7
|
+
|
8
|
+
config :output_dir, 'pkg', :short => :o # Output directory
|
9
|
+
|
10
|
+
def process(path=default_path)
|
11
|
+
unless File.directory?(output_dir)
|
12
|
+
FileUtils.mkdir_p(output_dir)
|
13
|
+
end
|
14
|
+
|
15
|
+
path = ::Gem::Builder.new(gemspec(path)).build
|
16
|
+
FileUtils.mv(path, File.join(output_dir, File.basename(path)))
|
17
|
+
|
18
|
+
path
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/toe/gem_task.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubygems/specification'
|
3
|
+
require 'tap/task'
|
4
|
+
|
5
|
+
module Toe
|
6
|
+
class GemTask < Tap::Task
|
7
|
+
def default_path
|
8
|
+
File.expand_path("#{File.basename(Dir.pwd)}.gemspec")
|
9
|
+
end
|
10
|
+
|
11
|
+
def gemspec(path)
|
12
|
+
unless File.exists?(path)
|
13
|
+
raise "no such gemspec: #{path}"
|
14
|
+
end
|
15
|
+
|
16
|
+
eval(File.read(path), TOPLEVEL_BINDING, path)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/toe/manifest.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'toe/gem_task'
|
2
|
+
|
3
|
+
module Toe
|
4
|
+
# ::task prints files for a manifest
|
5
|
+
class Manifest < GemTask
|
6
|
+
|
7
|
+
config :omit, %w{^rdoc ^pkg ^test}, &c.list(&c.regexp)
|
8
|
+
|
9
|
+
def process(path=default_path)
|
10
|
+
|
11
|
+
# collect files from the gemspec, labeling
|
12
|
+
# with true or false corresponding to the
|
13
|
+
# file existing or not
|
14
|
+
files = gemspec(path).files.inject({}) do |files, file|
|
15
|
+
files[File.expand_path(file)] = [File.exists?(file), file]
|
16
|
+
files
|
17
|
+
end
|
18
|
+
|
19
|
+
# gather non-rdoc/pkg files for the project
|
20
|
+
# and add to the files list if they are not
|
21
|
+
# included already (marking by the absence
|
22
|
+
# of a label)
|
23
|
+
Dir.glob("**/*").each do |file|
|
24
|
+
next if File.directory?(file) || omit.any? {|pattern| file =~ pattern }
|
25
|
+
|
26
|
+
path = File.expand_path(file)
|
27
|
+
files[path] = ["", file] unless files.has_key?(path)
|
28
|
+
end
|
29
|
+
|
30
|
+
# sort and output the results
|
31
|
+
files.values.sort_by {|exists, file| file }.each do |entry|
|
32
|
+
puts "%-5s %s" % entry
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/toe/rdoc.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'toe/gem_task'
|
2
|
+
require 'rdoc/rdoc'
|
3
|
+
require 'cdoc'
|
4
|
+
|
5
|
+
module Toe
|
6
|
+
# :startdoc::task generate rdoc
|
7
|
+
class Rdoc < GemTask
|
8
|
+
|
9
|
+
config :output_dir, 'rdoc', :short => :o, &c.string_or_nil # Output directory
|
10
|
+
config :force, false, &c.flag # Force rebuild
|
11
|
+
config :cdoc, true, &c.switch # Use cdoc template
|
12
|
+
|
13
|
+
def options
|
14
|
+
opts = []
|
15
|
+
|
16
|
+
if output_dir
|
17
|
+
opts << '--op'
|
18
|
+
opts << output_dir
|
19
|
+
end
|
20
|
+
|
21
|
+
if cdoc
|
22
|
+
opts.concat %w{
|
23
|
+
--fmt cdoc
|
24
|
+
--template cdoc/cdoc_html_template
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
if force
|
29
|
+
opts << '--force-update'
|
30
|
+
end
|
31
|
+
|
32
|
+
opts
|
33
|
+
end
|
34
|
+
|
35
|
+
def process(path=default_path)
|
36
|
+
spec = gemspec(path)
|
37
|
+
|
38
|
+
files = spec.files.select {|file|
|
39
|
+
file =~ /lib.*\.rb$/
|
40
|
+
} + spec.extra_rdoc_files
|
41
|
+
|
42
|
+
args = options + spec.rdoc_options + files.uniq
|
43
|
+
RDoc::RDoc.new.document(args)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'tap/task'
|
2
|
+
|
3
|
+
module Toe
|
4
|
+
module Setup
|
5
|
+
# :startdoc::task setup github pages
|
6
|
+
#
|
7
|
+
# GitHub Pages are about the easiest way to put up documentation possible.
|
8
|
+
# This task sets up github pages a-la the instructions that appear when
|
9
|
+
# you visit your project homepage before pages is set up:
|
10
|
+
#
|
11
|
+
# yourname.github.com/project
|
12
|
+
#
|
13
|
+
# Caution: make your working directory clean before you do this (either
|
14
|
+
# stash or commit), otherwise this will LOSE any changes you've made to
|
15
|
+
# your project since the last commit.
|
16
|
+
#
|
17
|
+
# % tap setup/gh_pages
|
18
|
+
#
|
19
|
+
# Subsequent to this task, your working directory will be empty and you
|
20
|
+
# will be on the gh-pages branch. Add content and push to github:
|
21
|
+
#
|
22
|
+
# echo "My GitHub Page" > index.html
|
23
|
+
# git add .
|
24
|
+
# git commit -a -m "First pages commit"
|
25
|
+
# git push origin gh-pages
|
26
|
+
#
|
27
|
+
# The documentation should be updated in about a minute.
|
28
|
+
class GhPages < Tap::Task
|
29
|
+
include Tap::Utils
|
30
|
+
|
31
|
+
config :clean, false, &c.flag # Remove all files
|
32
|
+
|
33
|
+
def process
|
34
|
+
unless File.exists?(".git")
|
35
|
+
raise "cannot setup pages, not a git repository"
|
36
|
+
end
|
37
|
+
|
38
|
+
sh "git symbolic-ref HEAD refs/heads/gh-pages"
|
39
|
+
|
40
|
+
if File.exists?(".git/index")
|
41
|
+
sh "rm .git/index"
|
42
|
+
end
|
43
|
+
|
44
|
+
if clean
|
45
|
+
sh "git clean -fdx"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def sh(*cmd)
|
50
|
+
log :sh, cmd.join(' ')
|
51
|
+
super
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/toe/test.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'tap/task'
|
2
|
+
|
3
|
+
module Toe
|
4
|
+
# :startdoc::task a testing task
|
5
|
+
#
|
6
|
+
# The Tap version of Rake::TestTask, shamelessly adapted from the original.
|
7
|
+
# The default test command is:
|
8
|
+
#
|
9
|
+
# % ruby -w -Ilib -e 'ARGV.each{|f| load f}' TEST_FILES...
|
10
|
+
#
|
11
|
+
# Where the test files are all files matching 'test/**/*_test.rb'. The options
|
12
|
+
# can be used to specify other options, lib paths, globs, filters, and even
|
13
|
+
# multiple interpreters.
|
14
|
+
#
|
15
|
+
class Test < Tap::Task
|
16
|
+
include Tap::Utils
|
17
|
+
|
18
|
+
# The command to launch a ruby interpreter. Multiple
|
19
|
+
# commands many be specified for multiple interpreters.
|
20
|
+
config :cmds, ["ruby"], :long => :cmd, &c.list # Commands to launch a ruby interpreter
|
21
|
+
|
22
|
+
# Array of options to pass to each cmd.
|
23
|
+
config :opts, ["w"], :long => :opt, &c.list # Options to the ruby interpreter
|
24
|
+
|
25
|
+
# List of directories to added to $LOAD_PATH before
|
26
|
+
# running the tests.
|
27
|
+
config :libs, ['lib'], :long => :lib, :short => :I, &c.list # Specify the test libraries
|
28
|
+
|
29
|
+
# Note that the default pattern reflects modern
|
30
|
+
# test naming conventions.
|
31
|
+
config :globs, ["test/**/*_test.rb"], :long => :glob, &c.list # Globs to auto-discover test files
|
32
|
+
|
33
|
+
# Filters test files, useful for only testing
|
34
|
+
# a subset of all tests. Test files are always
|
35
|
+
# filtered, even when manually specified.
|
36
|
+
config :filter, ".", &c.regexp # A regexp filter of test files
|
37
|
+
|
38
|
+
# Iterates over test files to launch them one by one.
|
39
|
+
config :iterate, false, &c.switch # Iteratively runs test files
|
40
|
+
|
41
|
+
# Code to load the test files, by default a simple one-liner:
|
42
|
+
#
|
43
|
+
# -e 'ARGV.each{|f| load f}'
|
44
|
+
#
|
45
|
+
def load_code
|
46
|
+
"-e 'ARGV.each{|f| load f}'"
|
47
|
+
end
|
48
|
+
|
49
|
+
def process(*args)
|
50
|
+
|
51
|
+
# construct the command options
|
52
|
+
options = [load_code]
|
53
|
+
opts.each {|opt| options << (opt[0] == ?- ? opt : "-#{opt}") }
|
54
|
+
libs.each {|path| options << "-I\"#{File.expand_path(path)}\"" }
|
55
|
+
options = options.join(" ")
|
56
|
+
|
57
|
+
# select test files
|
58
|
+
files = globs.collect do |glob|
|
59
|
+
Dir.glob(glob).select do |path|
|
60
|
+
File.file?(path) && path =~ filter
|
61
|
+
end
|
62
|
+
end.flatten!
|
63
|
+
|
64
|
+
if files.empty?
|
65
|
+
log :warn, "no files found for: #{globs.inspect}", Logger::WARN
|
66
|
+
end
|
67
|
+
|
68
|
+
files.collect! {|path| "\"#{path}\""}
|
69
|
+
files = [files.join(' ')] unless iterate
|
70
|
+
|
71
|
+
# launch each test
|
72
|
+
files.each do |path|
|
73
|
+
cmds.each do |cmd|
|
74
|
+
sh(cmd, options, path)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def sh(*cmd)
|
80
|
+
log :sh, cmd.join(' ')
|
81
|
+
super
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/toe/version.rb
ADDED
data/tap.yml
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: toe
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Simon Chiang
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-02 00:00:00 -06:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: tap-gen
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 7
|
30
|
+
- 0
|
31
|
+
version: 0.7.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description:
|
35
|
+
email: simon.a.chiang@gmail.com
|
36
|
+
executables: []
|
37
|
+
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files:
|
41
|
+
- History
|
42
|
+
- README
|
43
|
+
- MIT-LICENSE
|
44
|
+
files:
|
45
|
+
- lib/toe.rb
|
46
|
+
- lib/toe/gem.rb
|
47
|
+
- lib/toe/gem_task.rb
|
48
|
+
- lib/toe/manifest.rb
|
49
|
+
- lib/toe/rdoc.rb
|
50
|
+
- lib/toe/setup/gh_pages.rb
|
51
|
+
- lib/toe/test.rb
|
52
|
+
- lib/toe/version.rb
|
53
|
+
- tap.yml
|
54
|
+
- History
|
55
|
+
- README
|
56
|
+
- MIT-LICENSE
|
57
|
+
has_rdoc: true
|
58
|
+
homepage: http://tap.rubyforge.org/toe/
|
59
|
+
licenses: []
|
60
|
+
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options:
|
63
|
+
- --main
|
64
|
+
- README
|
65
|
+
- -S
|
66
|
+
- -N
|
67
|
+
- --title
|
68
|
+
- Toe
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project: tap
|
88
|
+
rubygems_version: 1.3.6
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: A tap development suite
|
92
|
+
test_files: []
|
93
|
+
|