Html Reader, o experimento !

Iae galera, vou aproveitar minha insônia e escrever mais um post, desta vez sobre ruby.

A bola da vez é uma aplicação que desenvolvi esses dias(https://github.com/mauriciovoto/html_reader) que surgiu com a necessidade de minha noiva estar um pouco revoltada de pedirem em seu trabalho para fazer um exaustivo trabalho de ctrl C + ctrl V. Ela tinha que copiar informações de todos os Procon do estado de SP. Daí que me surgiu a ideia de desenvolver algo para ajuda-la.

Esta foi uma ótima oportunidade para botar em prática algumas coisas que havia e venho estudando, algumas delas, recomendo fortemente, como o jeweler, o rspec(quem acompanha o blog e meu twitter sabe que venho estudando bastante esta ferramenta), o infinity_test e outras gems como hpricot, rest-open-uri e spreadsheet. Além de ser outro laboratório de git pois tenho o péssimo costume de desenvolver aplicações e mante-las em minha máquina.

Bom, para resumir o que utilizei, o jeweler é uma ferramenta para geração de gems, ou seja, gera um projeto ruby com uma mínima estrutura para iniciar um desenvolvimento ideal.

O rspec como já citei antes no blog, é uma ferramenta para escrever testes como especificações.

O infinity_test é uma biblioteca que permite ao desenvolvedor ver em tempo real se seus testes estão passando ou não, um autotester que a cada alteração que é feita, roda os testes em background e notifica(em conjunto com outra ferramenta, como o growl para mac os).

O hpricot e o rest-open-uri são gems que permitem a leitura do html dos sites, sugiro a leitura das documentações para quem quiser estudar, apliquei apenas o básico em minha aplicação.

Por último, o spreadsheet é uma gem para manipulação de planilhas excel, apesar da pouca documentação não tem muito segredo de uso. Também utilizei em minha aplicação o básico de geração, nada diferente do que encontramos na página da gem.

Espero que possam dar uma conferida na app: html_reader críticas e sugestões são sempre bem-vindas ! E mais uma vez agradeço ao meu digníssimo camarada @raulsouzalima pois ele me indicou várias dessas gems e também agradecer ao @danielvlopes que apresentou brevemente o jeweler em uma de suas aulas que tive o prazer de assistir.

Spreadsheet: solucionando bug em arquivos biff8

Conforme prometido, vou atualizar com mais frequencia este blog e vou começar com um tópico bem interessante no meu ponto de vista: o Spreadsheet, uma gem para manipulação de planilhas Excel.

O Spreadsheet é bem tranquilo de se utilizar, apesar da pouca documentação em seu site(http://spreadsheet.rubyforge.org/GUIDE_txt.html), as tarefas básicas como escrever e ler uma planilha estão bem explicadas e tranquilas de se executar.

Tudo estava lindo e maravilhoso, instalei a gem na minha máquina(sudo gem install spreadsheet), comecei a usar tranquilamente até que me deparo com o seguinte erro ao ler uma planilha extensa:

../spreadsheet-0.6.4.1/lib/spreadsheet/excel/workbook.rb:67:in `shared_string': undefined method `content'
for nil:NilClass (NoMethodError)

Ao procurar uma solução, encontrei o seguinte link que explica melhor este erro:

http://rubyforge.org/tracker/index.php?func=detail&aid=28007&group_id=678&atid=2677

Para resumir, o que acontece é que há um bug no momento de varrer as strings longas nas planilhas que se enquadram no formato BIFF8, onde ao obter os valores(strings) e armazená-los utilizando identificador, ocorre um erro ao definir o tamanho da string que foi armazenada anteriormente pois não considera no tamanho do array os caracteres rich-text e os Asian-phonetics como disse o rapaz que reportou o bug, que felizmente foi resolvido em uma issue no github, onde um commit salvador no arquivo biff8.rb resolve o problema:

http://github.com/mugathur/ruby-spreadsheet/commit/30f8c6b25f87fd34cb76e0377975164a55b40ffa

Isto resolve o problema e deixa o Spreadsheet redondo para ser utilizado.

Ótima gem, recomendo !

 

Obs1: Estou estudando para aprimorar o uso do GitHub, talvez se eu tivesse um maior conhecimento nesta ferramenta, não precisasse dar esta volta toda para solucionar o problema.

Obs2: Reforço aqui, que sou aprendiz e meu conhecimento é muito pouco, o intuito deste blog não é somente ajudar os leitores, mas também que os leitores me ajudem. Caso tenham alguma observação ou correção sempre será bem-vindo !