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
-
(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
-
(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
-
(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
-
(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
-
(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
-
(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
-
(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)-
: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