Обычно вы используете метод Kernel#method
для получения объекта Method
для рассматриваемого метода, а затем вы используете метод Method#owner
для запроса объекта Method
, где он был определен.
Итак,
req.method(:basic_auth).owner
# => Net::HTTPHeader
должен ответить на ваш вопрос.
За исключением, в данном конкретном случае, это не сработает, поскольку req
является Net::HTTP::Get
object и Net::HTTP::Get
переопределяют метод method
для обозначения чего-то совершенно другого.В частности, он не принимает аргумент, поэтому приведенный выше код фактически вызовет ArgumentError
.
Однако, поскольку Net::HTTP::Get
наследуется от Object
, а Object
смешивается в Kernel
, допустимо привязывать метод Kernel#method
к экземпляру Net::HTTP::Get
:
Kernel.instance_method(:method).bind(req).(:basic_auth).owner
# => Net::HTTPHeader
Итак, ваш ответ: метод определен в Net::HTTPHeader
.