module Awis
  module Utils
    class XML
      def initialize(data)
        @data = data
      end

      def each_node(attributes_in_path = false)
        reader = Nokogiri::XML::Reader(@data)
        nodes = ['']
        
        reader.each do |node|
          if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
            if attributes_in_path && node.attributes.size > 0
              attributes = []

              node.attributes.sort.each do |name, value|
                attributes << "@#{name}=#{value}"
              end
              nodes << "#{node.name}/#{attributes.join('/')}"
            else
              nodes << node.name
            end
            path = nodes.join('/')

            yield node, path
          end

          nodes.pop if node.node_type == Nokogiri::XML::Reader::TYPE_END_ELEMENT || node.self_closing? # End tag
        end
      end
    end
  end
end