Module: MetzScan::Commands::Scan::ProjectAnalyzerMetadata

Defined in:
lib/metz_scan/commands/scan/project_analyzer_metadata.rb

Constant Summary collapse

CATEGORY_METADATA_KEY =
"project_analyzer_category"

Class Method Summary collapse

Class Method Details

.analyzer_metadata(finding) ⇒ Object



38
39
40
41
42
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 38

def (finding)
  return {} unless finding.respond_to?(:project_analyzer_metadata)

  finding. || {}
end

.category_for(finding) ⇒ Object



16
17
18
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 16

def category_for(finding)
  (finding)[CATEGORY_METADATA_KEY]
end

.category_metadata_keysObject



14
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 14

def  = [CATEGORY_METADATA_KEY]

.offense_count(rule_id, offenses) ⇒ Object



68
69
70
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 68

def offense_count(rule_id, offenses)
  offenses.count { |offense| offense.fetch("cop_name") == rule_id }
end

.offense_metadata(finding) ⇒ Object



20
21
22
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 20

def (finding)
  (finding).merge((finding))
end

.optional_value(finding, name) ⇒ Object



72
73
74
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 72

def optional_value(finding, name)
  finding.public_send(name) if finding.respond_to?(name)
end

.priority_finding(findings) ⇒ Object



64
65
66
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 64

def priority_finding(findings)
  Array(findings).min_by { |finding| ProjectAnalyzerTriagePriority.sort_key((finding)) }
end

.rule_count_metadata(rule_id, findings, offenses) ⇒ Object



55
56
57
58
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 55

def (rule_id, findings, offenses)
  { "cop_name" => rule_id, "finding_count" => findings.size,
    "offense_count" => offense_count(rule_id, offenses) }
end

.rule_summaries(findings, offenses) ⇒ Object



44
45
46
47
48
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 44

def rule_summaries(findings, offenses)
  findings.group_by(&:rule_id).sort.map do |rule_id, rule_findings|
    rule_summary(rule_id, rule_findings, offenses)
  end
end

.rule_summary(rule_id, findings, offenses) ⇒ Object



50
51
52
53
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 50

def rule_summary(rule_id, findings, offenses)
  (findings).merge((rule_id, findings, offenses),
                                   "breakdowns" => ProjectAnalyzerBreakdown.new(findings).to_h)
end

.summary(findings, offenses) ⇒ Object



24
25
26
27
28
29
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 24

def summary(findings, offenses)
  rules = rule_summaries(findings, offenses)
  { "finding_count" => findings.size,
    "offense_count" => rules.sum { |rule| rule.fetch("offense_count") },
    "rules" => rules }
end

.summary_metadata(findings) ⇒ Object



60
61
62
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 60

def (findings)
  (priority_finding(findings)).slice("status", "confidence", "triage_severity")
end

.triage_metadata(finding) ⇒ Object



31
32
33
34
35
36
# File 'lib/metz_scan/commands/scan/project_analyzer_metadata.rb', line 31

def (finding)
  { "status" => optional_value(finding, :project_analyzer_status),
    "confidence" => optional_value(finding, :confidence),
    "triage_severity" => optional_value(finding, :triage_severity),
    "triage_summary" => optional_value(finding, :triage_summary) }.compact
end