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
Строка-шаблон, вывод которой происходит после завершения работы приложения.
-
#mail ⇒ Object
readonly
Ссылка на класс - почтовик, для отсылки различных email’ов.
-
#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
Основной метод, в котором должен быть размещен код приложения.
- #reserved_methods ⇒ Object
-
#run ⇒ Object
При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main).
-
#set_argv(action, key, default, description) ⇒ Object
Метод добавления аргумента командной строки.
Constructor Details
#initialize(argv, appfolder, classfolder, lang = :ru) ⇒ App
Конструктор экземпляра приложения
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/cli_application/app.rb', line 37 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) @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 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)
Ссылка на класс конфигурации приложения
17 18 19 |
# File 'lib/cli_application/app.rb', line 17 def config @config end |
#databases ⇒ Object (readonly)
Структура, содержащая конфигурации баз данных
27 28 29 |
# File 'lib/cli_application/app.rb', line 27 def databases @databases end |
#description ⇒ Object
Строка - описание приложения
21 22 23 |
# File 'lib/cli_application/app.rb', line 21 def description @description end |
#exitcode ⇒ Object
Код завершения приложения. Может быть использован в Bash-скриптах
11 12 13 |
# File 'lib/cli_application/app.rb', line 11 def exitcode @exitcode end |
#folders ⇒ Object (readonly)
15 16 17 |
# File 'lib/cli_application/app.rb', line 15 def folders @folders end |
#footer ⇒ Object
Строка-шаблон, вывод которой происходит после завершения работы приложения
29 30 31 |
# File 'lib/cli_application/app.rb', line 29 def @footer end |
#mail ⇒ Object (readonly)
Ссылка на класс - почтовик, для отсылки различных email’ов
9 10 11 |
# File 'lib/cli_application/app.rb', line 9 def mail @mail end |
#releasedate ⇒ Object
Строка - дата релиза ПО
25 26 27 |
# File 'lib/cli_application/app.rb', line 25 def releasedate @releasedate end |
#shortdescription ⇒ Object
Строка - краткое описание (назначение) приложения
23 24 25 |
# File 'lib/cli_application/app.rb', line 23 def shortdescription @shortdescription end |
#version ⇒ Object
Строка - версия приложения
19 20 21 |
# File 'lib/cli_application/app.rb', line 19 def version @version end |
Instance Method Details
#add_config(filename, type) ⇒ Nil
Метод загружает конфиг и делает его доступным через единый интерфейс настроек конфигурации приложения (CliApplication::Config) При каждом вызове данного метода все конфиги перечитываются заново.
85 86 87 |
# File 'lib/cli_application/app.rb', line 85 def add_config(filename, type) @config.add(filename, type) end |
#executed_at ⇒ Float
Метод возвращает число секунд в формате Float с момента запуска приложения. В основном используется для показа времени выполнения приложения, но может быть вызван в любой момент из любого места приложения.
102 103 104 |
# File 'lib/cli_application/app.rb', line 102 def executed_at @executed_at = (::Time.now - @started_at).to_f end |
#exename ⇒ String
Метод возвращает имя приложения
92 93 94 |
# File 'lib/cli_application/app.rb', line 92 def exename ::StTools::System.exename end |
#folder(type = :app) ⇒ String
Метод возвращает папку из которой запущено приложение или расположен базовый класс. Базовый класс обычно располагается в фиксированном месте, например, в папке cli корня проекта. Соответственно, если вызвать File.dirname(app.folder(:class)), то можно будет узнать корневую папку проекта
71 72 73 74 |
# File 'lib/cli_application/app.rb', line 71 def folder(type = :app) warn "Предупреждение: тип папки '#{type.inspect}' неизвестен (допустимо #{@folders.keys.inspect})" unless @folders.keys.include?(type) @folders[type] end |
#help(type = :full) ⇒ Object
Метод отображает на экране информацию о приложении (версия, дата последнего запуска, дата релиза, и пр.)
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/cli_application/app.rb', line 236 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 ⇒ Object
Метод предназначен для подключения файлов-моделей ActiveRecords. Архитектура CLI-приложения, учитывающая совместимость с Rails-проектами, требует загрузки моделей после чтения файлов конфигурации и, соответственно, иницииации класса приложения. Поэтому объявить require файлов моделей в начале файла не получится, будут выводится ошибки инициализации базы данных.
171 172 173 |
# File 'lib/cli_application/app.rb', line 171 def init_active_records end |
#init_app ⇒ Object
Метод инициализации приложения. Может быть переписан с обязательным вызовом функции super
183 184 185 186 187 188 189 |
# File 'lib/cli_application/app.rb', line 183 def init_app @cli_stat_record.last_started_at = ::Time.zone.now @started_at = ::Time.now @exitcode = 0 init_active_records end |
#main ⇒ Integer
Основной метод, в котором должен быть размещен код приложения
219 220 221 222 |
# File 'lib/cli_application/app.rb', line 219 def main warn "ПРЕДУПРЕЖДЕНИЕ: необходимо переопределить функцию 'main' в вашем коде" 255 end |
#reserved_methods ⇒ Object
252 253 254 255 256 |
# File 'lib/cli_application/app.rb', line 252 def reserved_methods out = ['argv', 'folders', 'config', 'mail', 'executed_at', 'version', 'description', 'footer', 'databases'] out += ['help', 'run'] out.sort end |
#run ⇒ Object
При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main)
225 226 227 228 229 230 231 |
# File 'lib/cli_application/app.rb', line 225 def run self.exitcode = main || 255 self.executed_at = (::Time.now - @started_at).to_f @cli_stat_record.save self.exitcode end |
#set_argv(action, key, default, description) ⇒ Object
Метод добавления аргумента командной строки. Вызывается при инициализации приложения, служит для определения списка аргументов командной строки, формирвоания подсказок и установки значения по умолчанию. В классе принят не традиционный для Linux формат командной строки. Пример вызова: add_city.rb user_id=123 name=Максим city=‘Верхние Луки’.
Параметры, добавленные данным методом доступны через переменную argv (см. примеры)
213 214 215 |
# File 'lib/cli_application/app.rb', line 213 def set_argv(action, key, default, description) @argv.set_argv(action, key, default, description) end |