Каков наилучший способ обработки динамического content_type в Sinatra? - PullRequest
1 голос
/ 24 мая 2010

В настоящее время я делаю следующее, но мне кажется, что это "грязно":

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

Такое ощущение, что я делаю это не лучшим образом.

1 Ответ

2 голосов
/ 25 мая 2010

несколько очисток в помощнике:

  • добавление оператора case
  • добавление значения по умолчанию для формата
  • помощник теперь устанавливает тип содержимого

code:

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 temp, так как она используется только один раз в пользу использования params.код:

get '/api/people/named/:name/:format' do    
    salesperson = Salespeople.find(:all, :conditions => ['name LIKE ?', "%#{params[:name]}%"])
    dform(salesperson)
end

Имеет смысл, выглядеть круто?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...