123456789_123456789_123456789_123456789_123456789_

Class: Gem::Package::DigestIO

Relationships & Source Files
Inherits: Object
Defined in: lib/rubygems/package/digest_io.rb

Overview

IO wrapper that creates digests of contents written to the IO it wraps.

Class Method Summary

Instance Attribute Summary

  • #digests readonly

    Collected digests for wrapped writes.

Instance Method Summary

  • #write(data)

    Writes data to the underlying IO and updates the digests.

Constructor Details

.new(io, digests) ⇒ DigestIO

Creates a new DigestIO instance. Using .wrap is recommended, see the .wrap documentation for documentation of io and #digests.

[ GitHub ]

  
# File 'lib/rubygems/package/digest_io.rb', line 46

def initialize(io, digests)
  @io = io
  @digests = digests
end

Class Method Details

.wrap(io, digests) {|digest_io| ... }

Wraps io and updates digest for each of the digest algorithms in the #digests Hash. Returns the digests hash. Example:

io = StringIO.new
digests = {
  'SHA1'   => OpenSSL::Digest.new('SHA1'),
  'SHA512' => OpenSSL::Digest.new('SHA512'),
}

Gem::Package::DigestIO.wrap io, digests do |digest_io|
  digest_io.write "hello"
end

digests['SHA1'].hexdigest   #=> "aaf4c61d[...]"
digests['SHA512'].hexdigest #=> "9b71d224[...]"

Yields:

  • (digest_io)
[ GitHub ]

  
# File 'lib/rubygems/package/digest_io.rb', line 34

def self.wrap(io, digests)
  digest_io = new io, digests

  yield digest_io

  digests
end

Instance Attribute Details

#digests (readonly)

Collected digests for wrapped writes.

{
  'SHA1'   => #<OpenSSL::Digest: [...]>,
  'SHA512' => #<OpenSSL::Digest: [...]>,
}
[ GitHub ]

  
# File 'lib/rubygems/package/digest_io.rb', line 15

attr_reader :digests

Instance Method Details

#write(data)

Writes data to the underlying IO and updates the digests

[ GitHub ]

  
# File 'lib/rubygems/package/digest_io.rb', line 54

def write(data)
  result = @io.write data

  @digests.each do |_, digest|
    digest << data
  end

  result
end