Вы не очень хорошо искали исходный код :) На 10 строк ниже #get
в определении метода есть определение route
приватный метод:
# 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
Это приватный метод ивы не найдете его в документации Синатры.
Обычно этот метод выполняет следующие действия: он создает proc из переданного &block
, объединяет его с путем http, ключами и условиями вызова (внутри compile!
метода) и сохраняет его в переменной экземпляра класса @routes[verb]
, такэтот блок можно найти по пути и условиям и выполнить позже (для этого класса также определен attr_reader :routes
, чтобы другие классы могли получить доступ к его переменной экземпляра @routes
).
Позже, когда вы получите http-запрос, соответствующий этому маршруту (@request
переменная экземпляра класса Base
), блок будет выполнен внутри метода Base#route!
(см. Строку 795).
Я быРекомендую использовать некоторые IDE, которые помогают исследовать исходный код.Например, я использую Rubymine для этой цели и его функцию Go To -> Declaration
: просто наведите курсор на переменную / method / class / etc, нажмите F12 и Rubymine найдет его для вас, даже в исходном кодеподключенные драгоценные камни.