module Sinatra::RespondWith::Helpers

def respond_with(template, object = nil, &block)

def respond_with(template, object = nil, &block)
  unless Symbol === template
    object = template
    template = nil
  end
  format = Format.new(self)
  format.on '*/*' do |type|
    exts = settings.ext_map[type]
    exts << :xml if type.end_with? '+xml'
    if template
      args = template_cache.fetch(type, template) { template_for(template, exts) }
      if args.any?
        locals = { object: object }
        locals.merge! object.to_hash if object.respond_to? :to_hash
        renderer = args.first
        options = args[1..] + [{ locals: locals }]
        halt send(renderer, *options)
      end
    end
    if object
      exts.each do |ext|
        halt json(object) if ext == :json
        next unless object.respond_to? method = "to_#{ext}"
        halt(*object.send(method))
      end
    end
    false
  end
  format.finish(&block)
end