Class: Aitch::Request

Inherits:
Object show all
Defined in:
lib/aitch/request.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Request

Returns a new instance of Request.



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/aitch/request.rb', line 15

def initialize(options)
  self.headers = {}
  self.options = {}
  self.redirects = []

  @_original_options = options.dup.freeze

  options.each do |name, value|
    public_send("#{name}=", value)
  end
end

Instance Attribute Details

#dataObject

Returns the value of attribute data.



7
8
9
# File 'lib/aitch/request.rb', line 7

def data
  @data
end

#headersObject

Returns the value of attribute headers.



8
9
10
# File 'lib/aitch/request.rb', line 8

def headers
  @headers
end

#optionsObject

Returns the value of attribute options.



9
10
11
# File 'lib/aitch/request.rb', line 9

def options
  @options
end

#redirectsObject

Returns the value of attribute redirects.



10
11
12
# File 'lib/aitch/request.rb', line 10

def redirects
  @redirects
end

#request_methodObject

Returns the value of attribute request_method.



5
6
7
# File 'lib/aitch/request.rb', line 5

def request_method
  @request_method
end

#urlObject

Returns the value of attribute url.



6
7
8
# File 'lib/aitch/request.rb', line 6

def url
  @url
end

Instance Method Details

#clientObject



56
57
58
59
60
61
62
# File 'lib/aitch/request.rb', line 56

def client
  @client ||= Net::HTTP.new(uri.host, uri.port).tap do |client|
    set_https(client)
    set_timeout(client)
    set_logger(client)
  end
end

#content_typeObject



41
42
43
44
# File 'lib/aitch/request.rb', line 41

def content_type
  headers["Content-Type"] ||
    options.fetch(:default_headers, {})["Content-Type"]
end

#content_type=(content_type) ⇒ Object



37
38
39
# File 'lib/aitch/request.rb', line 37

def content_type=(content_type)
  headers["Content-Type"] = content_type
end

#http_method_classObject



68
69
70
71
72
73
# File 'lib/aitch/request.rb', line 68

def http_method_class
  Net::HTTP.const_get(request_method.to_s.capitalize)
rescue NameError
  raise InvalidHTTPMethodError,
        "unexpected HTTP verb: #{request_method.inspect}"
end

#performObject



27
28
29
30
31
32
33
34
35
# File 'lib/aitch/request.rb', line 27

def perform
  response = Response.new(options, client.request(request))
  response.url = url
  response = follow_redirect(response)
  validate_response! response
  response
rescue timeout_exception
  raise RequestTimeoutError
end

#requestObject



46
47
48
49
50
51
52
53
54
# File 'lib/aitch/request.rb', line 46

def request
  @request ||= http_method_class.new(uri.request_uri).tap do |request|
    set_body(request) if request.request_body_permitted?
    set_user_agent(request)
    set_gzip(request)
    set_headers(request)
    set_credentials(request)
  end
end

#timeout_exceptionObject



127
128
129
# File 'lib/aitch/request.rb', line 127

def timeout_exception
  defined?(Net::ReadTimeout) ? Net::ReadTimeout : Timeout::Error
end

#uriObject



64
65
66
# File 'lib/aitch/request.rb', line 64

def uri
  @uri ||= URI.new(url, data, http_method_class::REQUEST_HAS_BODY)
end