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