Ruby on Rails é uma estrutura web para desenvolvimento rápido de aplicações usando a linguagem Ruby. Ele promove convenções sobre configurações e o princípio Don't Repeat Yourself para facilitar o desenvolvimento. Rails usa o padrão MVC e tem um poderoso modelo de dados para construir aplicações web.
7. Ruby
“Linguagem de programação
dinâmica, interpretada, com uma
complexa, mas expressiva grammática
e uma biblioteca de classe com um
rico e poderoso API”
(The Ruby Programming language)
11. Visibilidade
✔ public
✔ Initialize é sempre private
✔ Todos
✔ protected
✔ Instâncias da classe e subclasses
✔ private
✔ Instâncias da classe e subclasses*
12. Visibilidade para programadores
Java
“Private é para o Ruby o que
Protected é para o Java”
def <=>(other)
self.age <=> other.age
end
14. public, protected, private
class Carro
def ano
@ano
end
def ano=(ano)
@ano = ano
End
public :ano, :ano=
protected :ano, :ano=
private :ano, :ano=
end
15. Blocos de código
#executando métodos que aceitam blocos
metodo do |var|
#corpo do bloco
end
ou
metodo { |var| #corpo do bloco }
16. Orientação a objetos
✔ Tudo é um objeto
✔ Operações são métodos
✔ Métodos sempre retornam valor
25. Metaprogramação em Ruby
class Aluno
#não sabe nada
End Exemplo retirado da
apostila R71 da Caelum.
O melhor exemplo de metaprogramação
que eu já vi!
class Professor
def ensina(aluno)
def aluno.escreve
“sei escrever!”
end
end
end
juca = Aluno.new
juca.respond_to? :escreve # => false
professor = Professor.new
professor.ensina juca
juca.escreve # => “sei escrever!”
26. Açucar sintático
✔ attr_accessor
✔ Uso de parêntese opcional
✔ “return” é opcional
✔ API expressiva
✔ 3.times {print “Oi”}
✔ 1.upto(4) {|i| puts i}
✔ 10 + 3 # => 10.+(3)
27. Ok, e porque eu deveria usar Ruby?
Fale das vantagens...
28. Pontos positivos
✔ Garbage collector
✔ Extensível via C
✔ Multi-plataforma
✔ DSL
File.foreach("arq.txt") { |line| puts line }
29. Pontos negativos
✔ Matemática científca
✔ Manipulação de imagens
✔ Threads
✔ I/O para grandes arquivos
✔ Performance
35. Origem
✔ David Heinemeier Hansson (23)
Experiências com Java e PHP
✔ 2005
✔ Extraído de projeto real
✔ Metaframework
Composto por outros frameworks
37. Ruby on Rails
✔ Convention over Confguration
✔ Don't Repeat Yourself
✔ MVC
✔ Modelo de dados avançado
✔ Software com opinião
✔ Scaffold (CRUD)
38. Tirando você e o Zézinho da
padaria, quem mais usa Rails?
39. Big players
Amazon.com BBC
CapGemini BPN
Cisco C|Net
EA (Electronic Arts) IBM
JP Morgan NASA
Oakley Oracle
Siemens ThoughtWorks
Yahoo!
Fonte: http://blog.obiefernandez.com/content/2008/03/big-name-compan.html
41. Estrutura do projeto.
app : onde fca o código da aplicação
controllers : tratam os requests
helpers : métodos utilitários, visíveis en controllers e views
models : persistência e lógica de negócios
views : layouts e páginas dinâmicas
confg : arquivos de confguração
environments : production, development e test
initializers : executados na inicialização da aplicação
42. Estrutura do projeto..
db : arquivos referentes ao banco de dados
migrations : migrações da base de dados
doc : documentação do código
lib : código ruby que não é: controller, model ou helper
tasks : tarefas do rake personalizadas
log : todos os arquivos de log da aplicação
43. Estrutura do projeto...
public : arquivos estáticos
images : diretório de imagens
javascripts : diretório de javascripts
stylesheets : diretório de css
script : scripts do Rails como generate e console
test : todos os testes da aplicação, de todos os tipos
tmp : arquivos temporários de uso do rails
vendor : plugins, rubygems e até mesmo o rails
46. Boas práticas
✔ Siga as convênções
✔ Modelos gordos
✔ Controllers magros
✔ Nomes de entidades em inglês
✔ Tabelas são entidades no plural
✔ FK = <nome_entidade>_id
47. Scripts
✔ about (informações de versões dos componentes)
✔ console (console com o ambiente da aplicação)
✔ dbconsole (console padrão do banco de dados)
✔ destroy (remover código gerado)
✔ generate (gera código da aplicação automático)
✔ plugin (instala/desinstala plugins)
✔ runner (automatizar tarefas)
✔ server (inicia o servidor da aplicação)
49. Migrações
✔ Versionamento do Banco de dados
✔ Executadas 1x (sequencial)
✔ Desenvolvedor é responsável
✔ 2 passos sempre:
✔ Realiza alteração
✔ Desfaz alteração
50. ActiveRecord::Migration
class CriarContatos < ActiveRecord::Migrations
def self.up
create_table :contatos do |t|
t.string :nome
t.string :email
t.string :telefone
t.string :endereco
end
end
def self.down
drop_table :contatos
end
end