#!/usr/bin/env ruby $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib]) require 'optparse' require 'jekyll' options = {} opts = OptionParser.new do |opts| opts.banner = DATA.read opts.on("--auto", "Auto-regenerate") do options[:auto] = true end end opts.parse! def clean(dest) FileUtils.rm_rf(dest) FileUtils.mkdir_p(dest) end def globs(source) Dir.chdir(source) do dirs = Dir['*'].select { |x| File.directory?(x) } dirs -= ['_site'] dirs = dirs.map { |x| "#{x}/**/*" } dirs += ['*'] end end source = nil destination = nil case ARGV.size when 0 source = '.' destination = File.join('.', '_site') when 1 source = '.' destination = ARGV[0] when 2 source = ARGV[0] destination = ARGV[1] else puts "Invalid options. Run `jekyll --help` for assistance." exit(1) end if options[:auto] puts "Auto-regenerating enabled: #{source} -> #{destination}" dw = DirectoryWatcher.new(source) dw.interval = 1 dw.glob = globs(source) dw.add_observer do |*args| t = Time.now.strftime("%Y-%m-%d %H:%M:%S") puts "[#{t}] regeneration: #{args.size} files changed" Jekyll.process(source, destination) end dw.start loop { sleep 1000 } else Jekyll.process(source, destination) end __END__ Jekyll is a blog-aware, static site generator. Basic Command Line Usage: jekyll # . -> ./_site jekyll # . -> jekyll # -> Options: