xml-purifier 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/xml-purifier.rb +68 -0
  2. metadata +55 -0
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # file: xml-purifier.rb
4
+
5
+ require 'rexml/document'
6
+ require 'json'
7
+ include REXML
8
+
9
+ class XMLPurifier
10
+
11
+ def initialize(options={})
12
+
13
+ # options for to: default, native, cdata, escaped
14
+ opt = {xml: '', from: 'json', to: 'native'}.merge(options)
15
+
16
+ @doc = Document.new(opt[:xml])
17
+
18
+ @doc.root.each_recursive do |elem|
19
+
20
+ if elem.text and elem.text.to_s[/^[\{\[][^\}\]]+[\}\]]$/] then
21
+
22
+ obj = JSON.parse(elem.text)
23
+ method('to_' + opt[:to].to_s.to_sym).call(elem, obj)
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ def to_xml()
30
+ @doc.to_s
31
+ end
32
+
33
+ private
34
+
35
+ def to_default(elem, obj)
36
+ node_xml = "<%s>%s</%s>" % [elem.name, scan_obj_to_xml(obj), elem.name]
37
+ elem.parent.add_element Document.new(node_xml).root
38
+ elem.parent.delete elem
39
+ end
40
+
41
+ alias to_native to_default
42
+
43
+ def to_cdata(elem, obj)
44
+ s = scan_obj_to_xml(obj)
45
+ elem.text = CData.new(s)
46
+ elem.add_element(CData.new(s))
47
+ end
48
+
49
+ def to_escaped(elem, obj) elem.text = scan_obj_to_xml(obj) end
50
+
51
+ def string_to_xml(x) x end
52
+
53
+ def hash_to_xml(x)
54
+ x.map do |k,v|
55
+ k.gsub!(/[^a-zA-Z0-9]/,'_')
56
+ "<%s>%s</%s>" % [k, scan_obj_to_xml(v), k]
57
+ end.join
58
+ end
59
+
60
+ def array_to_xml(x)
61
+ x.map {|v| "<element>%s</element>" % scan_obj_to_xml(v)}.join
62
+ end
63
+
64
+ def scan_obj_to_xml(o)
65
+ method("%s_to_xml" % o.class.to_s.downcase.to_sym).call(o)
66
+ end
67
+
68
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xml-purifier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors: []
7
+
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2011-01-26 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email:
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/xml-purifier.rb
26
+ has_rdoc: true
27
+ homepage:
28
+ licenses: []
29
+
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.3.5
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: xml-purifier
54
+ test_files: []
55
+