Soy nuevo en Ruby y estoy un poco confundido por el comando grep en este bloque de código. Intento reunir todos los nombres de los buzones a través de Net :: IMAP y luego compararlos con un argumento de buzón. Es probable que el nombre del buzón solo incluya parte del argumento. Por ejemplo, alguien puede escribir "Enviado" como el buzón, pero muchas veces el nombre del buzón será "ENTRADA.Enviada".Ruby grep: buscando en una matriz partes de una cadena
class ExamineMail
def initialize(user, domain, pass, box)
@username = user
@domain = domain
@pass = pass
@mailbox = box
end
def login()
@imap = Net::IMAP.new("mail." + @domain)
@imap.authenticate('LOGIN', @username + "@" + @domain, @pass)
mailbox_array = @imap.list('','*').collect{ |mailbox| mailbox.name }
#mailbox_array.any? { |w| @mailbox =~ /#{w}/ }
mailbox_array.grep(/^@mailbox/)
end
end
Así que, primero probé .any? pero eso no me devuelve el nombre del buzón real. Con .grep
, puedo obtener una lista de los buzones cuando @mailbox = "INBOX"
. Sin embargo, cuando @mailbox = "Sent"
devuelve []
.
Aquí es un ejemplo de uno que funcione (usando "Entrada") y uno que no lo hace (usando "Enviado"):
#Get the list of inboxes
mailbox_array = imap.list('','*').collect{ |mailbox| mailbox.name }
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
#Search for mailboxes including "Sent"
>> mailbox_array.grep(/^Sent/)
=> []
#Search for "INBOX"
>> mailbox_array.grep(/^INBOX/)
=> ["INBOX", "INBOX.Trash", "INBOX.Sent", "INBOX.Sent Messages", "INBOX.Junk", "INBOX.Drafts", "INBOX.Deleted Messages", "INBOX.Apple Mail To Do"]
Creo que el problema es que "CORREO" está en el principio de las cadenas en la matriz, pero "Enviado" está en el medio y está después de un punto. No estoy seguro de cómo solucionarlo
Hmm esto también funciona. Supongo que no es necesario. – krapdagn
@krapdagn: yup, aunque esto también coincidiría con cadenas como "Sentiments" y "MySentMail", que es posible que desee o no. – maerics