Ruby

26 de Fevereiro de 2024 - @Walmir Neto


Esse dias, mostrei como fazer Aplicações Ruby on Rails rapidinhas com Avo só que a área administrativa ficou sem login. A idéia hoje é usar o devise para resolver isso

Instalando Devise

Primeiro passo é adicionar a gem devise, além dela gosto de adicionar a devise-i18n para não precisar tá lidando com tradução

--- a/Gemfile
+++ b/Gemfile
 group :test do
   # <https://github.com/vicentllongo/simplecov-json#usage>
   gem "simplecov-json", "~> 0.2.3"
 end
 gem "avo", ">= 3.2"
+# <https://github.com/heartcombo/devise#getting-started>
+gem "devise", "~> 4.9", ">= 4.9.3"
+# <https://github.com/tigrish/devise-i18n#customizing-views>
+gem "devise-i18n", "~> 1.12"

Para gerar o arquivo config/initializers/devise.rb rode um rails g devise:install. Outro arquivo gerado é config/locales/devise.en.yml, mas esse podemos remover, pois adicionamos a gem devise-i18n que já possui essas traduções

Criando model de usuários

bin/rails g devise User && bin/rails db:migrate

Habilitando turbo_stream

Além disso, caso usem turbo no seu projeto, precisamos descomentar no config/initializers/devise.rb essa linha:

--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
   # The "*/*" below is required to match Internet Explorer requests.
-  # config.navigational_formats = ['*/*', :html, :turbo_stream]
+  config.navigational_formats = ["*/*", :html, :turbo_stream]

Mas uma coisa é mudar a rota do avo para não ficar disponível para todos

--- a/config/routes.rb
+++ b/config/routes.rb
Rails.application.routes.draw do
   # Defines the root path route ("/")
   root "home#index"
 
-  mount Avo::Engine, at: Avo.configuration.root_path
+  authenticate :user do
+    mount Avo::Engine, at: Avo.configuration.root_path
+  end

Caso só algum tipo de usuário possa acessar seu Avo, você pode fazer algo assim:

	authenticate :user, ->(user) { user.with_super_power? } do
	  mount Avo::Engine, at: Avo.configuration.root_path
	end

Tests

Depois que fiz esses ajustes o teste da listagem de posts quebraram, precisamos setar o login nos tests, para isso precisamos criar alguns arquivos

Screenshot 2024-02-25 at 21.30.41.png