Class: Canon::Diff::XmlSerializationFormatter

Inherits:
Object
  • Object
show all
Defined in:
lib/canon/diff/xml_serialization_formatter.rb

Overview

Detects and classifies XML serialization-level formatting differences.

Serialization formatting differences are ALWAYS non-normative (formatting-only) regardless of match options, because they are purely syntactic variations.

Constant Summary collapse

NI =
Canon::Comparison::NodeInspector

Class Method Summary collapse

Class Method Details

.blank?(value) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/canon/diff/xml_serialization_formatter.rb', line 42

def self.blank?(value)
  value.nil? || value.to_s.strip.empty?
end

.empty_text_content_serialization_diff?(diff_node) ⇒ Boolean

Returns:

  • (Boolean)


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

def self.empty_text_content_serialization_diff?(diff_node)
  return false unless diff_node.dimension == :text_content

  node1 = diff_node.node1
  node2 = diff_node.node2

  return false if node1.nil? && node2.nil?

  if node1.nil? || node2.nil?
    non_nil = node1 || node2
    return false unless text_node?(non_nil)

    text = extract_text_content(non_nil)
    return blank?(text)
  end

  return false unless text_node?(node1) && text_node?(node2)

  text1 = extract_text_content(node1)
  text2 = extract_text_content(node2)

  blank?(text1) && blank?(text2)
end

.extract_text_content(node) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/canon/diff/xml_serialization_formatter.rb', line 53

def self.extract_text_content(node)
  return nil if node.nil?

  NI.text_content(node)
rescue StandardError
  nil
end

.serialization_formatting?(diff_node) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
# File 'lib/canon/diff/xml_serialization_formatter.rb', line 12

def self.serialization_formatting?(diff_node)
  return false unless diff_node.dimension == :text_content

  empty_text_content_serialization_diff?(diff_node)
end

.text_node?(node) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
50
51
# File 'lib/canon/diff/xml_serialization_formatter.rb', line 46

def self.text_node?(node)
  return false if node.nil?
  return true if node.is_a?(String)

  NI.text_node?(node)
end