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_s
Los 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 end
deberí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