simplify by pushing query string building down into excon

This commit is contained in:
geemus 2010-06-05 14:19:39 -07:00
parent 6e156d0cfb
commit 4529a3444f
23 changed files with 32 additions and 61 deletions

View File

@ -1,7 +1,7 @@
source 'http://gemcutter.org' source 'http://gemcutter.org'
gem 'rake' gem 'rake'
gem 'excon', '>= 0.0.24' gem 'excon', '>= 0.0.25'
gem 'formatador', ">= 0.0.10" gem 'formatador', ">= 0.0.10"
gem 'json', ">= 0" gem 'json', ">= 0"
gem 'mime-types', ">= 0" gem 'mime-types', ">= 0"

View File

@ -31,7 +31,7 @@ dependencies:
excon: excon:
group: group:
- :default - :default
version: ">= 0.0.24" version: ">= 0.0.25"
builder: builder:
group: group:
- :default - :default
@ -50,7 +50,7 @@ specs:
- builder: - builder:
version: 2.1.2 version: 2.1.2
- excon: - excon:
version: 0.0.24 version: 0.0.25
- formatador: - formatador:
version: 0.0.14 version: 0.0.14
- gestalt: - gestalt:
@ -60,7 +60,7 @@ specs:
- mime-types: - mime-types:
version: "1.16" version: "1.16"
- net-ssh: - net-ssh:
version: 2.0.22 version: 2.0.23
- nokogiri: - nokogiri:
version: 1.4.2 version: 1.4.2
- rspec: - rspec:
@ -69,7 +69,7 @@ specs:
version: 0.4.0 version: 0.4.0
- shindo: - shindo:
version: 0.1.4 version: 0.1.4
hash: 3e4f041a5b790fadb4d85f239577c92b71b9dd78 hash: 47be4240cdce9d626cc1834c503ca8e275e76307
sources: sources:
- Rubygems: - Rubygems:
uri: http://gemcutter.org uri: http://gemcutter.org

View File

@ -38,11 +38,6 @@ module Fog
unless bucket_name unless bucket_name
raise ArgumentError.new('bucket_name is required') raise ArgumentError.new('bucket_name is required')
end end
query = ''
for key, value in options
query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
end
query.chop!
request({ request({
:expects => 200, :expects => 200,
:headers => {}, :headers => {},
@ -50,7 +45,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetBucket.new, :parser => Fog::Parsers::AWS::S3::GetBucket.new,
:query => query :query => options
}) })
end end

View File

@ -35,7 +35,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::AccessControlList.new, :parser => Fog::Parsers::AWS::S3::AccessControlList.new,
:query => 'acl' :query => {'acl' => nil}
}) })
end end

View File

@ -20,7 +20,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetBucketLocation.new, :parser => Fog::Parsers::AWS::S3::GetBucketLocation.new,
:query => 'location' :query => {'location' => nil}
}) })
end end

View File

@ -35,7 +35,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetBucketLogging.new, :parser => Fog::Parsers::AWS::S3::GetBucketLogging.new,
:query => 'logging' :query => {'logging' => nil}
}) })
end end

View File

@ -53,11 +53,6 @@ module Fog
unless bucket_name unless bucket_name
raise ArgumentError.new('bucket_name is required') raise ArgumentError.new('bucket_name is required')
end end
query = 'versions&'
for key, value in options
query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
end
query.chop!
request({ request({
:expects => 200, :expects => 200,
:headers => {}, :headers => {},
@ -65,7 +60,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetBucketObjectVersions.new, :parser => Fog::Parsers::AWS::S3::GetBucketObjectVersions.new,
:query => query :query => {'versions' => nil}.merge!(options)
}) })
end end

View File

@ -25,7 +25,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetBucketVersioning.new, :parser => Fog::Parsers::AWS::S3::GetBucketVersioning.new,
:query => 'versioning' :query => {'versioning' => nil}
}) })
end end

View File

@ -33,7 +33,7 @@ module Fog
raise ArgumentError.new('object_name is required') raise ArgumentError.new('object_name is required')
end end
if version_id = options.delete('versionId') if version_id = options.delete('versionId')
query = CGI.escape(version_id) query = {'versionId' => version_id}
end end
headers = {} headers = {}
headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']

View File

@ -34,9 +34,9 @@ module Fog
unless object_name unless object_name
raise ArgumentError.new('object_name is required') raise ArgumentError.new('object_name is required')
end end
query = 'acl' query = {'acl' => nil}
if version_id = options.delete('versionId') if version_id = options.delete('versionId')
query << "&#{CGI.escape(version_id)}" query['versionId'] = version_id
end end
request({ request({
:expects => 200, :expects => 200,

View File

@ -37,7 +37,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:path => CGI.escape(object_name), :path => CGI.escape(object_name),
:query => 'torrent' :query => {'torrent' => nil}
}) })
end end

View File

@ -20,7 +20,7 @@ module Fog
:idempotent => true, :idempotent => true,
:method => 'GET', :method => 'GET',
:parser => Fog::Parsers::AWS::S3::GetRequestPayment.new, :parser => Fog::Parsers::AWS::S3::GetRequestPayment.new,
:query => 'requestPayment' :query => {'requestPayment' => nil}
}) })
end end

