class Snapcard::Client

Constants

API_BASE_URL
API_VERSION

Public Class Methods

new(options) click to toggle source
# File lib/snapcard/client.rb, line 11
def initialize options
  raise "api_key and secret_key required" unless options[:api_key] && options[:secret_key]
  @options = options
end

Public Instance Methods

delete(options) click to toggle source
# File lib/snapcard/client.rb, line 28
def delete options
  make_request Net::HTTP::Delete, options
end
get(options) click to toggle source
# File lib/snapcard/client.rb, line 20
def get options
  make_request Net::HTTP::Get, options
end
post(options) click to toggle source
# File lib/snapcard/client.rb, line 16
def post options
  make_request Net::HTTP::Post, options
end
put(options) click to toggle source
# File lib/snapcard/client.rb, line 24
def put options
  make_request Net::HTTP::Put, options
end

Private Instance Methods

assemble_request(http_generic_request_class, path, params={}) click to toggle source
# File lib/snapcard/client.rb, line 43
def assemble_request http_generic_request_class, path, params={}
  uri = URI.parse API_BASE_URL + path
  timestamp = (Time.now.to_f * 1000).to_i
  if http_generic_request_class == Net::HTTP::Get
    uri.query = URI.encode_www_form params.merge timestamp: timestamp
  else
    uri.query = URI.encode_www_form timestamp: timestamp
  end
  request = http_generic_request_class.new uri
  body = http_generic_request_class == Net::HTTP::Get ? {} : params
  request.body = body.to_json if !body.empty?
  headers = generate_headers uri, body
  headers.each do |key, value|
    request.add_field key, value
  end
  request
end
generate_headers(uri, body={}) click to toggle source
# File lib/snapcard/client.rb, line 68
def generate_headers uri, body={}
  signature = generate_signature uri, body
  headers = {
    'X-Api-Key' => @options[:api_key],
    'X-Api-Signature' => signature,
    'X-Api-Version' => API_VERSION,
    'Content-Type' => "application/json"
  }
  headers
end
generate_signature(uri, body={}) click to toggle source
# File lib/snapcard/client.rb, line 79
def generate_signature uri, body={}
  body_s = body.empty? ? "" : body.to_json.to_s
  to_sign = uri.to_s + body_s
  OpenSSL::HMAC.hexdigest OpenSSL::Digest::SHA256.new, @options[:secret_key], to_sign
end
make_request(http_generic_request_class, options) click to toggle source
# File lib/snapcard/client.rb, line 34
def make_request http_generic_request_class, options
  raise "Please specify path" unless options[:path]
  path = options[:path]
  options.delete :path
  params = options
  request = assemble_request http_generic_request_class, path, params
  send_request request
end
send_request(request) click to toggle source
# File lib/snapcard/client.rb, line 61
def send_request request
  http = Net::HTTP.new request.uri.host, request.uri.port
  http.use_ssl = true
  http.read_timeout = @options[:read_timeout] || 20
  http.request request
end