= Drydock - v0.6
Build seaworthy command-line apps like a Captain with a powerful Ruby DSL.
== Overview
Drydock is a seaworthy DSL for building really powerful command line applications. The core class is contained in a single .rb file so it's easy to copy directly into your project. See below for examples.
== Install
One of:
* gem install drydock
* copy lib/drydock.rb into your lib directory.
Or for GitHub fans:
* git clone git://github.com/delano/drydock.git
* gem install delano-drydock
== Examples
See bin/example for more.
require 'drydock'
extend Drydock
default :welcome
before do
# You can execute a block before the requests command is executed. Instance
# variables defined here will be available to all commands.
end
about "A friendly welcome to the Drydock"
command :welcome do
puts "Welcome to Drydock."
puts "For available commands:"
puts "#{$0} show-commands"
end
usage "USAGE: #{$0} laugh [-f]"
about "The captain commands his crew to laugh"
option :f, :faster, "A boolean value. Go even faster!"
command :laugh do |obj|
# +obj+ is an instance of Drydock::Command. The options you define are available
# via obj.option.name
answer = !obj.option.faster ? "Sort of" : "Yes! I'm literally laughing as fast as possible."
puts "Captain Stubing: Are you laughing?"
puts "Dr. Bricker: " << answer
end
class JohnWestSmokedOysters < Drydock::Command
# You can write your own command classes by inheriting from Drydock::Command
# and referencing it in the command definition.
def ahoy!; p "matey"; end
end
about "Do something with John West's Smoked Oysters"
command :oysters => JohnWestSmokedOysters do |obj|
p obj # => #
end
about "My way of saying hello!"
command :ahoy! => JohnWestSmokedOysters
# If you don't provide a block, Drydock will call JohnWestSmokedOysters#ahoy!
Drydock.run!
== More Information
* GitHub[http://github.com/delano/drydock]
* RDocs[http://drydock.rubyforge.org/]
* Inspiration[http://www.youtube.com/watch?v=m_wFEB4Oxlo]
== Thanks
* Solutious Inc for putting up with my endless references to the sea! (http://solutious.com)
* Blake Mizerany for the inspiration via bmizerany-frylock[http://github.com/bmizerany/frylock]
== Credits
* Delano Mandelbaum (delano@solutious.com)
* Bernie Kopell (bernie@solutious.com)
== License
See LICENSE.txt