module LeisureKing::API

Public Class Methods

base_uri() click to toggle source

Sends a request to the LeisureKing API and returns the parsed results

# File lib/leisureking/api.rb, line 11
def base_uri
  "https://api.leisureking.eu/v#{LeisureKing::Config.api_version}"
end
headers() click to toggle source

HTTP headers to send in each request

# File lib/leisureking/api.rb, line 66
def headers
 h = {
    content_type: :json, 
    accept: :json, 
    cache_control: 'no-cache'
  }
  # add requesters email address for human communication
  if LeisureKing::Config.client_email && LeisureKing::Config.client_email != ''
    h[:from] = LeisureKing::Config.client_email   # email address for human communication
  end
  if LeisureKing::Authentication.has_valid_api_key
    h["Authorization"] = "Token #{LeisureKing::Authentication.token}"
  end
  return h
end
send_request(endpoint, body = {}) click to toggle source
# File lib/leisureking/api.rb, line 15
def send_request(endpoint, body = {})
  url = "#{base_uri}/#{endpoint}"
  body[:environment] = LeisureKing::Config.environment
  begin

    unless LeisureKing::Authentication.has_valid_api_key
      unless endpoint == "authenticate"
        puts "Requesting new API Token" if LeisureKing::Config.verbose
        LeisureKing::Authentication.get_token
      end
    end

    if LeisureKing::Config.verbose
      puts "Sending request to #{url}"
      puts "Body:\n#{body.to_json}" if body
    end

    begin
      result = RestClient.post(url, body.to_json, headers) do |response, request, res, &block|
        if [301, 302, 307].include? response.code
          redirected_url = response.headers[:location]
          if LeisureKing::Config.verbose
            puts "Redirecting request to #{redirected_url}"
            puts "Headers:\n#{headers.to_json}" if headers
            puts "Body:\n#{body.to_json}" if body
          end
          RestClient.post(redirected_url, body.to_json, headers)
        else
          # puts "Response: #{response}"
          # response.return!(request, res, &block)
          response.return!
        end
      end
    rescue RestClient::Unauthorized, RestClient::Forbidden => err
      if LeisureKing::Config.verbose
        puts "Backtrace:" 
        puts err.backtrace
      end
      raise "Access denied. API Response:\n#{err}."
    end

    puts "Result:\n#{result}" if LeisureKing::Config.verbose
    return JSON.parse(result)

  rescue RestClient::BadRequest => err
    raise "Bad Request. API Response:\n#{err.response}"
  end
end