eRuby ( Embedded Ruby ) es un sistema de plantillas que incorpora Ruby en un documento de texto. A menudo se usa para incrustar código Ruby en un documento HTML , similar a ASP , JSP y PHP y otros lenguajes de scripting del lado del servidor. El sistema de plantillas de eRuby combina el código ruby y el texto sin formato para proporcionar control de flujo y sustitución de variables, lo que facilita su mantenimiento. [1]
Lanzamiento estable | 1.0.5 / 14 de diciembre de 2004 |
---|---|
Tipo | Motor de plantillas |
Licencia | GPL y LGPL |
El módulo Ver de Ruby on Rails es responsable de mostrar la respuesta o salida en un navegador. En su forma más simple, una vista puede ser un fragmento de código HTML que tiene algún contenido estático. Para la mayoría de las aplicaciones, es posible que tener contenido estático no sea suficiente. Muchas aplicaciones de Rails requerirán que el contenido dinámico creado por el controlador (método de acción) se muestre en su vista. Esto es posible mediante el uso de Embedded Ruby para generar plantillas que pueden contener contenido dinámico. Ruby incrustado permite incrustar código ruby en un documento de visualización. Este código se reemplaza con el valor adecuado como resultado de la ejecución del código en tiempo de ejecución. Pero, al tener la capacidad de incrustar código en un documento de vista, corremos el riesgo de salvar la clara separación presente en el marco MVC . Por lo tanto, es responsabilidad del desarrollador asegurarse de que haya una clara separación de responsabilidades entre los módulos de modelo, vista y controlador de su aplicación. [2]
Uso
eRuby permite incrustar código Ruby dentro de un par de delimitadores<%
y . Estos bloques de código incrustados se evalúan en el lugar (se reemplazan por el resultado de su evaluación). Además de crear páginas web, eRuby también se puede utilizar para crear documentos XML , fuentes RSS y otras formas de archivos de texto estructurados. eRuby genera dinámicamente archivos estáticos basados en plantillas . Estas funcionalidades de eRuby se pueden encontrar en la biblioteca ERB.%>
Los diferentes tipos de marcadores de etiquetas utilizados en las plantillas ERB son:
- Etiquetas de expresión
- Etiquetas de ejecución
- Etiquetas de comentario [3]
Etiquetas de expresión
<%= %>
: Esto indica que la etiqueta incluye una expresión. Dicha etiqueta comienza con un delimitador de etiqueta de apertura seguido de un símbolo igual a y termina con un delimitador de etiqueta final . Durante la renderización de la plantilla , este fragmento de código se sustituye por el resultado del código. Si el resultado evaluado no es una cadena, se convierte en una cadena antes de que se procese. Por ejemplo:
requiere 'erb' x = 500 plantilla = ERB . new ( "El valor de x es: <% = x%>" ) coloca la plantilla . resultado ( vinculante )
El texto resultante se ve así: El valor de x es: 500 [1]
Etiquetas de ejecución
<% %>
: El código incluido en dichas etiquetas se denomina scriptlet . El código de dicha etiqueta se ejecuta y su resultado se reemplaza en lugar del scriptlet. Dichas etiquetas deben tener una etiqueta coincidente para indicar el final de un bloque funcional. Por ejemplo: [4]<% end %>
< ul > <% 4 . veces hacen %> < li > elemento de lista li ><% end %> ul >
En el ejemplo anterior, el elemento de la lista de texto se imprime cuatro veces. El scriptlet no produce texto por sí solo, solo hace que la declaración adjunta se ejecute varias veces. La salida del código anterior:
- elemento de lista
- elemento de lista
- elemento de lista
- elemento de lista
Etiquetas de comentarios
<%# %>
: El contenido de las etiquetas de comentario no se representa en la salida. Dichas etiquetas comienzan con un delimitador de etiqueta abierto seguido de un símbolo de almohadilla y terminan con un delimitador de etiqueta final. A continuación se muestra un ejemplo de una etiqueta de comentario: [5]
<% # ruby code%>
Esto es lo mismo que un comentario en Ruby. Todo el código Ruby después del # se ignora y no genera nada.
Otras etiquetas
Otras cosas comunes en eRuby son simplemente comunes en Ruby, como la sustitución de cadenas con #{string_name}
, que es similar en lenguajes como Perl o PHP .
Las líneas nuevas en eRuby se pueden suprimir agregando un guión al comienzo del delimitador de la etiqueta final. Por ejemplo:
<% 2 . veces lo hacen -%> <% = @name %> <% end -%>
En la salida del código anterior, el valor del nombre se imprime dos veces en la misma línea. [1] [3]
Implementaciones
Hay varias implementaciones de eRuby, a saber:
- ERB
- erubis
- ascua
erb
erb es una implementación de eRuby escrita exclusivamente en el lenguaje de programación Ruby e incluida en la biblioteca estándar de Ruby . [2]
Se puede generar una plantilla ejecutando un fragmento de código escrito con el objeto ERB . Un ejemplo simple es el que se muestra a continuación:
require 'erb' x = 400 simple_template = "El valor de x es: es <% = x%>." renderizador = ERB . new ( simple_template ) pone salida = renderizador . resultado ( vinculante )
El resultado es el siguiente: El valor de x es: 400
Lo mismo se podría lograr utilizando el siguiente código que no hace uso de un objeto ERB:
x = 400 cadena = "El valor de x es: # { x } " pone cadena
Ambos fragmentos de código anteriores generan el mismo resultado. Pero, ¿qué sucede cuando intercambiamos las líneas 2 con la línea 3 en el primer fragmento de código y la línea 1 con la línea 2 en el segundo fragmento de código? El primer fragmento cambia al código que se muestra a continuación:
require 'erb' simple_template = "El valor de x es: es <% = x%>." x = 400 renderizador = ERB . new ( simple_template ) pone salida = renderizador . resultado ( vinculante )
Esto todavía genera la misma salida. es decir, el valor de x es: 400.
El segundo fragmento de código cambia al siguiente código:
cadena = "El valor de x es: # { x } " x = 400 pone cadena
El código anterior no se ejecutará. Esto se debe a que la primera línea no conoce el valor de x cuando se ejecuta. Por lo tanto, la razón principal para usar un objeto ERB es escribir plantillas con anticipación, vinculando variables y métodos que pueden no existir en el momento dado. La plantilla se procesa solo cuando se llama al resultado en el objeto ERB. Para obtener acceso a los métodos de instancia y la variable de instancia de un objeto, ERB hace uso de un objeto de enlace . El acceso a las variables y métodos de un objeto viene dado por el objeto de enlace privado que existe en cada clase ruby. Es fácil acceder a métodos y variables dentro del método de una clase . Pero para acceder a variables de una clase diferente, esa clase tendrá que exponer su objeto de enlace a través de un método público. El ejemplo es el que se muestra a continuación: [2] [4]
clase ERBejemplo attr_accessor : variable1 # usando bind para acceder a las variables de clase def render () renderer . resultado ( vinculante ) final def initialize ( variable1 ) @ variable1 = variable1 end # Exponer el método de enlace privado (). def get_binding binding () end endejemplo = ERBEjemplo . nuevo ( variable1 ) renderizador = ERB . new ( plantilla ) pone salida = renderizador . resultado ( ejemplo . get_binding )
Como podemos ver en el ejemplo anterior, estamos exponiendo el objeto vinculante de la clase ERBExample. Además, hemos utilizado el objeto de enlace para acceder a las variables y métodos de la clase dentro de uno de sus métodos.
nuevo () método de ERB
El nuevo método del objeto ERB toma dos parámetros más . El segundo parámetro especifica un nivel de seguridad. Al dar un número en el segundo parámetro (valor máximo = 4), se puede hacer que la plantilla se ejecute en un hilo diferente . El valor del número determina el nivel de seguridad. En el nivel de aislamiento máximo, a menos que el objeto de enlace esté marcado como de confianza, ERB no puede utilizarlo. El tercer parámetro especifica modificadores opcionales. Estos se pueden usar para controlar la adición de nuevas líneas a la salida. Por ejemplo, para asegurarnos de que ERB no genere nuevas líneas después de que finalice la etiqueta, podemos crear el objeto ERB como se muestra a continuación [3] [4]
renderizador = ERB . nuevo ( plantilla , 3 , '>' )
Para proporcionar solo el tercer parámetro e ignorar el segundo parámetro, utilice 0 como entrada para el segundo parámetro.
ERB tiene muchos otros métodos expuestos que pueden usarse para renderizar una plantilla. Para obtener una lista completa de las API expuestas por el objeto ERB, consulte la documentación de ERB que se proporciona en la sección de referencia.
Ejecutando ERB desde la línea de comandos
Como ya se ha explicado en los apartados anteriores, el erb se utiliza para generar plantillas. Suele utilizarse para generar páginas web u otros archivos de texto. Por lo general, necesita erb para enviar la salida al archivo deseado. Para lograr esto, podemos usar la capacidad de redirección proporcionada en la línea de comandos y redirigir la salida a un archivo en lugar de hacer que se imprima en la salida estándar. [3]
erb sample1.erb.txt> my_view.html.erb
En el ejemplo anterior, la salida se redirige al archivo my_view.html.erb .
La vinculación de bibliotecas de terceros se puede lograr haciendo uso de la opción -r y proporcionando el nombre de la biblioteca. Para recordar esta funcionalidad, uno puede recordar la palabra clave de Ruby require , que tiene la misma funcionalidad que la opción -r. El siguiente ejemplo utiliza la biblioteca IPAddr .
erb -r IPAddr sample1.txt.erb> my_view.html.erb
Como mencionamos acerca de los niveles de seguridad en la sección anterior, se puede especificar el nivel de seguridad como un argumento de línea de comando usando la opción -S [3]
erb -S 4 sample1.erb.txt> my_view.html.erb
erubis
erubis es una implementación de eRuby implementada en Ruby y también en Java . Según su página de inicio, se ejecuta más rápido que eRuby y ERb y tiene varias opciones útiles, incluidas etiquetas alternativas que permiten XML válido.
ascua
ember es una implementación Ruby pura de eRuby para Linux . Permite la depuración de plantillas de eRuby, mejora su capacidad de composición y proporciona potentes directivas taquigráficas de eRuby.
Comparación de diferentes etiquetas de implementación
La siguiente tabla compara las etiquetas disponibles en cada una de las implementaciones anteriores [4] [6] [7]
Etiqueta de expresión simple<%= %> | Etiqueta de ejecución simple<% %> | Etiqueta de comentario simple<%# %> | Posibilidad de configurar el patrón de etiquetas | Notación a mano corta para etiquetas | <%~ %> | <%+ %> | <%< > | <%| > |
---|---|---|---|---|---|---|---|---|
sí | sí | sí | No | Sí, se puede escribir como .<%xy%> %xy | No | No | No | No |
sí | sí | sí | Sí, puede cambiar el patrón de la etiqueta a cualquier cosa. ex - | Sí, ya que se pueden cambiar los patrones de las etiquetas. | No | No | No | No |
sí | sí | sí | No | Sí, se puede escribir como .<%xy%> %xy | El contenido de la etiqueta se evalúa como una plantilla de eRuby. | El contenido de la etiqueta se evalúa como código Ruby y se espera que sea una ruta que apunte a un archivo de plantilla Ruby que se lee, evalúa y renderiza. | Igual que, pero el contenido del archivo simplemente se representa en la salida.<%+ %> | Trata el código adjunto como un bloque de código Ruby y (si es necesario) agrega una do palabra clave al cuerpo de la etiqueta. |
Ver también
- mod_ruby
- Pasajero Phusion ( mod_rails )
- Haml
- RDoc
- Markaby
Referencias
- ↑ a b c Brown, Gregory (2009). Mejores prácticas de Ruby . O'Reilly. pp. 279 -281. ISBN 978-0596523008.
- ^ a b c S., Ruby; D., Thomas; Hansson D, Heinemeier (2011). Desarrollo Web ágil con Rails . Los programadores pragmáticos. pag. 35. ISBN 978-1-934356-54-8.
- ^ a b c d e Ellis, Stuart (1 de julio de 2016). "Introducción a la creación de plantillas ERB" . Consultado el 12 de septiembre de 2016 .
- ^ a b c d "ERB" . 23 de febrero de 2015 . Consultado el 12 de septiembre de 2016 .
- ^ "ERB - Ruby Templating" . 2016 . Consultado el 12 de septiembre de 2016 .
- ^ "brasa (1)" . 29 de junio de 2011 . Consultado el 12 de septiembre de 2016 .
- ^ "Erubis" . 2011 . Consultado el 12 de septiembre de 2016 .
enlaces externos
- Biblioteca ERB
- "Ruby y la web" , un capítulo de "La guía del programador pragmático"
- "web-mode.el" , modo principal de emacs para editar plantillas de eRuby
- http://apidock.com/ruby/ERB , ERB - Ruby Templating