class BBLib::OptsParser::Option

Public Class Methods

types() click to toggle source
# File lib/bblib/cli/option.rb, line 26
def self.types
  descendants.flat_map(&:type)
end

Public Instance Methods

flag_match?(str, index = 0) click to toggle source
# File lib/bblib/cli/option.rb, line 63
def flag_match?(str, index = 0)
  text_match = if flags.empty? && position
    true
  elsif argument_delimiter == ' '
    if !str.include?(' ') && str =~ /^\-[^\-]/
      flags.any? do |flag|
        flag =~ /^\-[\w\d]/ && str.include?(flag[1])
      end
    else
      flags.include?(str)
    end
  else
    flags.any? do |flag|
      flag.start_with?("#{str}#{argument_delimiter}")
    end
  end
  return text_match unless text_match && position
  position === index
end
multi_value?() click to toggle source
# File lib/bblib/cli/option.rb, line 59
def multi_value?
  !singular || delimiter
end
retrieve(args, parsed) click to toggle source
# File lib/bblib/cli/option.rb, line 30
def retrieve(args, parsed)
  result = multi_value? ? [] : nil
  index = 0
  until index >= args.size
    begin
      if args[index].nil? || !flag_match?(args[index].to_s, index)
        index += 1
        next
      end
      values = split(extract(index, args))
      values.each do |value|
        valid!(value)
        if multi_value?
          result << value
        else
          result = value
        end
        index = args.size if singular?
      end
    rescue OptsParserException => e
      raise e if raise_errors?
    end
    index += 1
  end
  raise MissingArgumentException, "A required argument is missing: #{name}" if required? && result.nil?
  result = processor.call(result) if !result.nil? && processor
  process_result(result.nil? ? default : result, args, parsed)
end
split(value) click to toggle source
# File lib/bblib/cli/option.rb, line 94
def split(value)
  return [value] unless delimiter
  value.msplit(delimiter)
end
to_s() click to toggle source
# File lib/bblib/cli/option.rb, line 22
def to_s
  (flags.sort_by(&:size).join(', ') + " #{placeholder}").strip.ljust(40, ' ') + "\t#{description}"
end
valid!(value) click to toggle source
# File lib/bblib/cli/option.rb, line 90
def valid!(value)
  raise InvalidArgumentException, "Invalid argument for #{name}" unless valid?(value)
end
valid?(value) click to toggle source
# File lib/bblib/cli/option.rb, line 83
def valid?(value)
  return true if validators.empty?
  validators.all? do |validator|
    validator.call(value)
  end
end

Protected Instance Methods

determine_name() click to toggle source
# File lib/bblib/cli/option.rb, line 101
def determine_name
  flag = flags.find { |f| f.start_with?('--') }
  flag = flags.first unless flag
  flag.to_s.sub(/^-{1,2}/, '').snake_case
end
process_result(result, args, parsed) click to toggle source
# File lib/bblib/cli/option.rb, line 107
def process_result(result, args, parsed)
  parsed.deep_merge!(name => result)
  if sub_commands && sub_commands[result]
    parsed.deep_merge!(sub_commands[result].parse!(args))
  end
end