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
|
|
|
Instance Chain:
self,
CommandData
|
|
| 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, binary:, bytesize:, non_sync:) private
CommandData - Inherited
| .[] | Alias for CommandData.new. |
| .new, | |
| .validate | following class definition goes beyond the basic |
Instance Attribute Summary
CommandData - Inherited
Instance Method Summary
CommandData - Inherited
Constructor Details
.new(data:) ⇒ RawData
# File 'lib/net/imap/command_data.rb', line 240
def initialize(data:) case data when String data = self.class.split(data) when Array unless data.all? { |part| RawText === part || Literal === part } raise TypeError, "expected String or Array[#{RawText} | #{Literal}]" end else raise TypeError, "expected String or Array[#{RawText} | #{Literal}]" end super validate end
Class Method Details
.extract_literal(data, binary:, bytesize:, non_sync:) (private)
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 286
def self.extract_literal(data, binary:, bytesize:, non_sync:) if data.bytesize < bytesize raise DataFormatError, "Too few bytes in string for literal, " \ "expected: %s, remaining: %s" % [bytesize, data.bytesize] end literal = data.byteslice(0, bytesize) (binary ? Literal8 : Literal).new(data: literal, non_sync: non_sync) end
.split(data)
# File 'lib/net/imap/command_data.rb', line 269
def self.split(data) data = data.b # dups and ensures BINARY encoding parts = [] while data.match(/(~)?\{(0|[1-9]\d*)(\+)?\}\r\n/n) text, binary, bytesize, non_sync, data = $`, !!$1, $2, !!$3, $' bytesize = Integer bytesize, 10 parts << RawText[text] unless text.empty? parts << extract_literal(data, binary: binary, bytesize: bytesize, non_sync: non_sync) data[0, bytesize] = "" end parts << RawText[data] unless data.empty? parts end
Instance Method Details
#send_data(imap, tag)
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 255
def send_data(imap, tag) data.each do _1.send_data(imap, tag) end end
#validate
[ GitHub ]# File 'lib/net/imap/command_data.rb', line 257
def validate return unless RawText === data.last text = data.last.data if text.rindex(/\{\d\?\}\z/n) raise DataFormatError, "RawData cannot end with literal continuation" end end