2017 © Pedro Peláez
 

composer-plugin rollun-installer

Installer

image

rollun-com/rollun-installer

Installer

  • Tuesday, May 22, 2018
  • by Andrey Zaboychenko
  • Repository
  • 3 Watchers
  • 1 Stars
  • 619 Installations
  • PHP
  • 9 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 65 Versions
  • 15 % Grown

The README.md

rollun-installer


Оглавление


Документация rollun-installer

Библиотека install позволяет произвести настройку окружение для вашей библиотеки или приложения., (*1)

Вы должны создать реализации интерфейса InstallerInterface в которых и будет описана процедура настройки окружения. Данные реализации обязаны содержать в себе суфикс Installer., (*2)

Так же существует InstallerAbstract абстрактная реализация интерфейса. При ее использоваии вам нужно реализовать обязательные метды install, uninstall, isInstall, getDescription. * install - Установить данный инсталлер, и вернет конфиг который нужно добавить для работы данного инсталлера. * uninstall - Удалить все созданное инсталятором. * isInstall - Возвращяет true в случае если данный инсталлер был установлен, и false в ином случае. * getDescription - Выводит на консоль описание данного инсталлера. Есть еще перечень дополнительные методов: * isDefaultOn - Возвращает true в случае если данный инсталлер рекомендован к установке. * getDependencyInstallers - Возвращает список зависимых инсталлеров для данного инсталлера., (*3)

Инсталлера из данного списка будут запущены раньше основного инсталлера., (*4)

При запуске инсталяции, будут найдены все подобные инсталлеры в порядке сверху вниз., (*5)

Учитывайте это при напсании своих инсталлеров если вам важен порядок их вызова., (*6)

Данная библиотека позволяет настраивать окружение для зависимых библиотек., (*7)

Сначало будут обрабатыватся инсталлеры зависимых библиотек, а в конце ваши., (*8)

Вызов инсталяции в рантайме.

Так же иснталлер имеет возможность во время своей работы, вызвать установку другого иснталлера. Для этого используйте метод InstallerAbstract::callInstaller($installerName), передав ему в парметры, имя желаемого инсталлера., (*9)

В качестве имени инсталлера используеться его className, то есть для инсталлера ExampleOneInstaller className - rollun\installer\Example\ExampleOneInstaller::class., (*10)

Даный метод вернет массив-конфиг сгенерированый вызываемым инсталлером, либо пустой массив, в случае если инсталлер уже был установлен ранее., (*11)

Пример

Пример инсталлера который создает требуемый для приложения файл, (*12)

uninstall();
            $this->install();
        }
        /**
         * Clean all installation
         * @return void
         */
        public function uninstall()
        {
            if (constant('APP_ENV') !== 'dev') {
                $this->consoleIO->write('constant("APP_ENV") !== "dev" It has did nothing');
            } else {
                $publicDir = Command::getDataDir();
                if (file_exists($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE)) {
                    unlink($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE);
                }
                if (is_dir($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR)) {
                    rmdir($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR);
                }
            }
        }
        /**
         * install
         * @return array
         */
        public function install()
        {
            if (constant('APP_ENV') !== 'dev') {
                $this->consoleIO->write('constant("APP_ENV") !== "dev" It has did nothing');
            } else {
                $dir = Command::getDataDir() . DIRECTORY_SEPARATOR . self::LOGS_DIR;
                if (!is_dir($dir)) {
                    mkdir($dir, 0777, true);
                }
                $file = $dir . DIRECTORY_SEPARATOR . self::LOGS_FILE;
                fopen($file, "w");
                file_put_contents($file, "id;level;message\n");
                return [
                    'dependencies' => [
                        'factories' => [
                            FileLogWriter::class => FileLogWriterFactory::class,
                            Logger::class => LoggerFactory::class,
                        ],
                        'aliases' => [
                            LogWriterInterface::DEFAULT_LOG_WRITER_SERVICE => FileLogWriter::class,
                            Logger::DEFAULT_LOGGER_SERVICE => Logger::class,
                        ],
                        'delegators' => [
                            ErrorHandler::class => [
                                LoggingErrorListenerDelegatorFactory::class
                            ]
                        ]
                    ]
                ];
            }
        }
        public function isInstall()
        {
            $publicDir = Command::getDataDir();
            $result = file_exists($publicDir . DIRECTORY_SEPARATOR . self::LOGS_DIR . DIRECTORY_SEPARATOR . self::LOGS_FILE);
            $result &= $this->container->has(LogWriterInterface::DEFAULT_LOG_WRITER_SERVICE);
            $result &= $this->container->has(Logger::DEFAULT_LOGGER_SERVICE);
            return $result;
        }
        public function isDefaultOn()
        {
            return true;
        }
        public function getDescription($lang = "en")
        {
            switch ($lang) {
                case "ru":
                    $description = "Предоставяляет обьект logger позволяющий писать сообщения в лог.\n" .
                        "LoggerException которое позволяет записывать в лог возникшее исключение, а так же предшествующее ему.";
                    break;
                default:
                    $description = "Does not exist.";
            }
            return $description;
        }
    }
    ?>

Переменные окружения

Для обозначения типа рабочего окружения используется переменная окружения APP_EVN Используйте ее что бы определять для какого окружение происходит настройка., (*13)

Так же должны быть переменная MACHINE_NAME которая должна содержать в себе имя текущей контейнера/машины. Она должна содержать имя в таком виде {server_name}-{vm_name}-{container_name}. В случае если одной составляющей из данной цепочи не существует - пропустите ее. Пример: * ServerDrakon-ProductionVM-5000 * ServerDrakon-ProductionVM- * ServerDrakon--5000 * ServerDrakon--, (*14)

Запуск установщиков

Для того что бы можно было запускать инсталлеры используя композер вы должны установить rollun-com/rollun-installer в качестве зависимости., (*15)

Теперь после того как все предыдущее шаги были сделаны, вы можете используя команды * composer lib install - Запускать инсталяторы для настрройки окружения. * composer lib uninstall - Удалять настроки окружения. Так же существует необязательный параметр -l= которым можно указать язык на котором будет выводится описание * composer lib install -l=ru - Запускать инсталяторы, описание выводить на русском языке. * Так же для удобства существует флаг debug - он выведет всю информацию о найденый и проаналезированых библиотеках в котором не нашел инсталлера. Подобные данные могут помочь в отладке. Пример использования composer lib install debug., (*16)

Composer\IO\IOInterface

Для удобства использования, созданы вспомогательные функции, (*17)

  • InstallerAbstract::askParams - будет повторять вопрос и сообщать об ошибке пока ответ пустой
  • InstallerAbstract::askParamWithDefault- спросить пользователя хочет ли он использовать значение по умолчанию если ответ отрецательный попросить пользователя ввести значение.

Official DOC, (*18)

Краткий туториал, (*19)

Что бы вывести сообщение используйте ф-цию write, (*20)

$io->write("some text");

Что бы вывести сообщение об ошибке используйте ф-цию write, (*21)

$io->writeError(("some text");

Что бы задать пользователю вопрос используйте ф-цию write, (*22)

$answer = $io->ask("question");

Для более детального изучения читайте документацию., (*23)

Пример использования IO, (*24)

Debug

Для убдобства отладки ваших Installers есть скрипт InstallerSelfCall, ознакомится с ним можно тут., (*25)

The Versions