View File

@ -32,7 +32,7 @@ module Fog
raise ArgumentError.new('object_name is required') raise ArgumentError.new('object_name is required')
end end
if version_id = options.delete('versionId') if version_id = options.delete('versionId')
query = CGI.escape(version_id) query = {'versionId' => version_id}
end end
headers = {} headers = {}
headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since'] headers['If-Modified-Since'] = options['If-Modified-Since'].utc.strftime("%a, %d %b %Y %H:%M:%S +0000") if options['If-Modified-Since']

View File

@ -62,7 +62,7 @@ DATA
:headers => {}, :headers => {},
:host => "#{bucket_name}.#{@host}", :host => "#{bucket_name}.#{@host}",
:method => 'PUT', :method => 'PUT',
:query => 'acl' :query => {'acl' => nil}
}) })
end end

View File

@ -69,7 +69,7 @@ DATA
:headers => {}, :headers => {},
:host => "#{bucket_name}.#{@host}", :host => "#{bucket_name}.#{@host}",
:method => 'PUT', :method => 'PUT',
:query => 'logging' :query => {'logging' => nil}
}) })
end end

View File

@ -22,7 +22,7 @@ DATA
:headers => {}, :headers => {},
:host => "#{bucket_name}.#{@host}", :host => "#{bucket_name}.#{@host}",
:method => 'PUT', :method => 'PUT',
:query => 'versioning' :query => {'versioning' => nil}
}) })
end end

View File

@ -21,7 +21,7 @@ DATA
:headers => {}, :headers => {},
:host => "#{bucket_name}.#{@host}", :host => "#{bucket_name}.#{@host}",
:method => 'PUT', :method => 'PUT',
:query => "requestPayment" :query => {'requestPayment' => nil}
}) })
end end

View File

@ -208,9 +208,13 @@ DATA
canonical_resource << "#{CGI.escape(subdomain).downcase}/" canonical_resource << "#{CGI.escape(subdomain).downcase}/"
end end
canonical_resource << "#{params[:path]}" canonical_resource << "#{params[:path]}"
if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(params[:query]) canonical_resource << '?'
canonical_resource << "?#{params[:query]}" for key in params[:query].keys
if ['acl', 'location', 'logging', 'requestPayment', 'torrent', 'versions', 'versioning'].include?(key)
canonical_resource << "#{key}&"
end
end end
canonical_resource.chop!
string_to_sign << "#{canonical_resource}" string_to_sign << "#{canonical_resource}"
hmac = @hmac.update(string_to_sign) hmac = @hmac.update(string_to_sign)

View File

@ -18,23 +18,11 @@ module Fog
# * body<~Hash>: # * body<~Hash>:
# TODO # TODO
def create_block(product_id, template_id, options = {}) def create_block(product_id, template_id, options = {})
data = {
'product' => product_id,
'template' => template_id
}.merge!(options)
query = ''
for key, value in data
query << "#{key}=#{CGI.escape(value.to_s).gsub(/\+/, '%20')}&"
end
query.chop!
request( request(
# :body => data.to_json,
:expects => 200, :expects => 200,
:method => 'POST', :method => 'POST',
:path => '/api/blocks.json', :path => '/api/blocks.json',
:query => query :query => {'product' => product_id, 'template' => templated_id}.merge!(query)
) )
end end

View File

@ -29,16 +29,11 @@ module Fog
# * 'last_modified'<~String> - Last modified timestamp # * 'last_modified'<~String> - Last modified timestamp
# * 'name'<~String> - Name of object # * 'name'<~String> - Name of object
def get_container(container, options = {}) def get_container(container, options = {})
query = ''
for key, value in options.merge!({ 'format' => 'json' })
query << "#{key}=#{value}&"
end
query.chop!
response = storage_request( response = storage_request(
:expects => 200, :expects => 200,
:method => 'GET', :method => 'GET',
:path => container, :path => container,
:query => query :query => {'format' => 'json'}.merge!(options)
) )
response response
end end

View File

@ -18,17 +18,11 @@ module Fog
# * 'count'<~Integer>: - Number of items in container # * 'count'<~Integer>: - Number of items in container
# * 'name'<~String>: - Name of container # * 'name'<~String>: - Name of container
def get_containers(options = {}) def get_containers(options = {})
options = { 'format' => 'json' }.merge!(options)
query = ''
for key, value in options
query << "#{key}=#{CGI.escape(value)}&"
end
query.chop!
response = storage_request( response = storage_request(
:expects => [200, 204], :expects => [200, 204],
:method => 'GET', :method => 'GET',
:path => '', :path => '',
:query => query :query => {'format' => 'json'}.merge!(options)
) )
response response
end end

View File

@ -18,7 +18,7 @@ module Fog
:expects => 204, :expects => 204,
:method => 'HEAD', :method => 'HEAD',
:path => container, :path => container,
:query => 'format=json' :query => {'format' => 'json'}
) )
response response
end end

View File

@ -15,7 +15,7 @@ module Fog
:expects => 204, :expects => 204,
:method => 'HEAD', :method => 'HEAD',
:path => '', :path => '',
:query => 'format=json' :query => {'format' => 'json'}
) )
response response
end end