Sha256: 150c592c49fffc0ba95eff178199e6d011827dea18d9130a6c3065a1ba17d511
Contents?: true
Size: 1.18 KB
Versions: 1
Compression:
Stored size: 1.18 KB
Contents
require 'ox' require 'escape_utils' module XmlHasher class Handler < ::Ox::Sax def initialize(options = {}) @options = options @stack = [] end def to_hash @hash || {} end def start_element(name) @stack.push(Node.new(transform(name))) end def attr(name, value) unless ignore_attribute?(name) @stack.last.attributes[transform(name)] = escape(value) unless @stack.empty? end end def text(value) @stack.last.text = escape(value) end def cdata(str) @stack.last.text = escape(str) end def end_element(name) if @stack.size == 1 @hash = @stack.pop.to_hash else node = @stack.pop @stack.last.children << node end end private def transform(name) name = name.to_s.split(':').last if @options[:ignore_namespaces] name = Util.snakecase(name) if @options[:snakecase] name = name.to_sym unless @options[:string_keys] name end def escape(value) EscapeUtils.unescape_html(value) end def ignore_attribute?(name) @options[:ignore_namespaces] ? !name.to_s[/^(xmlns|xsi)/].nil? : false end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
xmlhasher-1.0.4 | lib/xmlhasher/handler.rb |