Class: Ucode::Site::Generator
- Inherits:
-
Object
- Object
- Ucode::Site::Generator
- Includes:
- Repo::AtomicWrites
- Defined in:
- lib/ucode/site/generator.rb
Overview
Orchestrates ucode site init and ucode site build.
init copies the static Vitepress template from
lib/ucode/site/template/ into the user's site/. The template
ships package.json, theme, and the dynamic route components
(char/[codepoint].vue, block/[id].vue, plane/[n].md stub).
build regenerates only the parts that depend on the dataset:
- `.vitepress/config.ts` — ConfigEmitter
- `public/data/` — symlinked or copied from `output/`
- `public/data/index/search.json` — SearchIndex
- `plane/<n>.md` — one thin stub per plane (frontmatter)
- `block/<id>.md` — one thin stub per block
Static pages are markdown stubs that mount a Vue component; the component fetches the JSON for that plane/block at runtime. This keeps the generator cheap (~363 small writes) and the per-character route dynamic (~160k static pages is infeasible).
Idempotent: every write goes through AtomicWrites.
Instance Method Summary collapse
-
#build ⇒ Hash{Symbol => Integer}
Regenerate config + pages + search index from the current
output/tree. -
#init ⇒ Integer
Copy the static template into
site_root. -
#initialize(output_root:, site_root:) ⇒ Generator
constructor
A new instance of Generator.
Methods included from Repo::AtomicWrites
#same_content?, #to_pretty_json, #write_atomic
Constructor Details
#initialize(output_root:, site_root:) ⇒ Generator
Returns a new instance of Generator.
42 43 44 45 |
# File 'lib/ucode/site/generator.rb', line 42 def initialize(output_root:, site_root:) @output_root = Pathname.new(output_root) @site_root = Pathname.new(site_root) end |
Instance Method Details
#build ⇒ Hash{Symbol => Integer}
Regenerate config + pages + search index from the current
output/ tree. Returns a tally of what changed.
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/ucode/site/generator.rb', line 62 def build tally = { config: 0, pages: 0, search: 0, data_link: 0 } tally[:config] = config_emitter.emit ? 1 : 0 tally[:pages] = write_pages tally[:search] = search_index.build ? 1 : 0 tally[:data_link] = link_data_dir ? 1 : 0 tally end |
#init ⇒ Integer
Copy the static template into site_root. No-op for any file
that already exists with identical content (AtomicWrites).
50 51 52 53 54 55 56 57 |
# File 'lib/ucode/site/generator.rb', line 50 def init count = 0 each_template_file do |src, rel| dst = @site_root.join(rel) count += 1 if write_atomic(dst, src.read) end count end |