xml-purifier 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+