class Net::IMAP::ResponseParseError
Error raised when a response from the server is non-parsable.
NOTE: Parser attributes are provided for debugging and inspection only. Their names and semantics may change incompatibly in any release.
Attributes
The parser’s lex state
NOTE: This attribute is provided for debugging and inspection only. Its name and semantics may change incompatibly in any release.
Net::IMAP::ResponseParser, unless a custom parser produced the error.
The parser’s byte position in string when the error was raised.
NOTE: This attribute is provided for debugging and inspection only. Its name and semantics may change incompatibly in any release.
The full raw response string which was being parsed.
The last lexed token
May be nil when the parser has accepted the last token and peeked at the next byte without generating a token.
NOTE: This attribute is provided for debugging and inspection only. Its name and semantics may change incompatibly in any release.
Public Class Methods
Source
# File lib/net/imap/errors.rb, line 126 def initialize(message = "unspecified parse error", parser_class: Net::IMAP::ResponseParser, parser_state: nil, string: parser_state&.at(0), # see ParserUtils#parser_state lex_state: parser_state&.at(1), # see ParserUtils#parser_state pos: parser_state&.at(2), # see ParserUtils#parser_state token: parser_state&.at(3)) # see ParserUtils#parser_state @parser_class = parser_class @string = string @pos = pos @lex_state = lex_state @token = token super(message) end
Public Instance Methods
Source
# File lib/net/imap/errors.rb, line 197 def ==(other) return false if self.class != other.class methods = parser_methods other_methods = other.parser_methods message == other.message && methods == other_methods && string == other.string && pos == other.pos && lex_state == other.lex_state && token == other.token end
Returns true when all attributes are equal, except for #backtrace and #backtrace_locations which are replaced with parser_methods. This allows deserialized errors to be compared.
Source
# File lib/net/imap/errors.rb, line 155 def detailed_message(parser_state: Net::IMAP.debug, parser_backtrace: false, highlight: default_highlight_from_env, highlight_no_color: (ENV["NO_COLOR"] || "") != "", **) return super unless parser_state || parser_backtrace msg = super.dup esc = !highlight ? ESC_NO_HL : highlight_no_color ? ESC_NO_COLOR : ESC_COLORS hl = ->str { str % esc } val = ->str, val { hl[val.nil? ? "%{nil}%%p%{/nil}" : str] % val } if parser_state && (string || pos || lex_state || token) msg << hl["\n %{key}processed %{/key}: "] << val["%{val}%%p%{/val}", processed_string] msg << hl["\n %{key}remaining %{/key}: "] << val["%{alt}%%p%{/alt}", remaining_string] msg << hl["\n %{key}pos %{/key}: "] << val["%{val}%%p%{/val}", pos] msg << hl["\n %{key}lex_state %{/key}: "] << val["%{sym}%%p%{/sym}", lex_state] msg << hl["\n %{key}token %{/key}: "] << val[ "%{sym}%%<symbol>p%{/sym} => %{val}%%<value>p%{/val}", token&.to_h ] end if parser_backtrace normalized_parser_backtrace.each do |idx, path, lineno, label, base_label| msg << "\n %s: %s (%s:%d)" % [ hl["%{key}caller[%{/key}%{idx}%%2d%{/idx}%{key}]%{/key}"] % idx, hl["%{label}%%-30s%{/label}"] % base_label, File.basename(path, ".rb"), lineno ] end end msg rescue => error msg ||= super.dup msg << "\n BUG in %s#%s: %s" % [self.class, __method__, error.detailed_message] msg end
When parser_state is true, debug info about the parser state is included. Defaults to the value of Net::IMAP.debug.
When parser_backtrace is true, a simplified backtrace is included, containing only frames for methods in parser_class (since ruby 3.4) or which have “net/imap/response_parser” in the path (before ruby 3.4). Most parser method names are based on rules in the IMAP grammar.
When highlight is not explicitly set, highlights may be enabled automatically, based on TERM and FORCE_COLOR environment variables.
By default, highlight uses colors from the basic ANSI palette. When highlight_no_color is true or the NO_COLOR environment variable is not empty, only monochromatic highlights are used: bold, underline, etc.
Source
# File lib/net/imap/errors.rb, line 213 def parser_methods = normalized_parser_backtrace.map(&:last)
Lists the methods (from #backtrace_locations or #backtrace) called on parser_class (since ruby 3.4) or which have “net/imap/response_parser” in the path (before ruby 3.4). Most parser method names are based on rules in the IMAP grammar.
Source
# File lib/net/imap/errors.rb, line 191 def processed_string = string && pos && string[...pos]
Source
# File lib/net/imap/errors.rb, line 192 def remaining_string = string && pos && string[pos..]