<?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: Vinícius Bispo</title>
    <description>The latest articles on DEV Community by Vinícius Bispo (@vinibispo).</description>
    <link>https://dev.to/vinibispo</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F861993%2F1ede74aa-c078-4970-aade-15d898aaf6d7.jpeg</url>
      <title>DEV Community: Vinícius Bispo</title>
      <link>https://dev.to/vinibispo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinibispo"/>
    <language>en</language>
    <item>
      <title>Atualizando uma app Ruby on Rails antiga</title>
      <dc:creator>Vinícius Bispo</dc:creator>
      <pubDate>Sat, 17 Dec 2022 10:37:20 +0000</pubDate>
      <link>https://dev.to/vinibispo/atualizando-uma-app-ruby-on-rails-antiga-4mlf</link>
      <guid>https://dev.to/vinibispo/atualizando-uma-app-ruby-on-rails-antiga-4mlf</guid>
      <description>&lt;p&gt;Depois da última aula do Curso OOP + Solid em Ruby, nosso professor (&lt;a href="https://github.com/serradura"&gt;@serradura&lt;/a&gt;) nos disse para aplicarmos o conhecimento aprendido no curso numa app criada pelo mesmo chamada &lt;a href="https://github.com/serradura/rails_app_to_refactor"&gt;rails_app_to_refactor&lt;/a&gt;, uma app feita para serem feitas experimentações nela.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qual o problema que precisamos resolver?
&lt;/h2&gt;

&lt;p&gt;A app está com as versões do Ruby e do Rails defasadas e para usar tudo que aprendemos no curso precisamos que a versão do ruby seja a 3.1.2&lt;/p&gt;

&lt;h2&gt;
  
  
  Como resolver?
&lt;/h2&gt;

&lt;p&gt;Poderíamos resolver de dois jeitos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reescrever a app num ruby maior&lt;/li&gt;
&lt;li&gt;Atualizar a app para um ruby maior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para mim eu achei um desperdício reescrever toda a app, sendo que todos os testes já foram criados, todos os casos de uso, etc.&lt;br&gt;
Logo (pelo título também dá para saber) eu escolhi a opção de atualizar.&lt;/p&gt;
&lt;h2&gt;
  
  
  Como foi o processo de atualização do Rails?
&lt;/h2&gt;

&lt;p&gt;Em primeiro lugar eu removi o Gemfile.lock e rodei um &lt;code&gt;bundle install&lt;/code&gt; porque estava dando erro no &lt;code&gt;mimemagic&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Depois disso eu segui o que dizia no fastruby.io e atualizei pro rails 6.1. Resolvi não seguir o dual boot por ser uma app simples, mas se fosse uma app do mundo real eu teria feito para não prejudicar os clientes da minha app.&lt;/p&gt;

&lt;p&gt;Após isso os testes não estavam passando por conta de que a gem DidYouMean se integrou no Rails, aí a mensagem foi alterada para: (exemplo) &lt;code&gt;{"error": "Invalid parameter. Did you mean something?"}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Com esse erro aprendi o que uma indireção pode custar para um projeto (demorei muito para encontrar a raiz).&lt;/p&gt;

&lt;p&gt;Para solucionar precisei no arquivo &lt;code&gt;app/controllers/application_controller.rb&lt;/code&gt; mudar para o seguinte:&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;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gsub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\s*Did\ you\ mean\?\ (.|\s)*/&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após isso os testes voltaram a passar e em seguida adicionei o:&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;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load_defaults&lt;/span&gt; &lt;span class="mf"&gt;6.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para funcionar sem problemas, rodei os testes novamente, e bora para a próxima fase.&lt;/p&gt;

&lt;p&gt;Nisso eu atualizei para o Rails 7 alterando no Gemfile a versão do rails, rodando &lt;code&gt;bundle install&lt;/code&gt; e rodando a rake &lt;code&gt;rails app:update&lt;/code&gt; como foi me ensinado no fastruby.&lt;/p&gt;

&lt;p&gt;Após comparar vários diffs, verificar o que o Rails quer substituir e ver se faz sentido, cheguei ao Rails 7&lt;/p&gt;

&lt;p&gt;Até aqui os testes estavam passando, então parti para a atualização do ruby.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como foi o processo da atualização do Ruby?
&lt;/h2&gt;

&lt;p&gt;Na atualização do Ruby meu objetivo era chegar no 3.1.2, mas primeiro tive que passar pelo 3.0.0&lt;/p&gt;

