module Totter::Transport::HTTP
Default HTTP
API transport adapter
Private Instance Methods
boolean_from_response(*args)
click to toggle source
# File lib/totter/transport/http.rb, line 107 def boolean_from_response(*args) response = request(*args) (200..299).include? response.code.to_i end
build_request(method, uri)
click to toggle source
# File lib/totter/transport/http.rb, line 53 def build_request(method, uri) case method when :get Net::HTTP::Get.new(uri.request_uri) when :post Net::HTTP::Post.new(uri.request_uri) when :put Net::HTTP::Put.new(uri.request_uri) when :delete Net::HTTP::Delete.new(uri.request_uri) end end
can_post_data?(method)
click to toggle source
# File lib/totter/transport/http.rb, line 112 def can_post_data?(method) [:post, :put].include?(method) end
handle_error(response)
click to toggle source
# File lib/totter/transport/http.rb, line 87 def handle_error(response) # Find error or return return unless error = Totter::ERROR_MAP[response.code.to_i] # Try to add a useful message message = nil begin message = MultiJson.load(response.body)['error_description'] rescue MultiJson::DecodeError => e end # Raise error raise error.new(message) end
http()
click to toggle source
# File lib/totter/transport/http.rb, line 14 def http return @http if @http uri = URI.parse(self.base_url) @http = Net::HTTP.new(uri.host, uri.port) @http.use_ssl = self.ssl? @http end
json_request(*args)
click to toggle source
# File lib/totter/transport/http.rb, line 102 def json_request(*args) # Perform request, pass result format Response.new(request(*args), result_format) end
param_for(key, value, parent = nil)
click to toggle source
# File lib/totter/transport/http.rb, line 74 def param_for(key, value, parent = nil) if value.is_a?(Hash) params = [] value.each_pair do |value_key, value_value| value_parent = parent ? parent + "[#{key}]" : key.to_s params << param_for(value_key, value_value, value_parent) end params else ["#{parent ? parent + "[#{key}]" : key.to_s}=#{CGI::escape(value.to_s)}"] end end
request(method, path, params = nil)
click to toggle source
# File lib/totter/transport/http.rb, line 23 def request(method, path, params = nil) uri = URI.parse("#{self.base_url}#{path}") # if the request requires parameters in the query string, merge them in if params and !can_post_data?(method) query_values = uri.query ? URI.decode_www_form(uri.query).inject({}) {|h,(k,v)| h[k]=v; h} : {} uri.query = to_url_params((query_values || {}).merge(params)) end # Build request request = build_request(method, uri) # Add headers request['Authorization'] = "Bearer #{self.access_token}" if authenticated? request['X-Seesaw-Client-Token'] = @client_token if @client_token request['Content-Type'] = 'application/json' # Add params as JSON if they exist request.body = MultiJson.dump(params) if can_post_data?(method) and params # Request response = http.request(request) # Check for errors handle_error(response) # Return the raw response object response end
to_url_params(hash)
click to toggle source
# File lib/totter/transport/http.rb, line 66 def to_url_params(hash) params = [] hash.each_pair do |key, value| params << param_for(key, value).flatten end params.sort.join('&') end