Class: SvgConform::ExternalCheckers::Svgcheck::ReportGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/svg_conform/external_checkers/svgcheck/report_generator.rb

Overview

Generates ConformanceReport objects from svgcheck outputs

Instance Method Summary collapse

Constructor Details

#initialize(parser: nil) ⇒ ReportGenerator

Returns a new instance of ReportGenerator.



11
12
13
# File 'lib/svg_conform/external_checkers/svgcheck/report_generator.rb', line 11

def initialize(parser: nil)
  @parser = parser || Parser.new
end

Instance Method Details

#generate_comparative_reports(filename, check_outputs: nil, repair_outputs: nil) ⇒ Object

Generate reports for both check and repair modes



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/svg_conform/external_checkers/svgcheck/report_generator.rb', line 48

def generate_comparative_reports(filename, check_outputs: nil,
repair_outputs: nil)
  reports = {}

  if check_outputs
    reports[:check] = generate_from_content(
      filename,
      check_outputs[:stdout],
      check_outputs[:stderr],
      check_outputs[:exit_code],
    )
  end

  if repair_outputs
    reports[:repair] = generate_from_content(
      filename,
      repair_outputs[:stdout],
      repair_outputs[:stderr],
      repair_outputs[:exit_code],
    )
  end

  reports
end

#generate_from_content(filename, output_content, error_content = nil, exit_code = 0) ⇒ Object

Generate a report from svgcheck output content



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/svg_conform/external_checkers/svgcheck/report_generator.rb', line 27

def generate_from_content(filename, output_content,
error_content = nil, exit_code = 0)
  # svgcheck writes validation messages to stderr, not stdout
  # So we use error_content as the main content to parse
  main_content = error_content || output_content

  report = @parser.parse(main_content, nil, filename: filename)

  # Set additional metadata
  report.profile = "svg_1_2_rfc" # svgcheck is specifically for SVG 1.2 RFC
  report.version = detect_svgcheck_version

  # Use exit code to determine validity if needed
  if exit_code != 0 && report.valid
    report.valid = false
  end

  report
end

#generate_from_files(filename, output_file: nil, error_file: nil, code_file: nil) ⇒ Object

Generate a report from svgcheck output files



16
17
18
19
20
21
22
23
24
# File 'lib/svg_conform/external_checkers/svgcheck/report_generator.rb', line 16

def generate_from_files(filename, output_file: nil, error_file: nil,
code_file: nil)
  output_content = output_file && File.exist?(output_file) ? File.read(output_file) : nil
  error_content = error_file && File.exist?(error_file) ? File.read(error_file) : nil
  exit_code = code_file && File.exist?(code_file) ? File.read(code_file).strip.to_i : 0

  generate_from_content(filename, output_content, error_content,
                        exit_code)
end