Para los que hablan Ruby (era Re: Syntax highlighting:)
Aldrin Martoq
amartoq en dcc.uchile.cl
Vie Mayo 7 21:58:44 CLT 2010
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" => "linux en listas.inf.utfsm.cl", "label" => 'linux' },
> { "address" => "pgsql-committers en postgresql.org","label" => 'pg-commiters' },
> { "address" => "pgsql-hackers en postgresql.org", "label" => 'pg-hackers' },
> { "address" => "pgsql-general en postgresql.org", "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["linux en listas.inf.utfsm.cl"] = "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
linux en listas.inf.utfsm : linux
pgsql-committers en postgresql.org : 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
linux en listas.inf.utfsm:
label: linux
listanegra:
Aldrin Martoq amartoq en dcc.uchile.cl
Álvaro Herrera alvherre en alvh.no-ip.org
pgsql-committers en postgresql.org:
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/
Más información sobre la lista de distribución Linux