Rafael Souza

Just a guy who loves to code

Codificando E Decodificando Strings Com HTML Entities

HTML Entities é uma gem para Ruby que serve para codificar e decodificar html entities.

gem_install.sh
1
sudo gem install htmlentities

Para codificar uma string usamos

encode.rb
1
2
3
4
5
6
require "rubygems"
require "htmlentities"
he = HTMLEntities.new
encoded = he.encode("essa gem é uma mão na roda!", :named)
puts encoded # essa gem é uma mão na roda!

e para decodificar

decode.rb
1
2
3
4
5
6
require "rubygems"
require "htmlentities"
he = HTMLEntities.new
decoded = he.decode("essa gem é uma mão na roda!")
puts decoded # essa gem é uma mão na roda!

Aplicação Usando Shoes

Criei ontem de noite um aplicação de teste para traduzir palavras/frases usando Ruby, Shoes e Google AJAX Language API, ela é bem simples, não tem nada que não foi feito por aí, mas futuramente vou colocar a opção de salvar outras palavras/frases em um banco de dados local, usando SQLite provavelmente, já que estou reforçando meus estudos em inglês, acho que isto vai me ajudar bastante ;)

Mas nem tudo são flores nessa vida de programador, passei um trabalhinho para poder rodar o Shoes com as gems que eu usei, ele não funciona com gems instaladas usando gem install, por que ele tem uma espécie de “interpretador” próprio ou coisa parecida. Depois de instalar o Shoes tive que colocar as gems (json, rest-client) e a lib rexml dentro da Shoes-land - como vi uns chamando por ai.

Fiz um passo a passo de como rodar. Isso também serve para outras apps feitas usando Shoes que você queira rodar, não apenas para este projeto.

Copie as gems/libs - verifique antes se os diretórios são os mesmos

json - usei json_pure por que a outra é nativa, então não sei se funcionaria

copy_json.sh
1
sudo cp -R /usr/lib/ruby/gems/1.8/gems/json_pure-1.1.2/lib/json* /usr/local/lib/shoes/ruby/lib/

rest-client

copy_rest_client.sh
1
sudo cp /usr/lib/ruby/gems/1.8/gems/rest-client-0.5.1/lib/* /usr/local/lib/shoes/ruby/lib/

rexml

copy_rexml.sh
1
sudo cp -R /usr/lib/ruby/1.8/rexml /usr/local/lib/shoes/ruby/lib/

Feito isso, clone o projeto

clone.sh
1
git clone git://github.com/rafaelss/shoes-translator.git

e quando terminar execute

run.sh
1
2
cd shoes-translator
shoes translator.rb

PDO: bindParam Ou bindValue?

Programando hoje uma validação para o framework que estou desenvolvendo me deparei com um problema usando variáveis em SQL, mais especificamente usando variáveis com o PDO.

Escrevendo os testes unitários para essas validações notei que precisava mudar a forma como passava os parâmetros para a SQL, ao invés de passar no execute, precisaria passar usando uma função própria para isso.

Lendo o manual, achei três opções de bind, bindColumn, bindParam e bindValue, depois de ler a documentação, optei pela bindParam, pois bindColumn é usado para atribuir o resultado para uma variável diretamente e bindColumn… eu só fui ver depois :P

Meus testes já estavam prontos e passando corretamente, mas quando fiz a mudança começou a não passar mais, então comecei a debugar para ver o que estava acontecendo. Depois de horas perdidas descobri o problema, não posso usar bindParam, tenho que usar bindValue.

O método bindParam recebe o valor do parâmetro por referência, então se o valor da variável mudar entre o chamada de bindParam e execute, o valor do parâmetro muda, alterando o resultado da SQL, coloquei bindValue e tudo voltou ao normal, com os testes passando novamente. Mas o que me deixa intrigado é que o meu código não mudava nada na variável, não tinha nada entre os métodos que pudesse fazer com o o resultado fosse diferente.

Mas fica a lição, ler a documentação melhor da próxima vez ;)