class CliApplication::App

Attributes

argv[R]

Ссылка на класс, который содержит аргменты командной строки или значения по умолчанию

config[R]

Ссылка на класс конфигурации приложения

databases[R]

Структура, содержащая конфигурации баз данных

description[R]

Строка - описание приложения

exitcode[R]

Код завершения приложения. Может быть использован в Bash-скриптах

folders[R]

Ссылка на массив, содержащий список директорий в которых исполняется приложение. Основные: folders - папка из которой запущено приложение, folders - папка, в которой хранится базовый класс проекта.

mail[R]

Ссылка на класс - почтовик, для отсылки различных email'ов

releasedate[R]

Строка - дата релиза ПО

shortdescription[R]

Строка - краткое описание (назначение) приложения

version[R]

Строка - версия приложения

Public Class Methods

new(argv, appfolder, classfolder, lang = :ru) click to toggle source

Конструктор экземпляра приложения

@param [Array] argv аргументы командной строки @param [String] appfolder директория, из которой запущено приложение @param [String] classfolder директория, в которой расположен базовый класс проекта @param [Sym] lang язык работы приложения (реализовано не полностью)

# File lib/cli_application/app.rb, line 37
def initialize(argv, appfolder, classfolder, lang = :ru)
  # ru: Настраиваем локализацию приложения
  # en: setup a localization
  StTools.configure { |config| config.locale = lang }
  I18n.load_path += Dir[File.join(__dir__, 'locales', '*.{rb,yml}')]
  I18n.available_locales = [:ru]
  I18n.default_locale = lang
  I18n.backend.load_translations

  @folders = Hash.new
  @folders[:app] = appfolder
  @folders[:class] = classfolder

  @argv = ::CliApplication::Argv.new(argv)
  @cli_stat_record = ::CliApplication::Stat.new(@folders)
  @config = ::CliApplication::Config.new(@folders)

  @databases = ::CliApplication::Databases.new(config.cli.databases)
  @mail = ::CliApplication::Mail.new(config.cli.mail, @folders)

  @footer = nil

  init_app_log
  init_app
end

Public Instance Methods

add_config(filename, type) click to toggle source

Метод загружает конфиг и делает его доступным через единый интерфейс настроек конфигурации приложения (CliApplication::Config) При каждом вызове данного метода все конфиги перечитываются заново.

@param [Sym] type параметр используется для указания местоположения конфига. Если указано :app или :class,

то имя файла с конфигом будет дополнено папкой класса или приложения

@option type [Sym] :app папка, из которой запущено приложение @option type [Sym] :class папка, в которой хранится базовый класс @option type [Sym] :absolute указывает на необходимость брать имя файла как задано разработчиком @return [Nil] нет

# File lib/cli_application/app.rb, line 105
def add_config(filename, type)
  @config.add(filename, type)
end
description=(val) click to toggle source

Метод устанавливает описание приложения, которое будет выведено при старте скрипта. Данный метод используется для формирования подсказок пользователю.

@param [String] val строка с описанием приложения @example Примеры использования

app = CliApplication.new(ARGV, __dir__)
app.description = 'Данное приложение обеспечивает.... (c) .... и т.д.'
# File lib/cli_application/app.rb, line 152
def description=(val)
  @description = val
  @cli_stat_record.description = val
end
executed_at() click to toggle source

Метод возвращает число секунд в формате Float с момента запуска приложения. В основном используется для показа времени выполнения приложения, но может быть вызван в любой момент из любого места приложения.

@return [Float] число секунд с момента запуска приложения @example Примеры использования

puts "С момента запуска прошло #{executed_at} сек."     #=> "С момента запуска прошло 23.456435 сек."
# File lib/cli_application/app.rb, line 122
def executed_at
  @executed_at = (::Time.now - @started_at).to_f
end
exename() click to toggle source

Метод возвращает имя приложения

@return [String] имя приложения без параметров командной строки и пути

# File lib/cli_application/app.rb, line 112
def exename
  ::StTools::System.exename
end
exitcode=(code) click to toggle source

Метод устанавливает код, с которым будет завершена работа приложения.

@param [Integer] code код завершения приложения, который будет передан в операционную систему (bash)

# File lib/cli_application/app.rb, line 129
def exitcode=(code)
  @exitcode = code
  @cli_stat_record.exitcode = code
end
folder(type = :app) click to toggle source

Метод возвращает папку из которой запущено приложение или расположен базовый класс. Базовый класс обычно располагается в фиксированном месте, например, в папке cli корня проекта. Соответственно, если вызвать File.dirname(app.folder(:class)), то можно будет узнать корневую папку проекта

@param [Sym] type тип возвращаемой папки @option type [Sym] :app папка, из которой запущено приложение (по умолчанию) @option type [Sym] :class папка, в которой хранится базовый класс @option type [Sym] :stat папка, в которой хранится статистика по приложению @return [String] папка, из которой запущено приложение или расположен базовый класс

# File lib/cli_application/app.rb, line 91
def folder(type = :app)
  warn "Предупреждение: тип папки '#{type.inspect}' неизвестен (допустимо #{@folders.keys.inspect})" unless @folders.keys.include?(type)
  @folders[type]
