Class: BlazeVerify::Client
- Inherits:
-
Object
- Object
- BlazeVerify::Client
- Defined in:
- lib/blazeverify/client.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ Client
constructor
A new instance of Client.
- #request(method, endpoint, opts = {}) ⇒ Object
Constructor Details
#initialize ⇒ Client
Returns a new instance of Client.
4 5 6 7 8 9 10 |
# File 'lib/blazeverify/client.rb', line 4 def initialize @client = Faraday.new('https://api.blazeverify.com/v1') do |f| f.request :url_encoded f.response :json, content_type: /\bjson$/ f.adapter :net_http_persistent end end |
Class Method Details
.should_retry?(error, num_retries) ⇒ Boolean
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/blazeverify/client.rb', line 51 def self.should_retry?(error, num_retries) return false if num_retries >= BlazeVerify.max_network_retries # Retry on timeout-related problems (either on open or read). return true if error.is_a?(Faraday::TimeoutError) # Destination refused the connection, the connection was reset, or a # variety of other connection failures. This could occur from a single # saturated server, so retry in case it's intermittent. return true if error.is_a?(Faraday::ConnectionFailed) if error.is_a?(Faraday::ClientError) && error.response # 409 conflict return true if error.response[:status] == 409 end false end |
Instance Method Details
#request(method, endpoint, opts = {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/blazeverify/client.rb', line 12 def request(method, endpoint, opts = {}) begin tries ||= 0 @client.params[:api_key] = BlazeVerify.api_key response = if method == :get @client.get(endpoint, opts) elsif method == :post @client.post(endpoint, opts) end rescue => e retry if self.class.should_retry?(e, tries) raise e end status = response.status return response if status.between?(200, 299) error_attributes = { message: response.body['message'], code: status } error_map = { '400' => BadRequestError, '401' => UnauthorizedError, '402' => PaymentRequiredError, '403' => ForbiddenError, '404' => NotFoundError, '429' => TooManyRequestsError, '500' => InternalServerError, '503' => ServiceUnavailableError } raise error_map[status.to_s].new(error_attributes) end |