On May 7, 2010, at 4:47 PM, Alvaro Herrera wrote:
> Yo estoy recién empezando a usar Sup desde hace un par de días ...
> ahora tratando de enseñarme un poco de Ruby para hacer hooks decentes.
> Por el momento tengo la siguiente pregunta:
> simple_rules = [
>        { "address" => "@lists.debian.org",             "label" => 'debian' },
>        { "address" => "[email protected]",     "label" => 'linux' },
>        { "address" => "[email protected]","label" => 
> 'pg-commiters' },
>        { "address" => "[email protected]",  "label" => 
> 'pg-hackers' },
>        { "address" => "[email protected]",  "label" => 
> 'pg-general' }
> ]       
> message.recipients.each { |rcpt|
>        simple_rules.each { |rule|
>                if rcpt =~ /#{rule["address"]}/
>                        message.add_label rule["label"]
>                        break
>                end     
>        }
> }
> ¿Alguien sabe cómo hacer eso de una forma un poco más elegante?  La verdad
> es que no me gusta mucho que simple_rules tenga que llevar el nombre de las
> etiquetas del hash en cada línea.
> En realidad me gustaría hacer algo así:
> simple_rules.each { |address, label|
>       if rcpt =~ /#{address}/
>               message.add_label label
>               break
>       end
> }
> 
> Pero no consigo ubicar cómo debo definir simple_rules para que esto funcione.
> ¿Ideas?


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["[email protected]"] = "linux"

simple_rules.each { |k, v|
    puts k + " => " + v
}
-----fin--



Lo cual es horrible.. yo lo haría con YAML. Ejemplo:

--ini-----
require 'yaml'
rules = <<-reglas

@lists.debian.org               : debian
[email protected]          : linux
[email protected] : pg-commiters

reglas

simple_rules = YAML::load(rules)

simple_rules.each { |k, v|
    puts "YAML: " + k + " => " + v
}
-----fin--

Tampoco es bonito, pero es mas facil escribir las reglas o mejor déjalas en un 
archivo aparte.

Lo bonito de YAML es que puedes describir cosas muy complejas de manera muy 
sencilla; lo malo es que ninguna implementación es UTF-8 lo cual es bastante 
idiota y me hizo volver a XML para un sistema... estos gringos. Por ejemplo:

--ini-----
require 'yaml'
rules = <<-XXX
@lists.debian.org:
  label: debian
[email protected]:
  label: linux
  listanegra:
    Aldrin Martoq [email protected]
    Álvaro Herrera [email protected]
[email protected]:
  label: pg-commiters
XXX

simple_rules = YAML::load(rules)

puts simple_rules.to_yaml

simple_rules.each { |k, v|
    puts "YAML: " + k + " => " + v.to_s
}
-----fin--



Aldrin Martoq
http://aldrin.martoq.cl/



Responder a