mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #35429 from jhawthorn/template_format_nil
Allow nil format on templates
This commit is contained in:
commit
ed6364f7b6
9 changed files with 16 additions and 19 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue