Feed Artigos Comentários

Arquivo de 2 de Setembro de 2008



Ruby - Rails Hildebrando em 02 Set 2008

Ruby On Rails - Dia 2

Uma palavra que resume bem o dia 2 é a seguinte “atualização”. Eu não estava trabalhando com Ruby +2.0 e infelizmente, o livro também segue a versão mais antiga. O problema é que houveram algumas atualizações que tomaram um pouco do tempo do treinamento, no entanto, não impactaram no resultado final. Finalizar o aplicativo CRUD.

Bem, vamos detalhar algumas dificuldades encontradas. O inicio do desenvolvimento foi focado na modelagem das entidades (Model). Hoje adicionamos métodos de negocio, como um metodo para criptografar senha. Tudo ia muto bem até a hora de gerar os controllers e views.

O comando utilizado para isso é o scaffolding

ruby script/generate scaffolding Car

A listagem resultado do comando mostra que tudo foi gerado, no entanto o conteudo das paginas de listagem (index), edicao, novo e visualização não estão com os campos da entidade. Assim tivemos que fazer tudo na mão. Pelo menos serviu para o pessoal dar uma praticada e ir entendendo uma parte da sintaxe dos controllers e views.

Se você não implementou a entidade model, a sintaxe do scaffolding deve ser

ruby script/generate scaffold Car model:string year:integer preco:float data_compra:datetime

Interessante que agora não é mais gerado as telas com um for pesquisando as colunas e sim, é adicionado os campos diretamente. Isso ajuda pois na realidade ao ajustar as telas o mais comum é retirarmos colunas.

Com o scaffolding executado, a estrutura principal das nossas entidades esta pronto. O que nos resta fazer é irmos as especializando e adicionando outras com funcionalidades não ligadas a uma entidade específica.

Para simularmos essa situação implementamos um requisito de autenticação. Dificilmente você ira participar do desenvolvimento de uma aplicação que não utilize recursos de autenticação (e a maioria ainda precisa de autorização também), e para o treinamento essa funcionalidade tem alguns objetivos didáticos :

1) A interface de login não esta associada a nenhuma entidade e portanto deve ser criada a parte
2) O controlador precisa de método fora do padrão CRUD, como login e logout
3) Na logica de autenticação é preciso criar um metodo que saiba o que fazer com o login/senha, e assim trabalhamos com esses métodos de negócio nas entidades (User). Esse método além de realizar manipulação de banco de dados, tambem trabalha um pouco com a sintaxe da linguagem.
4) No controlador (LoginController) manipulamos dados da sessão
5) No controlador manipulamos dados no flash[:notice], especifico para armazenar dados durante uma requisição
6) O redirecionamento das paginas (login com sucesso ou nao)

E tivemos tempo de trabalhar um pouco com filtros. É um assunto com uma leve carga conceitual, porém com uma implementação muito simples.

Resumindo nossos trabalhos, podemos destacar uma revisão em conceitos de OO, pratica na linguagem Ruby, os geradores de codigo script/generate e algumas funcionalidades interessantes como sessao, flash e filtros.

Um outro recurso interessante é para quem não gosta de geradores de código (eu). Ao invés de deixar os controladores gerados pelo scaffolding com todas as assinaturas de métodos, adicione a linha no corpo da sua classe :

scaffold :car

Assim seu controller “ganha” as funcionalidades CRUD padrão, e o numero de linhas de código cai mais ainda.

Observação : Em alguns projetos Java que eu trabalho nós criamos Actions (strus2) genéricas com Jsp genéricos também, assim, para situações em que o CRUD nao precisa de nenhuma especialização não é preciso codificar as telas.

Nos próximos dias vamos aprofundar o assunto em cada tópico.

Até amanhã

Ruby - Rails Hildebrando em 02 Set 2008

Ruby On Rails - Dia 1

Para servir de repositorio de dados do conteudo passado no treinamento Ruby On Rails em Sao Luiz - MA eu resolvi criar um post especifico de cada dia de treinamento. O treinamento é baseado no livro do Fabio Akita, que além de ter uma ordem cronológica didática, também tem exemplos práticos. Cada aluno tem seu exemplar do livro para acopanhamento. Vou aproveitar para detalhar o que levantamentos de util nas aulas pois pode ser útil para mais alguém.

