mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Fixes ActionMailer to work with the ActionView refactoring
This commit is contained in:
@@ -475,7 +475,7 @@ module ActionMailer #:nodoc:
|
||||
# if @parts.empty?
|
||||
template_root.find_all_by_parts(@template, {}, template_path).each do |template|
|
||||
@parts << Part.new(
|
||||
:content_type => Mime::Type.lookup_by_extension(template.content_type || "text").to_s,
|
||||
:content_type => template.mime_type ? template.mime_type.to_s : "text/plain",
|
||||
:disposition => "inline",
|
||||
:charset => charset,
|
||||
:body => render_template(template, @body)
|
||||
@@ -555,12 +555,13 @@ module ActionMailer #:nodoc:
|
||||
end
|
||||
|
||||
def render_template(template, body)
|
||||
if template.respond_to?(:content_type)
|
||||
@current_template_content_type = template.content_type
|
||||
if template.respond_to?(:mime_type)
|
||||
@current_template_content_type = template.mime_type && template.mime_type.to_sym.to_s
|
||||
end
|
||||
|
||||
@template = initialize_template_class(body)
|
||||
layout = _pick_layout(layout, true) unless template.exempt_from_layout?
|
||||
layout = _pick_layout(layout, true) unless
|
||||
ActionController::Base.exempt_from_layout.include?(template.handler)
|
||||
@template._render_template_with_layout(template, layout, {})
|
||||
ensure
|
||||
@current_template_content_type = nil
|
||||
@@ -584,7 +585,7 @@ module ActionMailer #:nodoc:
|
||||
end
|
||||
|
||||
layout = _pick_layout(layout,
|
||||
!template || !template.exempt_from_layout?)
|
||||
!template || ActionController::Base.exempt_from_layout.include?(template.handler))
|
||||
|
||||
if template
|
||||
@template._render_template_with_layout(template, layout, opts)
|
||||
|
||||
@@ -994,13 +994,13 @@ end
|
||||
|
||||
class InheritableTemplateRootTest < Test::Unit::TestCase
|
||||
def test_attr
|
||||
expected = "#{File.dirname(__FILE__)}/fixtures/path.with.dots"
|
||||
expected = File.expand_path("#{File.dirname(__FILE__)}/fixtures/path.with.dots")
|
||||
assert_equal expected, FunkyPathMailer.template_root.to_s
|
||||
|
||||
sub = Class.new(FunkyPathMailer)
|
||||
sub.template_root = 'test/path'
|
||||
|
||||
assert_equal 'test/path', sub.template_root.to_s
|
||||
assert_equal File.expand_path('test/path'), sub.template_root.to_s
|
||||
assert_equal expected, FunkyPathMailer.template_root.to_s
|
||||
end
|
||||
end
|
||||
|
||||
@@ -38,7 +38,7 @@ module ActionView
|
||||
|
||||
# TODO: Move out of Template
|
||||
def mime_type
|
||||
Mime::Type.lookup_by_extension(@details[:format]) if @details[:format]
|
||||
Mime::Type.lookup_by_extension(@details[:format].to_s) if @details[:format]
|
||||
end
|
||||
|
||||
private
|
||||
@@ -77,154 +77,4 @@ module ActionView
|
||||
"_render_template_#{@identifier.hash}_#{__id__}_#{locals.keys.hash}".gsub('-', "_")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if false
|
||||
module ActionView #:nodoc:
|
||||
class Template
|
||||
extend TemplateHandlers
|
||||
extend ActiveSupport::Memoizable
|
||||
|
||||
module Loading
|
||||
def load!
|
||||
@cached = true
|
||||
# freeze
|
||||
end
|
||||
end
|
||||
include Loading
|
||||
|
||||
include Renderable
|
||||
|
||||
# Templates that are exempt from layouts
|
||||
@@exempt_from_layout = Set.new([/\.rjs$/])
|
||||
|
||||
# Don't render layouts for templates with the given extensions.
|
||||
def self.exempt_from_layout(*extensions)
|
||||
regexps = extensions.collect do |extension|
|
||||
extension.is_a?(Regexp) ? extension : /\.#{Regexp.escape(extension.to_s)}$/
|
||||
end
|
||||
@@exempt_from_layout.merge(regexps)
|
||||
end
|
||||
|
||||
attr_accessor :template_path, :filename, :load_path, :base_path
|
||||
attr_accessor :locale, :name, :format, :extension
|
||||
delegate :to_s, :to => :path
|
||||
|
||||
def initialize(template_path, load_paths = [])
|
||||
template_path = template_path.dup
|
||||
@load_path, @filename = find_full_path(template_path, load_paths)
|
||||
@name = template_path.to_s.split("/").last.split(".").first
|
||||
# @base_path, @name, @locale, @format, @extension = split(template_path)
|
||||
@base_path.to_s.gsub!(/\/$/, '') # Push to split method
|
||||
|
||||
# Extend with partial super powers
|
||||
extend RenderablePartial if @name =~ /^_/
|
||||
end
|
||||
|
||||
def accessible_paths
|
||||
paths = []
|
||||
|
||||
if valid_extension?(extension)
|
||||
paths << path
|
||||
paths << path_without_extension
|
||||
if multipart?
|
||||
formats = format.split(".")
|
||||
paths << "#{path_without_format_and_extension}.#{formats.first}"
|
||||
paths << "#{path_without_format_and_extension}.#{formats.second}"
|
||||
end
|
||||
else
|
||||
# template without explicit template handler should only be reachable through its exact path
|
||||
paths << template_path
|
||||
end
|
||||
|
||||
paths
|
||||
end
|
||||
|
||||
def relative_path
|
||||
path = File.expand_path(filename)
|
||||
path.sub!(/^#{Regexp.escape(File.expand_path(RAILS_ROOT))}\//, '') if defined?(RAILS_ROOT)
|
||||
path
|
||||
end
|
||||
memoize :relative_path
|
||||
|
||||
def source
|
||||
File.read(filename)
|
||||
end
|
||||
memoize :source
|
||||
|
||||
def exempt_from_layout?
|
||||
@@exempt_from_layout.any? { |exempted| path =~ exempted }
|
||||
end
|
||||
|
||||
def path_without_extension
|
||||
[base_path, [name, locale, format].compact.join('.')].compact.join('/')
|
||||
end
|
||||
memoize :path_without_extension
|
||||
|
||||
def path_without_format_and_extension
|
||||
[base_path, [name, locale].compact.join('.')].compact.join('/')
|
||||
end
|
||||
memoize :path_without_format_and_extension
|
||||
|
||||
def path
|
||||
[base_path, [name, locale, format, extension].compact.join('.')].compact.join('/')
|
||||
end
|
||||
memoize :path
|
||||
|
||||
def mime_type
|
||||
Mime::Type.lookup_by_extension(format) if format && defined?(::Mime)
|
||||
end
|
||||
memoize :mime_type
|
||||
|
||||
def multipart?
|
||||
format && format.include?('.')
|
||||
end
|
||||
|
||||
def content_type
|
||||
format && format.gsub('.', '/')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def format_and_extension
|
||||
(extensions = [format, extension].compact.join(".")).blank? ? nil : extensions
|
||||
end
|
||||
memoize :format_and_extension
|
||||
|
||||
def mtime
|
||||
File.mtime(filename)
|
||||
end
|
||||
memoize :mtime
|
||||
|
||||
def method_segment
|
||||
relative_path.to_s.gsub(/([^a-zA-Z0-9_])/) { $1.ord }
|
||||
end
|
||||
memoize :method_segment
|
||||
|
||||
def stale?
|
||||
File.mtime(filename) > mtime
|
||||
end
|
||||
|
||||
def recompile?
|
||||
!@cached
|
||||
end
|
||||
|
||||
def valid_extension?(extension)
|
||||
!Template.registered_template_handler(extension).nil?
|
||||
end
|
||||
|
||||
def valid_locale?(locale)
|
||||
I18n.available_locales.include?(locale.to_sym)
|
||||
end
|
||||
|
||||
def find_full_path(path, load_paths)
|
||||
load_paths = Array(load_paths) + [nil]
|
||||
load_paths.each do |load_path|
|
||||
file = load_path ? "#{load_path.to_str}/#{path}" : path
|
||||
return load_path, file if File.file?(file)
|
||||
end
|
||||
raise MissingTemplate.new(load_paths, path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user