Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A library for creating wrappers around command-line programs.
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.document
.gemtest
.gitignore
.rspec
.yardopts
ChangeLog.md
LICENSE.txt
README.md
Rakefile
gemspec.yml
rprogram.gemspec

README.md

RProgram

Description

RProgram is a library for creating wrappers around command-line programs. RProgram provides a Rubyful interface to programs and all their options or non-options. RProgram can also search for programs installed on a system.

Features

  • Safely executes individual programs and their separate command-line arguments, to prevent command or option injection.
  • Supports using Ruby 1.9 exec options.
  • Supports specifying environment variables of a process (only available on Ruby 1.9).
  • Allows running programs with IO.popen (only available on Ruby 1.9).
  • Allows running programs under sudo.
  • Provides cross-platform access to the PATH environment variable.
  • Supports leading/tailing non-options.
  • Supports long-options and short-options.
  • Supports custom formating of options.

Examples

First, create the class to represent the options of the program, using {RProgram::Task} as the base class:

require 'rprogram/task'

class MyProgTask < RProgram::Task

  # map in the short-options
  short_option :flag => '-o', :name => :output
  short_option :flag => '-oX', :name => :xml_output

  # map in long options
  long_option :flag => '--no-resolv', :name => :disable_resolv

  # long_option can infer the :name option, based on the :flag
  long_option :flag => '--mode'

  # options can also take multiple values
  long_option :flag => '--includes', :multiple => true

  # options with multiple values can have a custom separator character
  long_option :flag      => '--ops',
              :multiple  => true,
              :separator => ','

  # define any non-options (aka additional arguments)
  non_option :tailing => true, :name => :files

end

Next, create the class to represent the program you wish to interface with, using {RProgram::Program} as the base class:

require 'my_prog_task'

require 'rprogram/program'

class MyProg < RProgram::Program

  # identify the file-name of the program
  name_program 'my_prg'

  # add a top-level method which finds and runs your program.
  def self.my_run(options={},&block)
    self.find.my_run(options,&block)
  end

  # add a method which runs the program with MyProgTask.
  def my_run(options={},&block)
    run_task(MyProgTask.new(options,&block))
  end

end

Finally, run your program with options or a block:

MyProgram.my_run(:mode => :fast, :files => ['test1'])
# => true

MyProgram.my_run do |my_prog|
  my_prog.includes = ['one', 'two', 'three']
  my_prog.mode     = :safe

  my_prog.output = 'output.txt'
  my_prog.files  = ['test1.txt', 'test2.txt']
end
# => true

Install

$ gem install rprogram

License

Copyright (c) 2007-2012 Hal Brodigan

See {file:LICENSE.txt} for license information.

Something went wrong with that request. Please try again.