Desenvolvimento de Software Hildebrando em 05 Nov 2006
A produtividade de Ruby on Rails - I.
Você ja teve ter ouvido falar de uma nova linguagem que pretende revolucionar o desenvolvimento de software. Ele chama Ruby e foi inventada a algum tempo visando produtividade.
Eu olho novas tecnologias com uma certa desconfiança, isso se deve a inumeras que ja vi chegar, ficar e passar. Porém vou começar um estudo pesado em Ruby pois pode contribuir com o nosso processo.
A Linguagem Ruby é uma linguagem bem simples, com tipagem fraca e outros recursos mais dinâmicos.
Sugiro o tutorial http://kb.reflectivesurface.com/br/tutoriais/rubyOnRails/
1 - Comece fazendo o download do Ruby.
2 - De uma analisada na documentação. Se você tem uma base de OO vai entender o porque da linguagem simples.
3 - Na instalação Windows (que eu utilizei) você ira encontrar um aplicativo chamado de RubyGems. É como se fosse um gerenciador de pacotes. Portanto qualquer novo pacote deve ser feito utilizando seus comandos. O pacote que iremos utilizar é o Rails.
gem install rails --include-dependencies
Na instalação ja foi adicionado no PATH o diretorio /ruby/bin.
Devido a todas as dependencias a instalação demora alguns minutos. Infelizmente sem barra de progresso portanto tenha paciência se a tela ficar estática por um tempo. O resultado final deve ser :
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rails-1.1.6
Successfully installed activesupport-1.3.1
Successfully installed activerecord-1.14.4
Successfully installed actionpack-1.12.5
Successfully installed actionmailer-1.2.5
Successfully installed actionwebservice-1.1.6
Installing ri documentation for activesupport-1.3.1...
Installing ri documentation for activerecord-1.14.4...
Installing ri documentation for actionpack-1.12.5...
Installing ri documentation for actionmailer-1.2.5...
Installing ri documentation for actionwebservice-1.1.6...
Installing RDoc documentation for activesupport-1.3.1...
Installing RDoc documentation for activerecord-1.14.4...
Installing RDoc documentation for actionpack-1.12.5...
Installing RDoc documentation for actionmailer-1.2.5...
Installing RDoc documentation for actionwebservice-1.1.6...
4 - Após a instalação vamos criar a estrutura básica de uma aplicação WEB.
rails c:\ruby\hellorails
Este processo é bem rápido e ao fim você tem uma estrutura de diretórios :
+ app
+ components
+ config
+ db
+ doc
+ lib
+ log
+ public
+ script
+ test
+ tmp
+ vendor
+ Rakefile
+ README
Entre no diretório
cd c:\ruby\hellorails
Inicie o servidor
ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2006-11-04 20:59:05] INFO WEBrick 1.3.1
[2006-11-04 20:59:05] INFO ruby 1.8.4 (2006-04-14) [i386-mswin32]
[2006-11-04 20:59:05] INFO WEBrick::HTTPServer#start: pid=3732 port=3000
Se tudo funcionou como o previsto basta acessar o servidor no endereco http://localhost:3000
5 - Vamos começar nosso projeto fazendo o famoso CRUD (Create,Retrieve,Update,Delete). Para integrar com o MySQL voce precisa alterar o arquivo config/database.yml.
gem install mysql
Select which gem to install for your platform (i386-mswin32)
1. mysql 2.7.1 (mswin32)
2. mysql 2.7 (ruby)
3. mysql 2.6 (ruby)
4. mysql 2.5.1 (ruby)
5. Cancel installation
> 1
Successfully installed mysql-2.7.1-mswin32
Installing ri documentation for mysql-2.7.1-mswin32...
Installing RDoc documentation for mysql-2.7.1-mswin32...
Copie o arquivo libmysql.dll que esta localizado no diretorio bin do MySQL para o diretorio bin do ruby.
6 - O Rails utiliza o modelo MVC como sua estrutura camadas, por tanto execute “ruby script/generate” para criar seus arquivos “controller” e “model”.
6.1 - Controller
C:\ruby\hellorails>ruby script/generate controller Produto editar pesquisar
exists app/controllers/
exists app/helpers/
create app/views/produto
exists test/functional/
create app/controllers/produto_controller.rb
create test/functional/produto_controller_test.rb
create app/helpers/produto_helper.rb
create app/views/produto/editar.rhtml
create app/views/produto/pesquisar.rhtml
“ruby script/generate controller Produto editar pesquisar”
Produto = É o nome do controller
editar = É o nome de uma View
pesquisar = É o nome de outra View
6.2 - Model
C:\ruby\hellorails>ruby script/generate model Produto
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/produto.rb
create test/unit/produto_test.rb
create test/fixtures/produtos.yml
create db/migrate
create db/migrate/001_create_produtos.rb
“ruby script/generate model Produto”
Produto = É o nome do Model
7 - Para testar se esta tudo funcionando você deve configurar suas paginas no arquivo app/controllers/produto_controller.rb
class ProdutoController < ApplicationController
def index
render_text "Hello, world! Pagina principal"
end
def editar
render_text "Hello, world! Editar"
end
def pesquisar
render_text "Hello, world! Pesquisar"
end
end
Cada def contida no arquivo representa seu método e este indica cada requisição. Portanto para entrar no metodo pesquisar basta acessar a pagina http://localhost:3000/produto/pesquisar
8 - Para completar o fluxo precisamos criar um novo componente view. Na verdade este ja foi criado no momento que criamos o controller, portanto basta alterar seu codigo para
def editar
end
Ao acessar a pagina esta ira redirecionar para o arquivo “app\views\produto\editar.rhtml”
Notem que não foi feita configuração em nenhum arquivo ainda. O fluxo de camadas é executado sguindo alguns padrões de nomenclatura.
9 - Realizando o CRUD. Como tudo ja esta funcionando vamos criar uma tabela de testes em todos os ambientes descritos no arquivo config/database.yml (hellorails_development , hellorails_test , hellorails_production).
CREATE TABLE PRODUTOS
(
id INTEGER NOT NULL PRIMARY KEY,
descricao VARCHAR(50) NOT NULL,
detalhes VARCHAR(255) NOT NULL,
preco DECIMAL(10,2) NULL
);
ALTER TABLE PRODUTOS MODIFY COLUMN `id` INTEGER NOT NULL DEFAULT NULL AUTO_INCREMENT;
Repare que a tabela foi criada no plural. O Rails vai fazer a co-relação de singular/plural.
Um recurso interessante é o scaffolding. Para utiliza-lo basta alterar o seu arquivo controller.
class ProdutoController < ApplicationController
scaffold :produto
end
Este é um recurso que mapeia as operações CRUD para esta determinada tabela. O interessante é que não há geração de código, portanto se for incluido um novo campo na tabela a tela será alterada também.
10 - Uma coisa que você deve estar questionando é quanto a customização. As telas criadas seguem templates do Rails, e com certeza em seus projetos você ira utilizar um padrão diferente. O Rails tem essa ideia de havendo necessidade de mudança é so você descrevê-las.
produto_controller.rb
class ProdutoController < ApplicationController
scaffold :produto
layout "default"
def list
@entries = Produto.find_all nil, "descricao"
end
def edit
@entry = Produto.find(@params["id"])
end
end
list.rhtml
<table border="1" cellpadding="4" cellspacing="0" width="90%">
<tr>
<th>Descricao</th>
<th>Preco</th>
<th colspan="3">Actions</th>
</tr>
<% @entries.each do |entry| %>
<tr>
<td><%= entry.descricao %></td>
<td><%= entry.preco %></td>
<td><%= link_to "Show", :action => "show", :id => entry.id %></td>
<td><%= link_to "Edit", :action => "edit", :id => entry.id %></td>
<td><%= link_to "Destroy", :action => "destroy", :id => entry.id %></td>
</tr>
<% end %>
</table
<p><%= link_to "New", :action => "new" %></p>
edit.rhtml
<%= start_form_tag :action => "update" %>
<%= hidden_field 'entry', 'id' %>
<p>Descricao:<br / ><%= text_field 'entry', 'descricao' %></p>
<p>Preco:<br / ><%= text_field 'entry', 'preco' %></p>
<p>Detalhes:<br / ><%= text_area 'entry', 'detalhes', "rows" => "3" %></p>
<input type="submit" value="Update" />
<%= end_form_tag %>
Enviar por e-mail | Hits para esta publicação: 5487
em 21 de Novembro de 2006 @ 08:58 1.Leandro Silva disse:
Aê Hil, tá legal esse blog, heim?
Só um detalhe, Ruby é uma linguagem dinâmica “fortemente” tipada, ao contrario de uma de sua inspiradoras SmallTalk.
http://pt.wikipedia.org/wiki/Ruby_(linguagem_de_programação)
Quando puder, dá um chego em http://aartededesenvolversoftware.blogspot.com.
Abraço!
em 24 de Novembro de 2006 @ 10:56 2.Hildebrando disse:
Beleza Cabelera, o lance da tipagem fraca que comentei na verdade é tipagem dinâmica, vou atualizar para não confundir.
Valeu