sinatra-block-html

こんな感じのレイアウトとビューを作って

views/layout.bhtml

html {
  tag(:head) {
    title.text @title
  }
  tag(:body) {
    self << yield
  }
}

views/index.bhtml

h1.text @title
p.text @contents

Sinatra の DSL で出力

require 'rubygems'
require 'sinatra'
require 'sinatra-block-html'

get '/' do
  @title = 'Hello World!'
  @contents = 'こんにちは!'

  bhtml :index
end

Sinatra::Base で出力

require 'rubygems'
require 'sinatra'
require 'sinatra/base'
require 'sinatra-block-html'

class App < Sinatra::Base
  get '/' do
    @title = 'Hello World!'
    @contents = 'こんにちは!'

    bhtml :index
  end
end

use App

すると、こんな HTML が出力されます

<html><head><title>Hello World!</title></head><body><h1>Hello World!</h1><p>こんにちは!</p></body></html>