Slides que utilizei para ministrar uma palestra sobre Desenvolvimento WEB com Ruby on Rails no IV Congresso de Iniciação Científica da Faculdade Redentor de Itaperuna / RJ em Novembro de 2011.
4. Sobre o Ruby on Rails
● Framework web implementado na linguagem Ruby
● Desenvolvimento ágil de aplicações web
● MVC
● Utiliza o conceito Convention over Configuration (CoC)
● E muito mais ...
5. Ruby on Rails
●
Principais Banco de Dados Suportados
●
SQlite 3 (padrão)
●
MySQL
●
PostgreSQL
●
Oracle
●
Microsoft SQL Server
6. Ruby on Rails
●
Instalação
●
Windows:
http://railsinstaller.org
●
Linux (Ubuntu):
https://github.com/juliobetta/RoR/tree/master/installation
Os exemplos a seguir foram testados apenas em ambiente LINUX.
8. Sintaxe
●
IRB
Programa iniciado na linha de comando que permite a execução de
comandos em Ruby com responta em tempo-real.
Todos os comandos a seguir podem ser testados utilizando o irb.
9. Sintaxe
●
Strings
"eu sou uma string"
'Ruby ' + 'on Rails'
10. Sintaxe
●
Variáveis
Não é preciso declarar o tipo:
nome = "Ruby"
Porém a tipagem no Ruby é forte:
versao = 3
nome = "Rails " + versao (TYPE ERROR)
versao = 3
nome = "Rails " + versao.to_s
Podemos avaliar expressões dentro de strings com conversão
automática:
versao = 3
nome = "Ruby"
curso = "#{nome} on Rails #{versao}"
11. Sintaxe
●
Operações básicas
1 + 2 # adição
4 – 2 # subtração
2 * 2 # multiplicação
6 / 2 # divisão
15 % 2 # modulo
●
Operadores
5 == (2+3) # igualdade
2 != 3 # inigualdade
10 > 13 # maior
3 < 10 # menor
5 <= 5 # menor ou igual
5 >= 5 # maior ou igual
12. Sintaxe
●
Controles de fluxo
Maneira usual:
idade = 15
if (idade < 16) then
puts 'que pariu! Você não deveria estar dirigindo.'
end
13. Sintaxe
●
Controles de fluxo
Maneira usual um pouco melhor:
idade = 15
if idade < 16
puts 'Você não deveria estar dirigindo.'
end
14. Sintaxe
●
Controles de fluxo
Isso é ótimo:
idade = 15
puts 'Você não deveria estar dirigindo.' if idade < 16
15. Sintaxe
●
Controles de fluxo
Algo diferente:
idade = 15
unless idade >= 16
puts 'Você não deveria estar dirigindo.'
end
ou:
idade = 15
puts 'Você não deveria estar dirigindo.' unless idade >= 16
16. Sintaxe
●
Controles de fluxo
Não me esqueci do else:
idade = 18
if idade < 16
puts 'Você não deveria estar dirigindo.'
else
puts 'Pode seguir!'
end
Famosos operadores ternários:
idade = 18
puts idade >= 16 ? 'Pode seguir!':'Vai pra casa!'
17. Sintaxe
●
Controles de fluxo
Loops
for i in 1..10 5.times do |n| 5.upto(10) do
puts i puts n puts 'Oi!'
end end end
letras = ['a','b','c','d']
letras.each do |letra|
puts letra
end
i = 0
while i < 5
puts i
i += 1
end
19. Sintaxe
●
Ruby :symbols
São cadeias de caracteres usualmente utilizados como identificadores.
Eles são como strings , porém reusam o mesmo espaço de memória.
Vejamos:
"carro".object_id
=> 2953810
"carro".object_id
=> 2951340
:carro.object_id
=> 166418
:carro.object_id
=> 166418
20. Sintaxe
●
Métodos (funções)
def diga_adeus_para(nome, sobrenome)
"Adeus #{nome} #{sobrenome}..."
end
puts diga_adeus_para("Yukihiro", "Matsumoto")
Como parênteses neste caso são opcionais, soa mais natural como:
puts diga_adeus_para "Yukihiro", "Matsumoto"
21. Sintaxe
●
Classes
A maneira mais longa: … e a mais curta:
class Pessoa class Pessoa
@nome attr_accessor :nome,
@sobrenome :sobrenome
end
def nome Define getters e setters
@nome
end
def sobrenome class Pessoa
@sobrenome attr_reader :nome,
end :sobrenome
end
def nome=(nome) Define somente getters
@nome = nome
end class Pessoa
attr_writer :nome,
def sobrenome=(sobrenome) :sobrenome
@sobrenome = sobrenome end
end
end Define somente setters
22. Sintaxe
●
Classes
Criar novas instância com o método .new
matz = Pessoa.new
matz.nome = "Yukihiro"
matz.sobrenome = "Matsumoto"
puts matz.nome
puts matz.sobrenome
24. Sintaxe
●
Classes
As classes são abertas:
class Pessoa
def initialize(nome, sobrenome)
@nome = nome
@sobrenome = sobrenome
end
def to_s
"#{@nome} #{@sobrenome}"
end
end
matz = Pessoa.new "Yukihiro", "Matsumoto"
puts matz
26. Mão na massa
●
Switter
●
Aplicação similar a uma seção do famoso microblog
●
Exibir usuários e microposts (sweets)
Entidades
27. Mão na massa
●
Switter
$ rails new switter
Estrutura de diretórios gerada
automaticamente
28. Mão na massa
●
Switter
Organiza a aplicação em
componentes
29. Mão na massa
●
Switter
Configuração da aplicação Arquivos estáticos
30. Mão na massa
●
Página Inicial
Criando um Controller:
No terminal:
$ rails generate controller paginas inicio
31. Mão na massa
●
Página Inicial
$ rails generate controller paginas inicio
Arquivos gerados automaticamente
na pasta app
32. Mão na massa
●
Página Inicial
Criando uma Action no Controller que acabamos de gerar:
app/views/paginas/inicio.html.erb
<h2>Seja bemvindo ao Switter!!!</h2>
app/controllers/paginas_controller.rb
class PaginasController < ApplicationController
def inicio
render 'paginas/inicio'
end
end
33. Mão na massa
●
Layout padrão
●
Contém a estrutura HTML da aplicação;
●
A ideia é que as views geradas nos controllers sejam incluídas
neste arquivo, através do método yield.
app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Switter</title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
34. Mão na massa
●
Rotas
Sistema que examina a URL solicitada e determina qual ação deve
deve ser executada pela aplicação.
config/routes.rb
Switter::Application.routes.draw do
get 'paginas/inicio'
end
35. Mão na massa
●
Inicialização
Rails já possui um webserver embutido:
$ rails server
36. Mão na massa
●
Scaffolding
●
Criar model, controller e views para criar, exibir, atualizar e
deletar (CRUD) o recurso que especificarmos
●
Também é responsável por criar as tabelas do banco de dados
$ rails generate scaffold usuario nome:string
email:string
$ rails generate scaffold micropost
usuario_id:integer conteudo:string
37. Mão na massa
●
Scaffolding
Estrutura gerada na pasta app
38. Mão na massa
●
Scaffolding
Rotas geradas
config/routes.rb
Switter::Application.routes.draw do
get 'paginas/inicio'
resources :usuarios
resources :microposts
end
40. Mão na massa
●
Rake
●
Executar tarefas
●
Funciona como o Make, Ant, etc...
●
Utilizado para gerenciar banco de dados, rodar testes, e o que
mais for preciso
●
Executar tarefas personalizadas
$ rake tasks
43. Mão na massa
●
Scaffolding é bom porque...
●
É rapido
●
Mostra como o Rails funciona
●
Usa padrões que usaremos no dia-a-dia
44. Mão na massa
●
Scaffolding é ruim porque...
●
O código não é otimizado
●
Pode adicionar mais código do que venhamos precisar
●
É muito simplório (uma tabela, sem possibilidades de gerar
relacionamentos automaticamente)
Profissionais da área não utilizam esta técnica em ambiente de produção.
45. Mão na massa
●
ActiveRecord
●
Biblioteca ORM que encapsula as tabelas do banco de dados
como objetos
●
Utiliza o poder do Ruby de gerar código (metaprogramação)
46. Mão na massa
●
ActiveRecord Interativo
Os exemplos a seguir podem ser testados por meio do rails console, que
pode ser executado de duas maneiras:
$ rails console
$ rails console sandbox
Com o parâmetro sandbox ativado, toda mudança no banco de dados será
desfeita após a saída do console.
* utilizar o comando exit para sair do console.
48. Mão na massa
●
Relacionamento
Como vimos no início, um usuário possui vários microposts e um
micropost pertence a apenas um usuário.
Entidades
49. Mão na massa
●
Relacionamento
app/models/usuario.rb
class Usuario < ActiveRecord::Base
has_many :microposts
end
app/models/micropost.rb
class Micropost < ActiveRecord::Base
belongs_to :usuario
end
Com isso, é gerado, via metaprogramação, o método usuario na instância da
classe Micropost e o método microposts na instância da classe Usuario.
50. Mão na massa
●
Relacionamento (console)
Listar todos os microposts de um determinado usuário:
# seleciona o último usuario inserido no BD
usuario = Usuario.last
# e atribui a variavel todos seus microposts
microposts = usuario.microposts
Cria um micropost e o atribui a um usuário:
matz = Usuario.where :nome => 'Yukihiro Matsumoto'
micropost = Micropost.new
micropost.conteudo = 'Eu sou o criador do Ruby!'
micropost.usuario = matz
micropost.save
# imprime Yukihiro Matsumoto
puts micropost.usuario.nome
59. Mão na massa
●
Gems
●
Gerenciador de pacotes do Ruby
●
Facilita distribuicão de códigos
●
Age como o apt-get (derivados do Debian)
●
No Rails as gems podem ser adicionadas no arquivo Gemfile
60. O que vimos até agora
● Brevemente aspectos principais da sintaxe Ruby
● Principais características do Rails
● Como criar uma aplicacão
● Criar controller e actions
● Layouts
● Scaffolding
● Active Record
● Validacões
● Gems