Monografia: GEtna – Gerador Ruby On Rails a Partir de banco de Dados

Posted by Luiz Carvalho | Posted in Dicas, Projetos | Posted on 18-09-2009-05-2008

0

Bom galera já estava em tempo de compatilhar minha monografia, de tempos em tempos a galera pedia para enviar, então nada mais justo (e fácil) que por ela aqui no blog.


UNIVERSIDADE FEDERAL DO TOCANTINS
CAMPUS UNIVERSITÁRIO DE PALMAS
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO

GETNA: GERADOR DE CÓDIGO RUBY ON RAILS
A PARTIR DE BANCO DE DADOS

Palmas
2008
LUIZ ARÃO ARAÚJO CARVALHO

Resumo
Na literatura, existem vários geradores de código disponíveis que tem como
principal propósito automatizar o processo de desenvolvimento de aplicações em
diversas linguagens de programação. Este trabalho apresenta o desenvolvimento
de um gerador de código, denominado GEtna, com a função de criar as classes a
partir de um determinado banco de dados. Vale a pena ressaltar que o gerador
GEtna difere dos existentes pelas suas funcionalidades disponibilizadas.
O gerador proposto aumenta a velocidade do processo de desenvolvimento
de uma aplicação Rails, pois recebe como entrada tabelas de um banco de dados
relacional (MySQL, PostgreSQL ou SQLite) e fornece como saída toda a estrutura
de arquivos (classes). Vale a pena ressaltar que o GEtna proporciona uma
padronização das classes geradas e, conseqüentemente, sustenta sua legibilidade,
que é um fator muito importante quando se trabalha com equipes de
desenvolvedores. Assim, neste trabalho será apresentada uma descrição sobre
geradores de código, padrões de projeto, métodos de mapeamento e definições de
dados que são fundamentais para o desenvolvimento de um gerador de código.

Palavras-chave: Banco de Dados Relacional, Desenvolvimento de Sistema,
Gerador de Código, Rails.

ABSTRACT

In literature, there are several available code generators that have the main
goal to automatize the application development process for some programming
languages. This work presents the development of a code generator, named GEtna,
that creates classes from a specific database. It’s important to note that GEtna
generator differs of other generators by your available functionalities.
The proposed generator increases the velocity of a Rails application
development process because it receives as input relational database tables
(MySQL, PostgreSQL or SQLite), and provides as output the complete file structure
(class). The GEtna provides a padronization of generated classes and,
consequently, maintains the legibility that is a very important factor when there are
developers’ groups. So, in this work a description about code generators, design
patterns, mapping methods and data definition is presented because they are
essential for a code generator development.

Keywords: Relational Database, System Development, Code Generator, Rails.


Não, não eu não vou Copiar a Monografia toda aqui não, em baixo eu exportei em diversos formatos para que seja aberto não importa a situação. Coloquei também o Original podendo ser usado como Modelo para você redigir sua monografia no padrão usado pela UFT.  Só lembrando consegui um 10 com essa monografia então cuidem muito bem dela.

Original(DocX)

Pdf

Txt

Html

Doc

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna – Ep. 3: Mapeando Tabelas do Banco de Dados

Posted by Luiz Carvalho | Posted in Artigos | Posted on 07-08-2008-05-2008

6

Primeiro passo de nosso gerador Rails era buscar todas as tabelas do banco de dados e criar a estrutura inicial… outro problema após algumas horas vendo documentação… bingo! nada XD, Pedindo ajuda para nossa comunidade de sábios desenvolvedores do rails-br, obtive varias sugestões como: De Buscar Pelo Model de Abraão Coelho, Cássio Marques, infelizmente não serviu, pois ainda não tenho model algum, necessito cria-los. Renan Andrade teve uma otima ideia, já que até agora eu defini que o banco seria MySQL poderia fazer um simples:

mysql> show tables; <= mostra as tabelas;
mysql> describe suatabela; <= exibe sua tabela com as descrições do campo.

OK, Mas queria algo mais pratico, tinha certeza que o ActiveRecord poderia fazer isso, e não ia desistir de encontrar.

Estava tentando algo bem bobo como:

ActiveRecord::Base.column_names

Me deparei com o seguinte erro:

