Ruby 如何区分Sinatra请求对象和机架测试请求方法?
我有一个在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方法闻起来像是糟糕的代码设计,将另一个类与
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请求。