Class: Kampainer::HttpRequest
- Inherits:
-
Object
- Object
- Kampainer::HttpRequest
- Defined in:
- lib/kampainer/http_request.rb
Overview
Generic Net::HTTP wrapper that logs the request and response.
Defined Under Namespace
Classes: UnexpectedHttpResponse
Instance Attribute Summary collapse
-
#headers ⇒ Object
readonly
Returns the value of attribute headers.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#uri ⇒ Object
readonly
Returns the value of attribute uri.
Instance Method Summary collapse
- #fail_unless_expected_response(response, *allowed_responses) ⇒ Object
- #https(uri) ⇒ Object
-
#initialize(method, path, headers, logger) ⇒ HttpRequest
constructor
A new instance of HttpRequest.
-
#log_request_response(data = nil) ⇒ Object
Log URI, method, data Start timer.
- #ms(tms) ⇒ Object
-
#send(action_name, data) ⇒ Object
Create HTTP request with provided headers.
Constructor Details
#initialize(method, path, headers, logger) ⇒ HttpRequest
Returns a new instance of HttpRequest.
12 13 14 15 16 17 |
# File 'lib/kampainer/http_request.rb', line 12 def initialize(method, path, headers, logger) @headers = headers @logger = logger @uri = URI(path) @request = Net::HTTP.const_get(method.capitalize).new(uri) end |
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
9 10 11 |
# File 'lib/kampainer/http_request.rb', line 9 def headers @headers end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
10 11 12 |
# File 'lib/kampainer/http_request.rb', line 10 def logger @logger end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
8 9 10 |
# File 'lib/kampainer/http_request.rb', line 8 def request @request end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
8 9 10 |
# File 'lib/kampainer/http_request.rb', line 8 def uri @uri end |
Instance Method Details
#fail_unless_expected_response(response, *allowed_responses) ⇒ Object
67 68 69 70 71 72 73 |
# File 'lib/kampainer/http_request.rb', line 67 def fail_unless_expected_response(response, *allowed_responses) unless allowed_responses.any? { |allowed| response.is_a?(allowed) } logger.error "#{response.inspect}: #{response.body}" raise UnexpectedHttpResponse, response end response end |
#https(uri) ⇒ Object
32 33 34 35 36 |
# File 'lib/kampainer/http_request.rb', line 32 def https(uri) Net::HTTP.new(uri.host, uri.port).tap do |http| http.use_ssl = true end end |
#log_request_response(data = nil) ⇒ Object
Log URI, method, data Start timer. Yield URI, method, data. Log response and time taken.
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/kampainer/http_request.rb', line 42 def log_request_response(data = nil) logger.info "[#{self.class.name}] request = #{request.method} #{uri}" logger.info "[#{self.class.name}] headers = #{headers.inspect}" logger.info "[#{self.class.name}] data = #{data}" response = nil tms = Benchmark.measure do response = yield end logger.info("[#{self.class.name}] response (#{ms(tms)}ms): #{response.inspect} #{response.body}") response end |
#ms(tms) ⇒ Object
54 55 56 |
# File 'lib/kampainer/http_request.rb', line 54 def ms(tms) (tms.real*1000).round(3) end |
#send(action_name, data) ⇒ Object
Create HTTP request with provided headers. Invoke request over HTTPS. Return response on success or log failure and throw error.
22 23 24 25 26 27 28 29 30 |
# File 'lib/kampainer/http_request.rb', line 22 def send(action_name, data) headers.each { |k, v| request[k] = v } request.body = data response = log_request_response(data) do https(uri).request(request) end fail_unless_expected_response response, Net::HTTPSuccess response.body end |