def get_objects(prefix = '')
prefix = prefix.toutf8
if @s3.options[:enable_cache] && !@cache[:objects].nil? &&
!@cache[:objects][prefix].nil?
return @cache[:objects][prefix]
end
if @cache[:objects].nil?
@cache[:objects] = {}
end
objects = {}
request_uri = "/#{@name}?prefix=#{URI.escape(prefix)}"
is_truncated = true
while is_truncated do
response = @s3.request_get(request_uri)
@s3.error?(response)
xml = REXML::Document.new(response.body)
if xml.root.elements['IsTruncated'].text == 'false'
is_truncated = false
else
request_uri = "/#{@name}?prefix=#{URI.escape(prefix)}&marker=" +
xml.root.elements.to_a('Contents').last.elements['Key'].text
end
next if xml.root.elements['Contents'].nil?
xml.root.elements.each('Contents') do |element|
object_key = element.elements['Key'].text
object_size = element.elements['Size'].text
object_etag = element.elements['ETag'].text
object_last_modified = Time.parse(
element.elements['LastModified'].text)
objects[object_key] = S3::Object.new(@s3, self, object_key,
object_size, object_etag, object_last_modified)
end
end
return @cache[:objects][prefix] = objects
end