&lt;p&gt;Primeiro tive que baixar a versão 3.0.0 no meu gerenciador de versões de Ruby, depois alterei o Gemfile para o Ruby 3.0.0 e alterei o arquivo &lt;code&gt;.ruby-version&lt;/code&gt; para ruby-3.0.0.&lt;/p&gt;

&lt;p&gt;Após isso, rodei &lt;code&gt;gem install bundler:2.2.32&lt;/code&gt; porque o Ruby 3.0.0 não tinha o bundler que eu estava. Logo depois rodei &lt;code&gt;bundle&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Após verificar os testes, percebi que alguns pararam de passar.&lt;/p&gt;

&lt;p&gt;O Error era o famoso &lt;code&gt;ArgumentError&lt;/code&gt; nos métodos http, e estava acontecendo porque antes o ruby transformava um hash em kwargs(keyword arguments), mas no ruby 3.0.0 ele não convertia, por isso minha solução foi remover os &lt;code&gt;{}&lt;/code&gt; blocos nas partes dos testes. Para exemplificar mostrarei o antes e o depois.&lt;/p&gt;

&lt;p&gt;Antes:&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;post&lt;/span&gt; &lt;span class="n"&gt;todos_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="ss"&gt;headers: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'Authorization'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Bearer token=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="ss"&gt;params: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;todo: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;title: &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&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;post&lt;/span&gt; &lt;span class="n"&gt;todos_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;headers: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'Authorization'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"Bearer token=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;token&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="ss"&gt;params: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;todo: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;title: &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim todos os testes voltaram a passar.&lt;/p&gt;

&lt;p&gt;Para atualizar pro ruby 3.1.2 eu tive que fazer os primeiros 3 parágrafos desse tópico a diferença é que agora era 3.1.2.&lt;br&gt;
O &lt;code&gt;bundle&lt;/code&gt; não funcionou por conta de uma dependência chamada &lt;code&gt;sexp_processor&lt;/code&gt; que a versão que estava não funcionava na versão 3.1.2.&lt;br&gt;
Eu resolvi isso rodando um &lt;code&gt;bundle update&lt;/code&gt; rodei os testes e tudo voltou a passar.&lt;/p&gt;

&lt;p&gt;Disclaimer: quando disse que rodei os testes cada uma das vezes significa que eu rodei o &lt;code&gt;rails t&lt;/code&gt; e fiz os curls disponíveis no README.md&lt;/p&gt;
&lt;h2&gt;
  
  
  Voltando ao Rails
&lt;/h2&gt;

&lt;p&gt;Eu estava com uma dúvida na minha cabeça se o &lt;code&gt;DidYouMean&lt;/code&gt; ainda estava integrado ao Rails e descobri que não. Nisso eu removi aquela regex maluca e continuou a funcionar.&lt;/p&gt;
&lt;h2&gt;
  
  
  O Pull Request
&lt;/h2&gt;

&lt;p&gt;Ao fazer o PR, percebi que eu havia removido sem querer em uma das versões a seguinte config:&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;config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action_mailer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;delivery_method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:letter_opener&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para consertar eu errei e deixei no &lt;code&gt;config/application.rb&lt;/code&gt;. E funcionou, o problema foi que o lugar certo era no &lt;code&gt;config/environments/development.rb&lt;/code&gt;, mas foi percebido pelo revisor do PR e consertado.&lt;/p&gt;

&lt;p&gt;No momento que eu escrevo o PR já foi mergeado.&lt;/p&gt;

&lt;p&gt;Você pode ver ele acessando &lt;a href="https://github.com/serradura/rails_app_to_refactor/pull/1"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;Para chegar a todo esse resultado eu precisei de várias pesquisas e nada mais justo do que deixar elas para beneficiar quem precisa também.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fastruby.io/blog/rails/upgrades/upgrade-rails-from-6-0-to-6-1.html"&gt;Upgrade Rails From 6.0 to 6.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubular.com"&gt;Rubular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fastruby.io/blog/rails/upgrades/upgrade-rails-6-1-to-7-0.html"&gt;Upgrade Rails From 6.1 to 7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fastruby.io/blog/ruby/upgrades/upgrade-ruby-from-2.7-to-3.0.html"&gt;Upgrade Ruby From 2.7 to 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/66762685/ruby-on-rails-tutorial-chapter-7-integration-test-argument-error"&gt;Ruby on Rails Tutorial Chapter 7 Integration Test Argument Error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/thomasvanholder/how-to-upgrade-your-rails-app-to-ruby-31-with-rbenv-5efl"&gt;How to upgrade your Rails app to Ruby 3.1 with Rbenv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;É isso pessoal, espero que vocês gostem deste artigo, até a próxima e tchau.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>rails</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como sobrescrever uma regra do eslint para uma pasta específica</title>
      <dc:creator>Vinícius Bispo</dc:creator>
      <pubDate>Sat, 25 Jun 2022 21:09:05 +0000</pubDate>
      <link>https://dev.to/vinibispo/como-sobrescrever-uma-regra-do-eslint-para-uma-pasta-especifica-4o19</link>
      <guid>https://dev.to/vinibispo/como-sobrescrever-uma-regra-do-eslint-para-uma-pasta-especifica-4o19</guid>
      <description>&lt;p&gt;Hoje passei por uma coisa no projeto onde eu trabalho, no qual minha tarefa foi adicionar o &lt;code&gt;ESLint&lt;/code&gt;, porém não deveria deixar a regra do no-unused-vars nas migrations.&lt;br&gt;
