module GmailOauth::GmailImapExtensions

Public Class Methods

patch_net_imap_response_parser(klass = Net::IMAP::ResponseParser) click to toggle source
# File lib/gmail_oauth/gmail_imap_extensions.rb, line 8
def self.patch_net_imap_response_parser(klass = Net::IMAP::ResponseParser)
  klass.class_eval do
    def msg_att(n)
      match(Net::IMAP::ResponseParser::T_LPAR)
      attr = {}
      while true
        token = lookahead
        case token.symbol
        when Net::IMAP::ResponseParser::T_RPAR
          shift_token
          break
        when Net::IMAP::ResponseParser::T_SPACE
          shift_token
          token = lookahead
        end
        case token.value
        when /\A(?:ENVELOPE)\z/ni
          name, val = envelope_data
        when /\A(?:FLAGS)\z/ni
          name, val = flags_data
        when /\A(?:INTERNALDATE)\z/ni
          name, val = internaldate_data
        when /\A(?:RFC822(?:\.HEADER|\.TEXT)?)\z/ni
          name, val = rfc822_text
        when /\A(?:RFC822\.SIZE)\z/ni
          name, val = rfc822_size
        when /\A(?:BODY(?:STRUCTURE)?)\z/ni
          name, val = body_data
        when /\A(?:UID)\z/ni
          name, val = uid_data

          # Gmail extension additions.
          # Cargo-Cult code warning: # I have no idea why the regexp - just copying a pattern
        when /\A(?:X-GM-LABELS)\z/ni
          name, val = flags_data
        when /\A(?:X-GM-MSGID)\z/ni 
          name, val = uid_data
        when /\A(?:X-GM-THRID)\z/ni 
          name, val = uid_data
        else
          parse_error("unknown attribute `%s'", token.value)
        end
        attr[name] = val
      end
      return attr
    end
  end
end

Public Instance Methods

msg_att(n) click to toggle source
# File lib/gmail_oauth/gmail_imap_extensions.rb, line 10
def msg_att(n)
  match(Net::IMAP::ResponseParser::T_LPAR)
  attr = {}
  while true
    token = lookahead
    case token.symbol
    when Net::IMAP::ResponseParser::T_RPAR
      shift_token
      break
    when Net::IMAP::ResponseParser::T_SPACE
      shift_token
      token = lookahead
    end
    case token.value
    when /\A(?:ENVELOPE)\z/ni
      name, val = envelope_data
    when /\A(?:FLAGS)\z/ni
      name, val = flags_data
    when /\A(?:INTERNALDATE)\z/ni
      name, val = internaldate_data
    when /\A(?:RFC822(?:\.HEADER|\.TEXT)?)\z/ni
      name, val = rfc822_text
    when /\A(?:RFC822\.SIZE)\z/ni
      name, val = rfc822_size
    when /\A(?:BODY(?:STRUCTURE)?)\z/ni
      name, val = body_data
    when /\A(?:UID)\z/ni
      name, val = uid_data

      # Gmail extension additions.
      # Cargo-Cult code warning: # I have no idea why the regexp - just copying a pattern
    when /\A(?:X-GM-LABELS)\z/ni
      name, val = flags_data
    when /\A(?:X-GM-MSGID)\z/ni 
      name, val = uid_data
    when /\A(?:X-GM-THRID)\z/ni 
      name, val = uid_data
    else
      parse_error("unknown attribute `%s'", token.value)
    end
    attr[name] = val
  end
  return attr
end