NoMethodError: undefined method `abstract_class?’ for Object:Class
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1915:in `class_of_active_record_descendant’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1277:in `base_class’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1012:in `reset_table_name’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1008:in `table_name’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1145:in `columns’
from /var/lib/gems/1.8/gems/activerecord-2.1.0/lib/active_record/
base.rb:1158:in `column_names’
from (irb):16

Ricardo S Yasuda e Davis Zanetti Me abriram os olhos quanto ao metodo que só funciona em uma instancia do ActiveRecord e não em uma Classe Abstrata, isso foi muito importante para a minha conclusão.

Ulisses de Albuquerque Deu uma dica boa sobre Adapters mas isso ainda não era claro pra mim, mas foi muito importante isso ai.

Juan Maiz então me endicou uma saída, utilizar o Sequel Uma solução perfeita para meus problemas, mas fiquei um pouco desanimado pensando que o ActiveRecord… o Poderoso ActiveRecord não tinha tal funcionalidade… e tambem que meu simples generator tenha que usar alguma dependência tão primitivamente para realizar uma pequena tarefa. Bom não desisti e fui feliz em minha busca e insistência.

@con = ActiveRecord::Base.connection
@table_names = @con.execute(’show tables’)

Está ai, nossas tabelas :) legal né, saí juntando as dicas do pessoal todo e bingo, saiu alguma coisa, bom com isso já posso começar…, mas como sou meio curioso e me animei com esse negocio e não custava nada dar uma adentrada a mais… olha o que descobri…

@con = ActiveRecord::Base.connection
@table_names = @con.tables


:D Que legal, não era que o ActiveRecord Tinha mesmo o bendito Método… só um pouco de pesquisa e fica simples.

Agradeço a toda a Comunidade.

Abraços

Para ver todos os posts Sobre Getna clique aqui

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna – Ep. 2: Primeiros Passos

Posted by Luiz Carvalho | Posted in Artigos | Posted on 06-08-2008-05-2008

1

Iniciar meu Projeto… e agora por onde devo começar?

Primeiro a definição do projeto, ué é um gerador… então vamos criar um gerador. uma googlada básica e “Gerador em Rails“, bom nesse tutorial já me sanaram outra duvida, Plugin ou Gem como no tutorial ensina a fazer um plugin, advinha o que eu fiz?

Criamos o Projeto Rails

rails projetogetna

e fizemos exatamente o que está no tutorial, bom funcionou até um certo ponto o ultimo arquivo, deu pau lá nas migrates, mas acho que deve ser por causa da versão do Rails.

Comecei a “programar” depois de algumas horas tentando entender o funcionamento e brincando com Rails::Generator::NamedBase, como um bom iniciante vindo de uma metodologia totalmente diferente, tentei Debugar o codigo com o ruby-debug-base fui até o bom e velho Grupo rails-br onde, dentre todas as comunidades que eu passei, encontro a galera mais prestativa dessas comunidades de Programação. onde Davis Zanetti, Diego Carrion,Tino Gomes e Cássio Marques Deram uma Força, e mandaram (Pra varias Escrever teste), bom eu ainda to meio engatinhando nessa parada de testes, mas pow, to no Rails. e estou começando uma longa jornada ate a dominação desse metodo.

Como ainda não sou Hábil com isso achei uma solução, no mínimo, “Gambiarral” fazer saidas do sistema tirei a ideia do post do Diego Carrion:

“Para não precissar debugar acho que o melhor é ter bons logs, ai caso
aconteça um erro, voce pega os dados do log e cria um novo teste :D

A maneira que eu fiz foi gerar saidas do sistema com os conteúdos das variaveis usando o

$stdout.print

O Codigo fica um pouco feio XD, mas foi a minha saída:


$stdout.print ARGS
runtime_args.each { |i|  $stdout.print#{i}\n }

Bo isso funciona e garante alguns dias a mais sem Testes.

Para ver todos os posts Sobre Getna clique aqui

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter

GEtna – Ep. 1: A ideia

Posted by Luiz Carvalho | Posted in Artigos | Posted on 05-08-2008-05-2008

0

Reta Final do meu Curso de Bacharelado em Ciência da Computação a Surgiu a pergunta… “e agora qual vai ser o tema de meu TCC?”. Após vários conflitos entre eu e meu parceiro de Monografia (Sim, Aqui se faz(ia) monografia em Dupla) finalmente consegui convence-lo de fazer algo em RubyOnRails, ele é meio Neofóbico queria por que queria fazer algo em PHP,

Minha proposta era fazer um projeto Open Source de um Gerador Rails que apartir de um Banco de dados gera-se toda a estrutura inicial de um Projeto Rails, algumas características que estarão presente no projeto:

Models – Com relacionamentos(Has_many,Has_many Throught, Belongs_to)

Controllers – Carregando informações sobre objetos relacionais

Views

Routes

Validations – cria-se validações para inteiros, flutuantes, tamanhos e de presença.

Migrates

Customização da aplicação através de layouts pré-definidos.

Tests – Criação de Testes unitários e funcionais básicos.

Suporte multi-Linguagem – pode-se gerar interface em diversas linguagens (PT-

Br,En,…)

Bom para muitos pode até não ser grande coisa, mas eu tenho apenas 3 meses de Rails, e só por ser Rails já ajuda na nota. Outro fator que me obrigou a não tentar algo mais complexo foi o caso da Monografia em Dupla, ontem acabaram com isso, então vou ter que me virar só em 4 meses pra implementa tudo fazer toda a parte escrita, ainda passar em todas as outras matérias restantes e sem esquecer que trabalho, ou seja não vai ser nada fácil.

Agora uma boa explicação para o nome GETNA, bom após algumas noites pensando não tive nenhuma idéia boa, quando, assistindo um documentário sobre vulcões o locutor disse “(…) saindo das entranhas da terra o vulcão Etna Gera um espetáculo incrível(…) ” aquele luzinha acende sobre minha cabeça, Gerar um espetáculo… isso que eu queria que meu plugin/gem (Ainda não decidi, tá mais para Plugin mesmo ) fizesse. Vamos então a formulação do nome:

Tentei algo de Mitologia:

Grega

Hefesto
HefestoDB
Enceladus

Mitilogia Sumérica
Nergal

Mitologia Babilônica
Angaraka

Mitologia Indiana
Pifoedus

Hawaiana
Buhul

Não gostei de nenhum, ai voltei ao inicio:
Etna
EtnaDB

Getna … Num sei porque, gostei desse! :)

Após Decidido o Nome Vamos a logo :)

Essa aqui é a primeira instância. Deve ocorrer algumas modificações futuras.

Getna Logo - Fundo TransparenteGetna Logo - Fundo Preto

Bom até agora foi isso que foi feito, desejem-me boa sorte!

Abraços!

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • Technorati
  • Twitter