Skip to content

Instantly share code, notes, and snippets.

Last active January 6, 2017 13:32
  • Star 5 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save iamamused/4689219 to your computer and use it in GitHub Desktop.
Post publishing plugin for Jekyll
module Jekyll
class PostPublisher < Generator
safe false
def replace(filepath, regexp, *args, &block)
content =, *args, &block), 'wb') { |file| file.write(content) }
def generate(site)
@files = Dir["_publish/*"]
@files.each_with_index { |f,i|
now ="%Y-%m-%d %H:%M:%S")
replace(f, /^date: unpublished/mi) { |match| "date: \"" + now + "\"" }
now ="%Y-%m-%d")
File.rename(f, "_posts/#{now}-#{File.basename(f)}")
Copy link

Great little plugin, saved me from trying to write the same thing for myself (it wouldn't have been as elegant). I did fork and make a slight change - instead of looking for _publish and _posts in the current directory, I prepended the site.source variable. So:

@files = Dir["#{site.source}/_publish/*"]


File.rename(f, "#{site.source}/_posts/#{now}-#{File.basename(f)}")

I almost never execute my build command from within my site's source folder, instead providing the source as a command line variable. I tested and it still works now either way you generate.

Copy link

A great plugin, I've found it to be a life saver. I had a quick question though, is there any reason to use each_with_index over each in the generate method?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment