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