Class: LibXML::XML::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/class_extensions.rb

Instance Method Summary collapse

Instance Method Details

#add_table_namesepaceObject



43
44
45
46
47
# File 'lib/class_extensions.rb', line 43

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

#elementsObject



8
9
10
11
12
# File 'lib/class_extensions.rb', line 8

def elements
  result = []
  each_element { |e| result << e }
  return result
end

#equals?(node2) ⇒ Boolean

TODO redefine == with this

Returns:

  • (Boolean)


40
41
42
# File 'lib/class_extensions.rb', line 40

def equals?(node2)  #TODO redefine == with this
  self.simplification_of?(node2) and node2.simplification_of?(self)
end

#first_diff(node2) ⇒ Object

return first difference where self has something more than node2 does



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/class_extensions.rb', line 18

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

#new_with_ns(namespace, name) ⇒ Object



2
3
4
5
6
7
# File 'lib/class_extensions.rb', line 2

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

#simplification_of?(node2) ⇒ Boolean

if node2 contains at least all that I do

Returns:

  • (Boolean)


14
15
16
# File 'lib/class_extensions.rb', line 14

def simplification_of?(node2)
  first_diff(node2).nil?
end