Através da gem omnicontacts é possível recuperar a lista de contatos do GMail, do Yahoo! e do Hotmail, ou seja, os três principais webmails utilizados hoje em dia.
Eu configurei para recuperar contatos apenas do GMail, porém requisitar um acesso a API dos outros serviços é a parte mais simples. Para adquirir o consumer_id e o client_secret exigido pela omnicontacts acesse o link "API Access" do site Google APIs.
No site da omnicontacts já existem as informações de como configurar o gem para rodar com a sua aplicação e obter contatos. Algo bastante simples de se fazer.
O que achei mais complicado foi fazer a visão pro usuário, pois no meu caso, tenho quase 800 contatos no GMail, o que imediatamente me faz pensar em utilizar paginação. Pensei em utilizar o gem will_paginate, porém para guardar os itens selecionados pelo usuário teria que utilizar AJAX ou fazer alguma programação do lado do cliente. Além disso, teria que manter a lista de contatos recuperada na sessão, o que não é nenhum grande problema, mas acaba sendo algo a mais para gerenciar.
Foi então que me lembrei do DataTables, um ótimo componente em JQuery para criar paginação, ordenamento e pesquisa a partir de uma tabela. E o pessoal da comunidade Rails já criou até algumas coisas para facilitar seu uso e que estão muito bem explicados no RailsCasts #340!
Em um primeiro momento fiquei preocupado com a quantidade de dados que seria transferida para minha aplicação, mas os meus quase 800 contatos ficaram em aproximidadmente 45kb, ou seja, nada de assustar para os padrões de rede atuais.
A parte mais complicada desta solução é provavelmente o envio das informações para o servidor, que é feita através deste código (app/assets/javascript/contato.js.coffee):
$(document).ready -> $('form').submit -> elementos = $('input', oTable.fnGetNodes()).serializeArray() $(elementos).each (index, elemento) -> input = $("").attr("type", "hidden").attr("name", "emails[]").val(elemento.value) $('form').append($(input))
Este código pega todos os itens marcados pelo usuário (linha 3) e para cada um deles cria um campo de input escondido com o e-mail e o adiciona ao formulário (linhas 5 e 6).
Criei uma aplicação para testar estas coisas, a única coisa que precisa ser alterada nela é o arquivo config/initializers/omnicontacts.rb para conter seu consumer_id e seu client_secret. Baixe aqui!
Happy hacking!
Nenhum comentário:
Postar um comentário