module AWS::S3::PaginatedCollection
def each(options = {}, &block)
def each(options = {}, &block) each_page(options) do |page| each_member_in_page(page, &block) end nil end
def each_member_in_page(page, &block); end
def each_member_in_page(page, &block); end
def each_page(options = {}, &block)
def each_page(options = {}, &block) opts = list_options(options) limit = options[:limit] batch_size = options[:batch_size] || 1000 markers = {} received = 0 loop do page_opts = opts.dup page_opts.merge!(markers) page_opts[limit_param] = limit ? [limit - received, batch_size].min : batch_size page = list_request(page_opts) markers = next_markers(page) received += page_size(page) yield(page) return unless page.truncated? end end
def limit_param
def limit_param raise NotImplementedError end
def list_options(options)
def list_options(options) opts = {} opts[:bucket_name] = bucket.name if respond_to?(:bucket) opts end
def list_request(options)
def list_request(options) raise NotImplementedError end
def next_markers(page)
def next_markers(page) pagination_markers.inject({}) do |markers, marker| markers[marker] = page.send("next_#{marker}") markers end end
def page_size(resp)
def page_size(resp) (resp.respond_to?(:common_prefixes) and prefixes = resp.common_prefixes and prefixes.size) or 0 end
def pagination_markers
def pagination_markers [:key_marker] end