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/