Ancora lato server è possibile inserire codice Ruby all'interno di pagine HTML e XML per creare contenuti dinamici, sfruttando il sistema di templating offerto da Ruby attraverso eRuby. Più in generale erb
, l'implementazione di eRuby distribuita con Ruby, fornisce un potente strumento di templating che permette di inserire delle sequenze di controllo in normale testo, non solo HTML e XML, sequenze poi eseguite come codice Ruby. Un esempio per chiarire i concetti:
require 'erb' template = ERB.new("Il mio nome è <%= name %>") name = "Nessuno" puts template.run
Dopo aver creato il template e assegnato un valore alla variabile name basta eseguire template.run
per ottenere il risultato voluto.
Il codice Ruby all'interno del testo va racchiuso all'interno dei delimitatori <%
e %>
. Esistono alcune varianti a questo sistema. Ad esempio <%=
e %>
, per inserire valori o semplici espressioni: mentre con i normali delimitatori il codice Ruby viene solo eseguito, in questo caso il risultato dell'esecuzione rimpiazzerà l'espressione. Ad esempio passando a erb le seguenti espressioni
<% n = 2008 %> "Siamo nel <% n %>" "Siamo nel <%= n %>"
nel primo caso otterremo solo "Siamo nel" poichè l'espressione tra i tag viene solo valutata, mentre nel secondo caso avremo la frase esatta "Siamo nel 2008" poiché avviene anche la sostituzione. Per avere il comportamento corretto con <%
e %>
bisogna impartire un comando come puts
.
"La risposta è <% puts n %>"
Un'altra coppia di delimitatori utilizzabili è <%#
e %>
che racchiude un commento che non è valutato da Ruby. C'è infine il simbolo di linea %
che è gestito come <%
e %>
.
Oltre che come libreria è possibile utilizzare questo tipo di templating attraverso degli utili tool come ad esempio erb, eruby ed erubis che implementano tutti e tre lo stesso sistema di embedding eRuby. eRuby ha le stesse funzioni di erb ma è scritto in C per offrire prestazioni migliori. Erubis è invece un'altra implementazione con performance migliori anche di eRuby ma soprattutto con delle utili caratteristiche proprie. L'aspetto importante di questi tool è che è possibile utilizzarli direttamente attraverso Apache con mod_ruby
.
Di seguito un esempio di pagina HTML con codice eRuby:
<% title = "eRuby test" footer = "powered by Ruby" %> <html> <head> <title><%= title %></title> </head> <body> <h1><%= 'e' + 'Ruby' %> test</h1> <p>Benvenuto su <%= ENV['HOSTNAME'] %>. <br>Saluti da <%= ENV['USER'] %>. <p>Qui sono le ore <%= Time.now.hour %>. <ul> <% 1.upto(5) do |i| %> <li>Elemento numero #<%= i %></li> <% end %> </ul> <hr><i><%= footer%></i> </body> </html>
Un elemento importante che si nota subito è la persistenza delle informazioni, ad esempio le variabili title
e footer
le abbiamo dichiarate nel primo tag e usate nel seguito dello script. Questo accade perché tutto il codice racchiuso tra i tag di eRuby è visto come un unico script che viene ricostruito ed eseguito da erb e famiglia. Lo stesso discorso vale per i metodi, le classi e tutto quanto rappresenta codice Ruby.
Un altro elemento di particolare interesse di eRuby è la possibilità di usare delle espressioni condizionali
<% if condizione %> La condizione è verificata <% end %>
che rappresentano un ulteriore elemento di dinamicità all'interno di una pagina Web.