<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vídeos de Ti</title>
    <description>The latest articles on DEV Community by Vídeos de Ti (videosdeti).</description>
    <link>https://dev.to/videosdeti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10245%2F086a6967-7b78-4358-be63-378ccede525a.png</url>
      <title>DEV Community: Vídeos de Ti</title>
      <link>https://dev.to/videosdeti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/videosdeti"/>
    <language>en</language>
    <item>
      <title>🇧🇷 Continuando a jornada com RubyUI: apresentando o ruby_ui_converter</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sun, 14 Jun 2026 19:09:05 +0000</pubDate>
      <link>https://dev.to/videosdeti/continuando-a-jornada-com-rubyui-apresentando-o-rubyuiconverter-4mj4</link>
      <guid>https://dev.to/videosdeti/continuando-a-jornada-com-rubyui-apresentando-o-rubyuiconverter-4mj4</guid>
      <description>&lt;p&gt;Recentemente publiquei uma gem chamada &lt;strong&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;ruby_ui_scaffold&lt;/a&gt;&lt;/strong&gt;, um gerador de scaffolds para Rails pensado para quem quer construir aplicações modernas utilizando &lt;strong&gt;Phlex&lt;/strong&gt; e &lt;strong&gt;RubyUI&lt;/strong&gt; desde o início do projeto.&lt;/p&gt;

&lt;p&gt;A proposta dela era bastante simples:&lt;/p&gt;

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

&lt;p&gt;Mas logo percebi uma questão importante.&lt;/p&gt;

&lt;p&gt;E quem já possui uma aplicação Rails existente?&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema das aplicações legadas
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; resolve muito bem o cenário de &lt;strong&gt;novos projetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Mas a realidade é que grande parte da comunidade Rails trabalha em aplicações já existentes.&lt;/p&gt;

&lt;p&gt;Aplicações que possuem anos de evolução e centenas de arquivos como estes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/products/index.html.erb
app/views/users/show.html.erb
app/views/orders/_form.html.erb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E nesse cenário surge uma pergunta natural:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como migrar uma aplicação já existente para Phlex + RubyUI sem precisar reescrever manualmente toda a camada de views?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Foi exatamente essa pergunta que me levou a criar a próxima gem dessa jornada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apresentando o ruby_ui_converter
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se o &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; foi criado para ajudar no desenvolvimento de &lt;strong&gt;novas aplicações Rails&lt;/strong&gt;, o &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; nasce como sua continuação natural.&lt;/p&gt;

&lt;p&gt;A proposta é simples:&lt;/p&gt;

&lt;p&gt;Permitir que aplicações Rails já existentes possam migrar gradualmente seus templates &lt;code&gt;.erb&lt;/code&gt; para componentes baseados em Phlex e RubyUI.&lt;/p&gt;

&lt;p&gt;Em outras palavras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; → cria aplicações novas já utilizando a stack moderna&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_converter&lt;/code&gt; → ajuda aplicações existentes a fazer essa transição&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Transformando ERB em componentes Ruby automaticamente
&lt;/h2&gt;

&lt;p&gt;A gem percorre uma pasta de views Rails e converte automaticamente arquivos &lt;code&gt;.erb&lt;/code&gt; em componentes Ruby.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;ruby_ui_converter convert app/views/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/users/index.html.erb → app/views/users/index.rb
app/views/users/_user.html.erb → app/views/users/user.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia é eliminar o trabalho repetitivo que normalmente existiria nesse processo de migração.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversão inteligente para Phlex e RubyUI
&lt;/h2&gt;

&lt;p&gt;O objetivo não era simplesmente transformar HTML em Ruby.&lt;/p&gt;

&lt;p&gt;A gem entende padrões comuns do Rails e gera código compatível com Phlex e com componentes RubyUI.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;Um template tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dashboard_path&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vira automaticamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;href: &lt;/span&gt;&lt;span class="n"&gt;dashboard_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Partials como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s2"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;são convertidos para componentes Ruby:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="no"&gt;Views&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Products&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E até estruturas mais complexas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;form_with&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection_select&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;checkboxes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;condicionais (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;unless&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;loops (&lt;code&gt;each&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;helpers Rails (&lt;code&gt;dom_id&lt;/code&gt;, &lt;code&gt;button_to&lt;/code&gt;, &lt;code&gt;content_for&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;são analisadas e convertidas automaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migração gradual, sem reescrever tudo
&lt;/h2&gt;

&lt;p&gt;Esse era um requisito importante para mim durante o desenvolvimento.&lt;/p&gt;

&lt;p&gt;A gem &lt;strong&gt;não modifica os arquivos ERB originais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ela gera os novos arquivos Ruby lado a lado.&lt;/p&gt;

&lt;p&gt;Isso permite um processo de migração incremental:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;converter apenas uma pasta por vez&lt;/li&gt;
&lt;li&gt;revisar o código gerado&lt;/li&gt;
&lt;li&gt;testar cada tela individualmente&lt;/li&gt;
&lt;li&gt;manter partes da aplicação ainda usando ERB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sem precisar fazer uma migração radical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Construindo um ecossistema em torno de RubyUI
&lt;/h2&gt;

&lt;p&gt;Minha ideia com essas gems nunca foi lançar ferramentas isoladas.&lt;/p&gt;

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

&lt;p&gt;Hoje essa jornada começa com duas peças complementares:&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_scaffold
&lt;/h3&gt;

&lt;p&gt;Para novos projetos.&lt;/p&gt;

&lt;p&gt;Cria CRUDs completos utilizando Phlex + RubyUI desde o início.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_converter
&lt;/h3&gt;

&lt;p&gt;Para aplicações existentes.&lt;/p&gt;

&lt;p&gt;Ajuda a migrar views tradicionais em ERB para componentes Ruby.&lt;/p&gt;

&lt;h2&gt;
  
  
  O objetivo final
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;p&gt;Escrever código simples.&lt;/p&gt;

&lt;p&gt;Manter produtividade alta.&lt;/p&gt;

&lt;p&gt;Continuar trabalhando majoritariamente em Ruby.&lt;/p&gt;

&lt;p&gt;Essas gems fazem parte exatamente dessa visão.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

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

&lt;p&gt;E isso é só o começo :)&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇺🇸 Continuing the RubyUI Journey: Introducing ruby_ui_converter</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sun, 14 Jun 2026 19:07:39 +0000</pubDate>
      <link>https://dev.to/videosdeti/continuing-the-rubyui-journey-introducing-rubyuiconverter-1kpg</link>
      <guid>https://dev.to/videosdeti/continuing-the-rubyui-journey-introducing-rubyuiconverter-1kpg</guid>
      <description>&lt;p&gt;Recently, I released a gem called &lt;strong&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;ruby_ui_scaffold&lt;/a&gt;&lt;/strong&gt;, a Rails scaffold generator designed for developers who want to build modern applications using &lt;strong&gt;Phlex&lt;/strong&gt; and &lt;strong&gt;RubyUI&lt;/strong&gt; from day one.&lt;/p&gt;

&lt;p&gt;The idea behind it was simple:&lt;/p&gt;

&lt;p&gt;Instead of relying on the traditional Rails scaffold that generates &lt;code&gt;.erb&lt;/code&gt; templates, the goal was to create applications already structured around a Ruby component-based architecture powered by Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;But shortly after releasing it, I realized an important question remained unanswered.&lt;/p&gt;

&lt;p&gt;What about existing Rails applications?&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge of legacy applications
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; works extremely well for &lt;strong&gt;new projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It allows developers to generate complete CRUD interfaces with controllers, forms, tables, and UI components entirely built with Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;But the reality is that a huge part of the Rails community works on existing applications.&lt;/p&gt;

&lt;p&gt;Applications that have evolved for years and contain hundreds of files like these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/products/index.html.erb
app/views/users/show.html.erb
app/views/orders/_form.html.erb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And naturally, this leads to an important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you migrate an existing Rails application to Phlex + RubyUI without manually rewriting the entire view layer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question led me to build the next step in this journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing ruby_ui_converter
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; was created to help developers build &lt;strong&gt;new Rails applications&lt;/strong&gt; using a modern stack, &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; is its natural continuation.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Allow existing Rails applications to gradually migrate their &lt;code&gt;.erb&lt;/code&gt; templates into Phlex and RubyUI components.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; → helps build new applications with the modern stack from the beginning&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_converter&lt;/code&gt; → helps existing applications transition to that stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automatically converting ERB into Ruby components
&lt;/h2&gt;

&lt;p&gt;The gem recursively scans Rails view folders and automatically converts &lt;code&gt;.erb&lt;/code&gt; templates into Ruby component files.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;ruby_ui_converter convert app/views/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/users/index.html.erb → app/views/users/index.rb
app/views/users/_user.html.erb → app/views/users/user.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire idea is to eliminate the repetitive work that usually comes with large migrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intelligent conversion for Phlex and RubyUI
&lt;/h2&gt;

&lt;p&gt;The goal was never to simply transform HTML into Ruby syntax.&lt;/p&gt;

