Atomフィードの出力方法

Sinatraでbuilderを使ってAtomフィードを出力する方法です。
何故かドキュメントに記述されてないので、メモ代わりに。

# ./app.rb
require 'builder'
get '/feed' do
  @entries = DB[:entries].reverse_order(:id).limit(10)
  content_type "application/atom+xml"
  builder :feed
end

helpers do
  def atom_time(date)
    date.getgm.strftime("%Y-%m-%dT%H:%M:%SZ")
  end
end
# ./views/feed.builder
port = request.port == 80 ? '' : ':' + request.port.to_s
base_url = request.scheme + '://' + request.host + port

xml.instruct! :xml, :version => "1.0"
xml.feed(:xmlns => 'http://www.w3.org/2005/Atom') do
  xml.id      base_url + '/'
  xml.title   "title, change me"
  xml.updated atom_time(@entries.first[:updated_at])
  xml.link(:rel => 'alternate', :href => base_url + "/")
  xml.link(:ref => 'self',      :href => base_url + "/feed")

  xml.author do
    xml.name  "author, change me"
    xml.uri   "uri, change me"
  end

  @entries.each do |entry|
    xml.entry do
      xml.id        "tag:" + base_url.gsub("http://", "") + "," + entry[:created_at]
      xml.title     "title, change me", :type => 'html'
      xml.published atom_time(entry[:created_at])
      xml.updated   atom_time(entry[:updated_at])
      xml.link(:rel => 'alternate', :href => "url, change me")
      xml.content   "content, change me", :type => 'html'
#      xml.summary   "summary, change me", :type => 'html'
    end
  end
end