Ruby para novatos la gema de inclinación

Ruby es uno de los idiomas más populares utilizados en la web. Comenzamos una nueva sesión aquí en Nettuts + que te presentará a Ruby, así como a los excelentes marcos y herramientas que acompañan el desarrollo de Ruby. En este episodio, veremos Tilt, una gema envolvente todo incluido para los motores de plantillas Ruby..


Video Tutorial


Plantillas de renderizado

Si ha utilizado un sitio web de Ruby, como Rails y Sinatra, es probable que esté familiarizado con al menos uno de los muchos motores de plantillas disponibles: se trata de opciones como ERB o Haml. Cuando se utilizan en el contexto de un marco, es bastante simple? pero a veces parecen muy arraigadas; ¿Y si quieres usarlos en tu propio proyecto? ¿Hay una manera fácil de aprovechar su utilidad??

Entra en la gema Tilt. Diseñado como una "interfaz delgada sobre un montón de diferentes motores de plantillas de Ruby" Usted encontrará que hace que las plantillas de renderizado sean una brisa.

Por supuesto, lo instalaremos primero..

inclinación de instalación de gemas

Si no está usando RVM (que debería ser), es posible que tenga que ejecutar eso con privilegios de root (sudo).

Por supuesto, necesitarás comenzar con una plantilla para renderizar. Lo mantendremos simple:

    <%= title %>   

Algunos de los sitios de Tuts +

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

Guardar esto en tutsplus.erb. Tenga en cuenta que el texto del título se insertará con Ruby, así como la lista de sitios. Ahora, vamos a renderizarlo. Lo haremos de esta manera (guarda esto en using_tilt.rb):

requiere sitios 'tilt' = "Nettuts +" => "http://net.tutsplus.com", "Psdtuts +" => "http://psd.tutsplus.com", "Mobiletuts +" => "http: / /mobile.tutplus.com "," Audiotuts + "=>" http://audio.tutsplus.com " context = Object.new def context.title" Tuts + Sites "end template = Tilt :: ERBTemplate.new (" tutsplus .erb ") File.open" sites.html "," w "do | file | file.write template.render (contexto, sitios: sitios) final

Por supuesto, comenzamos requiriendo Tilt. Luego, creamos nuestros datos para la plantilla: un hash simple, así como un objeto de vainilla simple. Le damos al objeto una propiedad: título. Entonces, creamos nuestro objeto de plantilla. Aquí, estamos creando una instancia de la Inclinación :: ERBTemplate clase, pero el punto central de Tilt es que puede usar cualquier motor de plantilla que desee: por ejemplo, puede usar la Inclinación :: Plantilla Haml, Inclinación :: SassTempalte (para CSS), Inclinación :: Plantilla CoffeScript (para CoffeeScript), o el motor de plantillas compatible que desee Sin embargo, es importante tener en cuenta que Tilt es solo un envoltorio: debe requerir la biblioteca adecuada para el motor de plantillas que desea utilizar. Así que, si quieres usar un Inclinación :: Plantilla Haml caso, necesitas requiere 'haml'. Puede ver qué bibliotecas se requieren para cada motor de plantilla en el archivo Léame.

Finalmente, abrimos el archivo en el que queremos escribir la salida. El HTML (o CSS, o JavaScript, dependiendo de la plantilla y el motor que esté utilizando) se devolverá desde el hacer Método del objeto plantilla. los hacer El método toma dos parámetros. El primero es un objeto de contexto: todas las propiedades de este objeto estarán disponibles como variable dentro de la plantilla. Entonces nuestro contexto.título La propiedad estará disponible como solo título dentro de la plantilla. Si hay otros valores que desea pasar a la plantilla, páselos como parte del segundo parámetro, que es un hash.

Entonces, podemos ejecutar este script en la línea de comando:

ruby using_tilt.rb

Ahora, busque en el directorio en el que ha estado guardando estos archivos: debería ver una sites.html expediente. Si lo ves, verás que la plantilla se ha renderizado:


Ceder a más poder

Puedes hacer cosas más complejas con Tilt si pasas un bloque a la hacer método.

Tilt :: ERBTemplate ('other.erb'). Render (context, other_params) "some text"

Dentro de tu plantilla, puedes rendimiento a la cuadra todo lo que se devuelva desde el bloque se insertará en ese punto de la plantilla.

Aunque puede, por supuesto, simplemente pasar una cadena a través del bloque, como se muestra arriba, hay un caso de uso más interesante. Recientemente, he estado usando esta funcionalidad en Tilt para incrustar una plantilla específica de página dentro de un shell de todo el sitio. Por ejemplo, podemos dividir nuestra plantilla anterior en dos archivos:

layout.erb

    <%= title %>   <%= yield %>  

sitios.erb

Algunos de los sitios de Tuts +

    <% sites.each do |name, link| %>
  • "> <%= name %>
  • <% end %>

Ahora, para renderizar nuestra página, podemos hacer esto:

template = Tilt :: ERBTemplate.new ("layout.erb") File.open "sites.html" do | file | file.write template.render (contexto) Tilt :: ERBTemplate.new ("sites.erb"). render (Object.new, sites: sites) end

Tenga en cuenta que, como no teníamos ningún objeto que quisiéramos usar como objeto de contexto, simplemente pasamos un objeto Ruby en blanco puro. El HTML que se devuelve de la prestación de sitios.erb se insertará donde el rendimiento palabra clave es. Si ejecuta el código anterior, debería ver el mismo resultado que antes.


Usando otras opciones

Notará que, hasta ahora, hemos tenido que elegir el motor de plantilla que queremos utilizar al crear el objeto de subclase de inclinación. Sin embargo, Tilt reconocerá la extensión de archivo de la plantilla que se le pasa, por lo que no tiene que elegir explícitamente un motor: elegirá la correcta, según la extensión de archivo:

t = Tilt.new "tutsplus.erb" t.class # => Tilt :: ERBTemplate

Si, por alguna razón, sus plantillas tienen una extensión de archivo que no es lo que esperaría Tilt, puede registrarlo:

Tilt.register Tilt :: ERBTemplate, "some_extension" t = Tilt.new "my_template.some_extension" t.class # => Tilt :: ERBTemplate

Averiguar más

Hay algunas cosas más de nicho que Tilt puede hacer; Si está interesado en obtener más información, le recomiendo que consulte la documentación..