12 Gems que você precisa conhecer – Parte 3

principais gems rails

O primeiro Post do blog foi sobre uma lista de 12 Gems interessantes que todo desenvolvedor Rails deveria conhecer. Muitas pessoas gostaram da lista e me disseram que as ajudou no dia a dia de trabalho, então eu lancei a segunda lista e a mesma coisa aconteceu.
Sendo assim como agora já é uma tradição do OneBitCode, hoje eu estou trazendo a terceira lista de Gems que podem fazer a sua vida como desenvolvedor Ruby On Rails mais feliz \o/.
Desta vez eu abordei algumas Gems de segurança, outras de teste e algumas outras que facilitam o dia a dia de desenvolvimento.


Se você ainda não viu as outras duas listas, clique nos Links a baixo para conhecer algumas Gems bem legais:

O OneBitCode também tem um canal no Youtube com Screencasts semanais, caso você ainda não tenha se inscrito se inscreva clicando aqui ou no botão a baixo para receber os novos Screencasts.

As 12 Gems

 

1 – Guard Rails

Documentação oficial | Estrelas no GitHub: 97

Executa tarefas automáticas baseadas na mudança dos arquivos do seu projeto

O Guard Rails é uma Gem muito bacana e que pode acelerar bastante o dia a dia de programação. Com ele você consegue associar tarefas automáticas como o restart do servidor de desenvolvimento com as mudanças nos arquivos do seu projeto como os initializers, assim economizando o tempo perdido em ficar parando e iniciando o servidor toda hora.
O Guard Rails é muito simples de instalar e de usar (ele tem como dependência a gem Guard), este é um exemplo de código onde ele dá reset no servidor caso o Gemfile.lock tenha sido alterado ou algum arquivo dentro de config ou lib:
Guard Rails Gem

(Como instalar)

2 – Onotole

Documentação oficial | Estrelas no GitHub: 113

Gere seu App Rails com as dependências já instaladas (Bootstrap e etc)

Com o Onotole você pode gerar o seu novo projeto Rails com as dependências (e algumas features) já instaladas e/ou configuradas e evitar a perda de tempo de ter que fazer manualmente todas as instalações toda vez que criar um novo projeto.
Algumas features que você pode escolher para virem instaladas e/ou configuradas são por exemplo o Rails Admin, Bootstrap, Templates (Slim, Haml ou Erb), Devise, Pundit, Will Paginate, CKEditor, Rubocop, Redis, Carriewave, Font Awesome, e muitas outras.

Quando você for criar um novo projeto basta rodar no console “onotole project_name -c” e ele vai te dar as opções no terminal como na imagem a baixo:
Onotole

(Como instalar)

3 – Attr Encrypted

Documentação oficial | Estrelas no GitHub: 1120

Encripte e desencripte campos do seu banco de dados facilmente

A Gem Attr Encrypted é muito útil quando você trabalha com dados sensíveis no seu projeto e precisa mantê-los protegidos no caso de um possível vazamento do seu banco de dados.
Recentemente eu usei esta Gem em um projeto importante e fiquei realmente satisfeito com a simplicidade na hora de usá-la. Então se você precisa aumentar a sua segurança, ela pode ser o caminho.

Exemplo da declaração de um campo encrypted em um model:

captura-de-tela-de-2016-11-19-14-57-04

(Como instalar)

4 – Rate Limit

Documentação oficial | Estrelas no GitHub: 116

Controle o número de chamadas que podem ser feitas para os endpoints da sua API

O Rate Limit é uma Gem muito útil quando você quer limitar (ou tomar alguma ação) quando um endpoint (ou todos) receber chamadas excessivas, ou seja, mais de N chamadas em Y segundos.
O Rate Limit usa o Redis para guardar as chamadas, então se você já usa o Redis vai ser bem simples adicionar o Rate Limit ao seu projeto.

Um exemplo simples que verifica se houve mais de 10 chamadas usando o mesmo telefone nos últimos 30 segundos:
Rate Limit Gem

(Como instalar)

5 – Foreman

