diff --git a/lib/oga/xml/element.rb b/lib/oga/xml/element.rb index 13cdb50..f4aebec 100644 --- a/lib/oga/xml/element.rb +++ b/lib/oga/xml/element.rb @@ -145,6 +145,19 @@ module Oga return nodes end + ## + # Sets the inner text of the current element to the given String. + # + # @param [String] text + # + def inner_text=(text) + children.each do |child| + child.remove if child.is_a?(Text) + end + + children << XML::Text.new(:text => text) + end + ## # Converts the element and its child elements to XML. # diff --git a/spec/oga/xml/element_spec.rb b/spec/oga/xml/element_spec.rb index 764e710..ae46c48 100644 --- a/spec/oga/xml/element_spec.rb +++ b/spec/oga/xml/element_spec.rb @@ -151,6 +151,24 @@ describe Oga::XML::Element do end end + context '#inner_text=' do + before do + @element = described_class.new + end + + example 'set the inner text of an element' do + @element.inner_text = 'foo' + @element.inner_text.should == 'foo' + end + + example 'remove existing text nodes before inserting new nodes' do + @element.children << Oga::XML::Text.new(:text => 'foo') + + @element.inner_text = 'bar' + @element.inner_text.should == 'bar' + end + end + context '#text_nodes' do before do @t1 = Oga::XML::Text.new(:text => 'Foo')