Fabricante é uma excelente ferramenta de revisão de código usada pelo Facebook e por outras organizações respeitadas de engenharia de software. A interface do usuário é bonita, o fluxo de trabalho e as ferramentas são concisos e abrangentes, e é um utilitário que abrange a maioria dos casos de uso, tanto na Web quanto na linha de comando. Escrevi muitas extensões do Phabricator e descobri que criar uma única extensão de configuração para ser usada por outras extensões é de grande utilidade. Vamos ver como é fácil criar sua própria configuração personalizada para ser usada em todas as suas extensões!
Criando a extensão de configuração
Comece criando uma nova classe que estende a PhabricatorApplicationConfigOptions
:
final class PhabricatorBugzillaConfigOptions extends PhabricatorApplicationConfigOptions { // .... }
Preencha alguns métodos padrão:
public function getName() { return pht('Bugzilla'); } public function getDescription() { return pht('Configure Bugzilla Settings.'); } public function getIcon() { return 'fa-cog'; } public function getGroup() { return 'apps'; }
O getOptions
é onde as configurações individuais são definidas; vamos criar algumas configurações de exemplo:
public function getOptions() { return array( $this->newOption( 'bugzilla.url', 'string', 'https://bugzilla.mozilla.org') ->setDescription(pht('Full URL for the Bugzilla server.')), $this->newOption( 'bugzilla.automation_user', 'string', 'phab-bot@bmo.tld') ->setDescription(pht('Automation Username on Bugzilla.')), $this->newOption( 'bugzilla.timeout', 'int', 15) ->setDescription(pht('Bugzilla timeout in seconds.')), $this->newOption( 'bugzilla.require_bugs', 'bool', false) ->setDescription(pht('Require existing Bugzilla bug numbers for revisions.')), ); }
Essas configurações são traduzidas para a interface do usuário da seguinte maneira:
O tipo de valor de configuração é importante, pois o Phabricator o lê e renderiza um campo relevante para o tipo; por exemplo, bool
fornecem um menu suspenso True/False (Verdadeiro/Falso).
Uso de valores de configuração
Quando quiser usar valores de configuração em outras extensões, o senhor pode fazer referência a esses valores de configuração por chave com PhabricatorEnv::getEnvConfig
chamadas:
// Use PhabricatorEnv::getEnvConfig() to get config values if(PhabricatorEnv::getEnvConfig('bugzilla.require_bugs') === true) { // ... }
O valor retornado pelo getEnvConfig
é do tipo definido na extensão de configuração.
Sou um grande fã do uso de valores de configuração definidos por meio de uma interface de usuário; a alternativa geralmente requer uma reimplantação e, em casos de emergência, esse é o pior cenário possível. Quando os valores são fáceis de definir, alterar e usar, o senhor se encontra em uma situação de ganho/ganho/ganho, e é assim que deve ser sempre!