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
Метод инициализации приложения.
- #init_app_log ⇒ 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 55 56 57 58 59 60 61 |
# 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 |
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) При каждом вызове данного метода все конфиги перечитываются заново.
105 106 107 |
# File 'lib/cli_application/app.rb', line 105 def add_config(filename, type) @config.add(filename, type) end |
#executed_at ⇒ Float
Метод возвращает число секунд в формате Float с момента запуска приложения. В основном используется для показа времени выполнения приложения, но может быть вызван в любой момент из любого места приложения.
122 123 124 |
# File 'lib/cli_application/app.rb', line 122 def executed_at @executed_at = (::Time.now - @started_at).to_f end |
#exename ⇒ String
Метод возвращает имя приложения
112 113 114 |
# File 'lib/cli_application/app.rb', line 112 def exename ::StTools::System.exename end |
#folder(type = :app) ⇒ String
Метод возвращает папку из которой запущено приложение или расположен базовый класс. Базовый класс обычно располагается в фиксированном месте, например, в папке cli корня проекта. Соответственно, если вызвать File.dirname(app.folder(:class)), то можно будет узнать корневую папку проекта
91 92 93 94 |
# 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) ⇒ Object
Метод отображает на экране информацию о приложении (версия, дата последнего запуска, дата релиза, и пр.)
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 |
# 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 ⇒ Object
Метод предназначен для подключения файлов-моделей ActiveRecords. Архитектура CLI-приложения, учитывающая совместимость с Rails-проектами, требует загрузки моделей после чтения файлов конфигурации и, соответственно, иницииации класса приложения. Поэтому объявить require файлов моделей в начале файла не получится, будут выводится ошибки инициализации базы данных.
191 192 193 |
# File 'lib/cli_application/app.rb', line 191 def init_active_records end |
#init_app ⇒ Object
Метод инициализации приложения. Может быть переписан с обязательным вызовом функции super
203 204 205 206 207 208 209 |
# 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 ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 |
# 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 ⇒ Integer
Основной метод, в котором должен быть размещен код приложения
239 240 241 242 |
# File 'lib/cli_application/app.rb', line 239 def main warn "ПРЕДУПРЕЖДЕНИЕ: необходимо переопределить функцию 'main' в вашем коде" 255 end |
#reserved_methods ⇒ Object
280 281 282 283 284 |
# 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 ⇒ Object
При вызове данного метода начнется выполнение кода приложения (будет осуществен вызов функции main)
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
# 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 @cli_stat_record.save self.exitcode end |
#set_argv(action, key, default, description) ⇒ Object
Метод добавления аргумента командной строки. Вызывается при инициализации приложения, служит для определения списка аргументов командной строки, формирвоания подсказок и установки значения по умолчанию. В классе принят не традиционный для Linux формат командной строки. Пример вызова: add_city.rb user_id=123 name=Максим city=‘Верхние Луки’.
Параметры, добавленные данным методом доступны через переменную argv (см. примеры)
233 234 235 |
# File 'lib/cli_application/app.rb', line 233 def set_argv(action, key, default, description) @argv.set_argv(action, key, default, description) end |