Tap (Task Application)

A framework for creating configurable, distributable tasks and workflows.

Description

Tap tasks are designed to be easy to test, subclass, use in scripts, and run from the command line. Tap provides methods to join tasks into imperative and dependecy-based workflows, utilize static config files, as well as dump and reuse results. Task libraries are readily shared as gems.

Check out these links for tutorials, development, and bug tracking.

Features

  • Tap and Rake are targeted at different problems, but play well together. See the Tutorial.

  • Tap is tested on MRI (the standard Ruby interpreter, versions 1.8.6 and 1.9.0) and JRuby.

Usage

A simple task illustrates the usage of tap:

[lib/goodnight.rb]
# Goodnight::manifest your basic goodnight moon task
# Says goodnight with a configurable message.
class Goodnight < Tap::Task
  config :message, 'goodnight'           # a goodnight message
  def process(name)
    log(message, name)
    "#{message} #{name}"
  end
end

Tap pulls documentation out of task classes to generate manifests:

% tap run -T
  sample:
    goodnight   # your basic goodnight moon task
  tap:
    dump        # the default dump task
    load        # the default load task
    rake        # run rake tasks

And help:

% tap run -- goodnight --help
Goodnight -- your basic goodnight moon task
-------------------------------------------------------------------------------- 
  Says goodnight with a configurable message.
-------------------------------------------------------------------------------- 
usage: tap run -- goodnight NAME
configurations:
        --message MESSAGE            a goodnight message
options:
    -h, --help                       Print this help
        --name NAME                  Specify a name
        --use FILE                   Loads inputs from file

Tasks are immediately available to run through tap or rap:

% tap run -- goodnight moon
  I[00:09:55]          goodnight moon
% rap goodnight moon --message hello
  I[00:10:01]              hello moon

Tap comes with generators. To get started:

% tap generate root sample
% cd sample
% tap generate task goodnight
% rap goodnight moon

Bugs/Known Issues

  • Some inconsequential tests on JRuby fail due to bugs in JRuby itself.

  • Joins, Parser, and Schema require additional documentation and may be internally reworked. The workflow syntax should remain the same.

Installation

Tap is available as a gem on RubyForge. Use:

% gem install tap

Tap requires an updated version of RubyGems (>= 1.2.0). To check the version and update RubyGems:

% gem --version
% gem --update system

Info

Copyright © 2006-2008, Regents of the University of Colorado.

Developer

Simon Chiang, Biomolecular Structure Program, Hansen Lab

Support

CU Denver School of Medicine Deans Academic Enrichment Fund

Licence

MIT-Style