Я бы сделал базовый контроллер, который принимает параметры / запрос / ответ в качестве параметров инициализации:
require 'sinatra'
require 'byebug'
class BaseController
attr_reader :params, :request, :response
def initialize(sinatra_app)
@params = sinatra_app.params
@request = sinatra_app.request
@response = sinatra_app.response
end
end
class SomeController < BaseController
def some_method
{
params: params.class.name,
request: request.class.name,
response: response.class.name,
}.to_json
end
end
get '/' do
SomeController.new(self).some_method
end
Затем тестирование:
$ curl localhost:4567
Ответ:
{
"params":"Sinatra::IndifferentHash",
"request":"Sinatra::Request",
"response":"Sinatra::Response"
}
Показывает, что все 3 переменные доступны из текущего контекста