Ruby scripting utilities
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This gem is a collection of ruby dependencies which I have found useful for scripting, as well as a few additions to existing classes such as OptionParser.

Tested with RSpec, shoulda and Travis CI.

  • master Build Status
  • develop Build Status


You can install upoj-rb on the command line:

gem install upoj-rb

Or add it to your project's Gemfile:

gem 'upoj-rb'

Then require and use it:

require 'upoj-rb'
puts Upoj::VERSION

Improved Option Parser

Customized version of ruby's OptionParser.


By default, all options that are defined without a block can be retrieved with #funnel.

# define your options
opts =
opts.on('--option'){ # do whatever }
opts.on('-f', '--fubar')
opts.on('-v', '--value VALUE')

# parse
ARGV          #=> [ '--option', '-f', '--value', '43' ]

# retrieve options in funnel by default
opts.funnel   #=> { 'fubar' => true, 'value' => 43 }

The funnel can be given at construction with initial values.

# starting funnel
funnel = { 'foo' => false }

# define your options
opts = :funnel => funnel
opts.on('-f', '--fubar')

# parse
ARGV          #=> [ '--fubar' ]

# retrieve the funnel with initial and new options
opts.funnel   #=> { 'foo' => false, '--fubar' => true }

Structured Banner

A hash can be given for the banner.

banner = {
  :usage => '[OPTION]... ARG1 ARG2',
  :description => 'does stuff with ARG1 and ARG2.'

opts = :banner => banner
opts.on('-f', '--fubar', 'do something awful')

# the generated banner will look like this,
# with USAGE, OPTIONS and my_script in bold

my_script does stuff with ARG1 and ARG2.

  my_script [OPTION]... ARG1 ARG2

  -f, --fubar                      do something awful

Help and Usage

Automatically register -h, --help, -u and --usage switches with #help! and #usage!.

opts =

# you can replace this:
opts.on('-u', '--usage', 'show this help and exit'){ puts opts; exit 0 }

# by this:

Included Dependencies

  • active_support/core_ext/array/extract_options

    Extraction of hash options from the end of an array.

    # extract options args = [ 'a', 'b', { 'c' => 'd', 'e' => 'f' } ] options = args.extract_options! #=> { 'c' => 'd', 'e' => 'f' }

    # returns an empty hash if there are no options args = [ 'a', 'b', 'c' ] options = args.extract_options! #=> {}

    # can be used to easily pass an optional hash to methods def method *args options = args.extract_options! end

  • active_support/core_ext/hash/indifferent_access

    Hash that makes no difference between strings and symbols as keys.

    h = 'a' => 'value a', :b => 'value b' h['a'] #=> 'value a' h[:a] #=> 'value a' h['b'] #=> 'value b' h[:b] #=> 'value b'

  • active_support/core_ext/object/blank

    #blank? and #present? methods to easily check for empty strings, arrays, hashes, etc.

    ''.present? #=> false ''.blank? #=> true [].blank? #=> true {}.blank? #=> true nil.blank? #=> true

  • active_support/core_ext/object/try

    Allows to attempt to call a method on an object and not throw an error if it's nil.

    s = 'FUBAR' s.try :downcase #=> 'fubar' s = nil s.try :downcase #=> nil

  • active_support/core_ext/string/inflections

    Useful string transformations.

    'Module1::Module2::MyClass'.demodulize #=> 'MyClass'

  • paint

    Command-line color output.

    Paint['fubar', :green] Paint['fubar', :bold, :underline]


Copyright (c) 2011 AlphaHydrae. See LICENSE.txt for further details.