class Bazil::REST

Public Class Methods

new(http, options = {}) click to toggle source
# File lib/bazil/rest.rb, line 14
def initialize(http, options = {})
  @http = http
  @api_root = options[:api_root] || '/'
  @api_root += '/' unless @api_root.end_with? '/'
end

Public Instance Methods

delete(uri) click to toggle source
# File lib/bazil/rest.rb, line 52
def delete(uri)
  uri = gen_path(uri)
  uri, header = add_api_signature(uri, nil)
  @http.delete(uri, header)
rescue Errno::ECONNREFUSED => e
  raise_error('DELETE')
end
get(uri) click to toggle source
# File lib/bazil/rest.rb, line 28
def get(uri)
  uri = gen_path(uri)
  uri, header = add_api_signature(uri, nil)
  @http.get(uri, header)
rescue Errno::ECONNREFUSED => e
  raise_error('GET')
end
post(uri, data, header = {}) click to toggle source
# File lib/bazil/rest.rb, line 44
def post(uri, data, header = {})
  uri = gen_path(uri)
  uri, header = add_api_signature(uri, data, header)
  @http.post(uri, data, header)
rescue Errno::ECONNREFUSED => e
  raise_error('POST')
end
put(uri, data, header = {}) click to toggle source
# File lib/bazil/rest.rb, line 36
def put(uri, data, header = {})
  uri = gen_path(uri)
  uri, header = add_api_signature(uri, data, header)
  @http.put(uri, data, header)
rescue Errno::ECONNREFUSED => e
  raise_error('PUT')
end
set_api_keys(key, secret) click to toggle source
# File lib/bazil/rest.rb, line 22
def set_api_keys(key, secret)
  @api_key = key
  @secret_key = secret
  true
end

Private Instance Methods

add_api_signature(uri, data, header = {}) click to toggle source
# File lib/bazil/rest.rb, line 66
def add_api_signature(uri, data, header = {})
  return uri, header unless @api_key and @secret_key

  base,param = uri.split('?',2)
  current_time = Time.now.httpdate

  signature = ''
  signature = data.gsub(/\s/, '') if data
  parameters = (param || "").split('&')
  parameters << "api_key=#{@api_key}"
  signature << parameters.sort.join()
  signature << current_time
  signature << @secret_key
  parameters << "api_signature=#{Digest::MD5.hexdigest(signature)}"
  base << '?'
  base << parameters.join('&')

  return base, header.merge({'Date' => current_time})
end
gen_path(path) click to toggle source
# File lib/bazil/rest.rb, line 61
def gen_path(path)
  # Pathname#+ cannot append absolute path, so use String#+ then canonicalize it
  Pathname.new(@api_root + path).cleanpath.to_s
end
raise_error(method) click to toggle source
# File lib/bazil/rest.rb, line 86
def raise_error(method)
  raise ConnectionError.new(method, @http.address, @http.port)
end