aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/sites-yml-generator.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/scripts/sites-yml-generator.rb b/scripts/sites-yml-generator.rb
new file mode 100644
index 0000000..2085179
--- /dev/null
+++ b/scripts/sites-yml-generator.rb
@@ -0,0 +1,46 @@
+#!/usr/bin/env ruby
+# Parses all *.md files in _site_listings/ and outputs a combined sites.yml.
+
+LISTINGS_DIR = "_site_listings"
+OUTPUT_FILE = "_data/sites.yml"
+
+def parse_frontmatter(filepath)
+ content = File.read(filepath, encoding: "utf-8")
+ blocks = content.scan(/---\s*\n(.*?)\n---/m)
+
+ meta = {}
+ blocks.each do |block,|
+ block.strip.each_line do |line|
+ key, value = line.strip.split(":", 2)
+ meta[key.strip] = value.strip if key && value
+ end
+ end
+
+ meta
+end
+
+def format_entry(meta)
+ lines = []
+ lines << "- domain: #{meta["pageurl"]}"
+ lines << " size: #{meta["size"]}" if meta["size"]
+ lines << " http: true" if meta["http"] == "true"
+ lines << " hof: true" if meta["hof"] == "true"
+ lines.join("\n")
+end
+
+files = Dir.glob(File.join(LISTINGS_DIR, "*.md")).sort
+
+abort "No .md files found in '#{LISTINGS_DIR}/'" if files.empty?
+
+entries = files.filter_map do |filepath|
+ meta = parse_frontmatter(filepath)
+ if meta.empty?
+ warn "Warning: no frontmatter found in #{filepath}"
+ nil
+ else
+ format_entry(meta)
+ end
+end
+
+File.write(OUTPUT_FILE, entries.join("\n\n") + "\n")
+puts "Written #{entries.size} entries to #{OUTPUT_FILE}" \ No newline at end of file