4

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

secure_request?
  request.env[ 'HTTPS' ] == 'on'
end

这工作正常,但是当我从另一个不共享 Sinatra 应用程序范围的类中调用它时,它会尝试发出 Rack Test 请求,引发错误:wrong number of arguments (0 for 1).

那么,有没有办法明确指定 Sinatra 应用程序请求,例如self.requestor app.request

4

1 回答 1

1

从另一个类调用request方法听起来像是糟糕的代码设计,将另一个类与您的应用程序紧密耦合。在哪里secure_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
于 2013-11-19T15:42:32.710 回答