Class: AmexTokenizationClient::Request
- Inherits:
-
Object
- Object
- AmexTokenizationClient::Request
- Defined in:
- lib/amex_tokenization_client/request.rb
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:) ⇒ Request
constructor
A new instance of Request.
-
#log_request_response(data = nil) ⇒ Object
Log URI, method, data Start timer.
- #ms(tms) ⇒ Object
-
#send(data = nil) ⇒ Object
Create HTTP request with provided headers.
Constructor Details
#initialize(method, path, headers, logger:) ⇒ Request
Returns a new instance of Request.
10 11 12 13 14 15 16 |
# File 'lib/amex_tokenization_client/request.rb', line 10 def initialize(method, path, headers, logger:) @logger = logger @uri = URI(path) @request = Net::HTTP.const_get(method.capitalize).new(uri) @headers = headers headers.each_pair { |k, v| request[k] = v } end |
Instance Attribute Details
#headers ⇒ Object (readonly)
Returns the value of attribute headers.
7 8 9 |
# File 'lib/amex_tokenization_client/request.rb', line 7 def headers @headers end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
8 9 10 |
# File 'lib/amex_tokenization_client/request.rb', line 8 def logger @logger end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
6 7 8 |
# File 'lib/amex_tokenization_client/request.rb', line 6 def request @request end |
#uri ⇒ Object (readonly)
Returns the value of attribute uri.
6 7 8 |
# File 'lib/amex_tokenization_client/request.rb', line 6 def uri @uri end |
Instance Method Details
#fail_unless_expected_response(response, *allowed_responses) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/amex_tokenization_client/request.rb', line 64 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
30 31 32 33 34 |
# File 'lib/amex_tokenization_client/request.rb', line 30 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.
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/amex_tokenization_client/request.rb', line 40 def log_request_response(data = nil) logger.info "[#{self.class.name}] request = #{request.method} #{uri}#{data ? '?' + data : ''}" logger.info "[#{self.class.name}] request_id = #{headers['x-amex-request-id']}" 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
51 52 53 |
# File 'lib/amex_tokenization_client/request.rb', line 51 def ms(tms) (tms.real*1000).round(3) end |
#send(data = nil) ⇒ Object
Create HTTP request with provided headers. Invoke request over HTTPS. Return response on success or log failure and throw error.
21 22 23 24 25 26 27 28 |
# File 'lib/amex_tokenization_client/request.rb', line 21 def send(data = nil) request.body = data if data response = log_request_response(data) do https(uri).request(request) end fail_unless_expected_response response, Net::HTTPSuccess response.body end |