&lt;p&gt;The gem understands common Rails patterns and generates code compatible with both Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A traditional Rails template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dashboard_path&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;gets automatically converted into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;href: &lt;/span&gt;&lt;span class="n"&gt;dashboard_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Partials like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s2"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;become Ruby components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="no"&gt;Views&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Products&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also understands more complex structures like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;form_with&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection_select&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;checkboxes&lt;/li&gt;
&lt;li&gt;conditionals (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;unless&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;loops (&lt;code&gt;each&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Rails helpers (&lt;code&gt;dom_id&lt;/code&gt;, &lt;code&gt;button_to&lt;/code&gt;, &lt;code&gt;content_for&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and converts them automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gradual migration without rewriting everything
&lt;/h2&gt;

&lt;p&gt;This was one of the most important requirements during development.&lt;/p&gt;

&lt;p&gt;The gem &lt;strong&gt;does not modify the original ERB files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead, it generates Ruby files alongside them.&lt;/p&gt;

&lt;p&gt;This makes incremental migration possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;convert one folder at a time&lt;/li&gt;
&lt;li&gt;review generated code&lt;/li&gt;
&lt;li&gt;test each screen individually&lt;/li&gt;
&lt;li&gt;keep parts of the application running on ERB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no need for a risky “big bang” migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building an ecosystem around RubyUI
&lt;/h2&gt;

&lt;p&gt;My goal with these gems has never been to release isolated tools.&lt;/p&gt;

&lt;p&gt;The bigger idea is to create tools that make adopting Phlex and RubyUI easier inside the Rails ecosystem.&lt;/p&gt;

&lt;p&gt;Right now, that journey starts with two complementary pieces.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_scaffold
&lt;/h3&gt;

&lt;p&gt;Built for new projects.&lt;/p&gt;

&lt;p&gt;Generate complete CRUD applications using Phlex + RubyUI from the very beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_converter
&lt;/h3&gt;

&lt;p&gt;Built for existing applications.&lt;/p&gt;

&lt;p&gt;Help legacy Rails apps migrate traditional ERB views into Ruby components.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger vision
&lt;/h2&gt;

&lt;p&gt;I’ve been spending a lot of time exploring ways to bring a more modern frontend development experience into Rails applications without losing what I have always loved about the Ruby ecosystem.&lt;/p&gt;

&lt;p&gt;Writing simple code.&lt;/p&gt;

&lt;p&gt;Maintaining high productivity.&lt;/p&gt;

&lt;p&gt;Continuing to work primarily in Ruby.&lt;/p&gt;

&lt;p&gt;These gems are part of that vision.&lt;/p&gt;

&lt;p&gt;I believe that over the next few years, we’ll see more Rails applications adopting component-based architectures, and I want to help make that transition easier.&lt;/p&gt;

&lt;p&gt;If you work with Rails and are curious about exploring the world of Phlex and RubyUI, I hope these tools can help you on that journey.&lt;/p&gt;

&lt;p&gt;And this is only the beginning :)&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇺🇸 Learning RubyUI Through Real Applications with `ruby_ui_scaffold`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 10 Jun 2026 13:01:57 +0000</pubDate>
      <link>https://dev.to/videosdeti/learning-rubyui-through-real-applications-with-rubyuiscaffold-4mdh</link>
      <guid>https://dev.to/videosdeti/learning-rubyui-through-real-applications-with-rubyuiscaffold-4mdh</guid>
      <description>&lt;p&gt;Building CRUD applications in Ruby on Rails has never been difficult. The challenge begins when we want to create modern, reusable, component-based interfaces without ending up with a mix of ERB templates, helpers, partials, and presentation logic spread across the application.&lt;/p&gt;

&lt;p&gt;Over the past few years, tools like Phlex and RubyUI have introduced a compelling alternative for Rails developers who want a cleaner and more maintainable view layer. However, one challenge remains: getting started.&lt;/p&gt;

&lt;p&gt;How should you structure your views? Which components should you use? How do you build complete CRUD flows with RubyUI?&lt;/p&gt;

&lt;p&gt;To make that journey easier, I built &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fin2sm0km43uw9df9i3pg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fin2sm0km43uw9df9i3pg.gif" alt="RubyUI Scaffold" width="600" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ruby_ui_scaffold?
&lt;/h2&gt;

&lt;p&gt;ruby_ui_scaffold is a Rails scaffold generator that creates complete CRUD applications using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby on Rails&lt;/li&gt;
&lt;li&gt;Phlex&lt;/li&gt;
&lt;li&gt;RubyUI&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of generating traditional ERB templates, it produces fully functional Phlex views built with RubyUI components from day one.&lt;/p&gt;

&lt;p&gt;Think of it as a modern alternative to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g scaffold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but designed specifically for component-based Rails applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  More than a Scaffold Generator
&lt;/h2&gt;

&lt;p&gt;While the primary goal is to speed up CRUD development, ruby_ui_scaffold also serves as a practical learning tool.&lt;/p&gt;

&lt;p&gt;Every generated resource includes real-world examples of RubyUI components such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Input&lt;/li&gt;
&lt;li&gt;Textarea&lt;/li&gt;
&lt;li&gt;Checkbox&lt;/li&gt;
&lt;li&gt;Badge&lt;/li&gt;
&lt;li&gt;Select&lt;/li&gt;
&lt;li&gt;Combobox&lt;/li&gt;
&lt;li&gt;DropdownMenu&lt;/li&gt;
&lt;li&gt;AlertDialog&lt;/li&gt;
&lt;li&gt;DatePicker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of reading documentation and trying to figure out how components fit together, you can study complete working implementations inside your own application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning RubyUI Through Real Code
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges when learning any component library is moving beyond isolated examples.&lt;/p&gt;

&lt;p&gt;For example, generating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Buddy &lt;span class="se"&gt;\&lt;/span&gt;
  name:string &lt;span class="se"&gt;\&lt;/span&gt;
  email:string &lt;span class="se"&gt;\&lt;/span&gt;
  admin:boolean &lt;span class="se"&gt;\&lt;/span&gt;
  birthday:date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;automatically creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Index pages&lt;/li&gt;
&lt;li&gt;Show pages&lt;/li&gt;
&lt;li&gt;Create and update flows&lt;/li&gt;
&lt;li&gt;Delete confirmations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All powered by RubyUI components.&lt;/p&gt;

&lt;p&gt;This provides practical examples that developers can inspect, modify, and learn from immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring Relationships
&lt;/h2&gt;

&lt;p&gt;The generator also supports &lt;code&gt;belongs_to&lt;/code&gt; relationships out of the box.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Book &lt;span class="se"&gt;\&lt;/span&gt;
  title:string &lt;span class="se"&gt;\&lt;/span&gt;
  author:references
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;automatically generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select inputs for small datasets&lt;/li&gt;
&lt;li&gt;Searchable Comboboxes for larger datasets&lt;/li&gt;
&lt;li&gt;Human-friendly relationship rendering&lt;/li&gt;
&lt;li&gt;Eager loading to prevent N+1 queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These generated examples demonstrate how advanced RubyUI components can be used in real applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering the DataTable Component
&lt;/h2&gt;

&lt;p&gt;Developers looking to explore more advanced UI patterns can enable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--datatable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates fully featured tables with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Per-page controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All built around RubyUI's DataTable component.&lt;/p&gt;

&lt;p&gt;For many developers, this becomes one of the easiest ways to understand how to integrate advanced RubyUI features into production applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate Data and Experiment
&lt;/h2&gt;

&lt;p&gt;The included seed command makes experimentation easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails ruby_ui_scaffold:seed Buddy &lt;span class="nt"&gt;--count&lt;/span&gt; 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using Faker, the generator populates your database with realistic sample data.&lt;/p&gt;

&lt;p&gt;This allows you to test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Search experiences&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Selection components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;under realistic conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Playground for Phlex and RubyUI
&lt;/h2&gt;

&lt;p&gt;Although ruby_ui_scaffold is highly productive, I believe its greatest value lies in education.&lt;/p&gt;

&lt;p&gt;Every generated scaffold becomes a living collection of RubyUI examples that developers can inspect and learn from.&lt;/p&gt;

&lt;p&gt;Rather than starting from a blank page, developers start from a complete application and gradually understand how RubyUI and Phlex work together.&lt;/p&gt;

&lt;p&gt;For teams evaluating RubyUI, this can dramatically shorten the learning curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;ruby_ui_scaffold was not created to replace learning RubyUI.&lt;/p&gt;

&lt;p&gt;It was created to make that learning process easier.&lt;/p&gt;

&lt;p&gt;By generating real code for real scenarios using real components, the gem helps bridge the gap between documentation and practical application.&lt;/p&gt;

&lt;p&gt;If your goal is to accelerate CRUD development, ruby_ui_scaffold can help.&lt;/p&gt;

&lt;p&gt;If your goal is to learn RubyUI and Phlex through hands-on examples, it may be one of the fastest ways to get started.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🇧🇷 Aprendendo RubyUI na Prática com `ruby_ui_scaffold`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 10 Jun 2026 13:00:43 +0000</pubDate>
      <link>https://dev.to/videosdeti/aprendendo-rubyui-na-pratica-com-rubyuiscaffold-9h9</link>
      <guid>https://dev.to/videosdeti/aprendendo-rubyui-na-pratica-com-rubyuiscaffold-9h9</guid>
      <description>&lt;p&gt;Quem trabalha com Ruby on Rails sabe que gerar um CRUD é fácil. O desafio começa quando queremos construir interfaces modernas, consistentes e reutilizáveis sem cair em uma mistura de ERB, helpers, partials e componentes espalhados pela aplicação.&lt;/p&gt;

&lt;p&gt;Nos últimos anos, o ecossistema Rails ganhou ferramentas extremamente interessantes como Phlex e RubyUI, que trazem uma experiência mais orientada a componentes para a camada de apresentação. Porém, para quem está começando, existe uma barreira inicial: como estruturar tudo isso? Quais componentes utilizar? Como conectar formulários, tabelas e ações CRUD usando RubyUI?&lt;/p&gt;

&lt;p&gt;Foi exatamente para reduzir essa curva de aprendizado que desenvolvi a gem &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftojbj5gj37an4uimet5j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftojbj5gj37an4uimet5j.gif" alt="RubyUI Scaffold" width="600" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o ruby_ui_scaffold?
&lt;/h2&gt;

&lt;p&gt;O ruby_ui_scaffold é um gerador de scaffold para Rails que cria aplicações CRUD completas utilizando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby on Rails&lt;/li&gt;
&lt;li&gt;Phlex&lt;/li&gt;
&lt;li&gt;RubyUI&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de gerar views ERB tradicionais, ele produz views escritas em Phlex utilizando componentes RubyUI desde o primeiro momento.&lt;/p&gt;

&lt;p&gt;Na prática, ele funciona como uma alternativa moderna ao tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g scaffold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mas gerando uma interface visual pronta para uso e alinhada com as boas práticas do ecossistema RubyUI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mais do que um gerador
&lt;/h2&gt;

&lt;p&gt;Embora o objetivo inicial seja acelerar a criação de CRUDs, o ruby_ui_scaffold acaba se tornando uma excelente ferramenta educacional.&lt;/p&gt;

&lt;p&gt;Ao gerar um recurso, você recebe exemplos reais de utilização de componentes como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Input&lt;/li&gt;
&lt;li&gt;Textarea&lt;/li&gt;
&lt;li&gt;Checkbox&lt;/li&gt;
&lt;li&gt;Badge&lt;/li&gt;
&lt;li&gt;Select&lt;/li&gt;
&lt;li&gt;Combobox&lt;/li&gt;
&lt;li&gt;DropdownMenu&lt;/li&gt;
&lt;li&gt;AlertDialog&lt;/li&gt;
&lt;li&gt;DatePicker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de consultar a documentação e tentar imaginar como cada componente deve ser utilizado, você passa a ter exemplos completos funcionando dentro da sua própria aplicação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendendo RubyUI através de código real
&lt;/h2&gt;

&lt;p&gt;Uma das maiores dificuldades ao aprender qualquer biblioteca de componentes é sair dos exemplos isolados e entender como ela funciona em um sistema real.&lt;/p&gt;

&lt;p&gt;Por exemplo, ao gerar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Buddy &lt;span class="se"&gt;\&lt;/span&gt;
  name:string &lt;span class="se"&gt;\&lt;/span&gt;
  email:string &lt;span class="se"&gt;\&lt;/span&gt;
  admin:boolean &lt;span class="se"&gt;\&lt;/span&gt;
  birthday:date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o scaffold cria automaticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formulários completos&lt;/li&gt;
&lt;li&gt;Listagens&lt;/li&gt;
&lt;li&gt;Páginas de detalhes&lt;/li&gt;
&lt;li&gt;Fluxo de criação e edição&lt;/li&gt;
&lt;li&gt;Exclusão com confirmação visual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo utilizando componentes RubyUI.&lt;/p&gt;

&lt;p&gt;Isso permite estudar padrões reais de implementação, em vez de exemplos artificiais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explorando relacionamentos
&lt;/h2&gt;

&lt;p&gt;Outro aspecto interessante é o suporte automático a associações &lt;code&gt;belongs_to&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ao gerar um relacionamento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Book &lt;span class="se"&gt;\&lt;/span&gt;
  title:string &lt;span class="se"&gt;\&lt;/span&gt;
  author:references
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o scaffold cria automaticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selects para pequenas listas&lt;/li&gt;
&lt;li&gt;Comboboxes pesquisáveis para grandes volumes&lt;/li&gt;
&lt;li&gt;Exibição amigável do relacionamento&lt;/li&gt;
&lt;li&gt;Eager loading para evitar N+1 queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além de acelerar o desenvolvimento, isso mostra na prática como utilizar componentes avançados do RubyUI em cenários reais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo o DataTable
&lt;/h2&gt;

&lt;p&gt;Quem deseja explorar componentes mais sofisticados pode utilizar a opção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--datatable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com ela, o scaffold gera páginas com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busca&lt;/li&gt;
&lt;li&gt;Ordenação&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Controle de quantidade de registros por página&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo baseado no componente DataTable do RubyUI.&lt;/p&gt;

&lt;p&gt;Essa funcionalidade é particularmente útil para quem deseja aprender como implementar tabelas avançadas utilizando RubyUI sem precisar construir tudo do zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gerando dados para experimentar
&lt;/h2&gt;

&lt;p&gt;Outro recurso interessante é o comando de seed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails ruby_ui_scaffold:seed Buddy &lt;span class="nt"&gt;--count&lt;/span&gt; 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele gera dados fictícios utilizando Faker, permitindo que você teste rapidamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tabelas&lt;/li&gt;
&lt;li&gt;Formulários&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Componentes de busca&lt;/li&gt;
&lt;li&gt;Componentes de seleção&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quanto mais dados você gera, mais fácil fica entender o comportamento dos componentes RubyUI em situações reais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Um laboratório para aprender Phlex e RubyUI
&lt;/h2&gt;

&lt;p&gt;Embora a gem seja extremamente útil para acelerar o desenvolvimento, acredito que seu maior valor esteja na capacidade de servir como um laboratório de aprendizado.&lt;/p&gt;

&lt;p&gt;Cada scaffold gerado se transforma em uma coleção de exemplos reais que podem ser estudados, adaptados e reutilizados.&lt;/p&gt;

&lt;p&gt;Se você está começando com RubyUI ou deseja entender como estruturar aplicações Rails utilizando Phlex, o ruby_ui_scaffold pode funcionar como um excelente ponto de partida.&lt;/p&gt;

&lt;p&gt;Em vez de começar com uma página em branco, você começa com uma aplicação funcional e pode evoluir a partir dela, aprendendo os componentes e padrões aos poucos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O ruby_ui_scaffold não pretende substituir o aprendizado do RubyUI. Pelo contrário: ele foi criado para facilitar esse processo.&lt;/p&gt;

&lt;p&gt;Ao gerar código real, utilizando componentes reais e cenários reais, a gem reduz a distância entre a documentação e a aplicação prática.&lt;/p&gt;

&lt;p&gt;Se você quer acelerar seus CRUDs, ótimo.&lt;/p&gt;

&lt;p&gt;Mas se também quer aprender RubyUI e Phlex de forma prática, provavelmente esse é um dos caminhos mais rápidos para começar.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🇺🇸 3 Essential Gems to Eliminate Friction in Your Rails Workflow</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Thu, 04 Jun 2026 21:48:37 +0000</pubDate>
      <link>https://dev.to/videosdeti/3-essential-gems-to-eliminate-friction-in-your-rails-workflow-3fap</link>
      <guid>https://dev.to/videosdeti/3-essential-gems-to-eliminate-friction-in-your-rails-workflow-3fap</guid>
      <description>&lt;p&gt;Anyone who works with Ruby on Rails knows that, despite the framework being incredible for productivity, there are some classic workflow deficiencies that haunt almost every project. &lt;/p&gt;

&lt;p&gt;You are focused on writing code, but suddenly you need to open an external tool like Postman to test a route. Then, you run a complex script to generate a static database diagram. And at the end of the day, you still need to manually update the API documentation, which will inevitably become outdated in the next sprint.&lt;/p&gt;

&lt;p&gt;This constant context switching and manual maintenance generates enormous friction. To cover these deficiencies, I developed three gems that bring these tools &lt;strong&gt;inside&lt;/strong&gt; your application. They are so practical that they quickly become indispensable in any Rails project. Meet each one of them:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;rails-api-docs&lt;/code&gt;: The End of Outdated Documentation]
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; API documentation always starts with good intentions, but as the system evolves—new routes, parameters, and response fields—it quickly stops representing reality. Keeping this updated manually is repetitive and frustrating work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-api-docs&lt;/code&gt; gem solves this by leveraging what Rails already knows. It inspects your routes, controllers (via AST analysis using Prism), and the ActiveRecord schema to automatically generate the first draft of your documentation. Everything is saved in a single YAML file (&lt;code&gt;config/rails-api-docs.yml&lt;/code&gt;), which serves as the single source of truth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Append-only strategy:&lt;/strong&gt; When adding new routes and running the generator, the gem only appends what's new. Your descriptions, custom examples, and tags are never modified or deleted, making the documentation a living document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero development friction:&lt;/strong&gt; You edit the YAML in one window and view the updated documentation in the browser at &lt;code&gt;localhost:3000/rails/api-docs&lt;/code&gt; instantly, with no build step required. For production, it exports a single static HTML file without any external dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;rails-http-lab&lt;/code&gt;: Your HTTP Client Right in the App
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; Testing HTTP endpoints usually requires switching to external tools (like Postman or Insomnia) or creating temporary scripts. Besides the loss of focus, these tools live outside your repository and frequently suffer from CORS issues when trying to access internal services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-http-lab&lt;/code&gt; is a Rails Engine that couples an HTTP request lab inside your own application. By accessing &lt;code&gt;/rails/http-lab&lt;/code&gt;, you have a lightweight interface to test methods, headers, and payloads while visualizing the responses directly in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stays in the Repository:&lt;/strong&gt; Your requests are saved in &lt;code&gt;.bru&lt;/code&gt; format (interchangeable with the Bruno desktop app) inside the project's &lt;code&gt;docs/http-lab/&lt;/code&gt; folder. This means your API tests are version-controlled in Git and can be easily reviewed in Pull Requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No CORS limits:&lt;/strong&gt; Since the requests are executed by the Rails server itself, you don't have CORS problems and can reach internal services transparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;rails-realtime-erd&lt;/code&gt;: Database Diagrams Always in Sync
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-realtime-erd" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-realtime-erd&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; Understanding database relationships in a growing project is difficult. Traditional tools generate static diagrams (ERD) that require manual tasks and quickly become outdated as soon as a new migration is executed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-realtime-erd&lt;/code&gt; gem mounts a route at &lt;code&gt;/rails/erd&lt;/code&gt; that renders your schema diagram in real-time using Mermaid, all processed by Hotwire (Stimulus), without relying on complex JavaScript frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;br&gt;
You will never again need to run a rake step to generate a static image file. The introspection is done on the fly: if you run a migration, just refresh the page to see the new tables and relationships reflected in the diagram immediately. It is excellent for onboarding new developers and keeping a live documentation of your architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;These three tools share the same philosophy: &lt;strong&gt;your code already has the necessary knowledge, and the support tools should live as close to it as possible&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Adopting &lt;code&gt;rails-api-docs&lt;/code&gt;, &lt;code&gt;rails-http-lab&lt;/code&gt;, and &lt;code&gt;rails-realtime-erd&lt;/code&gt; drastically reduces daily friction, eliminating external dependencies and manual rework. With simple installation steps, your development environment will become much more productive, robust, and integrated.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>rails</category>
      <category>ruby</category>
      <category>tooling</category>
    </item>
    <item>
      <title>🇧🇷 3 Gems Indispensáveis para Eliminar as Deficiências do seu Fluxo de Trabalho no Rails</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Thu, 04 Jun 2026 21:47:50 +0000</pubDate>
      <link>https://dev.to/videosdeti/3-gems-indispensaveis-para-eliminar-as-deficiencias-do-seu-fluxo-de-trabalho-no-rails-32mg</link>
      <guid>https://dev.to/videosdeti/3-gems-indispensaveis-para-eliminar-as-deficiencias-do-seu-fluxo-de-trabalho-no-rails-32mg</guid>
      <description>&lt;p&gt;Quem trabalha com Ruby on Rails sabe que, embora o framework seja incrível para a produtividade, existem algumas deficiências clássicas no fluxo de desenvolvimento que assombram quase todo projeto. &lt;/p&gt;

&lt;p&gt;Você está focado escrevendo código, mas de repente precisa abrir uma ferramenta externa como o Postman para testar uma rota. Depois, roda um script complexo para gerar um diagrama estático do banco de dados. E, no fim do dia, ainda precisa atualizar manualmente a documentação da API, que fatalmente ficará defasada na próxima sprint. &lt;/p&gt;

&lt;p&gt;Essa constante alternância de contexto e manutenção manual geram um enorme atrito. Para cobrir essas deficiências, eu desenvolvi três gems que trazem essas ferramentas para &lt;strong&gt;dentro&lt;/strong&gt; da sua aplicação. Elas são tão práticas que rapidamente se tornam indispensáveis em qualquer projeto Rails. Conheça cada uma delas:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;rails-api-docs&lt;/code&gt;: O Fim da Documentação Desatualizada
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; A documentação de API sempre começa com boas intenções, mas conforme o sistema evolui — novas rotas, parâmetros e campos na resposta —, ela rapidamente deixa de representar a realidade. Manter isso atualizado manualmente é um trabalho repetitivo e frustrante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; A gem &lt;code&gt;rails-api-docs&lt;/code&gt; resolve isso aproveitando o que o Rails já sabe. Ela inspeciona suas rotas, controllers (via análise AST usando Prism) e o schema do ActiveRecord para gerar automaticamente o primeiro rascunho da sua documentação. Tudo é salvo em um único arquivo YAML (&lt;code&gt;config/rails-api-docs.yml&lt;/code&gt;), que serve como fonte da verdade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Estratégia &lt;em&gt;Append-only&lt;/em&gt;:&lt;/strong&gt; Ao adicionar novas rotas e rodar o gerador, a gem apenas adiciona o que é novo. Suas descrições, exemplos customizados e tags não são apagados, tornando a documentação um documento vivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero atrito no desenvolvimento:&lt;/strong&gt; Você edita o YAML de um lado e visualiza a documentação atualizada no navegador em &lt;code&gt;localhost:3000/rails/api-docs&lt;/code&gt; instantaneamente, sem etapa de build. Para produção, ela exporta um único arquivo HTML estático, sem dependências externas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;rails-http-lab&lt;/code&gt;: Seu Client HTTP Direto na Aplicação
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; Testar endpoints HTTP geralmente exige alternar para ferramentas externas (como Postman ou Insomnia) ou criar scripts temporários. Além da perda de foco, essas ferramentas vivem fora do seu repositório e frequentemente sofrem com problemas de CORS ao tentar acessar serviços internos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; O &lt;code&gt;rails-http-lab&lt;/code&gt; é uma Rails Engine que acopla um laboratório de requisições HTTP dentro da sua própria aplicação. Ao acessar &lt;code&gt;/rails/http-lab&lt;/code&gt;, você tem uma interface leve para testar métodos, headers e payloads visualizando as respostas diretamente no navegador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fica no Repositório:&lt;/strong&gt; As suas requisições são salvas no formato &lt;code&gt;.bru&lt;/code&gt; (compatível com o aplicativo desktop Bruno) dentro da pasta &lt;code&gt;docs/http-lab/&lt;/code&gt; do projeto. Isso significa que os testes da sua API são versionados no Git e podem ser revisados nos Pull Requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sem limites de CORS:&lt;/strong&gt; Como as requisições são executadas pelo próprio servidor Rails, você não tem problemas de CORS e pode alcançar serviços internos de forma transparente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;rails-realtime-erd&lt;/code&gt;: Diagramas de Banco de Dados Sempre Sincronizados
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-realtime-erd" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-realtime-erd&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; Entender os relacionamentos do banco de dados em um projeto que está crescendo é difícil. As ferramentas tradicionais geram diagramas estáticos (ERD) que exigem tarefas manuais e rapidamente ficam defasados assim que uma nova migration é executada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; A gem &lt;code&gt;rails-realtime-erd&lt;/code&gt; monta uma rota em &lt;code&gt;/rails/erd&lt;/code&gt; que renderiza o diagrama do seu schema em tempo real usando o Mermaid, tudo processado pelo Hotwire (Stimulus), sem depender de frameworks JavaScript complexos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;br&gt;
Você nunca mais precisará rodar um passo de rake para gerar um arquivo de imagem estático. A introspecção é feita sob demanda: se você rodar uma migration, basta atualizar a página para ver as tabelas e relacionamentos novos refletidos no diagrama imediatamente. É excelente para o onboarding de novos desenvolvedores e documentação viva da arquitetura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Essas três ferramentas compartilham a mesma filosofia: &lt;strong&gt;o seu código já possui o conhecimento necessário, e as ferramentas de apoio devem viver o mais próximo possível dele&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Adotar o &lt;code&gt;rails-api-docs&lt;/code&gt;, o &lt;code&gt;rails-http-lab&lt;/code&gt; e o &lt;code&gt;rails-realtime-erd&lt;/code&gt; reduz drasticamente o atrito no dia a dia, eliminando dependências externas e o retrabalho manual. Com passos simples de instalação (basta adicionar ao &lt;code&gt;Gemfile&lt;/code&gt; e rodar um comando), seu ambiente de desenvolvimento se tornará muito mais produtivo, robusto e integrado.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🇺🇸 I Got Tired of Stale API Documentation in Rails — So I Built `rails-api-docs`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 03 Jun 2026 12:25:33 +0000</pubDate>
      <link>https://dev.to/videosdeti/i-got-tired-of-stale-api-documentation-in-rails-so-i-built-rails-api-docs-2362</link>
      <guid>https://dev.to/videosdeti/i-got-tired-of-stale-api-documentation-in-rails-so-i-built-rails-api-docs-2362</guid>
      <description>&lt;p&gt;API documentation always starts with good intentions.&lt;/p&gt;

&lt;p&gt;At the beginning of a project, everything is in sync.&lt;/p&gt;

&lt;p&gt;Routes match reality.&lt;/p&gt;

&lt;p&gt;Examples are accurate.&lt;/p&gt;

&lt;p&gt;Parameters make sense.&lt;/p&gt;

&lt;p&gt;Responses reflect exactly what the API returns.&lt;/p&gt;

&lt;p&gt;But as the system evolves, documentation starts falling behind.&lt;/p&gt;

&lt;p&gt;A new route gets added.&lt;/p&gt;

&lt;p&gt;A parameter changes.&lt;/p&gt;

&lt;p&gt;An endpoint gains authentication.&lt;/p&gt;

&lt;p&gt;A response receives new fields.&lt;/p&gt;

&lt;p&gt;And before you realize it, the documentation no longer represents reality.&lt;/p&gt;

&lt;p&gt;If you've worked with Rails APIs for long enough, you've probably experienced this.&lt;/p&gt;

&lt;p&gt;I certainly have.&lt;/p&gt;

&lt;p&gt;And it was exactly that frustration that led me to create &lt;strong&gt;rails-api-docs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fei63b0nvza955aesy8fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fei63b0nvza955aesy8fa.png" alt="Rails API Docs" width="799" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea started with a simple question
&lt;/h2&gt;

&lt;p&gt;Your Rails application already knows a lot.&lt;/p&gt;

&lt;p&gt;It knows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your routes&lt;/li&gt;
&lt;li&gt;your controllers&lt;/li&gt;
&lt;li&gt;your parameters&lt;/li&gt;
&lt;li&gt;your models&lt;/li&gt;
&lt;li&gt;your database schema&lt;/li&gt;
&lt;li&gt;your HTTP verbs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So why should documentation always start from scratch?&lt;/p&gt;

&lt;p&gt;Why do we need to manually rewrite information that already exists inside the application?&lt;/p&gt;

&lt;p&gt;The idea behind &lt;code&gt;rails-api-docs&lt;/code&gt; was to leverage the knowledge Rails already has to generate the first draft of the documentation automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow I wanted didn't exist
&lt;/h2&gt;

&lt;p&gt;I didn't want another tool where the workflow looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;edit documentation
→ generate artifacts
→ rebuild
→ restart server
→ validate changes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I wanted something closer to the typical Rails development experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;edit
→ refresh browser
→ keep working
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's where the core concept of the gem came from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A single editable YAML file that powers both development-time documentation and production-ready documentation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A single source of truth
&lt;/h2&gt;

&lt;p&gt;The entire workflow revolves around a single file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config/rails-api-docs.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This file becomes the source of truth for your documentation.&lt;/p&gt;

&lt;p&gt;From it, the gem generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;live documentation during development&lt;/li&gt;
&lt;li&gt;request examples&lt;/li&gt;
&lt;li&gt;response examples&lt;/li&gt;
&lt;li&gt;documented schemas&lt;/li&gt;
&lt;li&gt;static HTML documentation for production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You update one file.&lt;/p&gt;

&lt;p&gt;Everything else updates automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;First, generate the initial YAML file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g rails-api-docs:init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gem automatically inspects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Rails.application.routes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;controllers (via Prism AST analysis)&lt;/li&gt;
&lt;li&gt;ActiveRecord schema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And creates an initial documentation structure.&lt;/p&gt;

&lt;p&gt;Then start your application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000/rails/api-docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever you modify the YAML file, simply refresh the page.&lt;/p&gt;

&lt;p&gt;No build step.&lt;/p&gt;

&lt;p&gt;No frontend tooling.&lt;/p&gt;

&lt;p&gt;No intermediate process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let the code write the first draft
&lt;/h2&gt;

&lt;p&gt;One of the most interesting parts of this project was using Prism to analyze controllers.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:role&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gem can automatically identify these fields and use them to build the initial documentation structure.&lt;/p&gt;

&lt;p&gt;Combined with ActiveRecord schema information, it can also infer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;field types&lt;/li&gt;
&lt;li&gt;required attributes&lt;/li&gt;
&lt;li&gt;initial examples&lt;/li&gt;
&lt;li&gt;schema metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was never to replace developers.&lt;/p&gt;

&lt;p&gt;The goal was to eliminate repetitive work.&lt;/p&gt;

&lt;p&gt;Let the machine handle what it can already discover.&lt;/p&gt;

&lt;p&gt;And let humans focus on the important part: explaining the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation updates shouldn't destroy your work
&lt;/h2&gt;

&lt;p&gt;This is probably the feature that frustrated me most in existing approaches.&lt;/p&gt;

&lt;p&gt;You generate documentation.&lt;/p&gt;

&lt;p&gt;Spend time writing descriptions.&lt;/p&gt;

&lt;p&gt;Add examples.&lt;/p&gt;

&lt;p&gt;Organize sections.&lt;/p&gt;

&lt;p&gt;Customize schemas.&lt;/p&gt;

&lt;p&gt;Then you run the generator again.&lt;/p&gt;

&lt;p&gt;And hope nothing gets overwritten.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rails-api-docs&lt;/code&gt; follows an &lt;em&gt;append-only&lt;/em&gt; strategy.&lt;/p&gt;

&lt;p&gt;When you add new routes to your application, simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g rails-api-docs:update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gem appends only new endpoints.&lt;/p&gt;

&lt;p&gt;Everything you've written remains untouched.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;descriptions&lt;/li&gt;
&lt;li&gt;examples&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;li&gt;authentication details&lt;/li&gt;
&lt;li&gt;schemas&lt;/li&gt;
&lt;li&gt;section organization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, the documentation becomes a living document rather than a disposable artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizing larger APIs with tags
&lt;/h2&gt;

&lt;p&gt;As APIs grow, navigation becomes increasingly important.&lt;/p&gt;

&lt;p&gt;That's why the gem supports tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;auth&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;public&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These tags aren't just labels.&lt;/p&gt;

&lt;p&gt;They also become interactive filters in the generated documentation.&lt;/p&gt;

&lt;p&gt;Clicking a tag instantly filters the navigation to show only endpoints associated with that category.&lt;/p&gt;

&lt;p&gt;This makes large APIs significantly easier to explore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production should be simple
&lt;/h2&gt;

&lt;p&gt;Another important goal was making deployment boring.&lt;/p&gt;

&lt;p&gt;When you're ready to publish the documentation, simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rake rails-api-docs:build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public/api-docs.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single HTML file.&lt;/p&gt;

&lt;p&gt;Everything embedded.&lt;/p&gt;

&lt;p&gt;Inline CSS.&lt;/p&gt;

&lt;p&gt;Inline JavaScript.&lt;/p&gt;

&lt;p&gt;No external dependencies.&lt;/p&gt;

&lt;p&gt;No CDN.&lt;/p&gt;

&lt;p&gt;No Asset Pipeline.&lt;/p&gt;

&lt;p&gt;No JavaScript runtime.&lt;/p&gt;

&lt;p&gt;Just a static file that can be hosted almost anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  I'm not trying to replace OpenAPI
&lt;/h2&gt;

&lt;p&gt;There are excellent OpenAPI and Swagger-based tools available today.&lt;/p&gt;

&lt;p&gt;They solve many problems extremely well.&lt;/p&gt;

&lt;p&gt;The goal of &lt;code&gt;rails-api-docs&lt;/code&gt; is not to replace that ecosystem.&lt;/p&gt;

&lt;p&gt;The idea is different.&lt;/p&gt;

&lt;p&gt;I wanted a solution that allows developers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate documentation from an existing Rails application&lt;/li&gt;
&lt;li&gt;edit everything in YAML&lt;/li&gt;
&lt;li&gt;preview changes instantly&lt;/li&gt;
&lt;li&gt;export a static HTML file&lt;/li&gt;
&lt;li&gt;keep documentation synchronized with minimal effort&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the workflow I was looking for.&lt;/p&gt;

&lt;p&gt;And since I couldn't find exactly what I wanted, I decided to build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;API documentation should be easy to create and easy to maintain.&lt;/p&gt;

&lt;p&gt;In my experience, generating the first version isn't the hard part.&lt;/p&gt;

&lt;p&gt;Keeping it updated over time is.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;rails-api-docs&lt;/code&gt; was created to reduce that friction.&lt;/p&gt;

&lt;p&gt;By inspecting the application to generate a starting point.&lt;/p&gt;

&lt;p&gt;By preserving your customizations over time.&lt;/p&gt;

&lt;p&gt;And by providing an extremely fast feedback loop during development.&lt;/p&gt;

&lt;p&gt;If you'd like to try it out:&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, suggestions, and contributions are always welcome.&lt;/p&gt;

</description>
      <category>api</category>
      <category>opensource</category>
      <category>rails</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🇧🇷 Eu Cansei de Documentação de API Desatualizada no Rails — Então Criei a Gem `rails-api-docs`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 03 Jun 2026 12:24:43 +0000</pubDate>
      <link>https://dev.to/videosdeti/eu-cansei-de-documentacao-de-api-desatualizada-no-rails-entao-criei-a-gem-rails-api-docs-jho</link>
      <guid>https://dev.to/videosdeti/eu-cansei-de-documentacao-de-api-desatualizada-no-rails-entao-criei-a-gem-rails-api-docs-jho</guid>
      <description>&lt;p&gt;Documentação de API sempre começa com boas intenções.&lt;/p&gt;

&lt;p&gt;No início do projeto, tudo está sincronizado.&lt;/p&gt;

&lt;p&gt;As rotas batem com a aplicação.&lt;/p&gt;

&lt;p&gt;Os exemplos estão corretos.&lt;/p&gt;

&lt;p&gt;Os parâmetros fazem sentido.&lt;/p&gt;

&lt;p&gt;As respostas refletem exatamente o que a API retorna.&lt;/p&gt;

&lt;p&gt;Mas conforme o sistema evolui, a documentação começa a ficar para trás.&lt;/p&gt;

&lt;p&gt;Uma nova rota é criada.&lt;/p&gt;

&lt;p&gt;Um parâmetro muda.&lt;/p&gt;

&lt;p&gt;Um endpoint ganha autenticação.&lt;/p&gt;

&lt;p&gt;Uma resposta recebe novos campos.&lt;/p&gt;

&lt;p&gt;E, sem perceber, a documentação deixa de representar a realidade.&lt;/p&gt;

&lt;p&gt;Se você trabalha com APIs em Rails há algum tempo, provavelmente já passou por isso.&lt;/p&gt;

&lt;p&gt;Eu certamente já passei.&lt;/p&gt;

&lt;p&gt;E foi justamente essa frustração que me levou a criar o &lt;strong&gt;rails-api-docs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fei63b0nvza955aesy8fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fei63b0nvza955aesy8fa.png" alt="Rails API Docs" width="799" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A ideia surgiu de uma pergunta simples
&lt;/h2&gt;

&lt;p&gt;Sua aplicação Rails já sabe muita coisa.&lt;/p&gt;

&lt;p&gt;Ela conhece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;suas rotas&lt;/li&gt;
&lt;li&gt;seus controllers&lt;/li&gt;
&lt;li&gt;seus parâmetros&lt;/li&gt;
&lt;li&gt;seus modelos&lt;/li&gt;
&lt;li&gt;seu schema do banco&lt;/li&gt;
&lt;li&gt;seus verbos HTTP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então por que a documentação precisa começar sempre do zero?&lt;/p&gt;

&lt;p&gt;Por que precisamos reescrever manualmente informações que já existem dentro da aplicação?&lt;/p&gt;

&lt;p&gt;A ideia por trás do &lt;code&gt;rails-api-docs&lt;/code&gt; foi justamente aproveitar esse conhecimento que o Rails já possui para gerar um primeiro rascunho da documentação automaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  O workflow que eu queria não existia
&lt;/h2&gt;

&lt;p&gt;Eu não queria mais uma ferramenta onde o fluxo fosse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;editar documentação
→ gerar artefatos
→ rebuild
→ reiniciar servidor
→ validar alterações
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eu queria algo mais próximo do desenvolvimento Rails tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;editar
→ atualizar navegador
→ continuar trabalhando
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi daí que surgiu o conceito central da gem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um único arquivo YAML editável que gera tanto a documentação em desenvolvimento quanto a documentação de produção.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Uma única fonte da verdade
&lt;/h2&gt;

&lt;p&gt;O fluxo da gem gira em torno de apenas um arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config/rails-api-docs.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse arquivo é a fonte da verdade para toda a documentação.&lt;/p&gt;

&lt;p&gt;A partir dele a gem gera:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visualização em tempo real durante o desenvolvimento&lt;/li&gt;
&lt;li&gt;exemplos de requisição&lt;/li&gt;
&lt;li&gt;exemplos de resposta&lt;/li&gt;
&lt;li&gt;schemas documentados&lt;/li&gt;
&lt;li&gt;documentação HTML estática para produção&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você altera um único lugar.&lt;/p&gt;

&lt;p&gt;Todo o resto é atualizado automaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como funciona
&lt;/h2&gt;

&lt;p&gt;Primeiro você gera o YAML inicial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g rails-api-docs:init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A gem inspeciona automaticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Rails.application.routes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;controllers (via análise AST usando Prism)&lt;/li&gt;
&lt;li&gt;schema do ActiveRecord&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E cria uma estrutura inicial de documentação.&lt;/p&gt;

&lt;p&gt;Depois basta subir a aplicação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E acessar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000/rails/api-docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sempre que você alterar o YAML, basta atualizar a página.&lt;/p&gt;

&lt;p&gt;Não existe etapa de build durante o desenvolvimento.&lt;/p&gt;

&lt;p&gt;Não existe pipeline frontend.&lt;/p&gt;

&lt;p&gt;Não existe processo intermediário.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deixe o código escrever o primeiro rascunho
&lt;/h2&gt;

&lt;p&gt;Uma das partes mais interessantes do projeto foi utilizar o Prism para analisar controllers.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:user&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;permit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;:email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;:role&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A gem consegue identificar automaticamente esses campos e utilizá-los para montar a estrutura inicial da documentação.&lt;/p&gt;

&lt;p&gt;Quando combinamos isso com as informações do ActiveRecord, também é possível inferir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tipos dos campos&lt;/li&gt;
&lt;li&gt;obrigatoriedade&lt;/li&gt;
&lt;li&gt;exemplos iniciais&lt;/li&gt;
&lt;li&gt;informações do schema&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O objetivo nunca foi substituir o trabalho do desenvolvedor.&lt;/p&gt;

&lt;p&gt;O objetivo foi eliminar tarefas repetitivas.&lt;/p&gt;

&lt;p&gt;Deixar a máquina fazer aquilo que ela consegue descobrir sozinha.&lt;/p&gt;

&lt;p&gt;E deixar os humanos cuidarem da parte importante: explicar a API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atualizações não deveriam apagar seu trabalho
&lt;/h2&gt;

&lt;p&gt;Essa talvez seja a característica que mais me incomodava em algumas abordagens existentes.&lt;/p&gt;

&lt;p&gt;Você gera documentação.&lt;/p&gt;

&lt;p&gt;Investe tempo escrevendo descrições.&lt;/p&gt;

&lt;p&gt;Adiciona exemplos.&lt;/p&gt;

&lt;p&gt;Organiza seções.&lt;/p&gt;

&lt;p&gt;Personaliza schemas.&lt;/p&gt;

&lt;p&gt;Então roda novamente o gerador.&lt;/p&gt;

&lt;p&gt;E precisa rezar para não perder nada.&lt;/p&gt;

&lt;p&gt;No &lt;code&gt;rails-api-docs&lt;/code&gt; o YAML segue uma estratégia &lt;em&gt;append-only&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Quando você adiciona novas rotas à aplicação basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g rails-api-docs:update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A gem adiciona apenas os endpoints novos.&lt;/p&gt;

&lt;p&gt;Todo o conteúdo que você escreveu continua intacto.&lt;/p&gt;

&lt;p&gt;Isso inclui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;descrições&lt;/li&gt;
&lt;li&gt;exemplos&lt;/li&gt;
&lt;li&gt;tags&lt;/li&gt;
&lt;li&gt;autenticação&lt;/li&gt;
&lt;li&gt;schemas&lt;/li&gt;
&lt;li&gt;organização das seções&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na prática, a documentação deixa de ser um artefato descartável e passa a ser um documento vivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizando APIs maiores com Tags
&lt;/h2&gt;

&lt;p&gt;Conforme uma API cresce, navegar pela documentação pode ficar mais difícil.&lt;/p&gt;

&lt;p&gt;Por isso a gem possui suporte a tags:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;auth&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;public&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essas tags não são apenas informativas.&lt;/p&gt;

&lt;p&gt;Elas também funcionam como filtros interativos na documentação gerada.&lt;/p&gt;

&lt;p&gt;Ao clicar em uma tag, a navegação passa a exibir apenas os endpoints relacionados àquela categoria.&lt;/p&gt;

&lt;p&gt;Isso facilita bastante a exploração de APIs maiores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Produção deveria ser simples
&lt;/h2&gt;

&lt;p&gt;Outro objetivo importante era simplificar o deploy da documentação.&lt;/p&gt;

&lt;p&gt;Quando chega o momento de publicar, basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rake rails-api-docs:build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public/api-docs.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um único arquivo HTML.&lt;/p&gt;

&lt;p&gt;Tudo embutido.&lt;/p&gt;

&lt;p&gt;CSS inline.&lt;/p&gt;

&lt;p&gt;JavaScript inline.&lt;/p&gt;

&lt;p&gt;Sem dependências externas.&lt;/p&gt;

&lt;p&gt;Sem CDN.&lt;/p&gt;

&lt;p&gt;Sem Asset Pipeline.&lt;/p&gt;

&lt;p&gt;Sem runtime JavaScript.&lt;/p&gt;

&lt;p&gt;Apenas um arquivo estático que pode ser hospedado praticamente em qualquer lugar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não estou tentando substituir OpenAPI
&lt;/h2&gt;

&lt;p&gt;Existem excelentes ferramentas baseadas em OpenAPI e Swagger.&lt;/p&gt;

&lt;p&gt;Elas resolvem muito bem diversos cenários.&lt;/p&gt;

&lt;p&gt;O objetivo do &lt;code&gt;rails-api-docs&lt;/code&gt; não é substituir esse ecossistema.&lt;/p&gt;

&lt;p&gt;A proposta é diferente.&lt;/p&gt;

&lt;p&gt;Eu queria uma solução que permitisse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gerar documentação a partir de uma aplicação Rails existente&lt;/li&gt;
&lt;li&gt;editar tudo em YAML&lt;/li&gt;
&lt;li&gt;visualizar mudanças instantaneamente&lt;/li&gt;
&lt;li&gt;exportar um HTML estático&lt;/li&gt;
&lt;li&gt;manter a documentação sincronizada com pouco esforço&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Era esse workflow que eu procurava.&lt;/p&gt;

&lt;p&gt;E como não encontrei exatamente dessa forma, resolvi construir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerações finais
&lt;/h2&gt;

&lt;p&gt;Documentação de API deveria ser simples de criar e simples de manter.&lt;/p&gt;

&lt;p&gt;Na minha experiência, o maior problema não é gerar a primeira versão.&lt;/p&gt;

&lt;p&gt;O desafio é mantê-la atualizada ao longo do tempo.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;rails-api-docs&lt;/code&gt; nasceu justamente para reduzir esse atrito.&lt;/p&gt;

&lt;p&gt;Inspecionando a aplicação para gerar um ponto de partida.&lt;/p&gt;

&lt;p&gt;Preservando suas customizações ao longo do tempo.&lt;/p&gt;

&lt;p&gt;E oferecendo um ciclo de feedback extremamente rápido durante o desenvolvimento.&lt;/p&gt;

&lt;p&gt;Se quiser experimentar:&lt;/p&gt;

&lt;p&gt;⭐ &lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedbacks, sugestões e contribuições são muito bem-vindos.&lt;/p&gt;

</description>
      <category>api</category>
      <category>rails</category>
      <category>ruby</category>
      <category>showdev</category>
    </item>
    <item>
      <title>🇺🇸 Introducing Rails HTTP Lab: Test Your Rails Routes Directly Inside Your Application</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Fri, 29 May 2026 17:57:35 +0000</pubDate>
      <link>https://dev.to/videosdeti/introducing-rails-http-lab-test-your-rails-routes-directly-inside-your-application-1c5</link>
      <guid>https://dev.to/videosdeti/introducing-rails-http-lab-test-your-rails-routes-directly-inside-your-application-1c5</guid>
      <description>&lt;p&gt;When working with &lt;strong&gt;Ruby on Rails&lt;/strong&gt;, testing HTTP endpoints is part of everyday development.&lt;/p&gt;

&lt;p&gt;Most of the time, we rely on tools like Postman, Insomnia, curl, or even temporary scripts just to validate requests, headers, payloads, and responses.&lt;/p&gt;

&lt;p&gt;But during development, I found myself asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if I could test my Rails routes directly from inside the application itself?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That idea led me to create &lt;strong&gt;Rails HTTP Lab&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhnqah4ca30mzkmbfa8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhnqah4ca30mzkmbfa8z.png" alt="Rails HTTP Lab" width="799" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Rails HTTP Lab?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rails-http-lab&lt;/code&gt; is a Rails Engine that provides an embedded interface inside your Rails application to test HTTP requests against your own routes.&lt;/p&gt;

&lt;p&gt;Think of it as a lightweight HTTP client focused on your Rails app.&lt;/p&gt;

&lt;p&gt;With it, you can experiment with your endpoints without constantly switching between your editor, terminal, browser, and external API tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;Current capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for common HTTP verbs&lt;/li&gt;
&lt;li&gt;Send request parameters and payloads&lt;/li&gt;
&lt;li&gt;Inspect responses directly in the browser&lt;/li&gt;
&lt;li&gt;Mountable Rails Engine&lt;/li&gt;
&lt;li&gt;Seamless integration with your Rails development workflow&lt;/li&gt;
&lt;li&gt;Simple setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Add the gem to your Gemfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"rails-http-lab"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then install it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now start your Rails server and access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/rails/http-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you're ready to start testing your routes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why build this?
&lt;/h2&gt;

&lt;p&gt;I wanted something that felt more integrated with the Rails developer experience.&lt;/p&gt;

&lt;p&gt;External API clients are great, but sometimes you simply want a quick way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;test an endpoint&lt;/li&gt;
&lt;li&gt;tweak parameters&lt;/li&gt;
&lt;li&gt;inspect responses&lt;/li&gt;
&lt;li&gt;validate controller behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…without leaving your application context.&lt;/p&gt;

&lt;p&gt;Rails HTTP Lab was created to reduce that friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source &amp;amp; Feedback Welcome
&lt;/h2&gt;

&lt;p&gt;The project is open source and still evolving.&lt;/p&gt;

&lt;p&gt;If you like the idea, have suggestions, or want to contribute, feel free to check out the repository:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues, PRs, and ideas are very welcome.&lt;/p&gt;

&lt;p&gt;Happy hacking 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Special thanks to Vini (&lt;a href="https://github.com/viniwenz" rel="noopener noreferrer"&gt;https://github.com/viniwenz&lt;/a&gt;) and Karine (&lt;a href="https://github.com/karinevieira" rel="noopener noreferrer"&gt;https://github.com/karinevieira&lt;/a&gt;) for helping me with testing!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>testing</category>
    </item>
    <item>
      <title>🇧🇷 Apresentando Rails HTTP Lab: teste rotas Rails diretamente dentro da sua aplicação</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Fri, 29 May 2026 17:55:55 +0000</pubDate>
      <link>https://dev.to/videosdeti/apresentando-rails-http-lab-teste-rotas-rails-diretamente-dentro-da-sua-aplicacao-3lbe</link>
      <guid>https://dev.to/videosdeti/apresentando-rails-http-lab-teste-rotas-rails-diretamente-dentro-da-sua-aplicacao-3lbe</guid>
      <description>&lt;p&gt;Quem trabalha com &lt;strong&gt;Ruby on Rails&lt;/strong&gt; sabe que testar endpoints HTTP faz parte da rotina de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Na maioria das vezes usamos ferramentas como Postman, Insomnia, curl ou até scripts temporários apenas para validar requests, headers, payloads e responses.&lt;/p&gt;

&lt;p&gt;Mas durante o desenvolvimento eu comecei a me perguntar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E se fosse possível testar as rotas da própria aplicação Rails diretamente de dentro dela?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Foi dessa ideia que nasceu o &lt;strong&gt;Rails HTTP Lab&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34h6pygscuiqathwuz6e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34h6pygscuiqathwuz6e.png" alt="Rails HTTP Lab" width="799" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Rails HTTP Lab?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rails-http-lab&lt;/code&gt; é uma Rails Engine que adiciona uma interface integrada à sua aplicação para testar requisições HTTP contra as próprias rotas da aplicação.&lt;/p&gt;

&lt;p&gt;Pense nele como um cliente HTTP leve, mas focado no seu ambiente Rails.&lt;/p&gt;

&lt;p&gt;Com ele você pode experimentar endpoints sem precisar alternar constantemente entre editor, terminal, navegador e ferramentas externas de API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Funcionalidades
&lt;/h2&gt;

&lt;p&gt;Atualmente a gem oferece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suporte aos principais verbos HTTP&lt;/li&gt;
&lt;li&gt;Envio de parâmetros e payloads&lt;/li&gt;
&lt;li&gt;Visualização das responses diretamente no navegador&lt;/li&gt;
&lt;li&gt;Rails Engine mountável&lt;/li&gt;
&lt;li&gt;Integração natural com o fluxo de desenvolvimento Rails&lt;/li&gt;
&lt;li&gt;Configuração simples&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;Adicione a gem ao seu Gemfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"rails-http-lab"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois instale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora basta iniciar o servidor Rails e acessar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/rails/http-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto. Você já pode começar a testar suas rotas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que criar isso?
&lt;/h2&gt;

&lt;p&gt;Eu queria algo mais integrado à experiência de desenvolvimento com Rails.&lt;/p&gt;

&lt;p&gt;Ferramentas externas de API são excelentes, mas às vezes você só precisa de uma forma rápida de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testar um endpoint&lt;/li&gt;
&lt;li&gt;ajustar parâmetros&lt;/li&gt;
&lt;li&gt;inspecionar responses&lt;/li&gt;
&lt;li&gt;validar o comportamento do controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…sem sair do contexto da própria aplicação.&lt;/p&gt;

&lt;p&gt;O Rails HTTP Lab surgiu justamente para reduzir esse atrito.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Source e feedback são bem-vindos
&lt;/h2&gt;

&lt;p&gt;O projeto é open source e ainda está evoluindo.&lt;/p&gt;

&lt;p&gt;Se a ideia parece interessante, você tem sugestões ou quer contribuir, confira o repositório:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Issues, PRs, feedbacks e ideias são muito bem-vindos.&lt;/p&gt;

&lt;p&gt;Happy coding 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Agradecimento especial a Vini (&lt;a href="https://github.com/viniwenz" rel="noopener noreferrer"&gt;https://github.com/viniwenz&lt;/a&gt;) e Karine (&lt;a href="https://github.com/karinevieira" rel="noopener noreferrer"&gt;https://github.com/karinevieira&lt;/a&gt;) que me ajudaram nos testes!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>testing</category>
    </item>
    <item>
      <title>🇺🇸 Glancer — Ask your Rails database questions in plain language</title>
      <dc:creator>Ernane Ferreira</dc:creator>
      <pubDate>Wed, 27 May 2026 17:11:10 +0000</pubDate>
      <link>https://dev.to/videosdeti/glancer-ask-your-rails-database-questions-in-plain-language-f8o</link>
      <guid>https://dev.to/videosdeti/glancer-ask-your-rails-database-questions-in-plain-language-f8o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A Rails engine that allows you to query the database using natural language, with RAG and LLMs. No need to write any code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every Rails project reaches a point where someone on the team (product, support, management) needs data, but no one has time to write a quick query for them. You know the drill: a Slack message, a GitHub issue titled "how many users signed up last week?", or a CSV request that ends up in someone's backlog.&lt;/p&gt;

&lt;p&gt;So, I think about &lt;strong&gt;Glancer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FErnaneJ%2Fglancer%2Fmain%2F.github%2Fassets%2Fdemo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FErnaneJ%2Fglancer%2Fmain%2F.github%2Fassets%2Fdemo.gif" alt="Demo" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;Glancer is a Ruby on Rails engine that mounts a full chat interface at &lt;code&gt;/glancer&lt;/code&gt; inside your app. You type a question in plain language, it retrieves the relevant schema context, generates a &lt;code&gt;SELECT&lt;/code&gt; query (or an ActiveRecord expression), validates and executes it safely, then returns the result with a human-readable explanation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"How many orders were placed in the last 30 days, grouped by status?"
→ SELECT executed, results shown, answer written in plain language.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is inspired by &lt;a href="https://github.com/ankane/blazer" rel="noopener noreferrer"&gt;Blazer&lt;/a&gt;, but instead of writing SQL yourself, you just ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;Add it to your &lt;code&gt;Gemfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"glancer"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the generator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails generate glancer:install
rails db:migrate
rails glancer:index:all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit &lt;code&gt;/glancer&lt;/code&gt; and start asking questions.&lt;/p&gt;

&lt;p&gt;The generator creates an initializer where you configure your LLM provider. A minimal setup with Gemini looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Glancer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;llm_provider&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:gemini&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;llm_model&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"gemini-2.0-flash"&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gemini_api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"GEMINI_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schema_permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI and OpenRouter are also supported. It runs on top of &lt;a href="https://rubyllm.com/" rel="noopener noreferrer"&gt;RubyLLM&lt;/a&gt;, so any model it supports works here too. You can assign different models per role: a smarter model for query generation, a cheaper one for writing the response.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can do
&lt;/h2&gt;

&lt;p&gt;A few things worth knowing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safety is not optional.&lt;/strong&gt; Every query runs inside a transaction that always rolls back. The keyword blocklist rejects &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt;, and friends before they even touch the executor. You can also point it at a read-only replica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No extra infrastructure.&lt;/strong&gt; Embeddings live in your existing database as a JSON column. No Pinecone, no Weaviate, nothing to set up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It understands your domain.&lt;/strong&gt; You can drop a Markdown file at &lt;code&gt;config/glancer/llm_context.glancer.md&lt;/code&gt; and teach Glancer your business rules — what &lt;code&gt;status&lt;/code&gt; values mean, how revenue is calculated, which columns to ignore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`orders.status`&lt;/span&gt; values: "pending" | "paid" | "shipped" | "refunded"
&lt;span class="p"&gt;-&lt;/span&gt; Monthly revenue = SUM(orders.total) WHERE status = "paid"
&lt;span class="p"&gt;-&lt;/span&gt; When asked about "churn", use the &lt;span class="sb"&gt;`churned_at`&lt;/span&gt; column on &lt;span class="sb"&gt;`subscriptions`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The UI has some nice touches.&lt;/strong&gt; Results render in a table with one-click CSV export. Charts are auto-generated where they make sense. Queries run in a background thread, so the main app thread stays free. You can type &lt;code&gt;@table_name&lt;/code&gt; to pin a specific table to your question, edit the generated SQL inline and re-run it, and even dictate questions via microphone. There is also a schema viewer at &lt;code&gt;/glancer/db-schema&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blazer integration.&lt;/strong&gt; If you already have Blazer installed, Glancer shows a button to open the generated SQL there directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The story behind it
&lt;/h2&gt;

&lt;p&gt;This started as a study project. I had never published a gem before and wanted to understand the full process, from engine internals to gemspec to CI. I shared it with a few colleagues and they actually found it useful, so I decided to put it out there for the community.&lt;/p&gt;

&lt;p&gt;It is version 1.0.0.&lt;/p&gt;

&lt;p&gt;If you try it, I would love to hear what you think, about the code or the idea itself. Issues and pull requests are open.&lt;/p&gt;

&lt;p&gt;If you find it useful, a star on the repo goes a long way in helping more people discover it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ErnaneJ/glancer" rel="noopener noreferrer"&gt;https://github.com/ErnaneJ/glancer&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RubyGems:&lt;/strong&gt; &lt;a href="https://rubygems.org/gems/glancer" rel="noopener noreferrer"&gt;https://rubygems.org/gems/glancer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>rails</category>
      <category>ruby</category>
    </item>
    <item>
      <title>🇧🇷 Glancer — Converse com seu banco de dados Rails em linguagem natural</title>
      <dc:creator>Ernane Ferreira</dc:creator>
      <pubDate>Wed, 27 May 2026 17:05:40 +0000</pubDate>
      <link>https://dev.to/videosdeti/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural-2eep</link>
      <guid>https://dev.to/videosdeti/glancer-converse-com-seu-banco-de-dados-rails-em-linguagem-natural-2eep</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Uma engine Rails que permite consultar o banco de dados com linguagem natural, usando RAG e LLMs. Sem precisar escrever código.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Todo projeto Rails chega num ponto em que alguém do time (produto, suporte, gestão, etc.) precisa de um dado, mas ninguém tem tempo de parar para compreender a necessidade e escrever uma query. A mensagem no Slack, o card aberto, o pedido de CSV que some no backlog. Quem nunca.&lt;/p&gt;

&lt;p&gt;Foi isso que me fez pensar no &lt;strong&gt;Glancer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ernanej/glancer/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6totp0rn66zht7onugm0.gif" alt="Demo" width="480" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é
&lt;/h2&gt;

&lt;p&gt;Glancer é uma engine Ruby on Rails que monta uma interface de chat em &lt;code&gt;/glancer&lt;/code&gt; dentro da sua aplicação. Você digita uma pergunta em linguagem natural, ele busca o contexto relevante do sistema, gera um &lt;code&gt;SELECT&lt;/code&gt; (ou uma expressão ActiveRecord), valida, executa com segurança e retorna o resultado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Quantos pedidos foram feitos nos últimos 30 dias, agrupados por status?"
→ SELECT executado, resultados exibidos, resposta escrita em português.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A inspiração direta foi o &lt;a href="https://github.com/ankane/blazer" rel="noopener noreferrer"&gt;Blazer&lt;/a&gt;, uma gem que já usei bastante. A ideia aqui é dar um passo a mais: em vez de escrever o SQL, você só pergunta.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como começar
&lt;/h2&gt;

&lt;p&gt;Adicione no &lt;code&gt;Gemfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"glancer"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Execute o gerador:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails generate glancer:install
rails db:migrate
rails glancer:index:all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acesse &lt;code&gt;/glancer&lt;/code&gt; e comece a perguntar.&lt;/p&gt;

&lt;p&gt;O gerador cria um initializer onde você configura o provider de LLM. Uma configuração mínima com Gemini:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Glancer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;configure&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;llm_provider&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:gemini&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;llm_model&lt;/span&gt;      &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"gemini-2.0-flash"&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gemini_api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"GEMINI_API_KEY"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schema_permission&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OpenAI e OpenRouter também são suportados. Ela roda em cima do &lt;a href="https://rubyllm.com/" rel="noopener noreferrer"&gt;RubyLLM&lt;/a&gt; então os modelos que ele suportar, o Glancer suportará. Dá para usar modelos diferentes por papel, por exemplo, um modelo mais capaz para gerar a query e um mais barato para escrever a resposta.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que ele faz
&lt;/h2&gt;

&lt;p&gt;Alguns pontos que vale conhecer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Segurança por padrão:&lt;/strong&gt; Toda query roda dentro de uma transaction que sempre faz rollback. Um blocklist de palavras rejeita &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;DROP&lt;/code&gt; e afins antes mesmo de chegar no executor. Também é possível apontar para uma réplica de leitura.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sem infraestrutura adicional:&lt;/strong&gt; Os embeddings ficam no seu banco existente, numa coluna JSON. Sem Pinecone, sem Weaviate, sem nada extra para subir. Raramente será muita coisa, por isso essa abordagem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ensina o contexto do seu negócio.&lt;/strong&gt; Você coloca um arquivo Markdown em &lt;code&gt;config/glancer/llm_context.glancer.md&lt;/code&gt; e explica as regras do domínio: o que os valores de &lt;code&gt;status&lt;/code&gt; significam, como a receita é calculada, quais colunas/tabelas/modelos ignorar, etc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`orders.status`&lt;/span&gt;: "pending" | "paid" | "shipped" | "refunded"
&lt;span class="p"&gt;-&lt;/span&gt; Receita mensal = SUM(orders.total) WHERE status = "paid"
&lt;span class="p"&gt;-&lt;/span&gt; Para perguntas sobre "churn", usar a coluna &lt;span class="sb"&gt;`churned_at`&lt;/span&gt; em &lt;span class="sb"&gt;`subscriptions`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Informações adicionais mais dinâmicas podem ser adicionadas em um campo texto nas configurações. Entretanto, não será gerado embedding disso pois será utilizado de contexto ao modelo base.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A interface tem uns detalhes legais.&lt;/strong&gt; Os resultados aparecem em tabela com export CSV de um clique. Gráficos são gerados automaticamente quando fazem sentido. O processo de execução foi pensado para não travar a thread principal da aplicação. Dá para digitar &lt;code&gt;@nome_da_tabela&lt;/code&gt; para fixar e ser mais assertivo sobre uma tabela específica na pergunta, editar o SQL gerado e reexecutar, e até ditar a pergunta pelo microfone. Tem também um visualizador de schema em &lt;code&gt;/glancer/db-schema&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integração com Blazer.&lt;/strong&gt; Se você já usa o Blazer, o Glancer mostra um botão para abrir o SQL gerado direto lá.&lt;/p&gt;

&lt;h2&gt;
  
  
  A história por trás
&lt;/h2&gt;

&lt;p&gt;Comecei isso como projeto de estudo. Estudei bastante sobre RAG e LLMs ao longo do ano passado e quando a ideia surgiu eu nunca tinha publicado uma gem antes e queria experimentar o processo completo, de engine a gemspec a CI. Com isso, juntei o útil ao agradável. Como mostrei para alguns colegas e eles acharam útil, então decidi abrir para a comunidade.&lt;/p&gt;

&lt;p&gt;Atualmente está na versão 1.0.0.&lt;/p&gt;

&lt;p&gt;Se você testar, adoraria saber o que achou, seja sobre o código ou sobre a ideia. Issues e pull requests são bem-vindos.&lt;/p&gt;

&lt;p&gt;Se gostar do projeto, uma estrela no repositório ajuda bastante a divulgar para mais pessoas da comunidade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ErnaneJ/glancer" rel="noopener noreferrer"&gt;https://github.com/ErnaneJ/glancer&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RubyGems:&lt;/strong&gt; &lt;a href="https://rubygems.org/gems/glancer" rel="noopener noreferrer"&gt;https://rubygems.org/gems/glancer&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ai</category>
      <category>showdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
