Class: CliApplication::Argv

Inherits:
OpenStruct
  • Object
show all
Defined in:
lib/cli_application/argv.rb

Instance Method Summary collapse

Constructor Details

#initialize(argv) ⇒ Argv

Конструктор. Вызывается при создании класса приложения. Данный класс доступен в главной функции приложения (main) через переменную argv

Examples:

Примеры использования

puts argv.city    #=> 'Москва'

Parameters:

  • argv (Array)

    аргументы командной строки, введенные пользователем



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/cli_application/argv.rb', line 12

def initialize(argv)
  @params = Hash.new
  @full = Hash.new

  argv.each do |one|
    if one.match(/[a-z\_0-9]\=/i)
      pair = one.split('=')
      # UPDATE 2015-10-26 - при указании пустого параметра при запуске скрипта
      # он становился равным самому себе, поскольку split строки вида "param="
      # возвращал pair.first равное pair.last
      @params[pair.first.to_s.strip.downcase.to_sym] = pair.last if pair.count > 1
    else
      warn "WARNING: некорректный ключ параметра командной строки: #{one.inspect} (#{File.basename(__FILE__)} at #{__LINE__})"
    end
  end
  super(@params)
end

Instance Method Details

#helpObject

Метод выводит подсказку по аргументам командной строки



89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/cli_application/argv.rb', line 89

def help
  return if @full.empty?

  puts
  puts "Параметры приложения:"

  screenwidth = ::StTools::System.screen(:width)

  @full.each do |key, data|
    line = get_helpline(key, data[:description], keylen, screenwidth)
    line.each { |x| puts x }
  end
  puts
end

#set_argv(action, key, default, description) ⇒ Object

Метод добавления аргумента командной строки. Вызывается при инициализации приложения, служит для определения списка аргументов командной строки, формирвоания подсказок и установки значения по умолчанию. В классе принят не традиционный для Linux формат командной строки. Пример вызова: add_city.rb user_id=123 name=Максим city=‘Верхние Луки’.

Параметры, добавленные данным методом доступны через переменную argv (см. примеры)

Examples:

Примеры использования

app = CliApplication.new(ARGV, __dir__)
app.set_argv(:integer, 'user_id', 0, 'Идентификатор пользователя')
app.set_argv(:string, 'name', 'Без имени', 'Имя пользователя')
app.set_argv(:caps, 'city', 'москВА', 'Город проживания пользователя')

def main
  puts argv.user_id      #=> 0
  puts argv.name         #=> 'Без имени'
  puts argv.city         #=> 'Москва'
end

Parameters:

  • action (Sym)

    параметр определяет действие, которое надо произвести над параметром командной строки.

  • key (String)

    название ключа, напрмиер ‘user_id’, ‘name’, ‘city’.

  • default (Object)

    значение по умочланию, “подставляемое” при отсутствии заданного пользователем параметра

  • description (String)

    описание параметра (подсказка)



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/cli_application/argv.rb', line 52

def set_argv(action, key, default, description)
  key = key.downcase.strip.to_sym
  unless @params.keys.include?(key)
    @params[key] = default
  end

  case action
    when :bool, :boolean
      @params[key] = @params[key].to_s.to_bool
    when :split
      @params[key] = ::StTools::String.split(@params[key].to_s, ',', sort: true)
    when :range
      @params[key] = @params[key].to_s.to_range(sort: true, uniq: true)
    when :range_no_uniq
      @params[key] = @params[key].to_s.to_range(sort: true)
    when :float
      @params[key] = @params[key].to_s.strip.to_f
    when :integer
      @params[key] = @params[key].to_s.strip.to_i
    when :downcase
      @params[key] = @params[key].to_s.downcase
    when :upcase
      @params[key] = @params[key].to_s.upcase
    when :normalize
      @params[key] = @params[key].to_s.normalize
    when :caps
      @params[key] = @params[key].to_s.caps
    when :string
      @params[key] = @params[key].to_s
    else
  end

  convert_from_hash
  set_full(action, key, default, @params[key], description)
end