Feito em cima do Shelljs e inquirer
/* TODO: finalizar descrição */
$ duis [PATH/TO/CONFIG-FILE] <PATH/TO/TRAB-FILE>
|
|
relativo ao diretórío do "aluno" (AKA working dir; onde está o `.git`)
Exemplo de árvore do diretório a ser trabalhado
.
├── duis.questions.js
├── duis.config.js
├── Turma1
│ ├── __tests__
│ │ └── TRAB1.test.js
│ ├── nick-aluno-a # git repo
│ │ ├── TRAB1
│ │ │ └── index.html ## or `index.php`
│ │ ├── TRAB2
│ │ └── # ...
│ ├── nick-aluno-b
│ │ └── # ...
│ └── #...
└── Turma2
└── #...
Exemplo do arquivo de configuração
Exemplificando o processo de execução
Iniciar processo com $ duis . TRAB1
- Carregar as configurações expostas no arquivo
duis.config.js
do diretório corrente (se não existir: exit 1) - Fazer as perguntas definidas em
CONFIG#startQuestions
, para adicionar mais valores ao estado inicial - Criar o diretório definido em
CONFIG#lookupDirPathMask
, se ele já não existir - Para cada diretório resolvido da junção de
CONFIG#workingdirParentDirPathMask
(renderizado) e<PATH/TO/TRAB-FILE>
(eg.TRAB1
), tratá-lo como working dir e fazer:- Entrar no diretório "root" do working dir corrente (eg.
./Turma1/nick-aluno-a
) - Executar os comandos definidos em
CONFIG#commandsForEachRootDir.onEnter
(perguntando antes de executar cada, seCONFIG#safeMode
fortrue
) - Entrar no diretório working dir corrente (eg.
./Turma1/nick-aluno-a/TRAB1
) - Recuperar o id do último commit no diretório working dir, e fazer:
- Se o working dir tiver uma entrada para
<PATH/TO/TRAB-FILE>
no arquivo de lookup corrente (eg../Turma1/.duis.lookup/nick-aluno-a.json
) e o id deste for igual a este commit, então esse "trabalho" não foi atualizado; pular essa iteração - Senão, continuar o processo
- Se o working dir tiver uma entrada para
- Se
CONFIG#serverPort
estiver definido, então:- Criar um servidor PHP no working dir
- Abrir o navegador definido em
CONFIG#browser
na raiz do server local
- Senão, abrir o navegador em working dir
- Se existir o arquivo de teste associado ao "trabalho" corrente, então:
- Perguntar se deseja executar o comando definido em
CONFIG#test.commandToRun
(eg.testcafe -sf chrome:headless ./Turma1/__tests__/TRAB1.test.js
) - Executar o comando para (teoricamente) executar os testes
- Perguntar se deseja executar o comando definido em
- Fazer as perguntas definidas no
CONFIG#workingdirQuestions
- Esperar a resposta da pergunta "Finalizar avaliação de
<rootName>
?"- Atualizar o arquivo de lookup correspondente
- Parar o servidor (se iniciado)
- Executar os comandos definidos em
CONFIG#commandsForEachRootDir.onBeforeLeave
(perguntando antes de executar cada, seCONFIG#safeMode
fortrue
)
- Entrar no diretório "root" do working dir corrente (eg.
- Esc para fechar o programa (como o ctrl+c)
- Em perguntas que fornecem um tab suggestions, as sugestões são de nomes lidos de alguma fonte. Ex: As sugestões ao definir o identificador do trabalho no arquivo de lookup são de identificadores em uso
- As respostas ficam em destaque para indicar que se referem a algo já definido (no contexto da pergunta)
o nome do arquivo deve ser o mesmo do diretório git em que o
working dir
está
{
"<TRABNAME_CORRIGIDO>": {
"_id": "<TRABNAME_CORRIGIDO_COMMIT_ID>", // commit que gerou os `prompts` abaixo
"extra": { // retornado pela aplicação da função `CONFIG#lookupAttachExtra` sobre as respostas de `CONFIG#workingdirQuestions`
},
"prompts": [ // perguntas e respostas das questões definidas em `CONFIG#workingdirQuestions`
{
"q": "<QUESTION_NAME>",
"a": "<ANSWER>"
},
// ...
]
}
// ...
}