= Reap
User Friendly Project Assitant for Ruby
== What's This?
Reap is a user friendly project assistant for Ruby developers
built on top of Rake. By organizing your project in a semi-formal
manner (the same as setup.rb), Reap makes it easy to do the
following tasks:
* Generate RDocs.
* Run unit tests.
* Create Ruby Gem packages.
* Create standard .tgz, tbz (bzip2) and/or .zip packages.
* Publish documents to Rubyforge or other web sites.
* Announce a release to Ruby-talk or other mailing list.
* Prepare files for distribution (i.e. chmod, tag, etc.).
* Upload packages (coming soon!).
If you have special needs that Reap doesn't accomodate,
new task are farily easy to create. And we are always
happy to hear suggestions.
== Installation
=== Gem Install
Install the ruby gem as you would any other:
gem install reap
Reap requires Nano Methods.
=== Manual Install
To install manually follow the usual setup.eb steps:
1. Download the compressed package.
2. Unpack it.
3. Change into the unpacked directory.
4. run ./setup.rb
You should be good to go.
== Usage
=== Using a Reap Task
Reap makes it pretty easy to use it's built-in tasks.
Not only will it grab common data from a ProjectInfo
YAML file if available, but it defines convenience methods
to make writing Rakefiles easier. For instance, to create
a "package" target all you generally need in your Rakefile is:
require 'reap/tasks'
include ReapTask
package_task :package
The reaon this can be so simple, is b/c Reap extrapolates the
information it needs from a comon ProjectInfo file. You will
of course need to create this file in you projects main directory.
A template is provided and a command line tool to copy it to your
current directory. Simply type:
> reap template
Then edit the ProjectInfo file. The fields are fairly self
explanitiory. Apart from Reap such a file is nice to have on
it's own merits too.
=== Building a Reap Task
Building a Reap task differs from building a Rake task
by two important factors. First there is only one target
per task (this may change) Second, task blocks are yeilded
_prior_ to the #init routine being exectuted. So your #init
routine should expect data to already be present in
the tasks attribute and take that into account (usually that
means using ++||=++)
Here's an, oh so simple, example:
class MyOhSoSimpleTask < Reap::Task
# This creates the convenience method
register 'my_oh_so_simple'
default_desc 'this is a custom reap task'
attr_accessor :message
def init
@message ||= master['default'] || 'None Found!'
end
# run the target task
def run
puts @message
end
end
The corresponding settings in the ProjectInfo file (master) will then be:
default: Default text, if any.
And to use it in your Rake file:
ReapTask::my_oh_so_simple_task :mytarget
== Status
Reap is currently Usable Beta. Most of the tasks
work very well. Refinements are still common though,
and a few important tasks are still being planned.
== Legal
Reap
Copyright(c)2004-2005 Thomas Sawyer
Ruby License