Skip to content

Instantly share code, notes, and snippets.

@greatghoul
Last active August 29, 2015 14:01
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save greatghoul/9b82ef0c0a4de0790b98 to your computer and use it in GitHub Desktop.
Migrate Acrylamid to Jekyll http://www.g2w.me/2014/05/no-zuo-no-die/
#!/usr/bin/env ruby
require 'yaml'
require 'fileutils'
SOURCE_DIR = '/home/greatghoul/Workspace/greatghoul/blog/content/'
TARGET_DIR = '/home/greatghoul/Workspace/blog/_posts/'
def parse_file(filename)
puts "Parsing #{filename}"
content = File.read(filename)
if match = content.match(/^(?<metadata>---\s*\n.*?\n?)^(---\s*$\n?)/m)
meta = YAML.load(match[:metadata])
body = match.post_match
return meta, body
end
end
def jekyll_filename(meta)
date = meta['date'].split(' ').first
slug = meta['slug'].strip
File.join(TARGET_DIR, "#{date}-#{slug}.md")
end
def jekyll_yaml_front_matter(meta)
header = ['---', 'layout: post', '---']
meta.each do |k, v|
case k
when 'title', 'date'
header.insert(-2, "#{k}: #{v}")
when 'tags'
header.insert(-2, "#{k}: #{v.join(' ')}")
end
end
header.join("\n")
end
def jekyll_content(meta, body)
jekyll_yaml_front_matter(meta) + "\n\n" + body
end
Dir["#{SOURCE_DIR}**/*.md"].each do |filename|
puts "Processing #{filename}"
meta, body = parse_file(filename)
target_filename = jekyll_filename(meta)
puts "Writing #{target_filename} ..."
File.write(target_filename, jekyll_content(meta, body))
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment