70
Efficient Rails Fabio Perrella

Efficient rails

Embed Size (px)

Citation preview

Page 1: Efficient rails

Efficient RailsFabio Perrella

Page 2: Efficient rails
Page 3: Efficient rails

Agenda- Dicas de...- Terminal- Git- Rails Console- Editor- Dicas de Código- Models- Views- Assets- Mailers- Testes

Page 4: Efficient rails

Terminal

Page 5: Efficient rails

Não use o terminal default- Terminator, iTerm2- Zsh > Bash

Page 6: Efficient rails

FASDhttps://github.com/clvv/fasd

Acesso rápido a arquivos e diretórios

Page 7: Efficient rails
Page 8: Efficient rails
Page 9: Efficient rails

HTTPIEhttps://github.com/jkbrzt/httpie

Cliente de http amigável (comparado ao curl)

Page 10: Efficient rails
Page 11: Efficient rails

Git

Page 12: Efficient rails

Prompt coloridohttps://github.com/fabioperrella/dotfiles/blob/master/dotfiles/.gitpromptrc

Page 13: Efficient rails

Git lg (pretty log)https://github.com/fabioperrella/dotfiles/blob/master/dotfiles/.gitconfig#L8

Page 15: Efficient rails

Git - Limpeza de brancheshttps://gist.github.com/fabioperrella/1f56229a4c532fc000ed

- Limpa diretórios locais e remotos ja mergeados no master

Page 16: Efficient rails

Dotfileshttps://github.com/fabioperrella/dotfiles

Baseado no https://dotfiles.github.io

Page 17: Efficient rails
Page 18: Efficient rails

Git - Toggle branchesgit checkout -

cd -

Page 19: Efficient rails
Page 20: Efficient rails

Rails Console

Page 21: Efficient rails

Use o .pryrc para comandos frequentes

Page 22: Efficient rails

ActiveRecord lazy loading no console

Page 23: Efficient rails

Atalhos

Page 24: Efficient rails

Bundle show/open

Page 25: Efficient rails

Bundle local pathhttp://ryanbigg.com/2013/08/bundler-local-paths/

Page 26: Efficient rails

Gem jazz_handsRails console + bonito/eficiente

https://github.com/nixme/jazz_hands

- Pry- Pry-debugger- Awesome Print- Hirb

...

Page 27: Efficient rails

Rails console --sandbox- Nenhuma query é comitada

Page 28: Efficient rails

Editor (Sublime)

Page 29: Efficient rails

Atalhos para agilizar a vida- Goto Definition (F12) (só no sublime3)- Jump Back (Alt + -)- Go (and back) to spec (Ctrl + .) (plugin)- Switch project (Ctrl + Alt + p)- Go to anything (Ctrl + p)- Go to symbol (Ctrl + r)- Comandos (Ctrl + shift + p)- Ctrl + Shift + v (paste and indent)

Page 30: Efficient rails

Plugins- RailsGoToSpec- SideBarEnhancements- All Autocomplete- GitGutter

Page 31: Efficient rails

Snippets customizadosByebug (bb)

~.config/sublime-text-3/Packages/User/byebug.sublime-snippet

Page 32: Efficient rails
Page 33: Efficient rails

Dicas de Código - Models

Page 34: Efficient rails

Gem annotatehttps://github.com/ctran/annotate_models

Gera e atualiza schema info nos modelos

Page 35: Efficient rails
Page 36: Efficient rails

Detectando N+1

Page 37: Efficient rails

Gem bullethttps://github.com/flyerhzm/bullet

Detecta N+1 por heurística, loga ou lança exceção quando achar

Page 38: Efficient rails

Gem rails-footnotesMostra informações sobre a página como:

- Queries- Variáves de sessão- Cookies- Variáves de instancia no controller- Parâmetros- etc...

Page 39: Efficient rails
Page 40: Efficient rails

Foreign Key nas migrationsA partir do rails 4.2

Page 41: Efficient rails

Gem immigranthttps://github.com/jenseng/immigrant

Gera foreign keys que foram esquecidas

Page 42: Efficient rails

Immigrant:check_keys

Page 43: Efficient rails

Dicas de Views

Page 44: Efficient rails

Partials reusáveisMuitas variáveis de instância nas actions são “bad smells”

Regras para seguir:

1) Só utilizar 1 variável de instância por action

2) Partial só pode usar variáveis através do locals

3) Documentar cada variável necessária na partial

Page 45: Efficient rails

Só utilizar 1 variável de instância por action

Page 46: Efficient rails
Page 47: Efficient rails
Page 48: Efficient rails

Gem cellshttps://github.com/apotonick/cells

View models

Page 49: Efficient rails

Partial só pode usar variáveis através do locals

Page 50: Efficient rails
Page 51: Efficient rails
Page 52: Efficient rails

Dicas de assets

Page 53: Efficient rails

Gem quiet_assets

Page 54: Efficient rails

Gem lograge

Page 55: Efficient rails
Page 56: Efficient rails

Gem autoprefixer-rails

Page 57: Efficient rails

Dicas sobre Mailers

Page 58: Efficient rails

Organização das views

Page 59: Efficient rails
Page 60: Efficient rails

Gem letter_opener ou mailcatcherLetterOpener:

- Ao disparar email, abre browser com html renderizado

Mailcatcher:

- Sobe SMTP fake para capturar email- Sobre webmail leve para visualizar

Page 61: Efficient rails

Validação de emails/^(?=[A-Z0-9][A-Z0-9@._%+-]{5,253}+$)[A-Z0-9._%+-]{1,64}+@(?:(?=[A-Z0-

9-]{1,63}+\.)[A-Z0-9]++(?:-[A-Z0-9]++)*+\.){1,8}+[A-Z]{2,63}+$/

Solução:

- Só validar se contém “@” ?

Page 62: Efficient rails

Dicas de Testes

Page 63: Efficient rails

Gem zeus ou spring Acelera (fazendo cache) carregamento da aplicação

Bom para:

- Rodar testes- Entrar no console- Subir servidor- Rodar rakes

Muito simples de usar (zeus)

Page 64: Efficient rails

Rspec only failures

Page 65: Efficient rails

Testes rápidos e sem dependência de ordem

Page 66: Efficient rails

Gem parallel_testsRoda testes em paralelo

Necessita múltiplas instâncias de banco

Cuidado se testes dependem de algum outro recurso como redis/memcache

Page 67: Efficient rails

Debugging

Page 68: Efficient rails

Gem pry-byebugComandos:

- Next- Continue- Step

Page 69: Efficient rails

.pryrc

Page 70: Efficient rails

FimDúvidas??

@fabioperrella