Method: Sinatra::Capture#capture

Defined in:
lib/sinatra/capture.rb

#capture(*args, &block) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/sinatra/capture.rb', line 87

def capture(*args, &block)
  return block[*args] if ruby?

  if haml? && Tilt[:haml] == Tilt::HamlTemplate && defined?(Haml::Buffer)
    buffer = Haml::Buffer.new(nil, Haml::Options.new.for_buffer)
    with_haml_buffer(buffer) { capture_haml(*args, &block) }
  else
    buf_was = @_out_buf
    @_out_buf = +''
    begin
      raw = block[*args]
      captured = block.binding.eval('@_out_buf')
      captured.empty? ? raw : captured
    ensure
      @_out_buf = buf_was
    end
  end
end