module Sinatra::Capture
def capture(*args, &block)
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
def capture_later(&block)
def capture_later(&block) engine = current_engine proc { |*a| with_engine(engine) { @capture = capture(*a, &block) } } end