mirror of
https://github.com/fog/fog-aws.git
synced 2022-11-09 13:50:52 -05:00

Fog aws fails if API response contains empty ETag tags. It may cause when working with S3 clones (like minio in my case), that not provides ETags in their API answer.
58 lines
1.7 KiB
Ruby
58 lines
1.7 KiB
Ruby
module Fog
|
|
module Parsers
|
|
module Storage
|
|
module AWS
|
|
class GetBucket < Fog::Parsers::Base
|
|
def reset
|
|
@object = { 'Owner' => {} }
|
|
@response = { 'Contents' => [], 'CommonPrefixes' => [] }
|
|
end
|
|
|
|
def start_element(name, attrs = [])
|
|
super
|
|
case name
|
|
when 'CommonPrefixes'
|
|
@in_common_prefixes = true
|
|
end
|
|
end
|
|
|
|
def end_element(name)
|
|
case name
|
|
when 'CommonPrefixes'
|
|
@in_common_prefixes = false
|
|
when 'Contents'
|
|
@response['Contents'] << @object
|
|
@object = { 'Owner' => {} }
|
|
when 'DisplayName', 'ID'
|
|
@object['Owner'][name] = value
|
|
when 'ETag'
|
|
@object[name] = value.gsub('"', '') if value != nil
|
|
when 'IsTruncated'
|
|
if value == 'true'
|
|
@response['IsTruncated'] = true
|
|
else
|
|
@response['IsTruncated'] = false
|
|
end
|
|
when 'LastModified'
|
|
@object['LastModified'] = Time.parse(value)
|
|
when 'Marker', 'Name'
|
|
@response[name] = value
|
|
when 'MaxKeys'
|
|
@response['MaxKeys'] = value.to_i
|
|
when 'Prefix'
|
|
if @in_common_prefixes
|
|
@response['CommonPrefixes'] << value
|
|
else
|
|
@response[name] = value
|
|
end
|
|
when 'Size'
|
|
@object['Size'] = value.to_i
|
|
when 'Delimiter', 'Key', 'StorageClass'
|
|
@object[name] = value
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|