class Hover::Client::HTTP
Attributes
prefix[RW]
site[RW]
Public Class Methods
new(site = 'http://localhost:3000', prefix = 'api/v1')
click to toggle source
# File lib/hover/client/http.rb, line 11 def initialize(site = 'http://localhost:3000', prefix = 'api/v1') @prefix = prefix @site = site end
Public Instance Methods
authenticate(request)
click to toggle source
# File lib/hover/client/http.rb, line 16 def authenticate(request) end
delete(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 84 def delete(path, parameters = {}) uri = make_uri(path) request = Net::HTTP::Delete.new(uri) make_form_request(request, uri, parameters) end
get(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 40 def get(path, parameters = {}) uri = make_uri(path, parameters) request = Net::HTTP::Get.new(uri) response = make_request(request, uri) response end
get_redirect_location(path, parameters = {}, &block)
click to toggle source
# File lib/hover/client/http.rb, line 48 def get_redirect_location(path, parameters = {}, &block) uri = make_uri(path, parameters) request = Net::HTTP::Get.new(uri) redirect_response = make_request(request, uri) if redirect_response.is_a?(Net::HTTPRedirection) && redirect_response['location'] redirect_response['location'] else nil end end
make_form_request(request, uri, parameters)
click to toggle source
# File lib/hover/client/http.rb, line 66 def make_form_request(request, uri, parameters) request.set_form_data(parameters) response = make_request(request, uri) response end
make_request(request, uri)
click to toggle source
# File lib/hover/client/http.rb, line 27 def make_request(request, uri) authenticate(request) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if 'https' == uri.scheme response = http.request(request) raise_errors_for_cloudfront_response(response) response end
make_uri(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 19 def make_uri(path, parameters = {}) parts = [site, prefix, path] uri = URI.parse(parts.map(&:presence).compact.join('/')) uri = URI.parse("#{uri.to_s}?#{URI.encode_www_form(parameters)}") unless parameters.empty? uri end
parse_response(response)
click to toggle source
# File lib/hover/client/http.rb, line 90 def parse_response(response) raise_errors(response) case response.code.to_i when 204 # no content {} else ::JSON.parse(response.body) end end
patch(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 78 def patch(path, parameters = {}) uri = make_uri(path) request = Net::HTTP::Patch.new(uri) make_form_request(request, uri, parameters) end
post(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 60 def post(path, parameters = {}) uri = make_uri(path) request = Net::HTTP::Post.new(uri) make_form_request(request, uri, parameters) end
put(path, parameters = {})
click to toggle source
# File lib/hover/client/http.rb, line 72 def put(path, parameters = {}) uri = make_uri(path) request = Net::HTTP::Put.new(uri) make_form_request(request, uri, parameters) end
raise_errors(response)
click to toggle source
# File lib/hover/client/http.rb, line 113 def raise_errors(response) message = "(#{response.code}): - #{response.body}" case response.code.to_i when 400 raise BadRequest, message when 401 raise Unauthorized, message when 403 raise General, message when 404 raise NotFound, message when 500 raise InternalError, "Internal error: #{message}" when 502..503 raise Unavailable, message end end
raise_errors_for_cloudfront_response(response)
click to toggle source
# File lib/hover/client/http.rb, line 101 def raise_errors_for_cloudfront_response(response) # # If the server can't be reached cloudfront will respond with an # error message of it's own. We need to catch those so that we can retry # the requests. # return unless (response.header['Server'] =~ /Cloudfront/i) raise ::Hover::Client::Unavailable end