From d8f1d8e566effabeb91fd5eca849d1d765642c41 Mon Sep 17 00:00:00 2001 From: Zachary Scott Date: Thu, 13 Sep 2012 16:55:20 -0400 Subject: [PATCH] Templates: render should fall back to engine layout #563 --- lib/sinatra/base.rb | 3 ++- test/templates_test.rb | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index 298b948e..47ba639e 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -688,7 +688,8 @@ module Sinatra views = options.delete(:views) || settings.views || "./views" layout = options.delete(:layout) eat_errors = layout.nil? - layout = @default_layout if layout.nil? or layout == true + engine_layout = settings.send(engine)[:layout] if settings.respond_to?(engine) + layout = engine_layout || @default_layout if layout.nil? or layout == true content_type = options.delete(:content_type) || options.delete(:default_content_type) layout_engine = options.delete(:layout_engine) || engine scope = options.delete(:scope) || self diff --git a/test/templates_test.rb b/test/templates_test.rb index e426d326..e4032c15 100644 --- a/test/templates_test.rb +++ b/test/templates_test.rb @@ -34,6 +34,21 @@ class TemplatesTest < Test::Unit::TestCase File.unlink(layout) rescue nil end + it 'falls back to engine layout' do + mock_app do + template(:layout3) { 'Layout 3!<%= yield %>' } + set :erb, :layout => :layout3 + + get('/') do + erb('Hello World!', { :layout => true }) + end + end + + get '/' + assert ok? + assert_equal "Layout 3!Hello World!", body + end + it 'renders String templates directly' do render_app { render(:test, 'Hello World') } assert ok?