From 9c661e1e60932cc9260dae1ca4a95e2106db176c Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Tue, 8 Jul 2014 23:25:09 +0200 Subject: [PATCH] Added XML::NodeSet#+ and XML::NodeSet#to_a --- lib/oga/xml/node_set.rb | 20 ++++++++++++++++++++ spec/oga/xml/node_set_spec.rb | 24 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/lib/oga/xml/node_set.rb b/lib/oga/xml/node_set.rb index 385bd2a..1603022 100644 --- a/lib/oga/xml/node_set.rb +++ b/lib/oga/xml/node_set.rb @@ -159,6 +159,26 @@ module Oga return @nodes[index] end + ## + # Converts the current set to an Array. + # + # @return [Array] + # + def to_a + return @nodes + end + + ## + # Creates a new set based on the current and the specified set. The newly + # created set does not inherit ownership rules of the current set. + # + # @param [Oga::XML::NodeSet] other + # @return [Oga::XML::NodeSet] + # + def +(other) + return self.class.new(to_a + other.to_a) + end + ## # Removes the current nodes from their owning set. The nodes are *not* # removed from the current set. diff --git a/spec/oga/xml/node_set_spec.rb b/spec/oga/xml/node_set_spec.rb index 7ec5aa0..d3d25c8 100644 --- a/spec/oga/xml/node_set_spec.rb +++ b/spec/oga/xml/node_set_spec.rb @@ -185,6 +185,30 @@ describe Oga::XML::NodeSet do end end + context '#to_a' do + before do + @n1 = Oga::XML::Element.new(:name => 'a') + @set = described_class.new([@n1]) + end + + example 'convert a set to an Array' do + @set.to_a.should == [@n1] + end + end + + context '#+' do + before do + @n1 = Oga::XML::Element.new(:name => 'a') + @n2 = Oga::XML::Element.new(:name => 'b') + @set1 = described_class.new([@n1]) + @set2 = described_class.new([@n2]) + end + + example 'merge two sets together' do + (@set1 + @set2).to_a.should == [@n1, @n2] + end + end + context '#remove' do before do owner = Oga::XML::Element.new