upoj-rb

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.

Using

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.

Funnel

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

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

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

# 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 = Upoj::Opts.new
opts.on('-f', '--fubar')

# parse
ARGV          #=> [ '--fubar' ]
opts.parse!

# 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 = Upoj::Opts.new :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.

USAGE
  my_script [OPTION]... ARG1 ARG2

OPTIONS
  -f, --fubar                      do something awful

Help and Usage

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

opts = Upoj::Opts.new

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

# by this:
opts.usage!

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 = HashWithIndifferentAccess.new '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.