class SorbetProgress::Calculator

Computes the percentage stats for sigil metrics as well as other stats.

Attributes

coverage_metrics[R]
sigil_percentages[R]
total[R]

Public Class Methods

new(metrics) click to toggle source
# File lib/sorbet_progress/calculator.rb, line 13
def initialize(metrics)
  values = collect_values(sigil_breakdown_stats, metrics)
  @total = values.delete(:total_files)

  @sigil_percentages = values.map do |label, value|
    percentage = value * 1.0 / @total if @total && value
    {
      label: label,
      value: value,
      percentage: percentage
    }
  end

  @coverage_metrics = collect_values(coverage_stats, metrics)
end

Private Instance Methods

collect_values(requested_stats, metrics) click to toggle source
# File lib/sorbet_progress/calculator.rb, line 61
def collect_values(requested_stats, metrics)
  result = {}
  requested_stats.map do |label, name|
    result[label] = metrics[name]&.value
  end
  result
end
coverage_stats() click to toggle source
# File lib/sorbet_progress/calculator.rb, line 33
def coverage_stats
  {
    total_signatures: "ruby_typer.unknown..types.sig.count",
    total_methods: "ruby_typer.unknown..types.input.methods.total",
    total_classes: "ruby_typer.unknown..types.input.classes.total"
  }
end
sigil_breakdown_stats() click to toggle source
# File lib/sorbet_progress/calculator.rb, line 43
def sigil_breakdown_stats
  {
    total_files: "ruby_typer.unknown..types.input.files",
    sigil_ignore: "ruby_typer.unknown..types.input.files.sigil.ignore",
    sigil_false: "ruby_typer.unknown..types.input.files.sigil.false",
    sigil_true: "ruby_typer.unknown..types.input.files.sigil.true",
    sigil_strict: "ruby_typer.unknown..types.input.files.sigil.strict",
    sigil_strong: "ruby_typer.unknown..types.input.files.sigil.strong"
  }
end