Где и как Active Resource выполняет свои HTTP-запросы? - PullRequest
1 голос
/ 08 ноября 2011

Я не могу найти место, где Active Resource инициирует свои соединения. Я ожидал, что Connection.request вызовет сетевую библиотеку, но вместо этого он просто вызывает ActiveSupport :: Notifications.instrument, который, похоже, является своего рода службой обмена сообщениями.

Кто-нибудь знает, как это работает? Я не смог найти код, который слушал сообщение. ActiveSupport :: Уведомления совершенно новые для меня, так что, возможно, есть очевидное место, где будет находиться слушатель.

  def request(method, path, *arguments)
    result = ActiveSupport::Notifications.instrument("request.active_resource") do |payload|
      payload[:method]      = method
      payload[:request_uri] = "#{site.scheme}://#{site.host}:#{site.port}#{path}"
      payload[:result]      = http.send(method, path, *arguments)
    end

Определение метода здесь на GitHub

1 Ответ

1 голос
/ 08 ноября 2011

Я полагаю, что ответ заключается в http.send() вызове, который назначен на payload[:result].

. Далее в файле:

  # Creates new Net::HTTP instance for communication with the
  # remote service and resources.
  def http
    configure_http(new_http)
  end

  def new_http
    if @proxy
      Net::HTTP.new(@site.host, @site.port, @proxy.host, @proxy.port, @proxy.user, @proxy.password)
    else
      Net::HTTP.new(@site.host, @site.port)
    end
  end

  def configure_http(http)
    http = apply_ssl_options(http)

    # Net::HTTP timeouts default to 60 seconds.
    if @timeout
      http.open_timeout = @timeout
      http.read_timeout = @timeout
    end

    http
  end

Net::HTTP исходит отrequire 'net/https' из строки 4.

...