end
help(type = :full) click to toggle source

Метод отображает на экране информацию о приложении (версия, дата последнего запуска, дата релиза, и пр.) @param [Syn] type при указании :full выводится полное описание, при других значениях не выводится

подсказка по аргументам командной строки
# File lib/cli_application/app.rb, line 264
def help(type = :full)
  last_started_at_human = @cli_stat_record.last_started_at_human

  puts ::StTools::System.exename + ' - ' + @shortdescription
  puts "Версия #{@version} (#{@releasedate})"
  puts last_started_at_human
  puts @cli_stat_record.startes_human
  puts
  puts @description

  if type == :full
    @argv.help
    puts
  end
end
init_active_records() click to toggle source

Метод предназначен для подключения файлов-моделей ActiveRecords. Архитектура CLI-приложения, учитывающая совместимость с Rails-проектами, требует загрузки моделей после чтения файлов конфигурации и, соответственно, иницииации класса приложения. Поэтому объявить require файлов моделей в начале файла не получится, будут выводится ошибки инициализации базы данных.

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

def init_active_records
  require 'offers.rb'
  require 'params.rb'
  require 'categories.rb'
end
# File lib/cli_application/app.rb, line 191
def init_active_records

end
init_app() click to toggle source

Метод инициализации приложения. Может быть переписан с обязательным вызовом функции super

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

def init_app
  super

  # Код своего приложения
end
# File lib/cli_application/app.rb, line 203
def init_app
  @cli_stat_record.last_started_at = ::Time.zone.now
  @started_at = ::Time.now
  @exitcode = 0

  init_active_records
end
init_app_log() click to toggle source
# File lib/cli_application/app.rb, line 63
def init_app_log
  log_config = ::CliApplication::Log::Config.new(@config)
  case log_config.type
    when :none
      @cli_log = ::CliApplication::Log::None.new
    when :file
      @cli_log = ::CliApplication::Log::File.new(self, log_config, @folders[:class])
    else
      raise I18n.t('error.config.log_unknown', type: log_config.type.to_s.inspect)
  end
  @cli_log.save_app_start_information
end
main() click to toggle source

Основной метод, в котором должен быть размещен код приложения @return [Integer] метод должен возвращать код, который будет транслирован в параметр exitcode

# File lib/cli_application/app.rb, line 239
def main
  warn "ПРЕДУПРЕЖДЕНИЕ: необходимо переопределить функцию 'main' в вашем коде"
  255
end
releasedate=(val) click to toggle source

Метод устанавливает дату последнего изменения (выпуска) приложения. Используется в справочных целях

@param [String] val строка датой релиза (выпуска) приложения @example Примеры использования

app = CliApplication.new(ARGV, __dir__)
app.releasedate = '2015-05-11'
# File lib/cli_application/app.rb, line 175
def releasedate=(val)
  @releasedate = val
  @cli_stat_record.releasedate = val
end
reserved_methods() click to toggle source
# File lib/cli_application/app.rb, line 280
def reserved_methods
  out = ['argv', 'folders', 'config', 'mail', 'executed_at', 'version', 'description', 'footer', 'databases']
  out += ['help', 'run']
  out.sort
end
run() click to toggle source

При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main)

# File lib/cli_application/app.rb, line 245
def run
  @cli_log.save_app_run_information
  begin
    self.exitcode = main || 255
  rescue Exception => e
    @cli_log.set_exception(e)
    raise e
  ensure
    self.executed_at = (::Time.now - @started_at).to_f
    @cli_log.save_app_finish_information
  end
  puts_footer
  @cli_stat_record.save
  self.exitcode
end
set_argv(action, key, default, description) click to toggle source

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

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

@param [Sym] action параметр определяет действие, которое надо произвести над параметром командной строки. @param [String] key название ключа, напрмиер 'user_id', 'name', 'city'. @param [Object] default значение по умочланию, “подставляемое” при отсутствии заданного пользователем параметра @param [String] description описание параметра (подсказка)

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

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
# File lib/cli_application/app.rb, line 233
def set_argv(action, key, default, description)
  @argv.set_argv(action, key, default, description)
end
shortdescription=(val) click to toggle source

Метод устанавливает краткое описание приложения, которое будет выведено при старте скрипта, а также отображено в файле статистики.

@param [String] val строка с кратким описанием приложения @example Примеры использования

app = CliApplication.new(ARGV, __dir__)
app.shortdescription = 'Утилита форматирования диска'
# File lib/cli_application/app.rb, line 164
def shortdescription=(val)
  @shortdescription = val
  @cli_stat_record.shortdescription = val
end
version=(val) click to toggle source

Метод устанавливает текущую версию приложения, которая потом отобразится в файле статистики

@param [Integer] val строка с версией приложения @example Примеры использования

app = CliApplication.new(ARGV, __dir__)
app.version = '2.1'
# File lib/cli_application/app.rb, line 140
def version=(val)
  @version = val
  @cli_stat_record.version = val
end

Private Instance Methods

executed_at=(at) click to toggle source
# File lib/cli_application/app.rb, line 299
def executed_at=(at)
  @executed_at = at
  @cli_stat_record.executed_at = at
end