1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/hp/requests/storage/get_container.rb

92 lines
3.5 KiB
Ruby

module Fog
module Storage
class HP
class Real
# Get details for container and total bytes stored
#
# ==== Parameters
# * container<~String> - Name of container to retrieve info for
# * options<~String>:
# * 'limit'<~String> - Maximum number of objects to return
# * 'marker'<~String> - Only return objects whose name is greater than marker
# * 'prefix'<~String> - Limits results to those starting with prefix
# * 'path'<~String> - Return objects nested in the pseudo path
#
# ==== Returns
# * response<~Excon::Response>:
# * headers<~Hash>:
# * 'X-Account-Container-Count'<~String> - Count of containers
# * 'X-Account-Bytes-Used'<~String> - Bytes used
# * body<~Array>:
# * 'bytes'<~Integer> - Number of bytes used by container
# * 'count'<~Integer> - Number of items in container
# * 'name'<~String> - Name of container
# * item<~Hash>:
# * 'bytes'<~String> - Size of object
# * 'content_type'<~String> Content-Type of object
# * 'hash'<~String> - Hash of object (etag?)
# * 'last_modified'<~String> - Last modified timestamp
# * 'name'<~String> - Name of object
def get_container(container, options = {})
options = options.reject {|key, value| value.nil?}
response = request(
:expects => 200,
:method => 'GET',
:path => Fog::HP.escape(container),
:query => {'format' => 'json'}.merge!(options)
)
response
end
end
class Mock # :nodoc:all
def get_container(container_name, options = {})
unless container_name
raise ArgumentError.new('container_name is required')
end
if options['delimiter']
Fog::Mock.not_implemented
end
response = Excon::Response.new
obj_count = 0
obj_total_bytes = 0
if container = self.data[:containers][container_name]
contents = container[:objects].values.sort {|x,y| x['Key'] <=> y['Key']}.reject do |object|
(options['prefix'] && object['Key'][0...options['prefix'].length] != options['prefix']) ||
(options['marker'] && object['Key'] <= options['marker'])
end.map do |object|
obj_count = obj_count + 1
obj_total_bytes = obj_total_bytes + object['Content-Length'].to_i
data = {
'name' => object['Key'],
'hash' => object['ETag'],
'bytes' => object['Content-Length'].to_i,
'content_type' => object['Content-Type'],
'last_modified' => Time.parse(object['Date'])
}
data
end
response.status = 200
response.body = contents
response.headers = {
'X-Container-Object-Count' => obj_count,
'X-Container-Bytes-Used' => obj_total_bytes,
'Accept-Ranges' => 'bytes',
'Content-Type' => container['Content-Type'],
'Content-Length' => container['Content-Length']
}
response
else
raise Fog::Storage::HP::NotFound
end
end
end
end
end
end