O documento resume os principais conceitos e ferramentas do framework Ruby on Rails. Apresenta os pilares do MVC, models, views e controllers, e explica como o Rails promove princípios como DRY e convenções sobre configuração. Também discute recursos como testes, internacionalização, deploy e ferramentas de apoio como Capistrano.
3. REAL
baseado em necessidades reais
DRY
elimina tarefas repetitivas
COC
adopta convenções
ÁGIL
aberto a mudanças no desenvolvimento
4. Princípios
DRY: Don’t Repeat Yourself
Cada coisa no seu sítio
Reduzir a quantidade de código reduz erros
COC: Convenção sobre Configuração
Torna as aplicações mais fáceis de entender
Menos trabalho de desenvolvimento
Só precisamos de configurar situações extra-
ordinárias
5. • Desenhado para a “felicidade” do
programador
• Felicidade + Motivação = produtividade
• Ambiente de testes incluído
• Flexibilidade perante as mudanças
• Velocidade de desenvolvimento (agilidade)
• Beleza do código
6.
7. Controller
•Recebe os pedidos http do utilizador
•Prepara a informação que vai ser mostrada ao
utilizador.
•Responsável por :
• apresentar os resultados
• gerir o diálogo
8. Controller
•Filtros (filters)
•Permite executar código antes/depois das
acções
•Permite saltar as próprias execuções das acções
•Muito útil para autenticação e outros...
•Alguns exemplos:
• before filter, after filter, around filter
9. MODEL
•Models (bd)
representam as tabelas das bases
de dados
•Declaração é feita de forma limpa e legível
•Não é necessário indicar nome de tabelas ou
chaves primárias/estrangeiras mas tudo pode ser
personalizado!
11. MODEL
•Migrations permitem alterar a base de
dados
•Permitem actualizar facilmente a estrutura da
base de dados.
•Não é preciso saber SQL, nem mexer na BD
directamente.
•Podemos criar tabelas, chaves, indexes, etc.
12. VIEW
•Gerem a apresentação visual da aplicação
•Layouts guardam o aspecto geral das páginas
•Existe separação entre dados e aspecto
• ex: xml, html, json, vcard, atom, etc...
13. VIEW
•Helpers
• Objectivo: Simplificar e não repetir código
• Formulários
• Geração de URL’s
• Geração de Javascript (Prototype +
Script.aculo.us)
• Formatos de texto / números / datas ...
23. Base de Dados
1 tabela = 1 modelo
Classes ficam guardadas em app/models e
estendem ActiveRecord::Base
Nomes das tabelas no plural e nomes das
classes no singular
As colunas são mapeadas como atributos do
modelo
As tabelas têm uma chave primaria ( id )
25. Active Record
CRUD
Create: create, new
Read: find, find_by_<attr>
Update: save, update_attributes
Delete: destroy
26. Boas Prácticas
Não colocar muito código no controller/view.
O objectivo é models com muito código e
controllers com pouco.
27. Routes
Routes são regras que procuram mapear URL’s
à hash dos Params.
A hash dos params possui o controller e a
action a invocar.
Routes são definidas no fich config/routes.rb e
são aplicados pela ordem que aparecem.
Se não houver comparação possível, devolve
erro 404.
28. REST
REST é uma alternativa ao SOAP e uma
maneira de adicionar uma API tipo web
service a uma aplicação.
O estado do sistema está dividido em recursos
que são alcançados via hyperlinks. Todos os
recursos têm um interface uniforme e
operações bem definidas.
REST foi desenhado para suportar
escalabilidade e flexibilidade.
29. REST
Recursos são tipicamente models e cada um
tem um controller com 7 actions: create, new,
sho, update, edit, destroy
Existem 4 tipos de operações: Create, Read,
Update e Delete (CRUD)
As 4 operações correspondem aos verbos
HTTP: GET, POST, PUT, DELETE
Podemos gerar as rotas usando
map.resources :nomedomodeloplural
32. RJS
RJS é uma API em Ruby para gerar código
javascript que é enviado de volta ao browser e
executado.
É especialmente útil para actualizar várias
partes da página.
33. RJS - Exemplos
page.insert_html :bottom ‘todo_list’, “<li>#{todo.name}</li>”
page.replace_html ‘flash_notice’, “Todo added: #{todo_name}”
page.replace ‘flash_notice’, :partial => ‘flash’, :object => todo
page[:flash_notice].remove|show|hide|toggle # page[:flash_notice] <=> $(‘flash_notice’)
page.alert “The form contains the following errors: #{errors.join(“, “)}”
page << “alert(‘Hello there’)” # Append raw JavaScript to be executed
page.visual_effect :pulsate, ‘flash_notice’
page.delay(3) do
page.visual_effect :fade, ‘flash_notice’
end
35. Internacionalização
Introduzida na versão 2.2 do Ruby on Rails
Traduz datas, numeração, strings, etc
Referências:
http://rails-i18n.org/
http://github.com/svenfuchs/rails-i18n/
tree/master/rails%2Flocale
36. Conclusões
Criámos uma aplicação web para gerir workshops e inscrições
Conseguimos mapear tabelas para objectos sem trabalho manual e
aborrecido.
Não precisámos recompilar ou reiniciar a aplicação após cada
mudança no código.
Não precisámos configurar dezenas de arquivos XML. Só foi preciso
inserir o nome/password da base de dados.
Não precisámos de javascript para escrever AJAX.
Usámos Ruby nas três camadas da aplicação.
Ganhamos uma API de borla. :)
Temos uma estrutura de testes unitários e funcionais.
43. CAPISTRANO
Ferramenta para automatizar operações nos
servidores de produção
Documentação em: www.capify.org
Instalação: gem install capistrano
Ver tarefas: cap -T