Я в настоящее время делаю следующее, но это чувствует себя "топорным":
module Sinatra
module DynFormat
def dform(data,ct)
if ct == 'xml';return data.to_xml;end
if ct == 'json';return data.to_json;end
end
end
helpers DynFormat
end
Моя цель состоит в том, чтобы запланировать заранее. Прямо сейчас мы только работаем с XML для этого конкретного веб-сервиса, но мы хотим отодвинуться к JSON, как только все компоненты в нашем стеке поддерживают его.
Вот демонстрационный маршрут:
get '/api/people/named/:name/:format' do
format = params[:format]
h = {'xml' => 'text/xml','json' => 'application/json'}
content_type h[format], :charset => 'utf-8'
person = params[:name]
salesperson = Salespeople.find(:all, :conditions => ['name LIKE ?', "%#{person}%"])
"#{dform(salesperson,format)}"
end
Просто такое чувство, что я не делаю его возможный лучший способ.
несколько чисток в помощнике:
код:
module Sinatra
module DynFormat
CONTENT_TYPES={'xml' => 'text/xml','json' => 'application/json'}
def dform(data,format=params[:format])
content_type CONTENT_TYPES[format], :charset => 'utf-8'
case format
when 'xml'
data.to_xml
when 'json'
data.to_json
end
end
end
helpers DynFormat
end
здесь я исключил тип содержимого обработки и удалил временную переменную person, поскольку она используется только один раз в пользу использования params. код:
get '/api/people/named/:name/:format' do
salesperson = Salespeople.find(:all, :conditions => ['name LIKE ?', "%#{params[:name]}%"])
dform(salesperson)
end
Разумно, классно выглядишь?