Essa era basicamente a minha config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"argsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"varsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aí eu pesquisei como eu faria isso no meu bom amigo DuckDuckGo(DDG), encontrei várias respostas, mas as principais foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar um &lt;code&gt;.eslintrc.json&lt;/code&gt; dentro da pasta de migration e sobrescrever as regras lá (não gostei muito)&lt;/li&gt;
&lt;li&gt;Usar a opção &lt;code&gt;overrides&lt;/code&gt; do &lt;code&gt;ESLint&lt;/code&gt; (gostei muito).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos ver como fica com a opção de overrides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"argsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"varsIgnorePattern"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^_"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"overrides"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"migrations/*.js"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"no-unused-vars"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E foi assim que aprendi a sobrescrever uma regra do eslint para uma pasta específica.&lt;br&gt;
Espero que tenham gostado deste artigo curto. Fiquem bem e até a próxima!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>todayilearned</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Extraindo Constantes de Números Mágicos</title>
      <dc:creator>Vinícius Bispo</dc:creator>
      <pubDate>Sat, 25 Jun 2022 18:48:01 +0000</pubDate>
      <link>https://dev.to/vinibispo/extraindo-constantes-de-numeros-magicos-1hpb</link>
      <guid>https://dev.to/vinibispo/extraindo-constantes-de-numeros-magicos-1hpb</guid>
      <description>&lt;p&gt;Olá, esse é o meu primeiro post da série refatoração, no qual vou mostrar o que estou aprendendo com o curso Refactoring do &lt;a href="https://refactoring.guru/"&gt;Refactoring Guru&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O primeiro post vai ser sobre extrair constantes de números mágicos.&lt;/p&gt;

&lt;p&gt;Imagine que você tem o seguinte cenário:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;potential_energy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;mass&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;9.81&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não sei se você aprendeu sobre energia potencial gravitacional na escola, mas concorda comigo que não está nada explícito o que representa 9.81?&lt;/p&gt;

&lt;p&gt;Vamos refatorar seguindo o "Extraindo Constantes de Números Mágicos"&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;GRAVITATIONAL_CONSTANT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;9.81&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;potential_energy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;mass&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;GRAVITATIONAL_CONSTANT&lt;/span&gt; 
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bUaPLbUi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/3eIvVsG3yPYAAAAd/the-universe-tim-and-eric-mind-blown.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bUaPLbUi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/3eIvVsG3yPYAAAAd/the-universe-tim-and-eric-mind-blown.gif" alt="Mind Blowing" width="640" height="408"&gt;&lt;/a&gt;&lt;br&gt;
Uau! Agora sim! Agora ficou explícito que o valor de 9.81 é a constante gravitacional&lt;/p&gt;

&lt;p&gt;É isso que diz o "Extraindo Constantes de Números Mágicos", ele diz que "Um número mágico é um valor numérico encontrado no código que não tem significado óbvio". Este 'anti-pattern' torna mais difícil entender o programa e refatorar o código"&lt;/p&gt;

&lt;p&gt;Os benefícios dessa técnica são inúmeros, entre eles podemos destacar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As constantes podem servir como uma documentação.&lt;/li&gt;
&lt;li&gt;É muito fácil mudar o valor de uma constante do que buscar por esse número em todo o código, sem o risco de acidentalmente mudar o mesmo número usado para outro propósito.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É isso pessoal! Eu espero que esse artigo os ajude! E se sim, me deixe saber! Até a próxima!&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>refactoring</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
