html
, body
, h1
, etc. que permiten
la escritura de los correspondientes tags HTML:
require 'markaby' mab = Markaby::Builder.new mab.html do head { title "Boats.com" } body do h1 "Boats.com has great deals" ul do li "$49 for a canoe" li "$39 for a raft" li "$29 for a huge boot that floats and can fit 5 people" end end end puts mab.to_sLos métodos, como
b
reciben como primer argumento una cadena que es la que hay que rodear entre
las marcas <b>
y </b>
.
También pueden recibir opcionalmente un segundo argumento que sea un hash
especificando los atributos asociados con el tag:
a "google", :href => "http://www.google.com", :name => "foo"que debería dar lugar a un texto parecido a este:
<a href = "http://www.google.com", name = "foo">google</a>Si en la llamada no se provee la cadena inicial, se deberá proveer un bloque. Dicho bloque construye la cadena que se interpolará entre las marcas. Así:
head { title "My wonderful home page" }
debería producir la cadena:
<head><title>My wonderful home page</title></head>La ejecución de este código
~/chapter8ReflectionandMetaprogramming$ cat -n html.rb 1 class HTML 2 attr_accessor :page 3 4 def initialize........ 5 .................... 6 .................... 7 end 8 9 def build_attr(attributes) 10 ........................................................... 11 ............................................................ 12 end 13 14 def ..............(tag, *args) 15 ............................................... 16 ............................................... 17 ............................................... 18 ............................................... 19 ............................................... 20 ............................................... 21 ............................................... 22 ............................................... 23 ............................................... 24 ............................................... 25 ............................................... 26 ............................................... 27 end 28 29 def to_s 30 .............................................. 31 end 32 end 33 34 if __FILE__ == $0 35 q= HTML.new { 36 html { 37 head(:dir => "chazam", :lang => "spanish") { title "My wonderful home page" } 38 body do 39 h1 "Welcome to my home page!", :class => "chuchu", :lang => "spanish" 40 b "My hobbies:" 41 ul do 42 li "Juggling" 43 li "Knitting" 44 li "Metaprogramming" 45 end #ul 46 end # body 47 } 48 } 49 puts q 50 enddebería producir una salida parecida a esta:
~/chapter8ReflectionandMetaprogramming$ ruby html.rb <html> <head dir = "chazam" lang = "spanish"> <title> My wonderful home page </title> </head> <body> <h1 class = "chuchu" lang = "spanish"> Welcome to my home page! </h1> <b> My hobbies: </b> <ul> <li> Juggling </li> <li> Knitting </li> <li> Metaprogramming </li> </ul> </body> </html>
Repase las secciones 15.4.5 y 15.12.1.
Puede consultar una solución en https://github.com/crguezl/dsl-quiz-simple