class Mailinabox::Api::Client

Attributes

configuration[RW]
connection[RW]

Public Class Methods

new(configuration: ::Mailinabox::Api.configuration) click to toggle source
# File lib/mailinabox/api/client.rb, line 7
def initialize(configuration: ::Mailinabox::Api.configuration)
  self.configuration          =   configuration
  self.init_connection
end

Public Instance Methods

evaluate_response(method, response) click to toggle source
# File lib/mailinabox/api/client.rb, line 62
def evaluate_response(method, response)
  response&.to_s&.strip&.downcase&.eql?(Mailinabox::Api::Constants::RESPONSES[method])
end
get(path, params: {}, headers: {}, options: {}) click to toggle source
# File lib/mailinabox/api/client.rb, line 29
def get(path, params: {}, headers: {}, options: {})
  request path, method: :get, params: params, headers: headers, options: options
end
init_connection(headers: {}, options: {}) click to toggle source
# File lib/mailinabox/api/client.rb, line 14
def init_connection(headers: {}, options: {})
  headers["User-Agent"]       =   options.fetch(:user_agent, self.configuration.faraday.fetch(:user_agent, nil))

  self.connection           ||=   ::Faraday.new(url: self.configuration.host) do |builder|
    builder.headers           =   headers
    
    builder.basic_auth(self.configuration.user, self.configuration.password)
    
    builder.request  :url_encoded
    builder.response :logger      if self.configuration.verbose_faraday?
    
    builder.adapter self.configuration.faraday.fetch(:adapter, :net_http)
  end
end
post(path, params: {}, data: {}, headers: {}, options: {}) click to toggle source
# File lib/mailinabox/api/client.rb, line 33
def post(path, params: {}, data: {}, headers: {}, options: {})
  request path, method: :post, params: params, data: data, headers: headers, options: options
end
request(path, method: :get, params: {}, data: {}, headers: {}, options: {}, retries: 3) click to toggle source
# File lib/mailinabox/api/client.rb, line 37
def request(path, method: :get, params: {}, data: {}, headers: {}, options: {}, retries: 3)      
  response              =   nil

  begin
    response            =   case method
      when :get, :head, :options
        self.connection.send(method) do |request|
          request.url path
          request.params  =   params if params && !params.empty?
        end
      when :post, :put, :patch, :delete
        self.connection.send(method) do |request|
          request.url path
          request.body    =   data if data && !data.empty?
          request.params  =   params if params && !params.empty?
        end
    end
  rescue Faraday::TimeoutError, Faraday::ConnectionFailed => e
    retries -= 1
    retry if retries > 0
  end

  return response&.body
end