Module: HeapScope::Catalog

Defined in:
lib/heapscope/catalog.rb

Overview

Catalog of diagnostic codes for CLI / docs generation.

Class Method Summary collapse

Class Method Details

.codesObject



8
9
10
# File 'lib/heapscope/catalog.rb', line 8

def codes
  Diagnostics::CODES.values
end

.explain(code) ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
# File 'lib/heapscope/catalog.rb', line 17

def explain(code)
  meta = lookup(code)
  raise ArgumentError, "Unknown diagnostic code: #{code}" unless meta

  doc = encyclopedia_text(meta)
  return doc if doc

  fallback_text(meta)
end

.lookup(code) ⇒ Object



12
13
14
15
# File 'lib/heapscope/catalog.rb', line 12

def lookup(code)
  key = normalize_code(code)
  Diagnostics::CODES[key]
end

.normalize_code(code) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/heapscope/catalog.rb', line 38

def normalize_code(code)
  raw = code.to_s.strip.upcase
  return raw if Diagnostics::CODES.key?(raw)
  return "HS#{raw}" if raw.match?(/\A\d{3}\z/)
  return format("HS%03d", raw.to_i) if raw.match?(/\A\d+\z/)

  raw
end

.to_textObject



27
28
29
30
31
32
33
34
35
36
# File 'lib/heapscope/catalog.rb', line 27

def to_text
  lines = [Branding.compact_banner, "", "Diagnostic codes", ""]
  codes.each do |c|
    lines << "#{c[:id]}  #{c[:name]}"
    lines << "      #{c[:title]}  (default severity: #{c[:default_severity]})"
    lines << ""
  end
  lines << Branding.funding_lines.join("\n")
  lines.join("\n")
end