Sha256: 1405370d7043a2122e93f556a9ed102aa946638fc5e3f3fd32b6cca2f6f29c30

Contents?: true

Size: 1.98 KB

Versions: 4

Compression:

Stored size: 1.98 KB

Contents

class LibXML::XML::Node
  def new_with_ns(namespace,name)
    ns = self.namespaces.find_by_prefix('table') || LibXML::XML::Namespace.new(self, 'table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0')
    self.namespaces.namespace = ns
    self
    LibXML::XML::Node.new('table-row')
  end
  def elements
    result = []
    each_element { |e| result << e }
    return result
  end
  # if node2 contains at least all that I do
  def simplification_of?(node2)
    first_diff(node2).nil?
  end
  # return first difference where self has something more than node2 does
  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.elements
    elems2 = node2.elements
#     return "#{where}> elements have different number of subelements #{elems1.length} !=  #{elems2.length}" if (elems1.length != elems2.length) 
    elems1.length.times do |i|
      if (elems1[i].node_type_name == 'text') && ((elems1[i].to_s != elems2[i].to_s) )
        return  "#{where}> #{i+1}th text subelements are different: #{elems1[i].to_s} != #{elems2[i].to_s}"
      elsif (elems1[i].node_type_name == 'element') && (!elems1[i].simplification_of?(elems2[i]))
        return "#{where}/[#{i+1}]#{elems1[i].first_diff(elems2[i])}"
      end
    end
       
    return nil
  end
  def equals?(node2)  #TODO redefine == with this
    self.simplification_of?(node2) and node2.simplification_of?(self)
  end
  def add_table_namesepace
    ns = self.namespaces.find_by_prefix('table') || LibXML::XML::Namespace.new(self, 'table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0')
    self.namespaces.namespace = ns
    self
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rspreadsheet-0.2.0 lib/class_extensions.rb
rspreadsheet-0.1.1 lib/class_extensions.rb
rspreadsheet-0.1.0 lib/class_extensions.rb
rspreadsheet-0.0.6 lib/class_extensions.rb