Documentação oficial | Estrelas no GitHub: 4069

Rode seus projetos mais facilmente

O Foreman é muito útil para projetos grandes onde você possui muitas dependências dentro do seu projeto e precisa rodar vários softwares ao mesmo tempo para tudo funcionar, como por exemplo:
Você tem um ambiente onde é necessário rodar o Rails Server e ao mesmo tempo também o Sidekiq e o Mailcatcher e isso te obrigada a abrir três abas do terminal para rodar tudo.

O Foreman resolve este problema centralizando tudo isso em um arquivo chamado Procfile, e com apenas um comando você roda todos os softwares ao mesmo tempo sem o medo de estar esquecendo de rodar algo. (Isso ajuda também quando entram novos membros no time de desenvolvimento que ainda não estão familiarizados com as dependências do projeto).
Essa Gem faz ainda mais que isso, este é apenas um breve resumo então dê uma olhada na documentação e descubra tudo que é possível fazer com ele 🙂

Este é da saída do comando Foreman start, quando você configura o Foreman para rodar o Rails + Redis:
foreman

(Como instalar)

6 – Acts As Taggable

Documentação oficial | Estrelas no GitHub: 3849

Inclua um campo com Tags facilmente na suas tabelas

É bem comum em aplicações de redes sociais ou aplicações que permitem a busca por Tags a necessidade de se criar em um model do sistema um campo onde você possa incluir ou remover Tags.
O Acts As Taggable ajuda a fazer isso de uma maneira muito simples e rápida, então se essa é uma necessidade do seu sistema vale a pena você dar uma olhada.

Exemplo de uso:

captura-de-tela-de-2016-11-19-15-30-38

(Como instalar)

7 – Paranoia

Documentação oficial | Estrelas no GitHub: 1710

Proteja seus dados escondendo eles ao invés de deletar

Se você é cuidadoso paranoico essa Gem é para você, com ela quando você chama o método delete para um record do seu banco de dados, ela apenas o esconde (ele para de ser encontrado via where, find e etc) ao invés de deletá-lo para sempre.

Isso pode salvar vidas principalmente quando você não está 100% seguro sobre seu software ou em casos específicos como quando um usuário delete a conta dele do seu site mas você quer manter os registros para análise ou para permitir que futuramente ele reative a conta.

(Como instalar)

8 – Ruby Vmstat

Documentação oficial | Estrelas no GitHub: 48

Pegue os status da máquina em tempo real via Ruby

Se você precisa saber informações em tempo real sobre a máquina onde seu projeto está rodando você pode usar a Gem Vmstat.
Isso é muito útil para você gerar alertas automáticas sobre excesso de uso da CPU, baixa memória disponível e etc.

Exemplo do retorno de chamada do Vmstat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
require "vmstat"
require "vmstat"
 
