class Lutaml::Qea::Validation::Formatters::JsonFormatter

puts formatter.format
formatter = JsonFormatter.new(result, pretty: true)
@example Pretty printed
puts formatter.format
formatter = JsonFormatter.new(result)
@example Basic usage
Formats validation results as JSON for machine consumption

def build_by_category

Returns:
  • (Hash) -
def build_by_category
  result.messages.group_by(&:category).transform_values do |msgs|
    {
      count: msgs.size,
      messages: msgs.map(&:message),
    }
  end
end

def build_by_severity

Returns:
  • (Hash) -
def build_by_severity
  {
    errors: format_severity_group(result.errors),
    warnings: format_severity_group(result.warnings),
    info: format_severity_group(result.info),
  }
end

def build_data

Returns:
  • (Hash) -
def build_data
  {
    summary: build_summary,
    messages: build_messages,
    by_category: build_by_category,
    by_severity: build_by_severity,
  }
end

def build_messages # rubocop:disable Metrics/MethodLength

Returns:
  • (Array) -
def build_messages # rubocop:disable Metrics/MethodLength
  result.messages.map do |message|
    {
      severity: message.severity,
      category: message.category,
      entity_type: message.entity_type,
      entity_id: message.entity_id,
      entity_name: message.entity_name,
      message: message.message,
      context: message.context,
    }
  end
end

def build_summary

Returns:
  • (Hash) -
def build_summary
  {
    valid: result.valid?,
    total_messages: result.messages.size,
    error_count: result.errors.size,
    warning_count: result.warnings.size,
    info_count: result.info.size,
  }
end

def format

Returns:
  • (String) - JSON output
def format
  data = build_data
  if options[:pretty]
    JSON.pretty_generate(data)
  else
    JSON.generate(data)
  end
end

def format_severity_group(messages) # rubocop:disable Metrics/MethodLength

Returns:
  • (Hash) -

Parameters:
  • messages (Array) --
def format_severity_group(messages) # rubocop:disable Metrics/MethodLength
  {
    count: messages.size,
    by_category: messages
      .group_by(&:category).transform_values do |msgs|
        msgs.map do |msg|
          {
            entity_type: msg.entity_type,
            entity_id: msg.entity_id,
            entity_name: msg.entity_name,
            message: msg.message,
          }
        end
      end,
  }
end

def initialize(result: nil, **options)

Options Hash: (**options)
  • :pretty (Boolean) -- Pretty print JSON (default: false)

Parameters:
  • options (Hash) -- Formatting options
  • result (ValidationResult) -- The validation result to format
def initialize(result: nil, **options)
  @result = result
  @options = {
    pretty: false,
  }.merge(options)
end