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