У Phrogz отличный ответ, но если лямбды или включая sinatra-contrib не для вас, то этот мета-метод даст тот же результат, что и sinatra-contrib для ваших целей:
# Provides a way to handle multiple HTTP verbs with a single block
#
# @example
# route :get, :post, '/something' do
# # Handle your route here
# end
def self.route(*methods, path, &block)
methods.each do |method|
method.to_sym
self.send method, path, &block
end
end
Если вы немного опасаетесь возможности отправлять произвольные методы на self
, тогда вы можете защитить себя, настроив белый список разрешенных методов в массиве, а затем проверив наличие символа в массиве.
# Provides a way to handle multiple HTTP verbs with a single block
#
# @example
# route :get, :post, '/something' do
# # Handle your route here
# end
def self.route(*methods, path, &block)
allowed_methods = [:get, :post, :delete, :patch, :put, :head, :options]
methods.each do |method|
method.to_sym
self.send(method, path, &block) if allowed_methods.include? method
end
end