class LibXML::XML::Node

Public Instance Methods

===(node2) click to toggle source
# File lib/helpers/class_extensions.rb, line 75
def ===(node2)  
  self.simplification_of?(node2) and node2.simplification_of?(self)
end
elements() click to toggle source
# File lib/helpers/class_extensions.rb, line 111
def elements
  result = []
  each_element { |e| result << e }
  return result
end
first_diff(node2) click to toggle source

return first difference where self has something more than node2 does

# File lib/helpers/class_extensions.rb, line 83
def first_diff(node2)
  where = self.path.split('/').last
  
  return "#{where}> Equivalent node does not exist: #{self.name} != NOTHING" if node2.nil?
  return "#{where}> Names are different: #{self.name} != #{node2.name}" if (self.name != node2.name)
  self.attributes.each do |attr|
    return "#{where}> Attribute #{attr} have diffent values: #{attr.value} != #{node2.attributes[attr.name]}" unless node2.attributes[attr.name] == attr.value
  end

  elems1 = self.children
  elems2 = node2.children
  return "#{where}> elements have different number of children #{elems1.length} !=  #{elems2.length}" if (elems1.length != elems2.length)
  
  elems1.each_index do |i|
    raise "Nil for i=#{i}" if elems1[i].nil?
    if (elems1[i].node_type_name == 'text') 
      if elems2[i].nil? || (elems1[i].to_s) != (elems2[i].to_s)
        return  "#{where}> #{i+1}th text children are different: #{elems1[i].to_s} != #{elems2[i].to_s}"
      end
    elsif (elems1[i].node_type_name == 'element') 
      unless elems1[i].simplification_of?(elems2[i])
        return "#{where}/[#{i+1}]#{elems1[i].first_diff(elems2[i])}"
      end
    end
  end
    
  return nil
end
simplification_of?(node2) click to toggle source

if node2 contains at least all that I do

# File lib/helpers/class_extensions.rb, line 79
def simplification_of?(node2)
  first_diff(node2).nil?
end