class ImapServer class ClientHandler module Examine def handle_examine(msg:, user:) if !user msg.error_need_loggin elsif msg.args.size != 1 msg.respond ServerMessage.new("BAD requires a folder name", tag: msg.tag) else handle_examine_folder(msg: msg, user: user, maildir_name: msg.args.first) end end # TODO: factorize with SELECT private def handle_examine_folder(msg:, user:, maildir_name:) if (open_folder = folders[folder]) msg.respond ServerMessage.new("OK #{open_folder["ALL"].size} EXISTS", tag: msg.tag) msg.respond ServerMessage.new("OK #{open_folder["RECENTS"].size} RECENTS", tag: msg.tag) msg.respond ServerMessage.new("OK EXAMINE completed", tag: msg.tag) else msg.respond ServerMessage.new("NO #{folder} do not exists", tag: msg.tag) end end # sample def folders { "INBOX" => { "ALL" => [1, 2, 3, 5], "RECENTS" => [5], }, "Sent" => [4], } end end end end