Class: Ucode::Audit::Release::Emitter
- Inherits:
-
Object
- Object
- Ucode::Audit::Release::Emitter
- Includes:
- Repo::AtomicWrites
- Defined in:
- lib/ucode/audit/release/emitter.rb
Overview
Orchestrator that assembles the fontist.org release tree from a list of per-formula FormulaAudits (TODO 27).
Drives Emitter::FaceDirectory per formula to emit each face's
audit subtree under <release_root>/audit/<slug>/<face>/, then
writes the two top-level indices:
- `<release_root>/library.json` — formula + face card index
via {LibraryIndexBuilder}.
- `<release_root>/manifest.json` — release manifest via
{ManifestBuilder} (a {Models::Audit::ReleaseManifest}).
The universal-set directory is NOT copied by this emitter. The
CI collector is expected to pre-stage
<release_root>/universal_glyph_set/ (built separately by
ucode universal-set build). The manifest records whether that
directory is present.
Idempotent: every write goes through Repo::AtomicWrites (byte-compare, then rename). Re-running on unchanged input produces zero file writes on the second pass.
Defined Under Namespace
Classes: Result
Instance Method Summary collapse
- #emit(formulas:, unicode_version:, generated_at:, source_config_sha256: nil) ⇒ Result
-
#initialize(output_root:, universal_set_root: nil, face_directory: nil, verbose: false, with_glyphs: false, with_missing_glyph_pages: true) ⇒ Emitter
constructor
A new instance of Emitter.
Methods included from Repo::AtomicWrites
#same_content?, #to_pretty_json, #write_atomic
Constructor Details
#initialize(output_root:, universal_set_root: nil, face_directory: nil, verbose: false, with_glyphs: false, with_missing_glyph_pages: true) ⇒ Emitter
Returns a new instance of Emitter.
62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/ucode/audit/release/emitter.rb', line 62 def initialize(output_root:, universal_set_root: nil, face_directory: nil, verbose: false, with_glyphs: false, with_missing_glyph_pages: true) @output_root = output_root @universal_set_root = universal_set_root @verbose = verbose @with_glyphs = with_glyphs @with_missing_glyph_pages = with_missing_glyph_pages @face_directory = face_directory || build_default_face_directory @library_index_builder = LibraryIndexBuilder.new @manifest_builder = ManifestBuilder.new end |
Instance Method Details
#emit(formulas:, unicode_version:, generated_at:, source_config_sha256: nil) ⇒ Result
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ucode/audit/release/emitter.rb', line 79 def emit(formulas:, unicode_version:, generated_at:, source_config_sha256: nil) release_root = Ucode::Audit::Emitter::Paths.release_root(@output_root) formulas.each { |fa| emit_formula(release_root, fa) } manifest = @manifest_builder.build( formulas: formulas, release_root: release_root, unicode_version: unicode_version, ucode_version: Ucode::VERSION, generated_at: generated_at, source_config_sha256: source_config_sha256, universal_set_root: resolved_universal_set_root(release_root), ) library_written = write_library_index(release_root, formulas, generated_at) manifest_written = write_manifest(release_root, manifest) Result.new( release_root: release_root.to_s, formulas_total: formulas.size, faces_total: formulas.sum(&:faces_total), library_index_written: library_written, manifest_written: manifest_written, universal_set_available: manifest.universal_set.available, ) end |