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 templates_name = headers[:template_name] || action_name
each_template(Array(templates_path), templates_name).map do |template| 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), body: render(template: template),
content_type: template.type.to_s content_type: Mime[format].to_s
} }
end end
end end

View File

@ -118,7 +118,8 @@ module ActionView
renderer.render_to_object(context, options) renderer.render_to_object(context, options)
end 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 rendered_template.body
end end

View File

@ -126,11 +126,6 @@ module ActionView
attr_reader :variable, :format, :variant, :locals, :virtual_path 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) 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 unless locals
ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a locals parameter" ActiveSupport::Deprecation.warn "ActionView::Template#initialize requires a locals parameter"
locals = [] locals = []

View File

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

View File

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

View File

@ -121,11 +121,11 @@ class LookupContextTest < ActiveSupport::TestCase
assert_equal "Hello texty phone!", template.source assert_equal "Hello texty phone!", template.source
end 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 assert_called(ActionView::Template::Handlers::Builder, :default_format, returns: nil) do
@lookup_context.formats = [:text] @lookup_context.formats = [:text]
template = @lookup_context.find("hello", %w(test)) template = @lookup_context.find("hello", %w(test))
assert_equal :text, template.format assert_nil template.format
end end
end end

View File

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

View File

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