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
# 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('=')
      @params[pair.first.to_s.strip.downcase.to_sym] = pair.last
    else
      warn "WARNING: некорректный ключ параметра командной строки: #{one.inspect} (#{File.basename(__FILE__)} at #{__LINE__})"
    end
  end
  super(@params)
end

Instance Method Details

#helpObject

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



86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/cli_application/argv.rb', line 86

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

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

  @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)

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



49
50
51
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
# File 'lib/cli_application/argv.rb', line 49

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