HARP

A mixin for creating application REPLs with Readline support.

Example

gem install harp
require "harp"

class UsefulThing

  # define all the useful methods and behaviors you need
  def use(adverb)
    puts "You used me #{adverb}!"
  end

  # Mix it in
  include Harp

  # Set it up
  setup_repl do |repl|

    on("help") do
      commands = repl.commands
      puts "* Available commands: " << commands.sort.join(" ")
      puts "* Tab completion works for commands."
    end

    # Harp provides a "quit" command by default, but you can
    # override it to add value.
    on("quit") do
      puts "Farewell to the girl with the sun in her eyes."
      exit
    end

    # Set up a handler for a command where the first token is "!"
    # I.e., shell out like Vim does.
    on_bang do |args|
      system args.first
    end

    # define a command that calls an instance method of your class.
    # The block parameter is always an array, even if your regex
    # had only one match group.
    # This command will only accept a single-word argument (no
    # whitespace allowed).
    on(/use (\S+)$/) do |args|
      self.use(args.first)
    end

  end

end

UsefulThing.new.repl

Usage

$ ruby -I lib/ examples/usage.rb 

<3: help
* Available commands:  help quit use
* Tab completion works for commands.
<3: use well
You used me well!
<3: use badly
You used me badly!
<3: use without proper care
command not found
<3: ! ls
LICENSE           README.md         consolize.gemspec examples          lib
<3: quit
Farewell to the girl with the sun in her eyes.