Class: Net::IMAP::RawData
Do not use. This class is for internal use only.
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
CommandData,
Data
|
|
|
Instance Chain:
self,
CommandData,
Data
|
|
| Inherits: |
Net::IMAP::CommandData
|
| Defined in: | lib/net/imap/command_data.rb |
Class Method Summary
- .new(data:) ⇒ RawData constructor
-
.split(data)
Splits an input
stringinto an array ofRawTextand Literal/Literal8. - .extract_literal(data, offset, bytesize, binary:, non_sync:) private
CommandData - Inherited
Instance Attribute Summary
CommandData - Inherited
Instance Method Summary
Constructor Details
.new(data:) ⇒ RawData
Class Method Details
.extract_literal(data, offset, bytesize, binary:, non_sync:) (private)
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 281
def self.extract_literal(data, offset, bytesize, binary:, non_sync:) remaining = data.bytesize - offset if remaining < bytesize raise DataFormatError, "Too few bytes in string for literal, " \ "expected: %s, remaining: %s" % [bytesize, remaining] end literal = data.byteslice(offset, bytesize) (binary ? Literal8 : Literal).new(data: literal, non_sync:) end
.split(data)
# File 'lib/net/imap/command_data.rb', line 265
def self.split(data) data = data.b # dups and ensures BINARY encoding parts = [] text_start = 0 while data.match(/(~)?\{(0|[1-9]\d*)(\+)?\}\r\n/n, text_start) text, binary, bytesize, non_sync, literal_start = data.byteslice(text_start...$~.begin(0)), !!$1, $2, !!$3, $~.end(0) bytesize = NumValidator.coerce_number64 bytesize text_start = literal_start + bytesize parts << RawText[text] unless text.empty? parts << extract_literal(data, literal_start, bytesize, binary:, non_sync:) end parts << RawText[data.byteslice(text_start..)] if text_start < data.bytesize parts end
Instance Method Details
#send_data(imap, tag)
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 252
def send_data(imap, tag) = data.each do _1.send_data(imap, tag) end
#validate
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 254
def validate return unless data.last in RawText(data: text) if text.rindex(/\{\d\?\}\z/n) raise DataFormatError, "RawData cannot end with literal continuation" end end