class XmlHasher::Handler
Public Class Methods
new(options = {})
click to toggle source
# File lib/xmlhasher/handler.rb, line 6 def initialize(options = {}) @options = options @stack = [] end
Public Instance Methods
attr(name, value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 19 def attr(name, value) unless ignore_attribute?(name) @stack.last.attributes[transform(name)] = escape(value) unless @stack.empty? end end
end_element(name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 29 def end_element(name) if @stack.size == 1 @hash = @stack.pop.to_hash else node = @stack.pop @stack.last.children << node end end
start_element(name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 15 def start_element(name) @stack.push(Node.new(transform(name))) end
text(value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 25 def text(value) @stack.last.text = escape(value) end
to_hash()
click to toggle source
# File lib/xmlhasher/handler.rb, line 11 def to_hash @hash || {} end
Private Instance Methods
escape(value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 47 def escape(value) EscapeUtils.unescape_html(value) end
ignore_attribute?(name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 51 def ignore_attribute?(name) @options[:ignore_namespaces] ? !name.to_s[/^(xmlns|xsi)/].nil? : false end
transform(name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 40 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