Forum: Rails-ES ERB: doble evaluación ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
D3ac444b32831e42e45534de7ba89b84?d=identicon&s=25 brainstorm (Guest)
on 2007-02-07 18:26
(Received via mailing list)
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 !
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2007-02-07 21:25
(Received via mailing list)
On 07/02/07, brainstorm <braincode@gmail.com> wrote:
> 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)...

Solo quería aclarar que dado el volumen de la lista y la naturaleza de
Rails, opino que podemos acoger perfectamente las consultas sobre
Ruby. Así que totalmente on-topic.

--
Manuel
http://linkja.com * un agregador de tendencias
http://simplelogica.net
http://simplelogica.net/logicola
D3ac444b32831e42e45534de7ba89b84?d=identicon&s=25 brainstorm (Guest)
on 2007-02-08 00:56
(Received via mailing list)
Hola,

Perfecto entonces :) Igualmente, ya lo he solucionado, ha sido
cuestión de leer un poquito más sobre ERB, probar con bindings y usar
las variables de instancia (@'s dentro de gen_dhcp_helper.rb), no la
instancia visible desde el template (gen_dhcp.rb):

    def generate_dynamic_zones

      template = ERB.new <<-ZONES
      zone <%= @domain %> {
            primary <%= @dynamic_ranges[0].ip %>;
            key rndc-key;
          }

      zone <%= @dynamic_ranges[0].arpa %> {
            primary <%= @dynamic_ranges[0].ip %>;
            key rndc-key;
          }
      ZONES

      template.result(binding) # <--- !!!
    end
  end

Saludos & gracias igualmente por leerme :-)

PD: Curiosa la clase "Binding"... me recuerda demasiado a "Proc"...
imho, veo que hacen prácticamente lo mismo. Alguien me puede explicar
el porqué de esta diferenciación ?
A6344ef7ef1e33e8efb34d99e6124490?d=identicon&s=25 Imobach González Sosa (Guest)
on 2007-02-08 09:18
(Received via mailing list)
El Wednesday 07 February 2007 17:24:31 brainstorm escribió:
> 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)...

Pues sí que la hay: http://ruby.org.es/pages/lista ;)

Un saludo.

--
Imobach González Sosa
correo-e: imobachgs en banot punto net
jabber id: osoh en jabberes punto org
web: http://www.banot.net/~osoh/
blog: http://devnull.blogs.banot.net/
This topic is locked and can not be replied to.