Class: Lutaml::Qea::Validation::ValidationResult

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/qea/validation/validation_result.rb

Overview

Collects and organizes validation messages, providing summary statistics and filtering capabilities

Examples:

Basic usage

result = ValidationResult.new
result.add_error(
  category: :missing_reference,
  entity_type: :association,
  entity_id: "123",
  entity_name: "MyAssociation",
  message: "member_end references non-existent class"
)
puts result.summary

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeValidationResult

Returns a new instance of ValidationResult.



22
23
24
# File 'lib/lutaml/qea/validation/validation_result.rb', line 22

def initialize
  @messages = []
end

Instance Attribute Details

#messagesObject (readonly)

Returns the value of attribute messages.



20
21
22
# File 'lib/lutaml/qea/validation/validation_result.rb', line 20

def messages
  @messages
end

Instance Method Details

#add_error(**args) ⇒ ValidationMessage

Adds an error message to the result

Parameters:

  • args (Hash)

    Message attributes (see ValidationMessage)

Returns:



30
31
32
# File 'lib/lutaml/qea/validation/validation_result.rb', line 30

def add_error(**args)
  add_message(severity: :error, **args)
end

#add_info(**args) ⇒ ValidationMessage

Adds an info message to the result

Parameters:

  • args (Hash)

    Message attributes (see ValidationMessage)

Returns:



46
47
48
# File 'lib/lutaml/qea/validation/validation_result.rb', line 46

def add_info(**args)
  add_message(severity: :info, **args)
end

#add_message(**args) ⇒ ValidationMessage

Adds a message to the result

Parameters:

  • args (Hash)

    Message attributes (see ValidationMessage)

Returns:



54
55
56
57
58
# File 'lib/lutaml/qea/validation/validation_result.rb', line 54

def add_message(**args)
  message = ValidationMessage.new(**args)
  @messages << message
  message
end

#add_warning(**args) ⇒ ValidationMessage

Adds a warning message to the result

Parameters:

  • args (Hash)

    Message attributes (see ValidationMessage)

Returns:



38
39
40
# File 'lib/lutaml/qea/validation/validation_result.rb', line 38

def add_warning(**args)
  add_message(severity: :warning, **args)
end

#by_category(category) ⇒ Array<ValidationMessage>

Returns messages filtered by category

Parameters:

  • category (Symbol)

    The category to filter by

Returns:



121
122
123
# File 'lib/lutaml/qea/validation/validation_result.rb', line 121

def by_category(category)
  @messages.select { |m| m.category == category }
end

#by_entity_type(entity_type) ⇒ Array<ValidationMessage>

Returns messages filtered by entity type

Parameters:

  • entity_type (Symbol)

    The entity type to filter by

Returns:



129
130
131
# File 'lib/lutaml/qea/validation/validation_result.rb', line 129

def by_entity_type(entity_type)
  @messages.select { |m| m.entity_type == entity_type }
end

#by_severity(severity) ⇒ Array<ValidationMessage>

Returns messages filtered by severity

Parameters:

  • severity (Symbol)

    The severity to filter by

Returns:



113
114
115
# File 'lib/lutaml/qea/validation/validation_result.rb', line 113

def by_severity(severity)
  @messages.select { |m| m.severity == severity }
end

#errorsArray<ValidationMessage>

Returns all error messages

Returns:



91
92
93
# File 'lib/lutaml/qea/validation/validation_result.rb', line 91

def errors
  @messages.select(&:error?)
end

#grouped_by_categoryHash<Symbol, Array<ValidationMessage>>

Returns messages grouped by category

Returns:



136
137
138
# File 'lib/lutaml/qea/validation/validation_result.rb', line 136

def grouped_by_category
  @messages.group_by(&:category)
end

#grouped_by_entity_typeHash<Symbol, Array<ValidationMessage>>

Returns messages grouped by entity type

Returns:



150
151
152
# File 'lib/lutaml/qea/validation/validation_result.rb', line 150

def grouped_by_entity_type
  @messages.group_by(&:entity_type)
end

#grouped_by_severityHash<Symbol, Array<ValidationMessage>>

Returns messages grouped by severity

Returns:



143
144
145
# File 'lib/lutaml/qea/validation/validation_result.rb', line 143

def grouped_by_severity
  @messages.group_by(&:severity)
end

#has_errors?Boolean

Checks if there are any error messages

Returns:

  • (Boolean)


63
64
65
# File 'lib/lutaml/qea/validation/validation_result.rb', line 63

def has_errors?
  @messages.any?(&:error?)
end

#has_info?Boolean

Checks if there are any info messages

Returns:

  • (Boolean)


77
78
79
# File 'lib/lutaml/qea/validation/validation_result.rb', line 77

def has_info?
  @messages.any?(&:info?)
end

#has_warnings?Boolean

Checks if there are any warning messages

Returns:

  • (Boolean)


70
71
72
# File 'lib/lutaml/qea/validation/validation_result.rb', line 70

def has_warnings?
  @messages.any?(&:warning?)
end

#infoArray<ValidationMessage>

Returns all info messages

Returns:



105
106
107
# File 'lib/lutaml/qea/validation/validation_result.rb', line 105

def info
  @messages.select(&:info?)
end

#merge!(other) ⇒ self

Merges another result into this one

Parameters:

Returns:

  • (self)


185
186
187
188
# File 'lib/lutaml/qea/validation/validation_result.rb', line 185

def merge!(other)
  @messages.concat(other.messages)
  self
end

#statisticsHash

Returns summary statistics

Returns:

  • (Hash)


157
158
159
160
161
162
163
164
165
166
# File 'lib/lutaml/qea/validation/validation_result.rb', line 157

def statistics
  {
    total: @messages.size,
    errors: errors.size,
    warnings: warnings.size,
    info: info.size,
    by_category: grouped_by_category.transform_values(&:size),
    by_entity_type: grouped_by_entity_type.transform_values(&:size),
  }
end

#summaryString

Returns a summary string

Returns:

  • (String)


171
172
173
174
175
176
177
178
179
# File 'lib/lutaml/qea/validation/validation_result.rb', line 171

def summary
  stats = statistics
  [
    "Total Messages: #{stats[:total]}",
    "Errors: #{stats[:errors]}",
    "Warnings: #{stats[:warnings]}",
    "Info: #{stats[:info]}",
  ].join("\n")
end

#to_hHash

Returns a hash representation

Returns:

  • (Hash)


193
194
195
196
197
198
# File 'lib/lutaml/qea/validation/validation_result.rb', line 193

def to_h
  {
    statistics: statistics,
    messages: @messages.map(&:to_h),
  }
end

#to_jsonString

Returns a JSON representation

Returns:

  • (String)


203
204
205
206
# File 'lib/lutaml/qea/validation/validation_result.rb', line 203

def to_json(*)
  require "json"
  to_h.to_json(*)
end

#valid?Boolean

Checks if the result is valid (no errors)

Returns:

  • (Boolean)


84
85
86
# File 'lib/lutaml/qea/validation/validation_result.rb', line 84

def valid?
  !has_errors?
end

#warningsArray<ValidationMessage>

Returns all warning messages

Returns:



98
99
100
# File 'lib/lutaml/qea/validation/validation_result.rb', line 98

def warnings
  @messages.select(&:warning?)
end