Перед фильтром для всех запросов POST в Синатре?

Есть ли способ создать фильтр "before" для захвата и предварительной обработки всех запросов POST в Sinatra?

Ответ 1

Один из способов сделать это - создать пользовательское условие для использования в фильтре:

set(:method) do |method|
  method = method.to_s.upcase
  condition { request.request_method == method }
end

before :method => :post do
  puts "pre-process POST"
end 

Ответ 2

Ваше решение полностью работоспособно.

Я бы сделал это так:

before do
  next unless request.post?
  puts "post it is!"
end

Или вы также можете использовать весь маршрут почты, который затем передает запрос (должен быть первым почтовым маршрутом):

post '*' do
  puts "post it is!"
  pass
end

Ответ 3

+1 на матовый ответ выше... Я в конечном итоге расширил его, включив поддержку одного или нескольких методов:

set :method do |*methods|
    methods = methods.map { |m| m.to_s.upcase }
    condition { methods.include?(request.request_method) }
end

before method: [:post, :patch] do
    # something
end

Ответ 4

Я придумал это:

before do
    if request.request_method == "POST"
        puts "pre-process POST"
    end
end

... но если кто-то знает лучший способ, пожалуйста, поделитесь.