Vmstat.snapshot # => #<Vmstat::Snapshot:0x007fe5f22df660
#    @at=2012-10-09 21:48:57 +0200,
#    @boot_time=2012-10-09 18:42:37 +0200,
#    @cpus=
#     [#<struct Vmstat::Cpu
#       num=0,
#       user=187167,
#       system=144466,
#       nice=0,
#       idle=786622>,
#      #<struct Vmstat::Cpu num=1, user=2819, system=1641, nice=0, idle=1113782>,
#      #<struct Vmstat::Cpu num=2, user=158698, system=95186, nice=0, idle=864359>,
#      #<struct Vmstat::Cpu num=3, user=2702, system=1505, nice=0, idle=1114035>,
#      #<struct Vmstat::Cpu num=4, user=140231, system=78248, nice=0, idle=899764>,
#      #<struct Vmstat::Cpu num=5, user=2468, system=1314, nice=0, idle=1114460>,
#      #<struct Vmstat::Cpu num=6, user=120764, system=66284, nice=0, idle=931195>,
#      #<struct Vmstat::Cpu num=7, user=2298, system=1207, nice=0, idle=1114737>],
#    @disks=
#     [#<struct Vmstat::Disk
#       type=:hfs,
#       origin="/dev/disk0s2",
#       mount="/",
#       block_size=4096,
#       free_blocks=51470668,
#       available_blocks=51406668,
#       total_blocks=61069442>],
#    @load_average=
#     #<struct Vmstat::LoadAverage
#      one_minute=1.74072265625,
#      five_minutes=1.34326171875,
#      fifteen_minutes=1.1845703125>,
#    @memory=
#     #<struct Vmstat::Memory
#      pagesize=4096,
#      wired=1037969,
#      active=101977,
#      inactive=484694,
#      free=470582,
#      pageins=102438,
#      pageouts=0>,
#    @network_interfaces=
#     [#<struct Vmstat::NetworkInterface
#       name=:lo0,
#       in_bytes=6209398,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=6209398,
#       out_errors=0,
#       type=24>,
#      #<struct Vmstat::NetworkInterface
#       name=:gif0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=55>,
#      #<struct Vmstat::NetworkInterface
#       name=:stf0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=57>,
#      #<struct Vmstat::NetworkInterface
#       name=:en0,
#       in_bytes=1321276010,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=410426678,
#       out_errors=0,
#       type=6>,
#      #<struct Vmstat::NetworkInterface
#       name=:p2p0,
#       in_bytes=0,
#       in_errors=0,
#       in_drops=0,
#       out_bytes=0,
#       out_errors=0,
#       type=6>],
#    @task=
#     #<struct Vmstat::Task
#      suspend_count=0,
#      virtual_size=2551554048,
#      resident_size=19628032,
#      user_time_ms=28,
#      system_time_ms=83>>

(Como instalar)

9 – Browser

Documentação oficial | Estrelas no GitHub: 1359

Detecte o browser do seu cliente facilmente

Todo desenvolvedor ao criar o front end pode sofrer por conta da incompatibilidade de alguns recursos com certos browsers ie ou com alguns problemas na hora de ajustar a responsividade da página, a gem Browser ajuda a resolver alguns desses problemas permitindo que o desenvolvedor detecte via Rails qual o browser ou device está sendo usado e faça uma lógica de usar um tipo ou outro de recurso baseado no resultado.
Se você cria o front end das suas aplicações dentro do Rails, vale a pena dar uma olhada nessa Gem que pode facilitar muito a sua vida.

Alguns exemplos de detecções possíveis:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
require "browser"
browser = Browser.new("Some User Agent", accept_language: "en-us")
 
# General info
browser.chrome?
browser.core_media?
browser.edge?           # Newest MS browser
browser.firefox?
browser.full_version
browser.ie?
browser.ie?(6)               # detect specific IE version
 
 
# Get device info
browser.device
browser.device.id
browser.device.name
browser.device.blackberry_playbook?
browser.device.console?
browser.device.ipad?
browser.device.iphone?
browser.device.ipod_touch?
browser.device.kindle?
browser.device.kindle_fire?
browser.device.mobile?
browser.device.nintendo?
browser.device.playstation?
 
# Get platform infos
browser.platform.windows10?
browser.platform.windows7?
browser.platform.windows8?
browser.platform.windows8_1?
browser.platform.windows?
browser.platform.windows_mobile?
browser.platform.windows_phone?
browser.platform.windows_rt?

(Como instalar)

10 – Rspec Rails – Testes

Documentação oficial | Estrelas no GitHub: 3069

Sim você precisa testar sua aplicação e o Rspec é um bom caminho 🙂

O Rspec é um framework de testes muito conhecido no meio do Ruby On Rails por ser uma das maneiras mais usadas para realizar testes nas aplicações.
Ele é um ambiente completo para você realizar testes (ou seja escrever scripts que simulam o uso dos trechos de código que você escreveu na sua aplicação) que vão desde o teste do seus models, controllers até o testes das tasks que você criou para o seu projeto.
Então se você ainda não utiliza testes no seu projeto, dê uma olhada na documentação do Rspec para perceber como é simples, eficiente e vantajoso utilizá-lo.
Logo teremos um Post muito completo sobre Testes no Blog, então por enquanto isso é apenas um aperitivo :).

