Class: Fontisan::Audit::Differ

Inherits:
Object
  • Object
show all
Defined in:
lib/fontisan/audit/differ.rb

Overview

Computes an Models::Audit::AuditDiff between two AuditReports.

Pure: no I/O, no font parsing. Both reports must already be built (Commands::AuditCompareCommand handles loading reports from disk or auditing fresh fonts before invoking the differ).

Comparison shape:

- Scalar fields: one FieldChange per differing field.
- Codepoint coverage: CodepointSetDiff built from the cmap range
lists (expanded to integer sets for set arithmetic, then
re-coalesced to ranges for output).
- Structural inventories (features, scripts, blocks, languages):
simple array set-diffs.

Constant Summary collapse

COMPARED_FIELDS =

Scalar AuditReport fields compared field-by-field. Excludes generated_at / source_sha256 / source_file (per-report identity), codepoints / codepoint_ranges (handled via CodepointSetDiff), and nested models (surfaced via structural add/remove lists).

%i[
  family_name subfamily_name full_name postscript_name version
  font_revision weight_class width_class italic bold panose
  total_codepoints total_glyphs ucd_version cldr_version
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(left_report, right_report) ⇒ Differ

Returns a new instance of Differ.



29
30
31
32
# File 'lib/fontisan/audit/differ.rb', line 29

def initialize(left_report, right_report)
  @left = left_report
  @right = right_report
end

Instance Method Details

#diffModels::Audit::AuditDiff



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/fontisan/audit/differ.rb', line 35

def diff
  Models::Audit::AuditDiff.new(
    left_source: @left.source_file,
    right_source: @right.source_file,
    field_changes: field_changes,
    codepoints: codepoint_diff,
    added_features: set_diff(features(@right), features(@left)),
    removed_features: set_diff(features(@left), features(@right)),
    added_scripts: set_diff(scripts(@right), scripts(@left)),
    removed_scripts: set_diff(scripts(@left), scripts(@right)),
    added_blocks: set_diff(blocks(@right), blocks(@left)),
    removed_blocks: set_diff(blocks(@left), blocks(@right)),
    added_languages: set_diff(languages(@right), languages(@left)),
    removed_languages: set_diff(languages(@left), languages(@right)),
  )
end