Project

runnable

0.0
No commit activity in last 3 years
No release in over 3 years
Convert a executable command in a Ruby-like class you are able to start, define params and send signals (like kill, or stop)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 2.1.0
>= 0.10.2
>= 1.6.0
>= 0.8.7
>= 2.5.0
>= 0.6.8
 Project Readme

Runnable

A Ruby gem that allow programmer to control UNIX system commands as a Ruby class.

Usage

All you have to do is to create a class named exactly as command and make it inherit from class Runnable.

class LS
  include Runnable
end

That gives you the basics to control the execution of ls command. You can overwrite the name of the command by using the executes macro:

class MyLs
  include Runnable

  executes :ls
end

Now you can create an instance like this:

my_command = LS.new

And run the command as follows

my_command.run

Many other options are available; you can stop the command, kill it or look for some important information about the command and its process. Entire documentation of this gem can be generated using yardoc. To do this use rake doc.

Custom output and exceptions

Runnable parse a set of user defined regular expresion to set up the command return values.

This is an example of how we can receive the return value of a command:

class Nmap
  include Runnable
  
  executes :nmap

  define_command( :scan, :blocking => true ) { |ip, subnet| "-sP #{ip}/#{subnet}" }
  scan_processors(
    :exceptions => { /^Illegal netmask value/ => ArgumentError },
    :outputs => { /Nmap scan report for (.*)/ => :ip }
  )
end

Nmap.new.scan("192.168.1.1", "24") # should return an array with the ips

Runnable can also raise custom exceptions, using the previously Nmap defined class: Nmap.new.scan("192.168.1.1", "1000") Will raise an ArgumentError exception. Note that Runnable will also raise an exception if the command returned value is not 0.

Background usage

Runnable can be used with background process:

class Ping
  include Runnable

  define_command( :goping, :blocking => false) { "-c5 www.google.es" }

  goping_processors(
    :outputs => { /64 bytes from .* time=(.*) ms/ => :time  }
  )
end

p = Ping.new
p.goping

while p.running?
  p p.output[:time]
  sleep 1
end

About

Runnable is a gem developed by NoSoloSoftware.

License

Runnable is Copyright 2011 NoSoloSoftware, it is free software.

Runnable is distributed under GPLv3 license. More details can be found at COPYING file.