class XmlHasher::Handler
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
# File lib/xmlhasher/handler.rb, line 8 def initialize(options = {}) @options = options @stack = [] @transform_cache = {} super() end
Public Instance Methods
attr(name, value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 24 def attr(name, value) return if ignore_attribute?(name) || @stack.empty? @stack.last.attributes[transform(name)] = escape(value) end
cdata(str)
click to toggle source
# File lib/xmlhasher/handler.rb, line 34 def cdata(str) @stack.last.text = escape(str) end
end_element(_name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 38 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 20 def start_element(name) @stack.push(Node.new(transform(name))) end
text(value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 30 def text(value) @stack.last.text = escape(value) end
to_hash()
click to toggle source
# File lib/xmlhasher/handler.rb, line 16 def to_hash @hash || {} end
Private Instance Methods
escape(value)
click to toggle source
# File lib/xmlhasher/handler.rb, line 61 def escape(value) CGI.unescapeHTML(value) end
ignore_attribute?(name)
click to toggle source
# File lib/xmlhasher/handler.rb, line 65 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 49 def transform(name) return @transform_cache[name] if @transform_cache[name] orig_name = name name = name.to_s.split(':').last if @options[:ignore_namespaces] name = Util.snakecase(name) if @options[:snakecase] name = @options[:string_keys] ? name.to_s : name.to_sym @transform_cache[orig_name] = name name end