-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathxml.rb
More file actions
45 lines (39 loc) · 672 Bytes
/
xml.rb
File metadata and controls
45 lines (39 loc) · 672 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class XmlDoc
def initialize(out=$stdout, &blk)
@out = out
instance_eval(&blk) if blk
end
def method_missing(name, attrs={}, &blk)
out "<#{name}#{self.class.attrs_to_xml attrs}>"
instance_eval(&blk) if blk
out "</#{name}>"
end
def _(text=nil)
out text
end
def out(text)
@out << "#{text}\n"
end
def self.attrs_to_xml(attrs)
attrs.inject('') do |xml, (k, v)|
xml << " #{k}='#{v}'"
end
end
end
xml = ''
XmlDoc.new(xml) {
html {
head {
title {
_ 'hello from ruby'
}
}
body {
_ 'hello'
div(:class => 'fuck') {
_ 'hi!'
}
}
}
}
puts xml