Class: Gem::Net::HTTPResponse::Inflater
- Inherits:
- 
      Object
      
        - Object
- Gem::Net::HTTPResponse::Inflater
 
- Defined in:
- lib/rubygems/vendor/net-http/lib/net/http/response.rb
Overview
Inflater is a wrapper around Gem::Net::BufferedIO that transparently inflates zlib and gzip streams.
Instance Method Summary collapse
- 
  
    
      #bytes_inflated  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    The number of bytes inflated, used to update the Content-Length of the response. 
- 
  
    
      #finish  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Finishes the inflate stream. 
- 
  
    
      #inflate_adapter(dest)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a Gem::Net::ReadAdapter that inflates each read chunk into dest.
- 
  
    
      #initialize(socket)  ⇒ Inflater 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Creates a new Inflater wrapping socket.
- 
  
    
      #read(clen, dest, ignore_eof = false)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Reads clenbytes from the socket, inflates them, then writes them todest.
- 
  
    
      #read_all(dest)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Reads the rest of the socket, inflates it, then writes it to dest.
Constructor Details
#initialize(socket) ⇒ Inflater
Creates a new Inflater wrapping socket
| 665 666 667 668 669 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 665 def initialize socket @socket = socket # zlib with automatic gzip detection @inflate = Zlib::Inflate.new(32 + Zlib::MAX_WBITS) end | 
Instance Method Details
#bytes_inflated ⇒ Object
The number of bytes inflated, used to update the Content-Length of the response.
| 683 684 685 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 683 def bytes_inflated @inflate.total_out end | 
#finish ⇒ Object
Finishes the inflate stream.
| 674 675 676 677 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 674 def finish return if @inflate.total_in == 0 @inflate.finish end | 
#inflate_adapter(dest) ⇒ Object
Returns a Gem::Net::ReadAdapter that inflates each read chunk into dest.
This allows a large response body to be inflated without storing the entire body in memory.
| 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 693 def inflate_adapter(dest) if dest.respond_to?(:set_encoding) dest.set_encoding(Encoding::ASCII_8BIT) elsif dest.respond_to?(:force_encoding) dest.force_encoding(Encoding::ASCII_8BIT) end block = proc do |compressed_chunk| @inflate.inflate(compressed_chunk) do |chunk| compressed_chunk.clear dest << chunk end end Gem::Net::ReadAdapter.new(block) end | 
#read(clen, dest, ignore_eof = false) ⇒ Object
Reads clen bytes from the socket, inflates them, then writes them to dest.  ignore_eof is passed down to Gem::Net::BufferedIO#read
Unlike Gem::Net::BufferedIO#read, this method returns more than clen bytes. At this time there is no way for a user of Gem::Net::HTTPResponse to read a specific number of bytes from the HTTP response body, so this internal API does not return the same number of bytes as were requested.
See bugs.ruby-lang.org/issues/6492 for further discussion.
| 720 721 722 723 724 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 720 def read clen, dest, ignore_eof = false temp_dest = inflate_adapter(dest) @socket.read clen, temp_dest, ignore_eof end | 
#read_all(dest) ⇒ Object
Reads the rest of the socket, inflates it, then writes it to dest.
| 729 730 731 732 733 | # File 'lib/rubygems/vendor/net-http/lib/net/http/response.rb', line 729 def read_all dest temp_dest = inflate_adapter(dest) @socket.read_all temp_dest end |