lib/roadie/action_mailer_extensions.rb in roadie-1.0.0.pre2 vs lib/roadie/action_mailer_extensions.rb in roadie-1.0.0
- old
+ new
@@ -1,10 +1,13 @@
require 'uri'
require 'nokogiri'
require 'css_parser'
module Roadie
+ # This module adds the Roadie functionality to ActionMailer 3 when included in ActionMailer::Base.
+ #
+ # If you want to add Roadie to any other mail framework, take a look at how this module is implemented.
module ActionMailerExtensions
def self.included(base)
base.class_eval do
alias_method_chain :collect_responses_and_parts_order, :inline_styles
alias_method_chain :mail, :inline_styles
@@ -12,28 +15,32 @@
end
protected
def mail_with_inline_styles(headers = {}, &block)
@inline_style_css_targets = headers[:css]
- mail_without_inline_styles(headers.except(:css), &block).tap do |email|
- email[:css] = nil
+ mail_without_inline_styles(headers, &block).tap do |email|
+ email.header.fields.delete_if { |field| field.name == 'css' }
end
end
def collect_responses_and_parts_order_with_inline_styles(headers, &block)
responses, order = collect_responses_and_parts_order_without_inline_styles(headers, &block)
- new_responses = []
- responses.each do |response|
- new_responses << inline_style_response(response)
- end
- [new_responses, order]
+ [responses.map { |response| inline_style_response(response) }, order]
end
private
+ def url_options
+ Rails.application.config.action_mailer.default_url_options
+ end
+
+ def stylesheet_root
+ Rails.root.join('public', 'stylesheets')
+ end
+
def inline_style_response(response)
if response[:content_type] == 'text/html'
- response.merge :body => Roadie.inline_css(css_rules, response[:body], Rails.application.config.action_mailer.default_url_options)
+ response.merge :body => Roadie.inline_css(css_rules, response[:body], url_options)
else
response
end
end
@@ -41,9 +48,9 @@
return nil if @inline_style_css_targets == false
Array(@inline_style_css_targets || self.class.default[:css] || []).map { |target| target.to_s }
end
def css_rules
- @css_rules ||= Roadie.load_css(Rails.root, css_targets) if css_targets.present?
+ @css_rules ||= Roadie.load_css(stylesheet_root, css_targets) if css_targets.present?
end
end
end