diff --git a/lib/oga/xml/node_set.rb b/lib/oga/xml/node_set.rb index d50f193..385bd2a 100644 --- a/lib/oga/xml/node_set.rb +++ b/lib/oga/xml/node_set.rb @@ -188,7 +188,11 @@ module Oga # Removes a node from the current set only. # def delete(node) - @nodes.delete(node) + removed = @nodes.delete(node) + + remove_ownership(removed) if removed + + return removed end ## diff --git a/spec/oga/xml/node_set_spec.rb b/spec/oga/xml/node_set_spec.rb index 14f6ab9..7ec5aa0 100644 --- a/spec/oga/xml/node_set_spec.rb +++ b/spec/oga/xml/node_set_spec.rb @@ -223,8 +223,9 @@ describe Oga::XML::NodeSet do context '#delete' do before do - @n1 = Oga::XML::Element.new(:name => 'a') - @set = described_class.new([@n1]) + owner = Oga::XML::Element.new + @n1 = Oga::XML::Element.new + @set = described_class.new([@n1], owner) end example 'return the node when deleting it' do @@ -236,6 +237,12 @@ describe Oga::XML::NodeSet do @set.empty?.should == true end + + example 'remove ownership of the removed node' do + @set.delete(@n1) + + @n1.node_set.nil?.should == true + end end context '#attribute' do