あなたがソースコードを見ていない
:
# lib/sinatra/base.rb, line 1212
private
def route(verb, path, options={}, &block)
# Because of self.options.host
host_name(options.delete(:host)) if options.key?(:host)
enable :empty_path_info if path == "" and empty_path_info.nil?
signature = compile!(verb, path, block, options)
(@routes[verb] ||= []) << signature
invoke_hook(:route_added, verb, path, block)
signature
end
これはプライベートな方法であり、あなたはそれを見つけることができませんSinatraのドキュメントを参照してください。
は、一般に、この方法は、以下を行います。これは、渡された&block
からPROCを作成HTTPパス、キーと呼び出し条件(方法compile!
内側)とそれを組み合わせると@routes[verb]
クラスインスタンス変数に格納しているブロックがパスによって見つけることができるよう後で実行されます(このクラスにはattr_reader :routes
も定義されているため、他のクラスでは@routes
インスタンス変数にアクセスできます)。
このルート(@request
インスタンス変数Base
クラス)と一致するHTTP要求を取得すると、ブロックはBase#route!
メソッド(795行参照)内で実行されます。
私は、ソースコードを調べるのに役立つIDEを使用することをお勧めします。たとえば、私はこの目的でRubymineとその機能を使用します。Go To -> Declaration
:変数/ method/class/etcにカーソルを置くだけで、F12を押すとRubyは接続された宝石のソースコードであってもそれを見つけます。
'route'メソッドが一般的にどのように動作するかについていくつかの詳細を追加しました。 –