request.rb 699 B

1234567891011121314151617181920212223242526272829303132333435
  1. require 'typhoeus'
  2. module Docs
  3. class Request < Typhoeus::Request
  4. include Instrumentable
  5. DEFAULT_OPTIONS = {
  6. followlocation: true,
  7. headers: { 'User-Agent' => 'devdocs.io' }
  8. }
  9. def self.run(*args, &block)
  10. request = new(*args)
  11. request.on_complete(&block) if block
  12. request.run
  13. end
  14. def initialize(url, options = {})
  15. super url.to_s, DEFAULT_OPTIONS.merge(options)
  16. end
  17. def response=(value)
  18. value.extend Response if value
  19. super
  20. end
  21. def run
  22. instrument 'response.request', url: base_url do |payload|
  23. response = super
  24. payload[:response] = response
  25. response
  26. end
  27. end
  28. end
  29. end