class CFC::API

Public Class Methods

new() click to toggle source
# File lib/cfc/api.rb, line 11
def initialize
  @base = 'https://api.cloudflare.com/client/v4/'
  @cache = CFC::Cache.new
end

Public Instance Methods

delete(path, data: {}, headers: nil, cache: false, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 24
def delete(path, data: {}, headers: nil, cache: false, expiry: nil)
  request(Net::HTTP::Delete, URI("#{@base}#{path}"), data: data, headers: headers, cache: cache, expiry: expiry)
end
delete_to_json(path, data: {}, headers: nil, cache: false, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 28
def delete_to_json(path, data: {}, headers: nil, cache: false, expiry: nil)
  request_json(Net::HTTP::Delete, URI("#{@base}#{path}"), data: data, headers: headers, cache: cache,
               expiry: expiry)
end
get(path, params: nil, headers: nil, cache: true, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 16
def get(path, params: nil, headers: nil, cache: true, expiry: nil)
  request(Net::HTTP::Get, build_uri(path, params), headers: headers, cache: cache, expiry: expiry)
end
get_json(path, params: nil, headers: nil, cache: true, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 20
def get_json(path, params: nil, headers: nil, cache: true, expiry: nil)
  request_json(Net::HTTP::Get, build_uri(path, params), headers: headers, cache: cache, expiry: expiry)
end

Protected Instance Methods

build_uri(path, params) click to toggle source
# File lib/cfc/api.rb, line 87
def build_uri(path, params)
  uri = URI("#{@base}#{path}")
  uri.query = URI.encode_www_form((params || {}).to_a)
  uri
end
request(cls, uri, data: nil, headers: nil, cache: true, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 47
def request(cls, uri, data: nil, headers: nil, cache: true, expiry: nil)
  headers = (headers || {}).merge({ 'Content-Type' => 'application/json' })
  @auth_method = CFC::Config.instance.token.nil? ? :key : :token

  case @auth_method
  when :token
    headers.merge!({ 'Authentication' => "Bearer #{CFC::Config.instance.token}" })
  when :key
    headers.merge!({
                     'X-Auth-Key' => CFC::Config.instance.api_key,
      'X-Auth-Email' => CFC::Config.instance.api_email
                   })
  end

  rq = cls.new(uri, headers)
  unless data.nil? || rq.is_a?(Net::HTTP::Head)
    rq.body = JSON.dump(data)
  end

  response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    if cache
      @cache.fetch(Digest::SHA256.hexdigest("#{uri}|#{JSON.dump(headers)}"), expiry: expiry) do
        http.request(rq)
      end
    else
      http.request(rq)
    end
  end

  if response.is_a?(Net::HTTPSuccess)
    response
  else
    raise CFC::Errors::HTTPError.new(rq, response)
  end
end
request_json(cls, path, data: nil, headers: nil, cache: true, expiry: nil) click to toggle source
# File lib/cfc/api.rb, line 83
def request_json(cls, path, data: nil, headers: nil, cache: true, expiry: nil)
  JSON.parse(request(cls, path, data: data, headers: headers, cache: cache, expiry: expiry).body)
end