Class: Abot::Info::OptionParser

Inherits:
OptionParser
  • Object
show all
Defined in:
lib/abot/info/option_parser.rb

Overview

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

Defined Under Namespace

Classes: Error, Option

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.instance {|@instance| ... } ⇒ Object

Yields:



89
90
91
92
93
94
95
# File 'lib/abot/info/option_parser.rb', line 89

def self.instance
  @instance ||= new

  yield @instance if block_given?

  @instance
end

Instance Method Details

#add_env(key, default: nil, required: false) ⇒ Object

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

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

Parameters:

  • key (Symbol)
  • default (Object) (defaults to: nil)
  • required (FalseClass, TrueClass) (defaults to: false)

Raises:



108
109
110
111
112
113
114
115
116
# 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) ⇒ Object

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

Parameters:

  • key (Symbol)
  • args (Array)
  • default (Object) (defaults to: nil)
  • required (FalseClass, TrueClass) (defaults to: false)

Raises:



128
129
130
131
132
133
134
135
136
137
138
# 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) ⇒ void

This method returns an undefined value.

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

Raises:



144
145
146
147
148
149
150
151
152
153
154
155
156
157
# 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 = []) ⇒ Hash

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

Parameters:

  • keys_filter (Array<Symbol>) (defaults to: [])

    исключает отсуствующие ключи

Returns:

  • (Hash)

Raises:



165
166
167
168
169
170
171
172
173
174
175
# 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