Para los que hablan Ruby (era Re: Syntax highlighting:)

Alvaro Herrera alvherre en alvh.no-ip.org
Vie Mayo 7 23:49:11 CLT 2010


Excerpts from Aldrin Martoq's message of vie may 07 21:58:44 -0400 2010:

> No soy experto en ruby, pero hasta donde ví algo mas simple podría ser:
> 
> --ini-----
> simple_rules = {}
> simple_rules["@lists.debian.org"] = "debian"
> simple_rules["linux en listas.inf.utfsm.cl"] = "linux"
> 
> simple_rules.each { |k, v|
>     puts k + " => " + v
> }
> -----fin--

Ya encontré cómo hacerlo, gracias a tu idea de usar YAML: en vez de tener
un array de hashs, es mejor tener un hash donde la dirección es la llave y
la etiqueta es el valor.  La desventaja obvia es que no puedo tener más
de una etiqueta asociada a una dirección, pero por el momento creo que
no lo necesito.

El código es así:

simple_rules = {
        "@lists.debian.org"                      => 'debian',
        "linux en listas.inf.utfsm.cl"              => 'linux',
        "pgsql-committers en postgresql.org"        => 'pg-commiters',
        "pgsql-hackers en postgresql.org"   => 'pg-hackers',
        "pgsql-general en postgresql.org"   => 'pg-general',
        "pgsql-es-ayuda en postgresql.org"  => 'pg-es-ayuda',
        "pgsql-es-fomento en postgresql.org"        => 'pg-es-fomento',
        "pgsql-security en postgresql.org"  => 'pg-SECURITY' 
}

message.recipients.each { |rcpt|
        simple_rules.each { |addr, label|
                if rcpt =~ /#{addr}/
                        message.add_label label
                        break
                end
        }
}

Hmm, se me ocurre que si llegara a necesitar más de un label para una
dirección, podría poner un array como valor, o sea
	"aldrin.martoq"		=> [ 'ex-dcc', 'linuxero-top' ],

y modificar el código del each para que invoque add_label una vez para cada
elemento del array (supongo que habrá un operador "type of")

Gracias por la inspiración!  Saludos a los gatos y gatas.
-- 


Más información sobre la lista de distribución Linux