Agora que já aprendemos um pouco sobre Ruby, vamos colocar em prática. O Sinatra é uma forma de criar aplicações web que utilizaremos neste capítulo.
Para instalar o Sinatra precisamos executar o seguinte comando no terminal:
$ gem install sinatra
Crie um arquivo (por exemplo: ola.rb
) com o seguite conteúdo:
require 'sinatra'
get '/' do
'Olá Mundo!'
end
Execute no terminal:
ruby ola.rb
Então acesse "http://localhost:4567/" no seu navegador.
Para finalizar a execução da sua aplicação, aperte Control + C.
Vamos agora destrinchar nosso exemplo.
require 'sinatra'
Primeiramente estamos carregando o Sinatra, disponibilizando assim componentes do mesmo na nossa aplicação:
get '/' #(...)
O get
é um método do Sinatra, que serve para indicarmos como responder a
solicitação de uma página, no caso a página raiz do nosso site, o /
, que por
sua vez é o primeiro parâmetro.
do
"Olá Mundo"
end
O bloco de código passado para o get
indica como responderemos a solicitação,
no caso retornando a frase "Olá Mundo!"
.
Crie um arquivo (por exemplo: lista_de_desejos.rb
) com o seguite conteúdo:
require 'sinatra'
lista_de_desejos = [
'Unicórnio Fofinho',
'Livro com cheiro de novo',
'Nova temporada da minha séria favorita'
]
get '/desejos' do
erb(:lista, locals: { desejos: lista_de_desejos })
end
Agora crie uma pasta chamada views
, no terminal execute os seguintes comandos:
mkdir views
Após isso, entre na pasta com cd views
e crie o arquivo lista.erb
com o
seguinte conteúdo:
<html>
<body>
<h1>Minha Lista de Desejos!</h1>
<ul>
<% for desejo in desejos %>
<li><%= desejo %></li>
<% end %>
</ul>
</body>
</html>
Execute no terminal:
ruby lista_de_desejos.rb
Então acesse "http://localhost:4567/" no seu navegador.
Para finalizar a execução da sua aplicação, aperte Control + C.
Assim como no exemplo anterior, criamos um bloco de código que passamos para o
método get
. Como podemos ver à seguir:
lista_de_desejos = [
'Unicórnio Fofinho',
'Livro com cheiro de novo',
'Nova temporada da minha série favorita'
]
# (...)
erb(:lista, locals: { desejos: lista_de_desejos })
Diferente do exemplo anterior, neste utilizamos primeiras linhas para criar uma
variável chamada de lista_de_desejos
e armazenamos nossos desejos.
Para em seguida utilizar o método erb
e passar para ele dois paramêtros.
O primeiro paramêtro identifica qual o modelo representa a página que o usuário irá ver no navegador.
O segundo paramêtro é responsável por indicar para o modelo quais são os desejos que iremos mostrar na página.
Agora vamos utilizar um formulário para adicionar novos desejos. Adicione na
pasta views
um arquivo chamado formulario.erb
com o código do formulário
que criamos no capítulo sobre HTML:
<html>
<body>
<form method="post" action="/novo">
<input type="text" name="desejo" />
<button type="submit">Enviar</button>
</form>
</body>
</html>
E no arquivo lista_de_desejos.rb
vamos tratar o envio do formulário da
seguinte forma:
get '/novo' do
erb :formulario
end
post '/novo' do
lista_de_desejos << params[:desejo]
redirect '/desejos'
end
Adicione um link no arquivo lista.erb
para o formulário utilizando o seguinte
código:
<a href="/novo">Novo Desejo</a>
Ao reiniciar nossa aplicação, podemos acessar "http://localhost:4567/" para abrir o formulário e adicionarmos outros desejos na lista.
Ao acessar o caminho /novo
será executado o bloco de código que carrega o
modelo para a página do formulário:
get '/novo' do
erb :formulario
end
Já o formulário, ao ser submetido, indica à nossa aplicação qual o método da solicitação e o caminho, no caso a ação:
<form method="post" action="/novo">
Fazendo com que o seguinte bloco seja executado:
post '/novo' do
O get
, que utilizamos nos exemplos anteriores, serve para visualizar algum
recurso, como a lista de desejos ou o formulário. Já o post
utilizamos para
adicionarmos um novo recurso, no nosso caso um novo desejo. Para conhecer outros
métodos de solicitação, acesse:
https://pt.wikipedia.org/wiki/HTTP
O bloco executado realiza duas ações, adiciona o novo desejo na nossa lista de
desejos e redireciona o navegador para o caminho /desejos
. O novo desejo é
recebido como um parâmetro da solicitação, utilizando o mesmo nome que foi
utilizado na campo do formulário, no caso desejo
.
lista_de_desejos << params[:desejo]
redirect '/desejos'