Ruby 如何区分Sinatra请求对象和机架测试请求方法?

Ruby 如何区分Sinatra请求对象和机架测试请求方法?,ruby,https,sinatra,rack-test,Ruby,Https,Sinatra,Rack Test,我有一个在Sinatra应用程序范围内运行的方法,用于检查请求是否安全: secure_request? request.env[ 'HTTPS' ] == 'on' end 这很好,但当我从另一个不共享Sinatra应用程序作用域的类调用它时,它会尝试发出机架测试请求,并引发错误:参数数量错误(0代表1) 因此,是否有一种方法可以明确指定Sinatra应用程序请求,例如self.request或app.request?从另一个类调用request方法闻起来像是糟糕的代码设计,将另一个类与

我有一个在Sinatra应用程序范围内运行的方法,用于检查请求是否安全:

secure_request?
  request.env[ 'HTTPS' ] == 'on'
end
这很好,但当我从另一个不共享Sinatra应用程序作用域的类调用它时,它会尝试发出机架测试请求,并引发错误:
参数数量错误(0代表1)


因此,是否有一种方法可以明确指定Sinatra应用程序请求,例如
self.request
app.request

从另一个类调用
request
方法闻起来像是糟糕的代码设计,将另一个类与应用程序紧密耦合。在哪里定义了
安全请求?
?它是助手吗

我会亲自从Sinatra调用一个方法到另一个类,并传入请求值,而不是让另一个方法轮询来发现。例如:

class OtherClass
  def some_method( opts={} )
    if opts[:secure]
      # …
    else
      # …
    end
  end
end

class MyApp < Sinatra::Application
  helpers do
    secure_request?
      request.env[ 'HTTPS' ] == 'on'
    end
  end
  get '/' do
    @otherclass.some_method( secure: secure_request? )
  end
end
class-OtherClass
def some_方法(opts={})
如果选择[:安全]
# …
其他的
# …
结束
结束
结束
类MyApp
您的应用程序是经典版还是模块版Sinatra应用程序?你能举一个从另一个类调用该方法的例子吗?是的,你是对的。其他类不应该知道Sinatra请求。