module AvailityClient

Public Class Methods

base_url() click to toggle source
# File lib/availity_client.rb, line 13
def base_url
  "https://api.availity.com/#{premium_key? ? '' : 'demo/'}v1/"
end
generate_token() click to toggle source
# File lib/availity_client.rb, line 21
def generate_token
  raise MissingApiKeyError, "AVAILITY_API_KEY and AVAILITY_API_SECRET  Environment Variables must be set" unless ENV['AVAILITY_API_KEY'] && ENV['AVAILITY_API_SECRET']

  base_64_token = Base64.encode64(ENV['AVAILITY_API_KEY'] + ":" + ENV['AVAILITY_API_SECRET']).chomp
  conn = Faraday.new(url: "https://api.availity.com") do |faraday|
    faraday.response :logger
    faraday.adapter  Faraday.default_adapter
  end

  response = conn.post do |req|
    req.url '/v1/token'
    req.headers['Authorization'] = "Basic #{base_64_token}"
    req.body = "grant_type=client_credentials"
  end

  JSON.parse(response.body)['access_token']
end
issue_request(method, url, params) click to toggle source
# File lib/availity_client.rb, line 39
def issue_request(method, url, params)
  api_key = ENV['AVAILITY_API_KEY']
  raise MissingApiKeyError, "AVAILITY_API_KEY Environment Variable must be set" unless api_key

  uri = URI.parse(url)
  conn = Faraday.new(url: uri) do |faraday|
    faraday.response :logger
    faraday.adapter  Faraday.default_adapter
  end

  response = conn.send(method.to_sym) do |req|
    if premium_key?
      req.headers['Authorization'] = "Bearer #{generate_token}"
    else
      req.headers['x-api-key'] = api_key
    end

    if params.kind_of?(Hash)
      params.each { |key, value| req.params[key.to_s] = value }
    end
  end

  response_body = begin
                    JSON.parse(response.body)
                  rescue JSON::ParserError => e
                    response.body
                  end
  {
    headers: response.headers,
    status: response.status,
    body: response_body
  }
end
premium_key?() click to toggle source
# File lib/availity_client.rb, line 17
def premium_key?
  !!ENV['AVAILITY_API_KEY'] && !!ENV['AVAILITY_API_SECRET']
end