DEV Community

Jackson Pires for Vídeos de Ti

Posted on

🇧🇷 Continuando a jornada com RubyUI: apresentando o ruby_ui_converter

Recentemente publiquei uma gem chamada ruby_ui_scaffold, um gerador de scaffolds para Rails pensado para quem quer construir aplicações modernas utilizando Phlex e RubyUI desde o início do projeto.

A proposta dela era bastante simples:

Em vez de usar o scaffold tradicional do Rails gerando views em .erb, a ideia era criar aplicações já preparadas para uma arquitetura baseada em componentes Ruby, utilizando Phlex e os componentes do RubyUI.

Mas logo percebi uma questão importante.

E quem já possui uma aplicação Rails existente?

O problema das aplicações legadas

O ruby_ui_scaffold resolve muito bem o cenário de novos projetos.

Com ele, você consegue gerar CRUDs completos com controllers, formulários, tabelas, componentes visuais e toda a estrutura baseada em Phlex desde o primeiro dia.

Mas a realidade é que grande parte da comunidade Rails trabalha em aplicações já existentes.

Aplicações que possuem anos de evolução e centenas de arquivos como estes:

app/views/products/index.html.erb
app/views/users/show.html.erb
app/views/orders/_form.html.erb
Enter fullscreen mode Exit fullscreen mode

E nesse cenário surge uma pergunta natural:

Como migrar uma aplicação já existente para Phlex + RubyUI sem precisar reescrever manualmente toda a camada de views?

Foi exatamente essa pergunta que me levou a criar a próxima gem dessa jornada.

Apresentando o ruby_ui_converter

https://github.com/jacksonpires/ruby_ui_converter

Se o ruby_ui_scaffold foi criado para ajudar no desenvolvimento de novas aplicações Rails, o ruby_ui_converter nasce como sua continuação natural.

A proposta é simples:

Permitir que aplicações Rails já existentes possam migrar gradualmente seus templates .erb para componentes baseados em Phlex e RubyUI.

Em outras palavras:

  • ruby_ui_scaffold → cria aplicações novas já utilizando a stack moderna
  • ruby_ui_converter → ajuda aplicações existentes a fazer essa transição

Transformando ERB em componentes Ruby automaticamente

A gem percorre uma pasta de views Rails e converte automaticamente arquivos .erb em componentes Ruby.

Exemplo:

bundle exec ruby_ui_converter convert app/views/users
Enter fullscreen mode Exit fullscreen mode

Resultado:

app/views/users/index.html.erb → app/views/users/index.rb
app/views/users/_user.html.erb → app/views/users/user.rb
Enter fullscreen mode Exit fullscreen mode

A ideia é eliminar o trabalho repetitivo que normalmente existiria nesse processo de migração.

Conversão inteligente para Phlex e RubyUI

O objetivo não era simplesmente transformar HTML em Ruby.

A gem entende padrões comuns do Rails e gera código compatível com Phlex e com componentes RubyUI.

Por exemplo:

Um template tradicional:

<%= link_to "Dashboard", dashboard_path %>
Enter fullscreen mode Exit fullscreen mode

vira automaticamente:

Link(href: dashboard_path) { "Dashboard" }
Enter fullscreen mode Exit fullscreen mode

Partials como:

<%= render "form", product: @product %>
Enter fullscreen mode Exit fullscreen mode

são convertidos para componentes Ruby:

render Views::Products::Form.new(product: @product)
Enter fullscreen mode Exit fullscreen mode

E até estruturas mais complexas como:

  • form_with
  • collection_select
  • checkboxes
  • condicionais (if, unless)
  • loops (each)
  • helpers Rails (dom_id, button_to, content_for)

são analisadas e convertidas automaticamente.

Migração gradual, sem reescrever tudo

Esse era um requisito importante para mim durante o desenvolvimento.

A gem não modifica os arquivos ERB originais.

Ela gera os novos arquivos Ruby lado a lado.

Isso permite um processo de migração incremental:

  • converter apenas uma pasta por vez
  • revisar o código gerado
  • testar cada tela individualmente
  • manter partes da aplicação ainda usando ERB

Sem precisar fazer uma migração radical.

Construindo um ecossistema em torno de RubyUI

Minha ideia com essas gems nunca foi lançar ferramentas isoladas.

O objetivo é construir ferramentas que ajudem a tornar o uso de Phlex e RubyUI cada vez mais acessível dentro do ecossistema Rails.

Hoje essa jornada começa com duas peças complementares:

ruby_ui_scaffold

Para novos projetos.

Cria CRUDs completos utilizando Phlex + RubyUI desde o início.

ruby_ui_converter

Para aplicações existentes.

Ajuda a migrar views tradicionais em ERB para componentes Ruby.

O objetivo final

Tenho explorado bastante a ideia de trazer uma experiência mais moderna de desenvolvimento frontend para aplicações Rails, mas sem abandonar aquilo que sempre gostei no ecossistema Ruby:

Escrever código simples.

Manter produtividade alta.

Continuar trabalhando majoritariamente em Ruby.

Essas gems fazem parte exatamente dessa visão.

Acredito que nos próximos anos veremos cada vez mais aplicações Rails adotando abordagens baseadas em componentes, e quero contribuir para tornar essa transição mais simples.

Se você trabalha com Rails e tem curiosidade em explorar o mundo do Phlex e RubyUI, talvez essas ferramentas possam ajudar nessa jornada.

E isso é só o começo :)

Top comments (0)