From eb9d4fbcccb6cb1ceb3796d637e504a3ecf2f341 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Thu, 26 Jun 2014 09:37:54 +0200 Subject: [PATCH] Changed NodeSet to behave more like an Array. --- lib/oga/xml/node_set.rb | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/oga/xml/node_set.rb b/lib/oga/xml/node_set.rb index 40e1465..860e5ea 100644 --- a/lib/oga/xml/node_set.rb +++ b/lib/oga/xml/node_set.rb @@ -31,13 +31,21 @@ module Oga alias_method :<<, :push - def attr(name) - return @nodes.map { |node| node.attr(name) } + def unshift(node) + @nodes.unshift(node) + end + + def shift + return @noes.shift + end + + def pop + return @nodes.pop end def remove @nodes.each do |node| - node.node_set.delete!(node) + node.node_set.delete(node) node.node_set = nil end end @@ -45,10 +53,24 @@ module Oga ## # Removes a node from the current set only. # - def delete!(node) + def delete(node) @nodes.delete(node) end + def attribute(name) + values = [] + + @nodes.each do |node| + if node.node_type == :element + values << node.attribute(name) + end + end + + return values + end + + alias_method :attr, :attribute + def text text = '' @@ -59,7 +81,7 @@ module Oga return text end - def associate_nodes + def associate_nodes! @nodes.each_with_index do |node, index| node.node_set = self end