123456789_123456789_123456789_123456789_123456789_

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

Instance Attribute Summary

CommandData - Inherited

Instance Method Summary

Constructor Details

.new(data:) ⇒ RawData

[ GitHub ]

  
# File 'lib/net/imap/command_data.rb', line 198

def initialize(data:)
  data = split_parts(data)
  super
  validate
end

Instance Method Details

#extract_literal(data, binary:, bytesize:, non_sync:) (private)

[ GitHub ]

  
# File 'lib/net/imap/command_data.rb', line 229

def 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:)
end

#send_data(imap, tag)

[ GitHub ]

  
# File 'lib/net/imap/command_data.rb', line 204

def send_data(imap, tag) = data.each do _1.send_data(imap, tag) end

#split_parts(data) (private)

[ GitHub ]

  
# File 'lib/net/imap/command_data.rb', line 215

def split_parts(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 = NumValidator.coerce_number64 bytesize
    parts << RawText[text] unless text.empty?
    parts << extract_literal(data, binary:, bytesize:, non_sync:)
    data.bytesplice(0, bytesize, "")
  end
  parts << RawText[data] unless data.empty?
  parts
end

#validate

[ GitHub ]

  
# File 'lib/net/imap/command_data.rb', line 206

def validate
  return unless data.last in RawText(data: text)
  if text.rindex(/~?\{[1-9]\d*\+?\}\z/n)
    raise DataFormatError, "RawData cannot end with literal continuation"
  end
end