Rafael Camargo

Duas novas melhorias ao Triven

Tirando o fuso horário, data é talvez a pior coisa com a qual um programador tem que lidar. Meses com quantidade de dias variados, um deles sem sequer ter trinta dias, o ano não dura nem 370 dias, nem 360, dura 365, mas nem sempre. Pense na tarefa de subtrair cinco dias. Cinco dias úteis ou regulares? Feriado conta? Se a conta começar no segundo dia do mês, o resultado cai no mês anterior. E se o ano for bissexto, o mês anterior pode ter um dia a mais… O formato da data não fica pra trás. Dia, mês, ano? Mês, dia, ano? Separados com vírgula, barra ou traço?

Triven é um gerador de blog estático baseado em Markdown com suporte deslumbrante a múltiplos idiomas. Enquanto criava sua primeira versão, os formatos definidos para data foram MM/DD/YYYY, para publicações no idioma estadounidense, e DD/MM/YYYY para publicações nos demais idiomas. Optei por essa estratégia porque ela não exigia nada mais que a própria data já informada pelo usuário no arquivo markdown da publicação. Porém, a incapacidade de apresentar datas num formato mais amigável, me deixava insatisfeito.

Specific U.S. date format
Mapa explicativo de todos os países que usam o formato de data MM/DD/YYYY

Nas últimas semanas comecei a planejar uma maneira de oferecer a possibilidade de personalizar o formato de data das publicações. A primeira estratégia que me passou pela cabeça foi oferecer uma variedade limitada de formatos que o usuário poderia definir no arquivo de configuração. Para fazer a ponte entre o formato definido e a data apresentada na publicação, eu usaria uma biblioteca estilo date-fns. Parecia uma estratégia boa o suficiente, mas logo em seguida, desconsiderei a inclusão de mais um dependência ao projeto. Formatar data não me pareceu uma tarefa essencial o suficiente para ser executada pelo próprio Triven. Formatar data seria uma atividade acessória e portanto, melhor que não estivesse acoplada à ferramenta. Lembrei então da arquitetura baseada em plugins, abordada no capítulo Boundaries: Drawing lines, do livro Clean Architecture.

Plugin Architecture
Arquitetura baseada em plugins

Formato de data personalizado

A estratégia baseada em plugins se encaixou perfeitamente à minha concepção de que formatar data era uma tarefa acessória e que portanto não deveria ser responsabilidade da ferramenta, mas sim de um código externo que pudesse ser plugado a ela. Dessa forma, o arquivo de configuração do Triven passou a oferecer a partir da versão 0.12.0, uma seção formatters, pela qual é possível conectar um formatador de data à ferramenta:

{
  formatters: {
    date: (isoDateString, lang) => {
      // Retorna uma string contendo
      // a data no formato desejado.
    }
  }
}

Com essa nova possibilidade, a responsabilidade de personalizar o formato da data das publicações ficou fora do Triven, e o usuário da ferramenta passa a dispôr de toda a flexibilidade necessária para formatar a data da maneira que quiser.

Publicações não listadas na homepage

A outra melhoria se refere a eventual necessidade de publicar um post, mas não listá-lo na homepage do blog. Seja esta uma publicação que dá boas vindas ao recém inscrito de uma newsletter, seja uma publicação para qual você busca feedbacks antes de torná-la amplamente acessível. A partir da versão 0.11.0 você pode manter uma publicação fora da homepage do blog adicionando o atributo unlisted ao arquivo markdown do post:

title: Não será listado na homepage do blog
unlisted: true

---

Sua publicação

Fique atento, as publicações definidas como unlisted serão ignoradas por motores de busca, mas o acesso à publicação é público. Qualquer pessoa que tenha a URL em mãos conseguirá visualizá-la normalmente.