Sha256: faa8e4fa9a645f26a26f111f4c46a2051b5e26b49f7f7e445d95c8f70cf7d7a9

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

module Dag
  class ObjectCollection < Model
    include Enumerable

    def initialize(api, bucket_name)
      super(api)
      @bucket = bucket_name
    end

    def [](object_name)
      object_named(object_name)
    end

    def where(prefix: nil, delimiter: nil)
      @prefix = prefix
      @delimiter = delimiter

      self
    end

    def each
      options = {}
      if @prefix
        options = options.merge(prefix: @prefix)
      end

      if @delimiter
        options = options.merge(delimiter: @delimiter)
      end

      marker = nil
      truncated = false
      begin
        if marker.present?
          options = options.merge(marker: marker)
        end
        objects_result = @api.objects(@bucket, options)
        objects = objects_result.full_objects

        truncated = objects_result.truncated?
        next_marker = objects_result.next_marker
        if next_marker.nil?
          marker = objects.last['Key'][0] if objects.present?
        else
          marker = next_marker
        end

        objects.each do |object|
          yield object_opts(object)
        end
      end while truncated
    end

    private

    def object_named(object_name)
      Dag::Object.new(@api, @bucket, object_name.to_s)
    end

    def object_opts(object_opts)
      Dag::Object.new(@api, @bucket, object_opts["Key"][0], object_opts)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
iij-dag-client-1.0.2 lib/dag/client/model/object_collection.rb
iij-dag-client-1.0.1 lib/dag/client/model/object_collection.rb