Script para criar arquivos de rascunho Jekyll / Markdown

Neste blog, eu uso o Jekyll para gerar as páginas estáticas e todas as minhas publicações são escritas utilizando o padrão Markdown e as faço no VS Code.

Com isso tem um processo que sempre se repete no início de toda publicação, é a criação de uma arquivo de texto com a extensão .md. O nome do arquivo e o frontmatter tem um padrão que sempre se repete.

Se você na sabe o que é frontmatter, veja essa publicação.

O padrão que se repete é o seguinte:

  1. O nome do arquivo é sempre formado pela data de hoje, seguido do título da publicação. Tudo separado por hífens.
  2. O frontmatter do arquivo sempre tem os mesmos campos: layout, title, subheading, description, author, categories, tags e date.
    • O layout é sempre post.
    • O title, subheading e descri[tion são iguais ao nome do arquivo.
    • O author é sempre o mesmo.
    • As categories e as tags dependem do tipo de publicação.
    • A date é sempre a data do dia de criação do arquivo.

Dito isso, vou apresentar um script escrito na linguagem de programação Ruby que irá automatizar esse processo para mim. Tal script vai receber duas flags para informar a categoria e a tag da publicação em questão.

Para o recebimento das flags pelo o script, usei a biblioteca nativa do Ruby chamada de OptionParse. Muito simples de usar e a documentação se encontra aqui.

Script

Importando bibliotecas necessárias

Primeiro começamos importando as bibliotecas que iremos utilizar no script. Nesse script precisaremos de duas.

  1. require 'date': para tratar as datas, já que o nome do arquivo vai ter a data do dia de hoje
  2. require 'optparse': para o script aceitar flags. Isso torna o script mais customizável.
require 'date'
require 'optparse'

Configurando o OptionParser

Depois precisamos configurar o OptionParser e definir quais flags o script vai receber. Atenção: como eu desejo obter o valor da flag preciso colocar em CAPS LOCK (maiúsculo) a chave após a flag (-cCATEGORY).

Se eu quisesse apenas saber se uma flag foi adicionada no script, ou seja, o valor seria true ou false, eu poderia colocar apenas a flag (-c).

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: draft [options]"

  opts.on("-cCATEGORY", "Define a categoria") do |c|
    options[:category] = c
  end
end.parse!

Criando o arquivo

O restante do script eu faço:

  1. Removo os espaços do nome do arquivo.
  2. Obtenho o diretório de trabalho
  3. Crio o arquivo.
  4. Adiciono o frontmatter.

Scritp completo

O script completo você pode ver abaixo:

#!/usr/bin/env ruby
require 'date'
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: draft [options]"

  opts.on("-cCATEGORY", "Define a categoria") do |c|
    options[:category] = c
  end
end.parse!

filename = ARGV.join('-').downcase

path = %x( pwd ).split("\n")[0]

date = Date.today
date_formatted = date.strftime('%Y-%m-%d')

file = File.new "#{path}/_drafts/#{date}-#{filename}.md", "a"
file.write <<~TEXT
---
layout: post
title: #{ARGV.join(' ')}
subheading: #{ARGV.join(' ')}
description: #{ARGV.join(' ')}
author: Rock
categories: #{options[:category]}
tags:
date: #{date} 08\:00\:00 -0300
---
TEXT

file.close

Resumo (Wrap up)

Apresentei um script para automatizar a criação de arquivos para minha publicação. Fiz isso, pois uso um site estático com Jekyll, então essa etapa é bastante repetitiva. O ponto principal é a mentalidade de automatizar coisas que a gente repete no dia-a-dia. Pegue esse script como inspiração automatizar outras coisas no seu dia-a-dia.