Exemplo, testando a chamada dos métodos de um Controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
require "rails_helper"
 
RSpec.describe PostsController, :type => :controller do
  describe "GET #index" do
    it "responds successfully with an HTTP 200 status code" do
      get :index
      expect(response).to be_success
      expect(response).to have_http_status(200)
    end
 
    it "renders the index template" do
      get :index
      expect(response).to render_template("index")
    end
 
    it "loads all of the posts into @posts" do
      post1, post2 = Post.create!, Post.create!
      get :index
 
      expect(assigns(:posts)).to match_array([post1, post2])
    end
  end
end

(Como instalar)

11 – Factory Girl – Testes

Documentação oficial | Estrelas no GitHub: 5050

Crie seus testes mais facilmente usando geradores para criar seus records

A Gem Factory Girl é o principal complemento ao Rspec é e extremamente comum que ela seja utilizada com ele.
Com essa Gem você consegue criar fábricas (factorys) onde você pode gerar records como um novo usuário, um novo Post em um App de Blog, ou qualquer outro tipo que esteja descrito no seus Models para facilitar na hora de realizar um teste no Rspec.
Um exemplo de uso seria quando você precisa testar se um método Update de um Controller User está atualizando o campo nome. Então ao invés de dentro do seu teste você criar um User usando o método create e passando dezenas de parâmetros, você pode simplesmente chamar uma factory pré criada para fazer isso para você e pode reaproveitar a mesma factory em outros testes.

Exemplo, de uma factory para criar um User ou um Admin:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FactoryGirl.define do
  factory :user do
    first_name "John"
    last_name  "Doe"
    admin false
  end
 
  # This will use the User class (Admin would have been guessed)
  factory :admin, class: User do
    first_name "Admin"
    last_name  "User"
    admin      true
  end
end

(Como instalar)

12 – Faker – Testes

Documentação oficial | Estrelas no GitHub: 4536

Gere dados ‘fake’ para facilitar na hora de escrever seus testes e factorys

Está é mais uma Gem que “sempre” acompanha o Rspec e a Factory Girl e que serve para gerar dados fake (dados aleatórios dentro de uma estrutura válida) para preencher os campos de um User por exemplo.
É muito útil que você utilize esse tipo de Gem para evitar fazer testes com valores fixos, como por exemplo comparar se um telefone foi criado corretamente usando sempre o mesmo número.
Essa Gem pode indicar erros que cometemos por usar valores “viciados” para realizar os testes.

Alguns exemplos de dados que são possíveis gerar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Faker::Name.name      # "Christophe Bartell"
Faker::Internet.email #=> "kirsten.greenholt@corkeryfisher.info"
Faker::Address.city #=> "Imogeneborough"
Faker::Address.street_name #=> "Larkin Fork"
Faker::Bitcoin.address #=> "1HUoGjmgChmnxxYhz87YytV4gVjfPaExmh"
Faker::Bitcoin.testnet_address #=> "msHGunDvoEwmVFXvd2Bub1SNw5RP1YHJaf"
Faker::Business.credit_card_number #=> "1228-1221-1221-1431"
Faker::Business.credit_card_expiry_date #=> <Date: 2015-11-11 ((2457338j,0s,0n),+0s,2299161j)>
Faker::Code.isbn #=> "759021701-8"
Faker::Code.ean #=> "4600051000057"
Faker::Color.hex_color #=> "#31a785"
Faker::Color.color_name #=> "yellow"
Faker::Commerce.color #=> "lavender"
Faker::Commerce.department #=> "Grocery, Health &amp; Beauty"
Faker::Company.name #=> "Hirthe-Ritchie"
Faker::Company.suffix #=> "Group"

(Como instalar)

 

Conclusão

Você tem sugestões de Gems para a próxima lista? Comenta aí em baixo.
Ficou com alguma dúvida ou tem outras sugestões?
Clica aqui para enviar sua sugestão ou me adiciona no Facebook clicando aqui.

Muito Obrigado pela atenção,
Grande abraço,
Leonardo Scorza

Deixe seu Feedback!

Comentários