lib/helpers/class_extensions.rb in rspreadsheet-0.2.14 vs lib/helpers/class_extensions.rb in rspreadsheet-0.2.15
- old
+ new
@@ -1,105 +1,49 @@
-if RUBY_VERSION > '2.1'
+# @private
- module ClassExtensions
-
- refine Array do
- def sum(identity = 0, &block)
- if block_given?
- map(&block).sum(identity)
- else
- inject(0){ |sum, element| sum.to_f + element.to_f } || identity
- end
- end
+class LibXML::XML::Node
+ 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
-
- refine LibXML::XML::Node do
- def ==(node2)
- self.simplification_of?(node2) and node2.simplification_of?(self)
- 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 elements
- result = []
- each_element { |e| result << e }
- return result
- end
-
- end
- end # module ClassExtensions
-
-else # Monkeypatching
- class Array
- def sum(identity = 0, &block)
- if block_given?
- map(&block).sum(identity)
- else
- inject(0){ |sum, element| sum.to_f + element.to_f } || identity
+ 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
+end
- class LibXML::XML::Node
- def ==(node2)
- self.simplification_of?(node2) and node2.simplification_of?(self)
+class Array
+ def sum(identity = 0, &block)
+ if block_given?
+ map(&block).sum(identity)
+ else
+ inject(0){ |sum, element| sum.to_f + element.to_f } || identity
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 elements
- result = []
- each_element { |e| result << e }
- return result
- end
-
end
end
\ No newline at end of file