Construa seu próprio CLI com Node.js – Parte 2

E aí moçada bonita! Tudo tranquilo?

Há um tempinho atrás escrevi sobre como fazer um CLI com Node.js, lembra? Se você não se lembra pode ver o post aqui! E hoje vamos deixar esse cara um pouco mais dinâmico e atrativo, com o uso de outras ferramentas e abordagens! Bora lá!

O que vamos fazer?

Para demonstrar a criação de nosso CLI interativo, vamos realizar uma busca de repositórios no Bitbucket. Como vamos precisar de fazer autenticação para buscar repositórios privados, precisamos de mais parâmetros do que no post passado, então vai ser um ótimo exemplo para o uso dessa nova ferramenta.

Como vamos fazer?

Para fazer isso, vamos utilizar alguns pacotes do npm, são eles:

  • commander.js – É a ferramenta que vamos utilizar para realizar os comandos com Node.js;
  • request-promise – Vamos utilizar esse cara para fazer requisições HTTP para o github.
  • inquirer – O requirer é quem vai deixar o nosso CLI dinâmico e com vários argumentos.

Bora codar!

Para começar, vamos criar o projeto e instalar as duas dependências; depois de criado o projeto, o nosso package.json vai ficar mais ou menos assim:

Belezura! Com o projeto criado, vamos fazer primeiramente a parte de requisição para a API do Bitbucket! Em um arquivo chamado request.js temos o código que vai fazer isso, vejam o código abaixo:

Notem que para realizar a chamada da API, precisamos antes buscar um Token do usuário para nos autenticarmos em uma conta. Não vou explicar como fazer isso e nem como criar as credenciais no portal do Bitbucket pois não é o objetivo desse post. Notem também a quantidade de parâmetros que vamos precisar para realizar todo o processo, tais como:

  • username: será utilizado para identificar o usuário que vamos buscar os repositórios;
  • password: será utilizado para autenticar tal usuário
  • role: será utilizado para identificarmos o tipo de repositórios do usuário vamos buscar, nesse caso: dono ou membro;
  • pagelen: será utilizado para identificar a quantidade de repositórios vamos buscar;
  • somenteNome: será utilizado apenas para o usuário escolher se quer ver todos os dados do repositório ou somente o nome.

Agora imaginem como ficaria isso com o nosso CLI do post anterior? Uma aberração parecida com isso:

repositorios do mussak@smn.com.br minhasenha owner 10 true

Claro que funciona, mas vamos ver como fica da outra maneira…

O nosso próximo passo, é construir o CLI (que é o que nos interessa hoje), então vamos lá! Criei um arquivo chamado bitbuckethelper.js e é lá que a mágica acontece, princípio é o mesmo, utilizando o commander. Se não entender direito, sugiro que leia o post anterior.

A diferença é que agora vamos o utilizar o prompt, da biblioteca do inquirer, vejam:

Como na versão anterior, temos um comando e uma ação para esse comando, e dentro da ação, chamamos o nosso método de buscar repositórios com os parâmetros informados. E Depois de tudo, para pegarmos as respostas do usuário, utilizamos o método prompt(questoes). É ele que vai fazer toda a mágica!

A diferença mesmo, é naquela variável questoes, pois é lá que informamos todas as perguntas que queremos fazer ao usuário, e lá nós definimos o tipo da resposta e várias outras coisas legais! Vou dar um exemplo aqui, mas na documentação do inquirer tem muita coisa pra gente aproveitar. Vejam como ficaram as minhas questões para esse caso:

E quando executamos o arquivo, com a ação “repositorios” vemos essas perguntas bonitinhas uma de cada vez:

001

E a variável “respostas” é preenchida da seguinte maneira:

Quando fazemos a requisição, temos os repositórios dessa maneira:

002

Lindo né? :’)

Para esse código Node rodar como linha de comando do Shell, basta seguir os mesmos passos do post anterior (não vou colocar aqui novamente). Quando seguirmos aquele passo-a-passo, basta executarmos o seguinte comando no bash:

bitbucket-helper repositorios

Que tudo vai funcionar perfeitamente!

Os exemplos de código estão disponíveis no GitHub: https://github.com/vmussak/command-line-bitbucket-repos

Por hoje é só, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s