No inicio do treinamento ja discutimos sobre a necessidade de alguns conceitos fundamentais para um melhor aproveitamento do treinamento.

Em primeiro lugar, para mergulhar de cabeça em Ruby On Rails, você TEM que ter alguns pré-requisitos :

1) conceitos de modelagem de dados : Não precisa ser expert em nenhum banco, no entanto, saber criar tabelas e relacionamentos é fundamental.
2) conceito de orientação a objetos : Muitos recursos do Ruby e do Rails exigem que o desenvolvedor entenda bem de classes e objetos. Se você enxerga classes apenas como o mal necessário para criar objetos, acho melhor voce dar uma estuda nestes conceitos. De uma revisada em polimorfismo, herança e encapsulamento (pilares da OO).
3) Familiaridade com ambiente web : O foco do treinamento é em um framework web, e por tanto, você deve ter noção de como funciona aplicações web. Servidor web, provendo paginas estáticas ou dinâmicas, processando requisições de clientes, request, response, sessão e conceitos de segurança ajudam.
Atende os requisitos ? Então vamos la.

Ambiente

Ruby é uma linguagem interpretada, e por tanto você precisa do interpretador. Acessa o site http://www.ruby-lang.org e baixa o binario para o seu sistema operacional. Vai vir muito mais coisa que o interpretador, com destaque para o “ri” (consultar a documentação das classes) e “rdoc” para gerar documentação

Se for tudo no Next >> Next >> Finish sera criado um diretorio Ruby e o sub-diretorio Bin ja vai estar configurado no path.

Abra o console (prompt) e execute “ruby” de qualquer diretorio. Assim ja validamos se a instalação foi executada com sucesso.

Bem, o Ruby é muito legal e eu recomendo uma leitura mais avançada na linguagem, no entanto, para nosso treinamento as coisas vão sendo passadas sob demanda. Por tanto vamos ao Rails.


gem update --system
gem install rails --include-dependencies

A instalação de pacotes adicionais é feita utilizando esse gerenciador “gem”

Começando meu projeto

Depois de instalado é hora de criarmos o nosso projeto:

rails meuprojeto

Todos os diretorios do projeto são criados e cada um tem a sua função específica.

Vamos iniciar configurando o acesso ao banco de dados.

Seguimos o wiki do Rails para configurar o acesso ao SQL Server

http://wiki.rubyonrails.org/rails/pages/HowtoConnectToMicrosoftSQLServer

Essa atividade foi mais demorada, pois tivemos que pesquisar esse driver e seguir o tutorial. Fizemos o teste ja executando um comando do rake para fazer a carga no banco com as nossas tabelas.

rake db:schema:load

começamos a construção das nossas entidades (model)


ruby script/generate model User
ruby script/generate model Task

e interagimos com o banco de dados através do ambiente de execução do Rails

ruby script/console

Exemplos


u = User.new
u.username = "teste"
u.full_name = "Teste de usuario"
u.hashed_password = "12313"
u.save

Com a parte de integração com o SQL Server funcionando, fechamos a parte de preparação do ambiente. Uma duvida que surgiu foi referente a documentação.

Para visualizar a documentação de uma classe podemos utilizar o ri.

Exemplo :

ri String

ou, especificando o método

ri String#upcase

Mas quando existe mais de um metodo com essa assinatura significa que o Ri esta encontrando essa classe#metodo em mais de uma fonte de documentacao.
Nesses casos você precisa especificar qual documentação deve ser pesquisada.

Exemplo :

ri --system String#upcase

As opções disponíveis são :

By default ri searches for documentation in the following
directories:

c:/ruby/share/ri/1.8/system
c:/ruby/share/ri/1.8/site
C:\Users\hfurlan/.rdoc
c:/ruby/lib/ruby/gems/1.8/doc/*/ri

Specifying the –system, –site, –home, –gems or –doc-dir
options will limit ri to searching only the specified
directories.

Do primeiro dia foi (resumidamente) isso.

Amanhã tem mais.