Class: Net::IMAP::ResponseReader
Do not use. This class is for internal use only.
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/net/imap/response_reader.rb |
Overview
Class Method Summary
- .new(client, sock) ⇒ ResponseReader constructor
Instance Attribute Summary
- #client readonly
- #buff readonly private
- #done? ⇒ Boolean readonly private
- #empty? ⇒ Boolean readonly private
- #literal_size readonly private
- #response_too_large? ⇒ Boolean readonly private
Instance Method Summary
- #read_response_buffer
- #bytes_read private
- #get_literal_size private
- #line_done? ⇒ Boolean private
- #max_response_remaining private
- #max_response_remaining! private
- #max_response_size private
- #min_response_remaining private
- #min_response_size private
- #read_limit(limit = nil) private
- #read_line private
- #read_literal private
Constructor Details
.new(client, sock) ⇒ ResponseReader
# File 'lib/net/imap/response_reader.rb', line 9
def initialize(client, sock) @client, @sock = client, sock end
Instance Attribute Details
#buff (readonly, private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 29
attr_reader :buff, :literal_size
#client (readonly)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 7
attr_reader :client
#done? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 33
def done? = line_done? && !get_literal_size
#empty? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 32
def empty? = buff.empty?
#literal_size (readonly, private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 29
attr_reader :buff, :literal_size
#response_too_large? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/net/imap/response_reader.rb', line 57
def response_too_large? = max_response_size &.< min_response_size
Instance Method Details
#bytes_read (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 31
def bytes_read = buff.bytesize
#get_literal_size (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 35
def get_literal_size = /\{(\d+)\}\r\n\z/n =~ buff && $1.to_i
#line_done? ⇒ Boolean
(private)
#max_response_remaining (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 56
def max_response_remaining = max_response_size &.- bytes_read
#max_response_remaining! (private)
# File 'lib/net/imap/response_reader.rb', line 64
def max_response_remaining! return max_response_remaining unless response_too_large? raise ResponseTooLargeError.new( max_response_size:, bytes_read:, literal_size:, ) end
#max_response_size (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 55
def max_response_size = client.max_response_size
#min_response_remaining (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 60
def min_response_remaining empty? ? 3 : done? ? 0 : (literal_size || 0) + 2 end
#min_response_size (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 58
def min_response_size = bytes_read + min_response_remaining
#read_limit(limit = nil) (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 51
def read_limit(limit = nil) [limit, max_response_remaining!].compact.min end
#read_line (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 37
def read_line buff << (@sock.gets(CRLF, read_limit) or throw :eof) max_response_remaining! unless line_done? end
#read_literal (private)
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 42
def read_literal # check before allocating memory for literal max_response_remaining! literal = String.new(capacity: literal_size) buff << (@sock.read(read_limit(literal_size), literal) or throw :eof) ensure @literal_size = nil end
#read_response_buffer
[ GitHub ]# File 'lib/net/imap/response_reader.rb', line 13
def read_response_buffer @buff = String.new catch :eof do while true read_line break unless (@literal_size = get_literal_size) read_literal end end buff ensure @buff = nil end