class Doyoubuzz::Showcase

Public Class Methods

new(api_key, api_secret) click to toggle source

Construction with mandatory api key and api secret

# File lib/doyoubuzz/showcase.rb, line 13
def initialize(api_key, api_secret)
  @api_key = api_key
  @api_secret = api_secret
end

Private Instance Methods

build_request_parameters(params, verb) click to toggle source

Build the request parameters

# File lib/doyoubuzz/showcase.rb, line 56
def build_request_parameters(params, verb)
  additional_parameters = { apikey: @api_key, timestamp: Time.now.to_i }

  # GET, DELETE requests : the parameters are in the request query
  if %i(get delete).include?(verb)
    return { query: sign_api_params(params.merge(additional_parameters)) }
  end

  # Otherwise, they are in the body
  { body: params, query: sign_api_params(additional_parameters) }
end
call_api(verb, method, params) click to toggle source

The actual api call

# File lib/doyoubuzz/showcase.rb, line 28
def call_api(verb, method, params)
  res = self.class.send(
    verb,
    method,
    build_request_parameters(params, verb)
  )

  process_response(res)
end
mash(object) click to toggle source
# File lib/doyoubuzz/showcase.rb, line 51
def mash(object)
  Hashie::Mash.new(object)
end
process_response(res) click to toggle source

Process the HTTParty response, checking for errors

# File lib/doyoubuzz/showcase.rb, line 39
def process_response(res)
  raise Error.new(res.code, res.body) unless res.success?

  object = res.parsed_response

  case object
  when Hash then mash(object)
  when Array then object.map(&method(:mash))
  else object
  end
end
sign_api_params(params) click to toggle source

The arguments processing and signing

# File lib/doyoubuzz/showcase.rb, line 69
def sign_api_params(params)
  ordered_params_values = params.sort.map { |_, v| v }
  concatenated_params_string = ordered_params_values.join
  concatenated_params_string << @api_secret

  hash = Digest::MD5.hexdigest(concatenated_params_string)
  params.merge(hash: hash)
end