Class: Lutaml::Xsd::ConflictReport

Inherits:
Model::Serializable
  • Object
show all
Defined in:
lib/lutaml/xsd/conflict_report.rb

Overview

Comprehensive conflict report with serialization to_hash, to_json, to_yaml provided by Lutaml::Model

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#package_sourcesObject

Runtime-only reference to PackageSource objects



43
44
45
# File 'lib/lutaml/xsd/conflict_report.rb', line 43

def package_sources
  @package_sources
end

Class Method Details

.from_conflicts(namespace_conflicts:, type_conflicts:, schema_conflicts:, package_sources:) ⇒ ConflictReport

Create from detection results

Parameters:

Returns:



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/lutaml/xsd/conflict_report.rb', line 51

def self.from_conflicts(namespace_conflicts:, type_conflicts:,
schema_conflicts:, package_sources:)
  report = new(
    namespace_conflicts: namespace_conflicts,
    type_conflicts: type_conflicts,
    schema_conflicts: schema_conflicts,
    package_info: package_sources.map do |ps|
      PackageInfo.from_source(ps)
    end,
  )
  report.package_sources = package_sources
  report
end

Instance Method Details

#all_conflictsObject



73
74
75
# File 'lib/lutaml/xsd/conflict_report.rb', line 73

def all_conflicts
  namespace_conflicts + type_conflicts + schema_conflicts
end

#has_conflicts?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/lutaml/xsd/conflict_report.rb', line 65

def has_conflicts?
  total_conflicts.positive?
end

#to_sString

Human-readable text format

Returns:

  • (String)


79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/lutaml/xsd/conflict_report.rb', line 79

def to_s
  return "✓ No conflicts detected" unless has_conflicts?

  lines = []
  lines << "❌ Package Merge Conflicts Detected"
  lines << ("=" * 80)
  lines << ""
  lines << "Total conflicts: #{total_conflicts}"
  lines << "  - Namespace conflicts: #{namespace_conflicts.size}"
  lines << "  - Type conflicts: #{type_conflicts.size}"
  lines << "  - Schema conflicts: #{schema_conflicts.size}"
  lines << ""

  if namespace_conflicts.any?
    lines << "Namespace URI Conflicts:"
    lines << ("-" * 80)
    namespace_conflicts.each_with_index do |conflict, idx|
      lines << "#{idx + 1}. #{conflict.detailed_description}"
      lines << ""
    end
  end

  if type_conflicts.any?
    lines << "Type Name Conflicts:"
    lines << ("-" * 80)
    type_conflicts.each_with_index do |conflict, idx|
      lines << "#{idx + 1}. #{conflict.detailed_description}"
      lines << ""
    end
  end

  if schema_conflicts.any?
    lines << "Schema File Conflicts:"
    lines << ("-" * 80)
    schema_conflicts.each_with_index do |conflict, idx|
      lines << "#{idx + 1}. #{conflict.detailed_description}"
      lines << ""
    end
  end

  lines << format_resolution_strategies
  lines << ""
  lines << format_resolution_guidance

  lines.join("\n")
end

#total_conflictsObject



69
70
71
# File 'lib/lutaml/xsd/conflict_report.rb', line 69

def total_conflicts
  namespace_conflicts.size + type_conflicts.size + schema_conflicts.size
end