module CephStorage
  module StorageObject
    # Wrapper for RadosObjectEnumerator
    class RadosStorageObjectEnumerator < ::CephRuby::RadosObjectEnumerator
      extend CephStorage::StorageObject::RadosWrapper
      attr_accessor :pool_factory

      wrap_me :open, :close, :position, :seek, :next_rados_object

      def initialize(pool_factory)
        self.pool_factory = pool_factory
        super(nil)
        yield self if block_given?
      end

      def each
        return enum_for(:each) unless block_given?

        super do |rados_object|
          yield pool_factory.storage_object(rados_object.name)
        end
      end

      def log(message)
        CephStorage.log("RadosStorageObjectEnumerator #{message}")
      end
    end
  end
end