def digest(filter = [])
      names = field_names(filter)
      digest = type.to_s

      names.zip(values_at(*names)).each do |key, value|
        digest << "|#{key}:#{value}"
      end

      digest = yield(digest, self) if block_given?
      digest
    end
def digest(filter = [])
      names = field_names(filter)
      digest = type.to_s

      names.zip(values_at(*names)).each do |key, value|
        digest << "|#{key}:#{value}"
      end

      digest = yield(digest, self) if block_given?
      digest
    end
Creates the entry's digest based on the passed-in filters.

 The digest contains the type and all key-value pairs based
 on the passed in filter.

 If a block is given, the computed digest will be passed to
 the block for post-processing (the entry itself will be passed
 as the second parameter).

 @see #field_names

 @param [<Symbol>] the field names to use
 @return [String] the digest string