Hola RaiListeros,
Esta consulta és 100% ruby, siento si no es el sitio apropiado, pero
no he encontrado una lista en español sobre ruby solamente (al estilo
ruby-talk inglés)…
A lo que iba: Parte de mi proyecto consiste en generar ficheros de
configuración a base de templates (dhcpd.conf en este ejemplo). Tengo
pues dos ficheros ruby que me ayudan a generar el .conf:
gen_dhcp.rb (template a evaluar con erb), trozo de código:
(…)
<%= dhcp.generate_dynamic_zones %>
zone localdomain. {
primary <%= dhcp.dynamic_ranges[0].ip %>;
key rndc-key;
}
(…)
gen_dhcp_helper.rb (módulo con clases para separar la lógica del
template), ejemplo:
module GenDhcp
class Helper
attr_accessor :domain, :nameservers, :router, :dynamic_ranges
def initialize
dhcp = YAML::load(File.open('conf_dhcp.yml'))
# Shorter and YAML-independent attribute access
@domain = dhcp['domain']
@nameservers = dhcp['nameservers']
@router = dhcp['router']
(…)
Ahora el problema/duda:
Dada la siguiente función definida en gen_dhcp_helper.rb:
def generate_dynamic_zones
print <<-ZONES
zone <%= dhcp.domain %> {
primary <%= dhcp.dynamic_ranges[0].ip %>;
key rndc-key;
}
zone <%= dhcp.dynamic_ranges[0].arpa %> {
primary <%= dhcp.dynamic_ranges[0].ip %>;
key rndc-key;
}
ZONES
end
Y llamada desde el template, cómo puedo indicar a ERB que evalue “en
dos pasadas” el HERE document ? Mi idea es que generate_dynamic_zones
deberia “pastear” el document y a continuación expandir las variables
que tiene dentro (dhcp.domain, por ejemplo).
He estado leyendo Bindings, Proc & ri ERB pero no veo cómo
solucionar-lo… quizà me esté complicando/liando demasiado ?
Gracias !