Class: Gem::Package::DigestIO
- Inherits:
 - 
      Object
      
        
- Object
 - Gem::Package::DigestIO
 
 
- Defined in:
 - lib/rubygems/package/digest_io.rb
 
Overview
IO wrapper that creates digests of contents written to the IO it wraps.
Instance Attribute Summary collapse
- 
  
    
      #digests  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
Collected digests for wrapped writes.
 
Class Method Summary collapse
- 
  
    
      .wrap(io, digests) {|digest_io| ... } ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Wraps
ioand updates digest for each of the digest algorithms in thedigestsHash. 
Instance Method Summary collapse
- 
  
    
      #initialize(io, digests)  ⇒ DigestIO 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Creates a new DigestIO instance.
 - 
  
    
      #write(data)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Writes
datato the underlying IO and updates the digests. 
Constructor Details
#initialize(io, digests) ⇒ DigestIO
Creates a new DigestIO instance.  Using ::wrap is recommended, see the ::wrap documentation for documentation of io and digests.
      45 46 47 48  | 
    
      # File 'lib/rubygems/package/digest_io.rb', line 45 def initialize(io, digests) @io = io @digests = digests end  | 
  
Instance Attribute Details
#digests ⇒ Object (readonly)
Collected digests for wrapped writes.
{
  'SHA1'   => #<OpenSSL::Digest: [...]>,
  'SHA512' => #<OpenSSL::Digest: [...]>,
}
  
      14 15 16  | 
    
      # File 'lib/rubygems/package/digest_io.rb', line 14 def digests @digests end  | 
  
Class Method Details
.wrap(io, digests) {|digest_io| ... } ⇒ Object
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[...]"
  
      33 34 35 36 37 38 39  | 
    
      # File 'lib/rubygems/package/digest_io.rb', line 33 def self.wrap(io, digests) digest_io = new io, digests yield digest_io return digests end  | 
  
Instance Method Details
#write(data) ⇒ Object
Writes data to the underlying IO and updates the digests
      53 54 55 56 57 58 59 60 61  | 
    
      # File 'lib/rubygems/package/digest_io.rb', line 53 def write(data) result = @io.write data @digests.each do |_, digest| digest << data end result end  |