Class: CliApplication::App
- Inherits:
-
Object
- Object
- CliApplication::App
- Defined in:
- lib/cli_application/app.rb
Instance Attribute Summary collapse
-
#argv ⇒ Object
readonly
Ссылка на класс, который содержит аргменты командной строки или значения по умолчанию.
-
#config ⇒ Object
readonly
Ссылка на класс конфигурации приложения.
-
#databases ⇒ Object
readonly
Структура, содержащая конфигурации баз данных.
-
#description ⇒ Object
Строка - описание приложения.
-
#exitcode ⇒ Object
Код завершения приложения.
-
#folders ⇒ Object
readonly
Ссылка на массив, содержащий список директорий в которых исполняется приложение.
-
#footer ⇒ Object
Строка-шаблон, вывод которой происходит после завершения работы приложения.
-
#releasedate ⇒ Object
Строка - дата релиза ПО.
-
#shortdescription ⇒ Object
Строка - краткое описание (назначение) приложения.
-
#version ⇒ Object
Строка - версия приложения.
Instance Method Summary collapse
-
#add_config(filename, type) ⇒ Nil
Метод загружает конфиг и делает его доступным через единый интерфейс настроек конфигурации приложения (CliApplication::Config) При каждом вызове данного метода все конфиги перечитываются заново.
-
#executed_at ⇒ Float
Метод возвращает число секунд в формате Float с момента запуска приложения.
-
#exename ⇒ String
Метод возвращает имя приложения.
-
#folder(type = :app) ⇒ String
Метод возвращает папку из которой запущено приложение или расположен базовый класс.
-
#help(type = :full) ⇒ Object
Метод отображает на экране информацию о приложении (версия, дата последнего запуска, дата релиза, и пр.).
-
#init_active_records ⇒ Object
Метод предназначен для подключения файлов-моделей ActiveRecords.
-
#init_app ⇒ Object
Метод инициализации приложения.
-
#initialize(argv, appfolder, classfolder, lang = :ru) ⇒ App
constructor
Конструктор экземпляра приложения.
-
#main ⇒ Integer
Основной метод, в котором должен быть размещен код приложения.
-
#run ⇒ Object
При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main).
-
#set_argv(action, key, default, description) ⇒ Object
Метод добавления аргумента командной строки.
Constructor Details
#initialize(argv, appfolder, classfolder, lang = :ru) ⇒ App
Конструктор экземпляра приложения
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/cli_application/app.rb', line 35 def initialize(argv, appfolder, classfolder, lang = :ru) ::StTools::Setup.setup(lang) @folders = Hash.new @folders[:app] = appfolder @folders[:class] = classfolder @argv = ::CliApplication::Argv.new(argv) @stat = ::CliApplication::Stat.new(@folders) @config = ::CliApplication::Config.new(@folders) @databases = ::CliApplication::Databases.new(config.cli.databases) = nil init_app end |
Instance Attribute Details
#argv ⇒ Object (readonly)
Ссылка на класс, который содержит аргменты командной строки или значения по умолчанию
7 8 9 |
# File 'lib/cli_application/app.rb', line 7 def argv @argv end |
#config ⇒ Object (readonly)
Ссылка на класс конфигурации приложения
15 16 17 |
# File 'lib/cli_application/app.rb', line 15 def config @config end |
#databases ⇒ Object (readonly)
Структура, содержащая конфигурации баз данных
25 26 27 |
# File 'lib/cli_application/app.rb', line 25 def databases @databases end |
#description ⇒ Object
Строка - описание приложения
19 20 21 |
# File 'lib/cli_application/app.rb', line 19 def description @description end |
#exitcode ⇒ Object
Код завершения приложения. Может быть использован в Bash-скриптах
9 10 11 |
# File 'lib/cli_application/app.rb', line 9 def exitcode @exitcode end |
#folders ⇒ Object (readonly)
13 14 15 |
# File 'lib/cli_application/app.rb', line 13 def folders @folders end |
#footer ⇒ Object
Строка-шаблон, вывод которой происходит после завершения работы приложения
27 28 29 |
# File 'lib/cli_application/app.rb', line 27 def end |
#releasedate ⇒ Object
Строка - дата релиза ПО
23 24 25 |
# File 'lib/cli_application/app.rb', line 23 def releasedate @releasedate end |
#shortdescription ⇒ Object
Строка - краткое описание (назначение) приложения
21 22 23 |
# File 'lib/cli_application/app.rb', line 21 def shortdescription @shortdescription end |
#version ⇒ Object
Строка - версия приложения
17 18 19 |
# File 'lib/cli_application/app.rb', line 17 def version @version end |
Instance Method Details
#add_config(filename, type) ⇒ Nil
Метод загружает конфиг и делает его доступным через единый интерфейс настроек конфигурации приложения (CliApplication::Config) При каждом вызове данного метода все конфиги перечитываются заново.
82 83 84 |
# File 'lib/cli_application/app.rb', line 82 def add_config(filename, type) @config.add(filename, type) end |
#executed_at ⇒ Float
Метод возвращает число секунд в формате Float с момента запуска приложения. В основном используется для показа времени выполнения приложения, но может быть вызван в любой момент из любого места приложения.
99 100 101 |
# File 'lib/cli_application/app.rb', line 99 def executed_at @executed_at = (::Time.now - @started_at).to_f end |
#exename ⇒ String
Метод возвращает имя приложения
89 90 91 |
# File 'lib/cli_application/app.rb', line 89 def exename ::StTools::System.exename end |
#folder(type = :app) ⇒ String
Метод возвращает папку из которой запущено приложение или расположен базовый класс. Базовый класс обычно располагается в фиксированном месте, например, в папке cli корня проекта. Соответственно, если вызвать File.dirname(app.folder(:class)), то можно будет узнать корневую папку проекта
68 69 70 71 |
# File 'lib/cli_application/app.rb', line 68 def folder(type = :app) warn "Предупреждение: тип папки '#{type.inspect}' неизвестен (допустимо #{@folders.keys.inspect})" unless @folders.keys.include?(type) @folders[type] end |
#help(type = :full) ⇒ Object
Метод отображает на экране информацию о приложении (версия, дата последнего запуска, дата релиза, и пр.)
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/cli_application/app.rb', line 232 def help(type = :full) last_started_at_human = @stat.last_started_at_human puts ::StTools::System.exename + ' - ' + @shortdescription puts "Версия #{@version} (#{@releasedate})" puts last_started_at_human puts @stat.startes_human puts puts @description if type == :full @argv.help puts end end |
#init_active_records ⇒ Object
Метод предназначен для подключения файлов-моделей ActiveRecords. Архитектура CLI-приложения, учитывающая совместимость с Rails-проектами, требует загрузки моделей после чтения файлов конфигурации и, соответственно, иницииации класса приложения. Поэтому объявить require файлов моделей в начале файла не получится, будут выводится ошибки инициализации базы данных.
168 169 170 |
# File 'lib/cli_application/app.rb', line 168 def init_active_records end |
#init_app ⇒ Object
Метод инициализации приложения. Может быть переписан с обязательным вызовом функции super
180 181 182 183 184 185 186 |
# File 'lib/cli_application/app.rb', line 180 def init_app @stat.last_started_at = ::Time.zone.now @started_at = ::Time.now @exitcode = 0 init_active_records end |
#main ⇒ Integer
Основной метод, в котором должен быть размещен код приложения
216 217 218 219 |
# File 'lib/cli_application/app.rb', line 216 def main warn "ПРЕДУПРЕЖДЕНИЕ: необходимо переопределить функцию 'main' в вашем коде" 255 end |
#run ⇒ Object
При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main)
222 223 224 225 226 227 |
# File 'lib/cli_application/app.rb', line 222 def run self.exitcode = main || 255 self.executed_at = (::Time.now - @started_at).to_f @stat.save end |
#set_argv(action, key, default, description) ⇒ Object
Метод добавления аргумента командной строки. Вызывается при инициализации приложения, служит для определения списка аргументов командной строки, формирвоания подсказок и установки значения по умолчанию. В классе принят не традиционный для Linux формат командной строки. Пример вызова: add_city.rb user_id=123 name=Максим city=‘Верхние Луки’.
Параметры, добавленные данным методом доступны через переменную argv (см. примеры)
210 211 212 |
# File 'lib/cli_application/app.rb', line 210 def set_argv(action, key, default, description) @argv.set_argv(action, key, default, description) end |