O eucomp.ro possui um encurtador de URLs embutidos. Com isso, o endereço do anúncio já é curto o suficiente de modo que não é preciso utilizar outros encurtadores como migre.me ou bit.ly. Acrescentar uma funcionalidade dessa a qualquer outro site feito em Rails é muito fácil. O eucomp.ro foi registrado no EuroDNS e o TLD é da Roménia, eles são bem permissivos, não é necessário ser romeno para registrar um domínio lá e não há necessidade de .com ou .org ao final da URL. Perfeito para encurtadores de URL. Da mesma forma, caso queira uma URL curtinha, a primeira coisa a fazer é achar um bom endereço pelo mundo já que o nosso yyy.com.br não é lá muito curto.
Para a aplicação, eu usei o gem base62, que converte inteiro para base 62 e vice-versa. A codificação base 62 usa o conjunto [a..z],[A..Z] e [0..9] para compor o código, o que o torna compatível com a codificação de URLs. No meu caso, o id do anúncio é usado como base para formar o código na base62, chamei este código de token. Eis o trecho do código fonte com esta lógica, esses dois métodos foram acrescentados ao model do anúncio.
def token
(self.id + TOKEN_START).base62_encode
end
def self.find_by_token(token)
id = token.base62_decode - TOKEN_START
find(id)
end
Agora, é preciso fazer com que o endereço http://:url_curta/:token chegue a página desejada. Novamente, no meu caso, apenas acrescentei a seguinte rota:
map.connect ':token', :controller => 'ads', :action => 'show'
E ao controller dos anúncios acrescentei :
def show
@ad = Ad.find_by_token(params[:token])
end
Olá, Gustavo
Legal sua ideia de já embutir o encurtador de URLs no seu site! Mas não entendi o porquê de você somar um TOKEN_START no seu token. Outra coisa: não vai dar problema de conflito de rotas para alguns tokens? Por exemplo, se você tem uma rota para ‘/anuncios’, isso é um token válido. Então ou você não consegue acessar o anúncio com esse token ou não consegue acessar o que tinha no ‘/anuncios’.
Abraços e parabéns pelo site!