ferbass

Criando minha "engine" de blog (parte 2)

Fala galera, vamos dar um update na minha idea da engine de blog

Do último post até agora eu tenho feito poucas mudanças/evoluções, como falei no post anterior, estou dedicando pouco tempo a esse projeto pois tenho tentado passar cada vez menos tempo na frente da tela do computador, mas fiz algumas coisas bacanas para me ajudar.

Rake tasks

Eu resolvi criar algumas rake tasks para me ajudar na administração dos posts, nada muito complicado mas está sendo uma mão na roda, vamos dar uma olhada e falar um pouco de cada uma.

Se eu rodar um bundle exec rake -T vamos obter a lista de rake tasks como esperado (caso tudo está funcionando hehe)

rake post:create   # Create blog post
rake post:list     # List all posts
rake post:delete   # delete post
rake post:publish  # Publish a post

Os nomes são bem intuitivos mas vou explicar um pouco sobre cada uma.

Primeiro a rake create, bom talvez essa seja a rake mais complexa de todas então vou explicar passo a passo o que essa rake está fazendo, como exemplo eu vou utilizar esse post "Criando minha 'engine' de blog (parte 2)".

bundle exec rake post:create title='Criando minha "engine" de blog (parte 2)'

Ao executar o comando acima minha rake vai gerar uma estrutura de diretorios dentro de views/posts/ com base na data atual, nesse caso 2020/06/26 seguindo o formado (Year/Month/Day) e dentro desse diretório será criado o arquivo com o titulo passado por parametro na task ou seja o resultado final será views/posts/2020/05/26/criando-minha-engine-de-blog-(parte-2).md.

Além disso essa task ainda tem algumas outras responsabilidades como fazer append do post em um arquivo json onde armazenos todos os posts seguindo o seguinte formato:

  {
    "uuid": "9d95d215-f669-418f-a3e6-27731947f980",
    "title": "Criando minha \"engine\" de blog (parte 2)",
    "created_at": "2020-05-26 23:09:57",
    "url": "2020/05/26/criando-minha-engine-de-blog-(parte-2)",
    "file": "criando-minha-engine-de-blog-(parte-2).md",
    "author": "ferbass",
    "published": false
  }

Rápidamente explicando esse hash, podemos ver que temos um uuid que como o nome já diz é o identificador do post, title, created_at essa data será usada para exibição, ordeção e filtragem, url é chave utilizada para gerar o link para o post, file é apenas o nome do arquivo gerado pela task, author por enquanto está fixo mas futuramente quem sabe posso tornar isso um parametro e por fim published que é um boolean que me diz o status do post para saber se ele deve ser exibido na lista de posts ou não.

A segunda task é a list, essa task é bem simples, ela listar todos os posts contidos no posts.json, em breve pretendo adicionar alguns parametros para essa task como por exemplo, listar apenas os publicados, por data e até mesmo limite de resultados.

Mas por enquanto se executarmos bundle exec rake post:list esse é o resultado que vamos obter:

Here is the list of posts

Title: Testando algo novo aqui
Created at: 2020-05-18 21:46:10
UUID: 746C506E-F232-4548-BB72-2C3BE6482CF5
Published? true

Title: Criando minha "engine" de blog (parte 1)
Created at: 2020-05-19 22:01:36
UUID: f17d513c-c702-4b20-a698-d7518f18a05d
Published? true

Title: Post test
Created at: 2020-05-25 14:09:33
UUID: ede7312a-9abf-43b9-8027-4705f5ebe4df
Published? false

Title: Criando minha "engine" de blog (parte 2)
Created at: 2020-05-26 23:09:57
UUID: 9d95d215-f669-418f-a3e6-27731947f980
Published? false

A próxima rake é a delete, bom acho que o nome dessa é bem intuitivo, mas vamos lá, quando executada essa rake ela vai deletar o post do meu arquivo posts.json e também deletar o arquivo markdown que faz referencia a esse post, bem simples. Para tudo isso funcionar eu estou utilizando o uuid que cada post possui, vamos ver essa rake funcionando.

Se eu executar bundle exec rake post:delete

Please type the uuid of the post do you want to delete
ede7312a-9abf-43b9-8027-4705f5ebe4df
You are about to delete "Post test"
Are you sure? (y/n)
y
Ok "Post test" deleted

Para essa rake eu decidi testar algo diferente e receber o parametro uuid interativamente e também claro a confirmação para deletar esse post ou não.

E por último temos a rake publish que vai ser responsável em mudar o status do post de published: false para published: true, basimcanete ela vai encontrar o post no meu arquivo posts.json pela chave uuid e vai alterar o valor da chave published, vamos dar uma olhada.

Please type the post uuid that you want to publish
9d95d215-f669-418f-a3e6-27731947f980
Confirm to publish "Criando minha "engine" de blog (parte 2)" (y/n)
y
Done

Como foi feito na rake anterior eu também resolvi receber os parametros via console de maneira interativa, mas não sei se vou manter isso desse jeito.

Outra responsábilidade da rake publish é adicionar o post ao meu arquivo de RSS para manter o feed atualizado, nada muito complexo também a única coisa que acontece aqui é adicionar um novo <item> dentro do arquivo responsável pelo RSS

RSS

Bom como mencionei acima, agora temos RSS o link está no cabeçalho

Rotas

Adiconei uma nova rota de url /year/month para listar os posts baseados em ano e mês, então caso você queira ver os posts de um determinado ano você pode você acessar ferbass.com/2020 para ver todos os posts de 2020 ou caso queira listas os posts por ano e mês ferbass.com/2020/05 você tera todos os posts de 2020 no mês de Maio. Por enquanto não tem conteúdo para testar isso, mas pretendo migrar os posts antigos para cá em breve então essa rota será bem útil.

Design

Bom, estou fazendo o meu melhor, mas pretendo manter tudo bem simples aqui, mas pelo menos agora a visualização no mobile está melhor :)

Comentários

Ainda não decidi como farei com os comentários mas tudo indica que usarei o Disqus mas caso alguém tenha alguma sugestão por favor me mandem no twitter @fer_bass

Bom por enquanto é isso, apenas alguns updates no que venho trabalhando, espero conseguir evoluir um pouco mais o projeto para deixar o projeto open-source e outras pessoas que se interessarem usar ou até mesmo ter algumas ideias.

Abraço

ferbass
2020-05-26 23:09:57

Tags: new-blog engine ruby sinatra