Giter Club home page Giter Club logo

duis's Introduction

Duis

Feito em cima do Shelljs e inquirer

/* TODO: finalizar descrição */

Como usar

$ duis [PATH/TO/CONFIG-FILE] <PATH/TO/TRAB-FILE>
                                  |
                                  |
    relativo ao diretórío do "aluno" (AKA working dir; onde está o `.git`)

Demo

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

  1. Carregar as configurações expostas no arquivo duis.config.js do diretório corrente (se não existir: exit 1)
  2. Fazer as perguntas definidas em CONFIG#startQuestions, para adicionar mais valores ao estado inicial
  3. Criar o diretório definido em CONFIG#lookupDirPathMask, se ele já não existir
  4. 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:
    1. Entrar no diretório "root" do working dir corrente (eg. ./Turma1/nick-aluno-a)
    2. Executar os comandos definidos em CONFIG#commandsForEachRootDir.onEnter (perguntando antes de executar cada, se CONFIG#safeMode for true)
    3. Entrar no diretório working dir corrente (eg. ./Turma1/nick-aluno-a/TRAB1)
    4. Recuperar o id do último commit no diretório working dir, e fazer:
      1. 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
      2. Senão, continuar o processo
    5. Se CONFIG#serverPort estiver definido, então:
      1. Criar um servidor PHP no working dir
      2. Abrir o navegador definido em CONFIG#browser na raiz do server local
    6. Senão, abrir o navegador em working dir
    7. Se existir o arquivo de teste associado ao "trabalho" corrente, então:
      1. Perguntar se deseja executar o comando definido em CONFIG#test.commandToRun (eg. testcafe -sf chrome:headless ./Turma1/__tests__/TRAB1.test.js)
      2. Executar o comando para (teoricamente) executar os testes
    8. Fazer as perguntas definidas no CONFIG#workingdirQuestions
    9. Esperar a resposta da pergunta "Finalizar avaliação de <rootName>?"
      1. Atualizar o arquivo de lookup correspondente
      2. Parar o servidor (se iniciado)
      3. Executar os comandos definidos em CONFIG#commandsForEachRootDir.onBeforeLeave (perguntando antes de executar cada, se CONFIG#safeMode for true)

Tips

  • 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)

Formato do arquivo de "lookup" gerado pra cada working dir

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>"
      },
      // ...
    ]
  }
  // ...
}

duis's People

Contributors

dependabot[bot] avatar jonasferreirab avatar micalevisk avatar

duis's Issues

Permitir nome variado do arquivo de config do Duis

no code abaixo, só resolver usando o nome padrão se o pathToConfigFile não for um arquivo, i.e., se for um diretório

* @param {string} pathToConfigFile
* @param {string} pathToTrabFile
* @param {object} priorityConfigs
*/
module.exports = async function exec(pathToConfigFile, pathToTrabFile, priorityConfigs = {}) {
const configFileAbsPath = path.resolve(pathToConfigFile, DUIS_CONFIG_FILENAME)

Comando `uplookups`

Comando para atualizar todos os lookups.
Informando, via prompt, o caminho (JSON-like) que será atualizado/inserido e o corpo da função de callback (JS code) que será executada sobre o valor da propriedade informada e deve retornar o seu novo valor.

Essa função implicará em alterações na estratégia de reuso de código já que esse comando realizará os mesmos procedimentos que o duis-exec.

atualizar algoritmo abaixo

duis/README.md

Lines 64 to 67 in 617f6d3

<!-- TODO: atualizar algoritmo abaixo -->
Iniciar processo com **`$ duis . TRAB1`**
1. Carregar as configurações expostas no arquivo `duis.config.js` do diretório corrente (se não existir: _exit 1_)
2. Fazer as perguntas definidas em `CONFIG#startQuestions`, para adicionar mais valores ao estado inicial


This issue was generated by todo based on a TODO comment in 617f6d3. It's been assigned to @micalevisk because they committed the code.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.