diff --git a/src/oca/ruby/OpenNebula/XMLUtils.rb b/src/oca/ruby/OpenNebula/XMLUtils.rb
index 44f1553a4b..bfe04fcc2d 100644
--- a/src/oca/ruby/OpenNebula/XMLUtils.rb
+++ b/src/oca/ruby/OpenNebula/XMLUtils.rb
@@ -101,6 +101,8 @@ module OpenNebula
end
end
+ # Delete an element from the xml
+ # xpath::_String_ xpath expression that selects the elemnts to be deleted
def delete_element(xpath)
if NOKOGIRI
@xml.xpath(xpath.to_s).remove
@@ -109,6 +111,15 @@ module OpenNebula
end
end
+ # Add a new element to the xml
+ # xpath::_String_ xpath xpression where the elemente will be added
+ # elems::_Hash_ Hash containing the pairs key-value to be included
+ # Examples:
+ # add_element('VM', 'NEW_ITEM' => 'NEW_VALUE')
+ # NEW_VALUE...
+ #
+ # add_element('VM/TEMPLATE', 'V1' => {'X1' => 'A1', 'Y2' => 'A2'})
+ # A1A2...
def add_element(xpath, elems)
elems.each { |key, value|
if value.instance_of?(Hash)
diff --git a/src/oca/ruby/test/XMLUtils_spec.rb b/src/oca/ruby/test/XMLUtils_spec.rb
new file mode 100644
index 0000000000..45b9fdacf6
--- /dev/null
+++ b/src/oca/ruby/test/XMLUtils_spec.rb
@@ -0,0 +1,100 @@
+$: << '..'
+
+
+require 'rexml/document'
+require 'OpenNebula/XMLUtils'
+
+ shared_examples "modifying XML" do
+ it "add a new element '.', 'B2' => 'bdos'" do
+ @xml_element.add_element('.', 'B2' => 'bdos')
+
+ @xml_element.to_xml(true).should eql "
+ auno
+ bdos
+"
+ end
+
+ it "add a new element '.', 'V2' => {'CC3' => 'cctres'}" do
+ @xml_element.add_element('.', 'V2' => {'CC3' => 'cctres'})
+
+ @xml_element.to_xml(true).should eql "
+ auno
+ bdos
+
+ cctres
+
+"
+ end
+
+ it "add a new element 'V2', 'DD4' => 'ddcuatro'" do
+ @xml_element.add_element('V2', 'DD4' => 'ddcuatro')
+
+ @xml_element.to_xml(true).should eql "
+ auno
+ bdos
+
+ cctres
+ ddcuatro
+
+"
+ end
+
+ it "delete an element 'B2'" do
+ @xml_element.delete_element('B2')
+
+ @xml_element.to_xml(true).should eql "
+ auno
+
+ cctres
+ ddcuatro
+
+"
+ end
+
+ it "delete an element 'V2/DD4'" do
+ @xml_element.delete_element('V2/DD4')
+
+ @xml_element.to_xml(true).should eql "
+ auno
+
+ cctres
+
+"
+ end
+
+ it "delete an element 'V2'" do
+ @xml_element.delete_element('V2')
+
+ @xml_element.to_xml(true).should eql "
+ auno
+"
+ end
+ end
+
+ describe 'NOKOGIRI' do
+ before :all do
+ xml = "auno"
+
+ bxml = OpenNebula::XMLElement.build_xml(xml, "V1")
+ bxml.class.to_s.should eql('Nokogiri::XML::NodeSet')
+
+ @xml_element = OpenNebula::XMLElement.new(bxml)
+ end
+
+ it_behaves_like "modifying XML"
+ end
+
+ describe 'REXML' do
+ before :all do
+ OpenNebula::NOKOGIRI = false
+
+ xml = "auno"
+
+ bxml = OpenNebula::XMLElement.build_xml(xml, "V1")
+ bxml.class.to_s.should eql('REXML::Element')
+
+ @xml_element = OpenNebula::XMLElement.new(bxml)
+ end
+
+ it_behaves_like "modifying XML"
+ end
\ No newline at end of file