112 lines
2.9 KiB
Ruby
112 lines
2.9 KiB
Ruby
|
drafts_dir = '_drafts'
|
||
|
posts_dir = '_posts'
|
||
|
|
||
|
# rake post['my new post']
|
||
|
desc 'create a new post with "rake post[\'post title\']"'
|
||
|
task :post, :title do |t, args|
|
||
|
if args.title
|
||
|
title = args.title
|
||
|
else
|
||
|
puts "Please try again. Remember to include the filename."
|
||
|
end
|
||
|
mkdir_p "#{posts_dir}"
|
||
|
filename = "#{posts_dir}/#{Time.now.strftime('%Y-%m-%d')}-#{title.downcase.gsub(/[^\w]+/, '-')}.md"
|
||
|
puts "Creating new post: #{filename}"
|
||
|
File.open(filename, "w") do |f|
|
||
|
f << <<-EOS.gsub(/^ /, '')
|
||
|
---
|
||
|
layout: post
|
||
|
title: #{title}
|
||
|
date: #{Time.new.strftime('%Y-%m-%d %H:%M')}
|
||
|
categories:
|
||
|
---
|
||
|
|
||
|
EOS
|
||
|
end
|
||
|
|
||
|
# Uncomment the line below if you want the post to automatically open in your default text editor
|
||
|
# system ("#{ENV['EDITOR']} #{filename}")
|
||
|
end
|
||
|
|
||
|
# usage: rake draft['my new draft']
|
||
|
desc 'create a new draft post with "rake draft[\'draft title\']"'
|
||
|
task :draft, :title do |t, args|
|
||
|
if args.title
|
||
|
title = args.title
|
||
|
else
|
||
|
puts "Please try again. Remember to include the filename."
|
||
|
end
|
||
|
mkdir_p "#{drafts_dir}"
|
||
|
filename = "#{drafts_dir}/#{title.downcase.gsub(/[^\w]+/, '-')}.md"
|
||
|
puts "Creating new draft: #{filename}"
|
||
|
File.open(filename, "w") do |f|
|
||
|
f << <<-EOS.gsub(/^ /, '')
|
||
|
---
|
||
|
layout: post
|
||
|
title: #{title}
|
||
|
date: #{Time.new.strftime('%Y-%m-%d %H:%M')}
|
||
|
categories:
|
||
|
---
|
||
|
|
||
|
EOS
|
||
|
end
|
||
|
|
||
|
# Uncomment the line below if you want the draft to automatically open in your default text editor
|
||
|
# system ("#{ENV['EDITOR']} #{filename}")
|
||
|
end
|
||
|
|
||
|
desc 'preview the site with drafts'
|
||
|
task :preview do
|
||
|
puts "## Generating site"
|
||
|
puts "## Stop with ^C ( <CTRL>+C )"
|
||
|
system "jekyll serve --watch --drafts"
|
||
|
end
|
||
|
|
||
|
# usage: rake undraft['my-file.md']
|
||
|
desc 'publish a draft post with "rake undraft[\'draft-file.md\']"'
|
||
|
task :undraft, :file do |t, args|
|
||
|
if args.file
|
||
|
file = args.file
|
||
|
else
|
||
|
abort "Please try again. Remember to include the file name."
|
||
|
end
|
||
|
|
||
|
draft = "#{drafts_dir}/#{file}"
|
||
|
unless File.exists?(draft)
|
||
|
abort "Draft does not exist: #{draft}"
|
||
|
end
|
||
|
|
||
|
today = Time.now
|
||
|
post = "#{posts_dir}/#{today.strftime('%Y-%m-%d')}-#{file}"
|
||
|
|
||
|
# Slurp file in to memory
|
||
|
lines = IO.readlines(draft).map do |line|
|
||
|
dateline = /\s*^date:\s*(.*)\s*$/.match(line)
|
||
|
if dateline
|
||
|
puts "Original date of draft: #{dateline[1]}"
|
||
|
"date: #{today.strftime('%Y-%m-%d %H:%M')}"
|
||
|
else
|
||
|
line
|
||
|
end
|
||
|
end
|
||
|
|
||
|
print "Moving #{draft} to #{post}..."
|
||
|
FileUtils.mv(draft, post)
|
||
|
puts "done."
|
||
|
|
||
|
print "Modifying date for post to '#{today.strftime('%Y-%m-%d %H:%M')}'..."
|
||
|
File.open(post, 'w') do |file|
|
||
|
file.puts lines
|
||
|
end
|
||
|
puts "done."
|
||
|
|
||
|
# Uncomment the line below if you want the post to automatically open in your default text editor
|
||
|
# system ("#{ENV['EDITOR']} #{post}")
|
||
|
end
|
||
|
|
||
|
desc 'list tasks'
|
||
|
task :list do
|
||
|
puts "Tasks: #{(Rake::Task.tasks - [Rake::Task[:list]]).join(', ')}"
|
||
|
puts "(type rake -T for more detail)\n\n"
|
||
|
end
|