Monkey patch no actionmailer base para adicionar host
Bráulio Bhavamitra
braulio at eita.org.br
Sat Jul 6 10:42:24 BRT 2013
Olá comunidade,
Depois de quebrar a cabeça algumas horas finalmente descobrimos como fazer
o ActionMailer::Base não ignorar o default_url_options[:host], setado num
before_filter no controlador:
def set_mailer_host
ExchangePlugin::Mailer.default_url_options = {:host =>
request.host_with_port}
end
Isto deveria colocar o host em todas as urls da view do mailer, tornando os
links acessíveis para o leitor do email. No entanto, não funciona.
Percebi que no noosfero muitas vezes é feito @url + url_for(), sendo @url
igual ao environment.top_url.
Considero isto ruim e repetitivo, sendo que a causa do problema está em
outro lugar...
A causa está no url_for abaixo:
http://apidock.com/rails/v2.3.2/ActionView/Helpers/UrlHelper/url_for
# File actionpack/lib/action_view/helpers/url_helper.rb, line 76
def url_for(options = {})
options ||= {}
url = case options
when String
escape = true
options
when Hash
options = { :only_path => options[:host].nil?
}.update(options.symbolize_keys)
escape = options.key?(:escape) ? options.delete(:escape) : true
@controller.send(:url_for, options)
when :back
escape = false
@controller.request.env["HTTP_REFERER"] || 'javascript:history.back()'
else
escape = false
polymorphic_path(options)
end
escape ? escape_once(url) : url
end
Veja que se não houver uma chave :host, ele set only_path = true. É isto
que faz com que o host do default_url_options seja ignorado.
Fiz então um monkey patch no mailer do plugin, substituindo o seguinte
método:
def url_for(options = {})
options ||= {}
url = case options
when Hash
options[:only_path] = false;
end
super options
end
Isto força o only_path para false.
*Seria interessante generalizar este monkey patch para todo o
ActionMailer::Base e fazer o before_filter mostrado acima no
application_controller.*
abraços,
bráulio
--
"Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua
ideologia. Morra por sua ideologia" P.R. Sarkar
EITA - Educação, Informação e Tecnologias para Autogestão
http://cirandas.net/brauliobo
http://eita.org.br
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130706/ca055c5d/attachment.html>
More information about the Noosfero-br
mailing list