class Abot::Info::OptionParser

Класс раширяет возможности стандартного gem'а

Constants

Option

Public Class Methods

instance() { |instance| ... } click to toggle source
# File lib/abot/info/option_parser.rb, line 89
def self.instance
  @instance ||= new

  yield @instance if block_given?

  @instance
end
new() click to toggle source
Calls superclass method
# File lib/abot/info/option_parser.rb, line 18
def initialize
  super
  @options = {}
end

Public Instance Methods

add_env(key, default: nil, required: false) click to toggle source

Обрабатывает переменную среды окружения и регистрирует его в опциях

Указанный ключ в аргументе метода, при поиске переменной среды окружения будет преобразован сл. образом: `:env_key => “ENV_KEY”`

@param key [Symbol]

@param default [Object]

@param required [FalseClass,TrueClass]

# File lib/abot/info/option_parser.rb, line 108
def add_env(key, default: nil, required: false)
  raise Error, 'call after parse' if frozen?

  @options[key] = Option.new(
    :environment,
    environment(key.to_s.upcase) || default,
    required
  )
end
add_option(key, *args, default: nil, required: false) click to toggle source

Добавляет обработчик опций командной строки

@param key [Symbol]

@param args [Array]

@param default [Object]

@param required [FalseClass,TrueClass]

# File lib/abot/info/option_parser.rb, line 128
def add_option(key, *args, default: nil, required: false)
  raise Error, 'call after parse' if frozen?

  @options[key] = Option.new(
    :option,
    default,
    required
  )

  on(*args) { |value| @options[key][:value] = value }
end
final!(args = ARGV) click to toggle source

Выполняет обработку входящих аргументов и читает конфигурационый файл

@return [void]

# File lib/abot/info/option_parser.rb, line 144
def final!(args = ARGV)
  raise Error, 'duplicate call #final!' if frozen?

  parse args
  load @options[:config_file] ? @options[:config_file][:value] : nil
  # заполняет значение до заморозки экземпляра класса
  @banner = "Usage: #{program_name} [options]" if @banner.nil?

  freeze

  show_help!
  show_version!
  validate!
end
options(keys_filter = []) click to toggle source

Возвращает полученные в результате работы парсера опции

@param keys_filter [Array<Symbol>] исключает отсуствующие ключи

@return [Hash]

# File lib/abot/info/option_parser.rb, line 165
def options(keys_filter = [])
  raise Error, 'call before #final!' unless frozen?

  result = @options.each_with_object({}) do |option, acc|
    acc[option[0]] = option[1][:value] unless option[1][:value].nil?
  end

  return result if keys_filter.empty?

  result.select { |k, _| keys_filter.include? k }
end

Protected Instance Methods

add_help_about_envs() click to toggle source
# File lib/abot/info/option_parser.rb, line 25
def add_help_about_envs
  envs = @options.select { |_, option| option[:type] == :environment }

  return if envs.empty?

  separator ''
  separator 'Accessed environments:'
  envs.each do |key, v|
    separator ' ' * 4 + [key.to_s.upcase, v[:value]].join('=')
  end
end
show_help!() click to toggle source
# File lib/abot/info/option_parser.rb, line 37
def show_help!
  show_help = @options.fetch(
    :help,
    Option.new(:option, false, false)
  )

  return unless show_help[:value]

  add_help_about_envs

  print help
  # получение справочной информации
  Process.exit! unless ENV.fetch('RUN_TEST', nil)
end
show_version!() click to toggle source
# File lib/abot/info/option_parser.rb, line 52
def show_version!
  show_version = @options.fetch(
    :version,
    Option.new(:option, false, false)
  )

  return unless show_version[:value]

  puts ver
  # аналогично методу #show_help!
  Process.exit! unless ENV.fetch('RUN_TEST', nil)
end
validate!() click to toggle source
# File lib/abot/info/option_parser.rb, line 65
      def validate!
        required_options = @options.select do |_, option|
          option[:required] && option[:value].nil?
        end

        return if required_options.empty?

        raise Error, <<~ERROR
          Having problems:
          #{
            required_options.map do |key, option|
              case option[:type]
              when :environment
                "- environment '#{key.to_s.upcase}' is required"
              when :option
                "- option '#{key}' is required"
              end
            end.join("\n")
          }
        ERROR
      end