class Utils::CommandParser

Similar to Ruby's OptionParser However, this is customized for angular_init

Attributes

args[R]
banner[RW]
name[RW]
separator[RW]
version[RW]

Public Class Methods

new() { |self| ... } click to toggle source
# File lib/ngi/utils/command_parser.rb, line 26
def initialize
  # TODO: to "Usage #{file_name}", etc.
  @name = '<CLI>'
  @banner = "Usage: #{@name} <command>"
  @version = '0.0.0'
  @separator = '===================='
  @listeners = []

  # automatically register some listeners
  register_help
  register_version

  # be able to pass in a block for setup
  yield(self) if block_given?
end

Public Instance Methods

name=(name) click to toggle source
# File lib/ngi/utils/command_parser.rb, line 42
def name=(name)
  # need to also replace the name in the banner
  @banner = @banner.gsub(@name, name)

  @name = name
end
on(options, description = '', &block) click to toggle source

register the listeners

# File lib/ngi/utils/command_parser.rb, line 50
def on(options, description = '', &block)
  listener = {}

  # be able to pass in a single argument, or an array of arguments
  options = *options unless options.is_a? Array

  listener[:options] = options.map do |opt|
    opt.strip.split(' ')
  end

  listener[:block] = block
  listener[:description] = description

  @listeners << listener
end
parse(args) click to toggle source
# File lib/ngi/utils/command_parser.rb, line 66
def parse(args)
  # puts @listeners
  matched_listener = {
    options: nil,
    block: nil
  }

  @listeners.each do |listener|
    listener[:options].each do |opt_arr|
      if opt_arr == args
        matched_listener[:options] = opt_arr
        matched_listener[:block] = listener[:block]
        break
      end
    end
  end

  if !matched_listener[:options].nil?
    # matched_listener[:options] should always be an array
    # when we call, we can each member of that array to be
    # passed separately
    matched_listener[:block].call(*matched_listener[:options])
  else
    # if there was no match, show the help menu
    parse(['-h'])
  end
end
register_help() click to toggle source
# File lib/ngi/utils/command_parser.rb, line 94
def register_help
  # automaticaly register this listener
  on(['-h', '--help'], 'Show the help menu') do
    Output.new(@separator).to_s
    Output.new(@banner).to_s

    @listeners.each_with_index do |listener, i|
      desc = "\n" << "(#{i + 1}) #{listener[:description]}: "
      desc << "#{listener[:options].join(', ')}"
      Output.new(desc).to_s
    end
    Output.new(@separator).to_s
  end
end
register_version() click to toggle source
# File lib/ngi/utils/command_parser.rb, line 109
def register_version
  # automaticaly register this listener
  on(['-v', '--version'], 'Show the version') do
    Output.new("#{@name} #{@version}").to_s
  end
end