From 269ff0c5ee362e73182756df1c49016be3be1b16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Dec 2020 20:49:58 -0300 Subject: Rename: _plugins/lint-hook.rb -> _plugins/linter.rb --- _plugins/lint-hook.rb | 166 -------------------------------------------------- _plugins/linter.rb | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+), 166 deletions(-) delete mode 100644 _plugins/lint-hook.rb create mode 100644 _plugins/linter.rb (limited to '_plugins') diff --git a/_plugins/lint-hook.rb b/_plugins/lint-hook.rb deleted file mode 100644 index 634db80..0000000 --- a/_plugins/lint-hook.rb +++ /dev/null @@ -1,166 +0,0 @@ -require 'set' - -IGNORED_PAGES = Set['sitemap.xml'] -LANGS = Set['en', 'pt', 'fr', 'eo'] # jp zh es de -TRACKERS = '-a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' - -module Jekyll - class Linter < Generator - safe true - @@known_ids = Set[] - - def insert_id(name, document) - lang = document.data['lang'] - ref = document.data['ref'] - id = "#{name}:#{lang}:#{ref}" - if @@known_ids.include? id then - raise "Duplicate ID found: '#{id}'" - else - @@known_ids.add id - end - end - - def assert_unique_ids(site) - site.collections.each do |name, collection| - collection.docs.each do |document| - insert_id name, document - end - end - - site.pages.each do |page| - unless IGNORED_PAGES.include? page.path - insert_id 'page', page - end - end - end - - def slugify(s) - s.ljust(100) - .gsub(/[\W]+/, ' ') - .strip - .gsub(/\s\s+/, '-') - .downcase - .gsub(' ', '-') - .gsub('_', '-') - end - - def assert(value, message) - unless value - raise message - end - value - end - - def assert_field(document, field) - f = document.data[field] - raise "Undefined '#{field}' for #{document.path}" unless f - f - end - - COLLECTION_LAYOUTS = { - 'page' => 'page', - 'articles' => 'post', - 'pastebins' => 'post', - 'tils' => 'post', - 'slides' => 'slides', - 'podcasts' => 'cast', - 'screencasts' => 'cast' - } - - def assert_frontmatter_fields(site, name, document) - title = assert_field document, 'title' - lang = assert_field document, 'lang' - ref = assert_field document, 'ref' - layout = assert_field document, 'layout' - date = document.date.strftime('%Y-%m-%d') unless layout == 'page' - slug = layout == 'page' ? ref : assert_field(document, 'slug') - extension = name == 'slides' ? 'slides' : 'md' - - unless LANGS.member? lang - raise "Invalid lang '#{lang}' in #{document.path}" - end - - if COLLECTION_LAYOUTS[name] != layout - raise "Layout mismatch: expected '#{COLLECTION_LAYOUTS[name]}', got '#{layout}' for #{document.path}" - end - - if lang == 'en' - unless ['index', 'root', 'tils'].include? ref - if slugify(title) != ref then - raise "#{ref} isn't a slug of the title.\nref: '#{ref}'\ntitle slug: '#{slugify(title)}'" - p slugify(title) - end - end - end - - unless layout == 'page' then - path = "_#{name}/#{date}-#{slug}.#{extension}" - unless path == document.relative_path then - raise "date/filename mismatch:\ndate+slug: #{path}\nfilename: #{document.relative_path}" - end - - if lang == 'en' then - unless ref == slug then - raise "ref/slug mismatch:\nref: #{ref}\nslug: #{slug}" - end - end - end - - if name == 'podcasts' then - flac = "resources/podcasts/#{date}-#{slug}.flac" - unless File.exist? flac then - raise "Missing FLAC file '#{flac}'" - end - - file = "#{date}-#{slug}.ogg" - ogg = "resources/podcasts/#{date}-#{slug}.ogg" - unless File.exist? ogg then - puts "Missing '#{ogg}' file, generating..." - puts `ffmpeg -i #{flac} -ar 48000 -vn -c:a libvorbis -b:a 320k #{ogg}` - site.static_files << Jekyll::StaticFile.new(site, site.source, '', ogg) - end - - torrent = "#{ogg}.torrent" - unless File.exist? torrent then - webseed = "#{site.config['url']}/#{ogg}" - puts "Missing '#{torrent}' file, generating..." - puts `mktorrent #{TRACKERS} -f -v -d -c '#{document.content}' -n #{file} -w #{webseed} -o #{torrent} #{ogg}` - end - end - - if name == 'screencasts' then - mkv = "resources/screencasts/#{date}-#{slug}.mkv" - unless File.exist? mkv then - raise "Missing MKV file '#{mkv}'" - end - - torrent = "#{mkv}.torrent" - unless File.exist? torrent then - webseed = "#{site.config['url']}/#{mkv}" - file = "#{date}-#{slug}.mkv" - puts "Missing '#{torrent}' file, generating..." - puts `mktorrent #{TRACKERS} -f -v -d -c '#{document.content}' -n #{file} -w #{webseed} -o #{torrent} #{mkv}` - end - end - end - - def assert_frontmatter(site) - site.collections.each do |name, collection| - collection.docs.each do |document| - assert_frontmatter_fields site, name, document - end - end - - site.pages.each do |page| - unless IGNORED_PAGES.include? page.path - assert_frontmatter_fields site, 'page', page - end - end - end - - def generate(site) - assert_unique_ids(site) - assert_frontmatter(site) - end - end -end diff --git a/_plugins/linter.rb b/_plugins/linter.rb new file mode 100644 index 0000000..634db80 --- /dev/null +++ b/_plugins/linter.rb @@ -0,0 +1,166 @@ +require 'set' + +IGNORED_PAGES = Set['sitemap.xml'] +LANGS = Set['en', 'pt', 'fr', 'eo'] # jp zh es de +TRACKERS = '-a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' + +module Jekyll + class Linter < Generator + safe true + @@known_ids = Set[] + + def insert_id(name, document) + lang = document.data['lang'] + ref = document.data['ref'] + id = "#{name}:#{lang}:#{ref}" + if @@known_ids.include? id then + raise "Duplicate ID found: '#{id}'" + else + @@known_ids.add id + end + end + + def assert_unique_ids(site) + site.collections.each do |name, collection| + collection.docs.each do |document| + insert_id name, document + end + end + + site.pages.each do |page| + unless IGNORED_PAGES.include? page.path + insert_id 'page', page + end + end + end + + def slugify(s) + s.ljust(100) + .gsub(/[\W]+/, ' ') + .strip + .gsub(/\s\s+/, '-') + .downcase + .gsub(' ', '-') + .gsub('_', '-') + end + + def assert(value, message) + unless value + raise message + end + value + end + + def assert_field(document, field) + f = document.data[field] + raise "Undefined '#{field}' for #{document.path}" unless f + f + end + + COLLECTION_LAYOUTS = { + 'page' => 'page', + 'articles' => 'post', + 'pastebins' => 'post', + 'tils' => 'post', + 'slides' => 'slides', + 'podcasts' => 'cast', + 'screencasts' => 'cast' + } + + def assert_frontmatter_fields(site, name, document) + title = assert_field document, 'title' + lang = assert_field document, 'lang' + ref = assert_field document, 'ref' + layout = assert_field document, 'layout' + date = document.date.strftime('%Y-%m-%d') unless layout == 'page' + slug = layout == 'page' ? ref : assert_field(document, 'slug') + extension = name == 'slides' ? 'slides' : 'md' + + unless LANGS.member? lang + raise "Invalid lang '#{lang}' in #{document.path}" + end + + if COLLECTION_LAYOUTS[name] != layout + raise "Layout mismatch: expected '#{COLLECTION_LAYOUTS[name]}', got '#{layout}' for #{document.path}" + end + + if lang == 'en' + unless ['index', 'root', 'tils'].include? ref + if slugify(title) != ref then + raise "#{ref} isn't a slug of the title.\nref: '#{ref}'\ntitle slug: '#{slugify(title)}'" + p slugify(title) + end + end + end + + unless layout == 'page' then + path = "_#{name}/#{date}-#{slug}.#{extension}" + unless path == document.relative_path then + raise "date/filename mismatch:\ndate+slug: #{path}\nfilename: #{document.relative_path}" + end + + if lang == 'en' then + unless ref == slug then + raise "ref/slug mismatch:\nref: #{ref}\nslug: #{slug}" + end + end + end + + if name == 'podcasts' then + flac = "resources/podcasts/#{date}-#{slug}.flac" + unless File.exist? flac then + raise "Missing FLAC file '#{flac}'" + end + + file = "#{date}-#{slug}.ogg" + ogg = "resources/podcasts/#{date}-#{slug}.ogg" + unless File.exist? ogg then + puts "Missing '#{ogg}' file, generating..." + puts `ffmpeg -i #{flac} -ar 48000 -vn -c:a libvorbis -b:a 320k #{ogg}` + site.static_files << Jekyll::StaticFile.new(site, site.source, '', ogg) + end + + torrent = "#{ogg}.torrent" + unless File.exist? torrent then + webseed = "#{site.config['url']}/#{ogg}" + puts "Missing '#{torrent}' file, generating..." + puts `mktorrent #{TRACKERS} -f -v -d -c '#{document.content}' -n #{file} -w #{webseed} -o #{torrent} #{ogg}` + end + end + + if name == 'screencasts' then + mkv = "resources/screencasts/#{date}-#{slug}.mkv" + unless File.exist? mkv then + raise "Missing MKV file '#{mkv}'" + end + + torrent = "#{mkv}.torrent" + unless File.exist? torrent then + webseed = "#{site.config['url']}/#{mkv}" + file = "#{date}-#{slug}.mkv" + puts "Missing '#{torrent}' file, generating..." + puts `mktorrent #{TRACKERS} -f -v -d -c '#{document.content}' -n #{file} -w #{webseed} -o #{torrent} #{mkv}` + end + end + end + + def assert_frontmatter(site) + site.collections.each do |name, collection| + collection.docs.each do |document| + assert_frontmatter_fields site, name, document + end + end + + site.pages.each do |page| + unless IGNORED_PAGES.include? page.path + assert_frontmatter_fields site, 'page', page + end + end + end + + def generate(site) + assert_unique_ids(site) + assert_frontmatter(site) + end + end +end -- cgit v1.2.3