mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
92 lines
3.5 KiB
Ruby
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
|