#!/usr/bin/env ruby # - requires the slugify gem - `gem install slugify` # - opens the file in your default editor as set by macOS, not your shell # - does nothing to keep the slug length reasonable, so your film review of # "The Assassination of Jesse James by the Coward Robert Ford" is going to have a long # slug. # - `hpost.rb --help` for help on the options require 'optparse' require 'slugify' require 'date' # Where's your post directory? site_posts_dir = "~/src/simple/content/posts/" options = {} OptionParser.new do |parser| parser.on("-t", "--title TITLE", "The title of the post in quotes.") do |o| options[:title] = o end parser.on("-T", "--tags TAGS", "Comma-delimited tags for the post, e.g. 'banana,apple,pear'") do |o| options[:tags] = o end parser.on("-h", "--help", "Get help.") do |o| puts parser exit(0) end end.parse! date = Date.today.strftime("%Y-%m-%d") long_date = Time.now.strftime("%Y-%m-%d %H:%M%p") slug = options[:title].slugify filename = date + '-' + slug + '.md' file_path = File.expand_path(site_posts_dir + filename) if File.exists?(file_path) abort("*** Error: #{file_path} already exists. Exiting.") end post = <<-POST --- Date: #{long_date} Tags: #{options[:tags]} --- # #{options[:title]} POST File.write(file_path, post) `open #{file_path}`