class SocialRebate::Connection

Constants

STATUS

Public Class Methods

api_required_keys() click to toggle source
# File lib/social_rebate/connection.rb, line 26
def self.api_required_keys
  [:api_key, :api_secret, :store_key].freeze
end
api_token_keys() click to toggle source
# File lib/social_rebate/connection.rb, line 22
def self.api_token_keys
  [:api_key, :api_secret].freeze
end
new(creds={}) click to toggle source
# File lib/social_rebate/connection.rb, line 11
def initialize(creds={})
  validate_creds(creds)

  @configuration = {}
  SocialRebate::Connection.api_token_keys.each do |key|
    @configuration[key]   = creds[key].to_s
  end
  @store_key              = creds[:store_key]
  @configuration[:format] = 'json'
end

Public Instance Methods

api_token_keys_valid?() click to toggle source
# File lib/social_rebate/connection.rb, line 51
def api_token_keys_valid?
  return SocialRebate::Connection.api_token_keys.detect {|key| @configuration[key] == ''} == nil
end
check_body_params(body) click to toggle source
# File lib/social_rebate/connection.rb, line 96
def check_body_params(body)
  if !body.key?(:status) || !SocialRebate::Connection::STATUS.include?(body[:status])
    raise ResponseError.new("Missing or incorrect status param")
  end
end
check_post_url(url) click to toggle source
# File lib/social_rebate/connection.rb, line 108
def check_post_url(url)
  if url !~ /\/v[0-9]+\/orders\/$/i
    raise ResponseError.new("Incorrect post request url, expected: /api/v[0-9]/orders/, but you have #{url}")
  end
end
check_put_url(url) click to toggle source
# File lib/social_rebate/connection.rb, line 102
def check_put_url(url)
  if url !~ /\/v[0-9]+\/orders\/[0-9a-zA-Z]+\/$/i
    raise ResponseError.new("Incorrect put request url, expected: /api/v[0-9]/orders/<your order id>/, but you have #{url}")
  end
end
get(url, params={}) click to toggle source
# File lib/social_rebate/connection.rb, line 59
def get(url, params={})
  url   = "#{url}?#{serialize_param(@configuration)}"
  unless params.empty?
    url = "#{url}&#{serialize_param(params)}"
  end
  request(:get, url)
end
parsed_response(response) click to toggle source
# File lib/social_rebate/connection.rb, line 44
def parsed_response(response)
  unless response.success?
    raise ResponseError.new(response)
  end
  response.parsed_response
end
post(url, body={}, headers={}) click to toggle source
# File lib/social_rebate/connection.rb, line 67
def post(url, body={}, headers={})
  check_post_url(url)
  body.merge!(@configuration).merge!({:store_key => @store_key})

  options = {}
  options[:body]    = body
  options[:headers] = set_headers(headers)
  request(:post, url, options)
end
put(url, body={}, headers={}) click to toggle source
# File lib/social_rebate/connection.rb, line 77
def put(url, body={}, headers={})
  check_body_params(body)
  check_put_url(url)

  body    = body.merge!(@configuration).merge!({:store_key => @store_key})
  options = {}
  options[:body]    = body
  options[:headers] = set_headers(headers)
  request(:put, url, options)
end
request(method, url, options={}) click to toggle source
# File lib/social_rebate/connection.rb, line 36
def request(method, url, options={})
  unless api_token_keys_valid?
    raise ResponseError.new("Please set api_key and api_secret correctly")
  end
  options[:body] = options[:body].to_json if options[:body]
  parsed_response(self.class.__send__(method, url, options))
end
serialize_param(params) click to toggle source
# File lib/social_rebate/connection.rb, line 55
def serialize_param(params)
  params.sort.map {|key, value| URI.escape("#{key}=#{value}")}.join('&')
end
set_headers(headers) click to toggle source
# File lib/social_rebate/connection.rb, line 88
def set_headers(headers)
  hash = {}
  hash = headers unless headers.empty?
  hash['content-type'] = "application/json"
  hash['Accept']       = "application/json"
  hash
end
validate_creds(creds) click to toggle source
# File lib/social_rebate/connection.rb, line 30
def validate_creds(creds)
  SocialRebate::Connection.api_required_keys.each do |key|
    raise ResponseError.new("Required key: #{key} missing") unless creds[key]
  end
end