diff --git a/sinatra-contrib/lib/sinatra/capture.rb b/sinatra-contrib/lib/sinatra/capture.rb index fb1cd106..b2716c5c 100644 --- a/sinatra-contrib/lib/sinatra/capture.rb +++ b/sinatra-contrib/lib/sinatra/capture.rb @@ -110,7 +110,7 @@ module Sinatra buffer.clear unless buffer.nil? result = render(current_engine, dummy, options, &block) end - result.strip.empty? && @capture ? @capture : result + result && result.strip.empty? && @capture ? @capture : result ensure buffer.replace(old_buffer) unless buffer.nil? end diff --git a/sinatra-contrib/spec/capture_spec.rb b/sinatra-contrib/spec/capture_spec.rb index bb94f1fc..563205b6 100644 --- a/sinatra-contrib/spec/capture_spec.rb +++ b/sinatra-contrib/spec/capture_spec.rb @@ -50,6 +50,12 @@ describe Sinatra::Capture do expect(render(:erb, "iso_8859_1")).to eq("ISO-8859-1 -") end end + + describe 'without templates' do + it 'captures empty blocks' do + expect(capture {}).to be_nil + end + end end __END__ diff --git a/sinatra-contrib/spec/content_for_spec.rb b/sinatra-contrib/spec/content_for_spec.rb index 0d8785d6..9309a4d6 100644 --- a/sinatra-contrib/spec/content_for_spec.rb +++ b/sinatra-contrib/spec/content_for_spec.rb @@ -33,7 +33,7 @@ describe Sinatra::ContentFor do end it 'renders default content if no block matches the key and a default block is specified' do - content_for(:bar) { "bar" } + expect(yield_content(:foo) {}).to be_nil expect(yield_content(:foo) { "foo" }).to eq("foo") end