Getna : Uma Abordagem geral sobre o processo de desenvolvimento.
Para a realização deste trabalho, a primeira medida a ser efetuada é a definição do escopo do gerador, ou seja, quais funcionalidades estarão realmente presentes. Para isso, serão analisadas algumas limitações existentes em várias linguagens, como processos repetitivos e cansativos, no desenvolvimento de uma aplicação, inclusive no próprio Rails.
Iniciaremos o processo de desenvolvimento do gerador pela seleção do tipo, existindo várias possibilidades, como criação de um conjunto de scripts independentes que, ao ser executado por um comando, efetuaria a geração. Uma segunda opção cabível é a criação de uma Gem, um módulo que adiciona novas funcionalidades ao coração do Ruby, sendo expansível a qualquer outro módulo, ou framework nele existente, conseqüentemente, disponíveis às aplicações Rails. Outra possibilidade é criar um plugin (módulo de caráter expansível à uma aplicação Rails) que acoplado ao um projeto do framework pode ser utilizado em conjunto com a aplicação. Dentre as opções apresentadas, escolheremos a opção mais apropriada verificando questões como facilidade de instalação na aplicação, utilização e desenvolvimento.
Como ferramenta de apoio à linguagem de programação usada para desenvolver o gerador de código, utilizaremos o Netbeans devido ao fato de que se possui uma certa experiência com essa IDE e também porque esta possui suporte total à linguagem e ao framework, tornando a programação mais simples e intuitiva.
Uma das tarefas mais importantes será encontrar uma forma de mapeamento do banco de dados, pois dependendo da forma, utilizando um plugin, comandos SQL ou um recurso do próprio Rails, isto vai influenciar diretamente na qualidade final gerador. O uso comandos SQL manuais podem deixar o processo de geração mais lento e mais pesado, se utilizarmos plugin perderíamos a portabilidade e simplicidade do gerador, pois haveria dependência direta de um agente externo, que necessitaria sempre ser instalado junto com o gerador e na pior da hipótese esse plugin pode ser descontinuado fazendo assim com que nossa ferramenta se tornasse legada em uma possível atualização do Rails.
A melhor saída seria utilizar componentes já disponibilizados pelo Ruby ou Pelo Rails, o ActiveRecord, um das Gems que compõem o framework e responsável pela manipulação da base de dados, pode ser a saída para realização dessa tarefa.
Foram feitos estudos em relação à geração de código em outras linguagens e no Rails, foi dado, então, inicio a produção do gerador, uma preocupação nessa etapa foi deixar o código gerado limpo, funcional e re-aproveitável, a resposta estava na utilização de padrões do próprio Rails. Com essa definição deve, então, ser iniciada a criação de templates, arquivos que contem toda a lógica dos códigos a serem gerados.
A estruturação do desenvolvimento do gerador pode ser organizada em cinco partes fundamentais, que serão descritas a seguir. Primeira parte é o gerador, encontrado como arquivo getna_generator.rb pode ser considerado o motor de geração, todas as requisições e tratamentos passar pela sua administração. A segunda é a obtenção e tratamento de dados, a classe Getna (inclusa no arquivo getna.rb, da pasta lib/), contendo todos os módulos Ruby necessários para a manipulação de dados, inclusive o módulo Base, que faz o mapeamento da base e cuida dos relacionamentos.
Na terceira parte encontramos os templates, arquivos modelos de cada arquivo que vai ser gerado, nessa parte que focamos a qualidade de código e a estruturação de cada arquivo. Os arquivos de testes para “cobrir” a aplicação contra erros se encontram na quarta parte de nossa aplicação.
A quinta e ultima parte leva os arquivos adicionais como licença, instalação, desinstalação, descrição e inicialização, arquivos necessários para criação de um projeto Rails, essa estrutura pode ser mais bem entendida na figura abaixo:
Estrutura do Gerador GEtna
Será feito um estudo sobre licenças de código livre para formalizar o gerador como um projeto oficialmente livre e disponível para toda a comunidade. A licença MIT (Massachusetts Institute of Technology), por exemplo, tem grandes chances de ser escolhida.