class LsLinkdirectAPI::APIResource

Public Instance Methods

base_path() click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 9
def base_path
  if self.class == LsLinkdirectAPI::APIResource
    raise NotImplementedError.new(
      "APIResource is an abstract class. You should perform actions on its subclasses (i.e. TextLinks)"
    )
  end
  "/get#{CGI.escape(class_name)}/"
end
class_name() click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 5
def class_name
  self.class.name.split('::')[-1]
end
get(params = {}) click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 18
def get(params = {})
  
  unless token ||= LsLinkdirectAPI.token
    raise AuthenticationError.new(
      "No token provided. Set your token key using: LsLinkdirectAPI.token = 'TOKEN' " +
      "You can retrieve your Your Web Services Token from the Linkshare web interface. " +
      "http://helpcenter.linkshare.com/publisher/questions.php?questionid=58 for details."
    )
  end

  if token =~ /\s/
    raise AuthenticationError.new(
      "Your token looks invalid. " +
      "Double-check your token at http://linkshare.com"
    )
  end
  
  raise ArgumentError, "Params must be a Hash; got #{params.class} instead" unless params.is_a? Hash

  params.merge!({
    token: token,
  })
  make_params_valid(params)
  resource_url = LsLinkdirectAPI.api_base_url + base_path + self.params_path(params)
  request(resource_url, params)
end
request(resource_url, params) click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 45
def request(resource_url, params)
  timeout = LsLinkdirectAPI.api_timeout
  begin
    response = self.class.get(resource_url, query: nil, timeout: timeout)
  rescue Timeout::Error
    raise ConnectionError.new("Timeout error (#{timeout}s)")
  end
  process(response, "#{class_name}", params)
end

Private Instance Methods

check_date_format(date) click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 70
def check_date_format(date)
  if date
    if date =~ /(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])(19|20)\d\d/
      date
    else
      raise ArgumentError, "Data format needs to be MMDDYYYY."
    end
  else
    ''
  end
end
make_params_valid(params) click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 82
def make_params_valid(params)
  unless params[:mid]
    params[:mid] = -1
  end

  unless params[:cat]
    params[:cat] = -1
  end

  unless params[:page]
    params[:page] = 1
  end

  unless params[:campaignID]
    params[:campaignID] = -1
  end

  unless params[:size]
    params[:size] = -1
  end
end
process(response, response_name, params) click to toggle source
# File lib/ls_linkdirect_api/api_resource.rb, line 57
def process(response, response_name, params)
  case response.code
  when 200, 201, 204
    APIResponse.new(response, response_name, params)
  when 400, 404
    raise InvalidRequestError.new(response.message, response.code)
  when 401
    raise AuthenticationError.new(response.message, response.code)
  else
    raise Error.new(response.message, response.code)
  end
end