Skip to content

Repository files navigation

tapn. todrawasupplyfromaresource

A configurable, distributable workflow framework.

Tap allows the construction of workflows that may be defined, configured, and run from the command line. The tasks and joins composing a workflow are easy to test, subclass, and distribute as gems.

Tap provides a standard library of tasks, generators, and test modules to expedite development.

Tasks are defined as subclasses of Tap::Task.

[lib/goodnight.rb]
require'tap/task'# ::task your basic goodnight moon task# Says goodnight with a configurable message.classGoodnight<Tap::Taskconfig:message, 'goodnight'# a goodnight messagedefprocess(name)
"#{message} #{name}"endend

Tap discovers tasks.

% tap list
task:
dump # dump data
goodnight # your basic goodnight moon task
list # list resources
load # load data
prompt # open a prompt
signal # signal via a task
join:
gate # collects results
join # unsyncrhonized multi-way join
sync # synchronized multi-way join
middleware:
debugger # default debugger

Generates command-line documentation.

% tap goodnight --help
Goodnight -- your basic goodnight moon task
-------------------------------------------------------------------------------- Says goodnight with a configurable message.
-------------------------------------------------------------------------------- usage: tap goodnight NAME
configurations:
--message MESSAGE a goodnight message
options:
--help Print this help
--config FILE Specifies a config file

And provides a robust syntax for building both simple and complex workflows. This joins a goodnight task to a dump task in order to print the goodnight message.

% tap goodnight moon -: dump
goodnight moon
% tap goodnight world --message hello -: dump
hello world

Workflows support the use of middleware to wrap the execution of each task, most commonly for logging and/or debugging.

% tap goodnight moon -: dump --/use debugger
21:06:53 0 << ["moon"] (Goodnight)
21:06:53 0 >> "goodnight moon" (Goodnight)
21:06:53 1 << "goodnight moon" (Tap::Tasks::Dump)
goodnight moon
21:06:53 1 >> "goodnight moon" (Tap::Tasks::Dump)

Tap provides a set of test modules to simplify testing of workflows both off and on the command-line (this documentation is tested, for example):

require'tap/test/unit'classShellTestTest<Test::Unit::TestCaseacts_as_shell_testdeftest_goodnight_moonsh_test%q{
% tap load 'goodnight moon' -: dump
goodnight moon
}endend

Tasks can be packaged into gems like any other code. Tap automatically finds tasks in gems containing a tap.yml file so that distribution feels normal and unobtrusive.

% tap load/yaml
unresolvable constant: "load/yaml"
% gem install tap-tasks
...
% tap load/yaml "[1, 2, 3]" -: dump/yaml
--- - 1
- 2
- 3

For local tasks that don’t need to be distributed, Tap provides declarations a-la Rake. By default any tasks in a tapfile are available for use.

[tapfile]
desc "concat file contents"
task :cat do |config, *files|
files.collect {|file| File.read(file) }.join
end
desc "grep lines"
task :grep, :e => '.' do |config, str|
str.split("\n").grep(/#{config.e}/)
end
% tap cat tapfile -:a grep -e task -:i dump
task :cat do |config, *files|
task :grep, :e => '.' do |config, str|

See the documentation for a greater explanation of the workflow syntax, several common patterns, and the underlying APIs.

Tap is available as a gem on Gemcutter.

% gem install tap
Developer

Simon Chiang

License

MIT-Style

About

A framework for creating configurable, distributable tasks and workflows.

Resources

Stars

20 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages