Added a request proxy for our HTTP request representations.

git-svn-id: https://google-api-ruby-client.googlecode.com/svn/trunk@26 c1d61fac-ed7f-fcc1-18f7-ff78120a04ef
This commit is contained in:
bobaman@google.com 2010-08-24 21:26:21 +00:00
parent d61916b110
commit 5b71f47a4d
1 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,82 @@
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