require 'oauth/request_proxy/base' require 'addressable/uri' module OAuth module RequestProxy class SimpleRequest < OAuth::RequestProxy::Base proxies Array def method return @request[0] end def uri return @request[1] end def headers @headers ||= (begin headers_hash = {} @request[2].each do |key, value| headers_hash[key] = value end headers_hash end) return @headers end def body @body ||= (begin body_string = "" @request[3].each do |chunk| body_string += chunk end body_string end) return @body end def parameters @parameters ||= (begin self.query_parameters.merge( self.post_parameters ) end) return @parameters end def query_parameters @query_parameters ||= (begin Addressable::URI.parse(self.uri).normalize.query_values || {} end) return @query_parameters end def post_parameters @post_parameters ||= (begin # We could be more liberal here and aggressively downcase, # but it's cleaner if we force the usage of the canonical form, # and we're just going to replace this eventually anyways. if self.method == 'POST' && self.headers['Content-Type'] == 'application/x-www-form-urlencoded' # Even though an Array would be better here, we're stuck using a # Hash because that's what the 'oauth' gem expects. parameter_hash = {} for key, value in Addressable::URI.form_unencode(self.body) parameter_hash[key] = value end parameter_hash else {} end end) return @post_parameters end def normalized_uri @normalized_uri ||= Addressable::URI.parse(self.uri).normalize.to_str return @normalized_uri end end end end