require "rubygems" require "net/http" require "yajl" require "yajl/json_gem" require "uri" require 'cgi' server = "localhost" port = "8086" CONNECTION = Net::HTTP.new(server, port) # HTTP helper methods to test the APIs. Each of these should return the response code, headers, and body def get(path, params, connection = CONNECTION) request = Net::HTTP::Get.new(to_url(path, params)) process_request(request, connection) end def put(path, params, body) request = Net::HTTP::Put.new(to_url(path, params)) request.body = body process_request(request) end def post_with_body(path, params, body, connection = CONNECTION) request = Net::HTTP::Post.new(to_url(path, params)) request.body = body process_request(request, connection) end def delete(path, params, connection = CONNECTION) request = Net::HTTP::Delete.new(to_url(path, params)) process_request(request, connection) end def to_url(path, params) "#{path}?#{params.to_a.map {|hk| hk[1] = CGI.escape(hk[1]); hk.join("=")}.join("&")}" end def process_request(request, connection = CONNECTION) response = connection.request(request) header = response.read_header headers = {} header.each_header do |h| headers[h] = header[h] end body = response.read_body parsed_body = begin parse_json(body) rescue puts "Cannot parse json from: #{body}" nil end { :code => response.code.to_i, :body => body, :headers => headers, :parsed_body => parsed_body } end def to_json(object) Yajl::Encoder.encode(object) end def parse_json(string) Yajl::Parser.parse(string) end def puts_response(response) json = parse_json(response[:body]) if json puts "\n\n" puts json["message"] if json.has_key?("message") puts json["backtrace"].join("\n") if json.has_key?("backtrace") puts "\n" puts response.inspect end end