tapajos / brazilian-rails

Brazilian Rails é um conjunto de gems para serem usadas com Ruby e com o Ruby on Rails e tem como objetivo unir alguns recursos úteis para os desenvolvedores brasileiros.
http://brazilian-rails.rubyforge.org
361 stars 100 forks source link

Erro no parse de Data ao receber e-mail #39

Closed andrerpbts closed 12 years ago

andrerpbts commented 12 years ago

Estou montando um script que lê uma caixa de e-mails do Gmail e chama um método receive de uma classe Mailer minha, para converter cada mensagem e-mail lida em um objeto Mail. Porém, se deixar a gem brazilian-rails no projeto, dá um erro de parse:

DateTimeElement can not parse |Qui, 24 Mai 2012 16:11:52 -0300|
Reason was: Expected one of 
, Mon, Tue, Wed, Thu, Fri, Sat, Sun, ( at line 1, column 1 (byte 1) after 
tinogomes commented 12 years ago

Você pode colocar seu script em algum lugar para analisar? Claro, removendo os dados de autenticação...

andrerpbts commented 12 years ago

Sim...

https://gist.github.com/2787384

tinogomes commented 12 years ago

Bom, o que me parece, sua aplicação está configurado com locale para :en (english) e o brData o parser para transformar string em data, considera as constantes de nome de dias e meses.

https://github.com/tapajos/brazilian-rails/blob/master/brdata/lib/brdata/time_portuguese.rb#L35-42

Qual a versão do BR você está usando? Confirma que o locale está para inglês?

andrerpbts commented 12 years ago

versão 3.0.8 no Rails 3.0.10, sobre o JRuby 1.6.4 modo 1.8.7 de compatibilidade...

Quanto a locale, no application.rb está pt-BR.

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    config.i18n.default_locale = "pt-BR"
andrerpbts commented 12 years ago

A string que vem do e-mail parece estar sendo processada pelo strftime modificado pela gem brazilian-rails e está devolvendo Qui, 24 Mai 2012 16:11:52 -0300. Ao passar pelo parser (Mail::DateTimeParser) na conversão para DateTimeElement, o método parse não está reconhecendo esta string por não estar em inglês. Entendi errado?

Se for isso, tem alguma forma de somente neste momento desativar esse comportamento do strftime?

rrmartins commented 12 years ago

@andrerpbts eu tive este mesmo problema, e incrivelmente tbm foi ontem... kkk

pois estava vendo a gem, e o erro esta na gem brdata, que esta forçando isso em pt.

Tive que reescrever a Class Time, e os seus parametros. Tambem uso JRuby, e as minhas configurações são semelhantes a sua.

segue abaixo a modificação que fiz.

https://gist.github.com/2788271

Galera, estou mexendo na gem, mas estou com a dificuldade de conseguir pegar a linguagem da sessao, tipo ou en ou pt.

espero poder ter ajudado.

att. Rodrigo Martins

andrerpbts commented 12 years ago

Exato, funcionou seu código aqui tb... Eu estava tentando reescrever o metodo também mas ainda estva longe da solução que encontrou...

Seria bom sim fazer alguma coisa nativa na gem...

Quanto para saber o locale, com o comando p I18n.locale eu tive a resposta :"pt-BR"

rrmartins commented 12 years ago

muito legal.. vou tentar aqui e mando o request.. :)

tinogomes commented 12 years ago

Ao invés de fazer este "work around", tente configurar o locale para :en durante a execução do script e então volte ao :"pt-BR" após