class AdLeads::Client

Attributes

last_response[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/ad_leads/client.rb, line 11
def initialize(options={})
  merged_options = AdLeads.options.merge(options)
  Configuration::VALID_CONFIG_KEYS.each do |key|
    send("#{key}=", merged_options[key])
  end
end

Public Instance Methods

get(path, params = {}) click to toggle source
# File lib/ad_leads/client.rb, line 22
def get(path, params = {})
  request(:get, path, params)
end
get_reports(params) click to toggle source
# File lib/ad_leads/client.rb, line 18
def get_reports(params)
  get("/reports/campaign/report", params)
end
last_response_id() click to toggle source
# File lib/ad_leads/client.rb, line 30
def last_response_id
  JSON.parse(last_response.body)['data'].first
end
post(path, params = {}) click to toggle source
# File lib/ad_leads/client.rb, line 26
def post(path, params = {})
  request(:post, path, params)
end

Private Instance Methods

connection(opts = {}) click to toggle source
# File lib/ad_leads/client.rb, line 43
def connection(opts = {})
  opts[:headers] ||= { 'Accept' => 'application/json' }

  Faraday.new(url: endpoint) do |faraday|
    faraday.headers = opts[:headers]
    faraday.request :multipart if opts[:multipart]

    faraday.authorization :Bearer, token
    faraday.adapter  :httpclient
    faraday.request :url_encoded
    # faraday.response :logger
  end
end
etag_opts(etag) click to toggle source
# File lib/ad_leads/client.rb, line 36
def etag_opts(etag)
  {
    headers: { 'If-Match' => etag },
    multipart: true
  }
end
request(method, path, params = {}) click to toggle source
# File lib/ad_leads/client.rb, line 61
def request(method, path, params = {})
  etag = params.delete(:etag)
  opts = etag ? etag_opts(etag) : {}

  response = connection(opts).send(method, path) do |request|
    request.params = params if method == :get
    request.body = params if method == :post
  end

    # Logger.new(STDOUT).info [
    #   '====================',
    #   endpoint: endpoint,
    #   method: method,
    #   path: path,
    #   body: response.body
    # ].join("\n")

  case response.status
  when 400 then raise ArgError.new response.body
  when 401 then raise AuthError.new "token: #{token}" + response.body.to_s
  when 412 then raise EtagMismatchError.new response.body
  when 500 then raise ApiServerError.new response.body
  else
    @last_response = response
  end
  # rescue Faraday::Error::TimeoutError, Timeout::Error => error
  # rescue Faraday::Error::ClientError, JSON::ParserError => error
end
token() click to toggle source
# File lib/ad_leads/client.rb, line 57
def token
  @token ||= AdLeads::Token.new(client_id: client_id, principle: principle).token
end