class MxxRu::CmdLineOptionProcessor

Singleton for centralized mechanizm of command line options parsing.

Since v.1.4.0

Each part of Mxx_ru which need some command line option must provider special option processor for CmdLineOptionProcessor singleton:

module MxxRu
module SomeLangSupport
  class OptionParser
    include Singleton
    ...
    def prepare( parser ) # Instance of OptionParser from stdlib.
      parser.separator ''
      parser.separator 'Some Language Support options:'

      parser.on( '-i', '--include PATH', 'Set up include path' ) do
        |path|
        ... some processig ...
      end
      ... setting another option handlers ...
    end
  end
end
end

# OptionParser must be added to CmdLineOptionProcessor.
MxxRu::CmdLineOptionProcessor.add_processor(
    MxxRu::SomeLangSupport::OptionParser.instance )

See examples of using this technique in MxxRu::Util::Mode and MxxRu::Cpp::Mode classes.

Public Class Methods

new() click to toggle source
# File lib/mxx_ru/cmd_line_option_processor.rb, line 72
def initialize
  @processors = []
  @parsed = false
end

Public Instance Methods

add_processor( processor ) click to toggle source

Add yet another option processor for processors list.

# File lib/mxx_ru/cmd_line_option_processor.rb, line 78
def add_processor( processor )
  @processors << processor
  @parsed = false
end
parse() click to toggle source

Performs parsing of ARGV content by current processors.

Finishes work of script if –help or –version found in ARGV.

# File lib/mxx_ru/cmd_line_option_processor.rb, line 86
def parse
  unless @parsed
    parser = OptionParser.new do |p|
      prepare_option_parser( p )
    end

    begin
      parser.parse( ARGV )
    rescue => x
      $stderr.puts "command line parsing error '#{x.message}'"
      exit( 2 )
    end

    @parsed = true
  end
end

Protected Instance Methods

prepare_option_parser( parser ) click to toggle source

Calls preparse() method for each processor. And then add common command line options to the parser.

# File lib/mxx_ru/cmd_line_option_processor.rb, line 106
def prepare_option_parser( parser )
  @processors.each do |p| p.prepare( parser ) end

  parser.separator ''
  parser.separator 'Auxilary options:'

  parser.on_tail( '-h', '--help', 'Show usage help and options summary' ) do
    puts parser
    exit
  end

  parser.on_tail( '--version', 'Show version' ) do
    puts 'Mxx_ru v.' + MXX_RU_VERSION
    exit
  end
end