Skip to content

Commit 9056ba5

Browse files
committed
Merge pull request postrank-labs#45 from gregwebs/xml
more configurable to_xml, remove post-rankisms
2 parents a42af48 + 3ccecfd commit 9056ba5

File tree

1 file changed

+24
-17
lines changed
  • lib/goliath/rack/formatters

1 file changed

+24
-17
lines changed

‎lib/goliath/rack/formatters/xml.rb‎

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,63 +11,70 @@ module Formatters
1111
classXML
1212
includeGoliath::Rack::AsyncMiddleware
1313

14+
definitialize(app,opts={})
15+
@app=app
16+
@opts=opts
17+
@opts[:root] ||= 'results'
18+
@opts[:item] ||= 'item'
19+
end
20+
1421
defpost_process(env,status,headers,body)
15-
body=[to_xml(body,false)]ifxml_response?(headers)
22+
ifxml_response?(headers)
23+
body=[to_xml(body)]
24+
end
1625
[status,headers,body]
1726
end
1827

1928
defxml_response?(headers)
2029
headers['Content-Type'] =~ %r{^application/xml}
2130
end
2231

23-
defto_xml(content,fragment=true,root='results',item='item')
32+
defto_xml(content,fragment=false)
2433
xml_string=''
25-
xml_string+=xml_header(root)unlessfragment
34+
xml_string<<xml_header(@opts[:root])unlessfragment
2635

27-
xml_string+=case(content.class.to_s)
28-
when"Hash"thenhash_to_xml(content,root,item)
29-
when"Array"thenarray_to_xml(content,root,item)
36+
xml_string<<case(content.class.to_s)
37+
when"Hash"thenhash_to_xml(content)
38+
when"Array"thenarray_to_xml(content,@opts[:item])
3039
when"String"thenstring_to_xml(content)
3140
elsestring_to_xml(content)
3241
end
3342

34-
xml_string+=xml_footer(root)unlessfragment
43+
xml_string<<xml_footer(@opts[:root])unlessfragment
3544
xml_string
3645
end
3746

3847
defstring_to_xml(content)
3948
::Rack::Utils.escape_html(content.to_s)
4049
end
4150

42-
defhash_to_xml(content,root='results',item='item')
51+
defhash_to_xml(content)
4352
xml_string=''
4453
ifcontent.key?('meta')
45-
xml_string += xml_item('meta',content['meta'],root)
54+
xml_string += xml_item('meta',content['meta'])
4655
content.delete('meta')
4756
end
4857

49-
content.each_pair{ |key,value| xml_string+=xml_item(key,value,root)}
58+
content.each_pair{ |key,value| xml_string<<xml_item(key,value)}
5059
xml_string
5160
end
5261

53-
defarray_to_xml(content,root='results',item='item')
62+
defarray_to_xml(content,item='item')
5463
xml_string=''
55-
content.each{ |value| xml_string+=xml_item(item,value,root)}
64+
content.each{ |value| xml_string<<xml_item(item,value)}
5665
xml_string
5766
end
5867

5968
defxml_header(root)
60-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
61-
"<#{root} xmlns:opensearch='http://a9.com/-/spec/opensearch/1.1/'\n" +
62-
" xmlns:postrank='http://www.postrank.com/xsd/2007-11-30/postrank'>\n"
69+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<#{root}>"
6370
end
6471

6572
defxml_footer(root)
6673
"</#{root}>"
6774
end
6875

69-
defxml_item(key,value,root)
70-
"<#{key}>#{to_xml(value,true,root)}</#{key}>\n"
76+
defxml_item(key,value)
77+
"<#{key}>#{to_xml(value,true)}</#{key}>\n"
7178
end
7279
end
7380
end

0 commit comments

Comments
(0)