class SettingsParser

One job, recieves String command line settings, parses them and returns OpenStruct structured settings.

Public Class Methods

parse(argv) click to toggle source
# File lib/oro/settings_parser.rb, line 6
def self.parse(argv) # Ie: an ARGV-style array of the clio
  settings = OpenStruct.new(:plan => [], :config => {}, :actions => {})

  clio_parser = OptionParser.new do |clio_parser_config|
    clio_parser_config.program_name = 'Oro'
    clio_parser_config.release = 'Command Line Version'
    clio_parser_config.version = %w(1 0 7)
    clio_parser_config.banner = 'Usage: oro [settings]'
    clio_parser_config.separator ''

    # Parts
    clio_parser_config.separator 'Part settings (all lengths optional)'
    clio_parser_config.separator 'INSTALLED_PARTS_HELP'

    # Config
    clio_parser_config.separator ''
    clio_parser_config.separator 'Config settings'

    clio_parser_config.on('-iMANDATORY', '--iterations=MANDATORY', Integer, 'The number of passwords to generate') do |val|
      settings.config[:iterations] = val
    end

    clio_parser_config.on('-c', '--[no-]capitalize', 'Capitalize every word part') do |val|
      settings.config[:capitalize] = val
    end

    clio_parser_config.on('-r', '--[no-]capitalize-random', 'Randomly capitalize one letter in every word part') do |val|
      settings.config[:capitalize_random] = val
    end

    clio_parser_config.on('-l', '--[no-]l33t', 'Make one l33t-style replacement per word part') do |val|
      settings.config[:l33t] = val
    end

    clio_parser_config.on('-s', '--[no-]shuffle', 'Randomize map parts') do |val|
      settings.config[:shuffle] = val
    end

    clio_parser_config.on('-f', '--format=MANDATORY', %w(json yml yaml string), 'Results format: string, json, yaml') do |val|
      settings.config[:format] = val
    end

    clio_parser_config.on('-e', '--separator[=OPTIONAL]', 'Separator characters') do |val|
      settings.config[:separator] = eval("val=\"#{val}\"") # FIXME: The horror, but how else to take \n as an option and retain it's control nature?  The eval should be removed.
    end

    # Actions
    clio_parser_config.separator ''
    clio_parser_config.separator 'Action settings'
    clio_parser_config.on('--lists', 'Show all available lists') do |val|
      settings.actions[:lists] = val
    end

    clio_parser_config.on('--prefs', '--preferences', 'Show your current preferences') do |val|
      settings.actions[:preferences] = val
    end

    clio_parser_config.on('--defaults', 'Show system defaults') do |val|
      settings.actions[:defaults] = val
    end

    clio_parser_config.on('--set', 'Set passed settings as your preferences') do |val|
      settings.actions[:set] = val
    end

    clio_parser_config.on('--reset', 'Reset your preferences to system defaults') do |val|
      settings.actions[:reset] = val
    end

    clio_parser_config.on('-v', '--verbose', 'Provide verbose feedback, dictionary metadata, and statistics when run') do |val|
      settings.actions[:verbose] = val
    end

    clio_parser_config.on('-h', '--help', 'Print this dialog') do
      settings.actions[:help] = clio_parser_config.to_s
    end

    clio_parser_config.on('--version', 'Show version') do
      settings.actions[:version] = clio_parser_config.ver
    end

    # Examples
    clio_parser_config.separator ''
    clio_parser_config.separator 'Examples'
    clio_parser_config.separator '    oro e9 p1 n3 -s --set'
    clio_parser_config.separator '    oro n4 -e"-" -i4'
    clio_parser_config.separator '    oro n99 -i10'
    clio_parser_config.separator '    oro e10 n5 -fjson'

    clio_parser_config.separator ''
    clio_parser_config.separator 'See dictionary source files for associated licence attributions.'
    clio_parser_config.separator ''
  end # end clio_parser

  argv = argv.is_a?(Array) ? argv : argv.split
  clio_parser.parse!(argv)

  settings
end