Merge pull request #35429 from jhawthorn/template_format_nil

Allow nil format on templates
This commit is contained in:
Aaron Patterson 2019-03-01 14:06:41 -08:00 committed by GitHub
commit ed6364f7b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 16 additions and 19 deletions

View File

@ -973,10 +973,11 @@ module ActionMailer
templates_name = headers[:template_name] || action_name
each_template(Array(templates_path), templates_name).map do |template|
self.formats = [template.format]
format = template.format || self.formats.first
self.formats = [format]
{
body: render(template: template),
content_type: template.type.to_s
content_type: Mime[format].to_s
}
end
end

View File

@ -118,7 +118,8 @@ module ActionView
renderer.render_to_object(context, options)
end
@rendered_format = Template::Types[rendered_template.format]
rendered_format = rendered_template.format || lookup_context.formats.first
@rendered_format = Template::Types[rendered_format]
rendered_template.body
end

View File

@ -126,11 +126,6 @@ module ActionView
attr_reader :variable, :format, :variant, :locals, :virtual_path
def initialize(source, identifier, handler, format: nil, variant: nil, locals: nil, virtual_path: nil, updated_at: Time.now)
unless format
ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a format parameter"
format = :html
end
unless locals
ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a locals parameter"
locals = []

View File

@ -212,7 +212,7 @@ module ActionView
template_paths = reject_files_external_to_app(template_paths) unless outside_app_allowed
template_paths.map do |template|
handler, format, variant = extract_handler_and_format_and_variant(template, formats.first)
handler, format, variant = extract_handler_and_format_and_variant(template)
FileTemplate.new(File.expand_path(template), handler,
virtual_path: path.virtual,
@ -280,7 +280,7 @@ module ActionView
# Extract handler, formats and variant from path. If a format cannot be found neither
# from the path, or the handler, we should return the array of formats given
# to the resolver.
def extract_handler_and_format_and_variant(path, query_format)
def extract_handler_and_format_and_variant(path)
pieces = File.basename(path).split(".")
pieces.shift
@ -294,12 +294,12 @@ module ActionView
if handler.respond_to?(:default_format) # default_format can return nil
handler.default_format
else
query_format
nil
end
end
# Template::Types[format] and handler.default_format can return nil
[handler, format || query_format, variant]
[handler, format, variant]
end
end

View File

@ -34,7 +34,7 @@ module ActionView #:nodoc:
@hash.each do |_path, array|
source, updated_at = array
next unless query.match?(_path)
handler, format, variant = extract_handler_and_format_and_variant(_path, :html)
handler, format, variant = extract_handler_and_format_and_variant(_path)
templates << Template.new(source, _path, handler,
virtual_path: path.virtual,
format: format,
@ -50,7 +50,7 @@ module ActionView #:nodoc:
class NullResolver < PathResolver
def query(path, exts, _, _, locals)
handler, format, variant = extract_handler_and_format_and_variant(path, :html)
handler, format, variant = extract_handler_and_format_and_variant(path)
[ActionView::Template.new("Template generated by Null Resolver", path.virtual, handler, virtual_path: path.virtual, format: format, variant: variant, locals: locals)]
end
end

View File

@ -121,11 +121,11 @@ class LookupContextTest < ActiveSupport::TestCase
assert_equal "Hello texty phone!", template.source
end
test "found templates respects given formats if one cannot be found from template or handler" do
test "found templates have nil format if one cannot be found from template or handler" do
assert_called(ActionView::Template::Handlers::Builder, :default_format, returns: nil) do
@lookup_context.formats = [:text]
template = @lookup_context.find("hello", %w(test))
assert_equal :text, template.format
assert_nil template.format
end
end

View File

@ -19,7 +19,7 @@ class ResolverPatternsTest < ActiveSupport::TestCase
assert_equal 1, templates.size, "expected one template"
assert_equal "Hello custom patterns!", templates.first.source
assert_equal "custom_pattern/path", templates.first.virtual_path
assert_equal :html, templates.first.format
assert_nil templates.first.format
end
def test_should_return_all_templates_when_ambiguous_pattern

View File

@ -15,6 +15,6 @@ class FixtureResolverTest < ActiveSupport::TestCase
assert_equal 1, templates.size, "expected one template"
assert_equal "this text", templates.first.source
assert_equal "arbitrary/path", templates.first.virtual_path
assert_equal :html, templates.first.format
assert_nil templates.first.format
end
end

View File

@ -9,6 +9,6 @@ class NullResolverTest < ActiveSupport::TestCase
assert_equal 1, templates.size, "expected one template"
assert_equal "Template generated by Null Resolver", templates.first.source
assert_equal "arbitrary/path.erb", templates.first.virtual_path.to_s
assert_equal :html, templates.first.format
assert_nil templates.first.format
end
end