defmodule Mix.Tasks.GenPost do @moduledoc "gen_post: Generate a new blog post." @shortdoc "Generates a new blog post. Takes the title, and generates the rest." use Mix.Task @impl Mix.Task def run([title]) do dir = Application.app_dir(:jol, "priv/posts/blog/") slug = title |> String.downcase() |> String.replace(" ", "-") |> String.replace(~r/[^a-zA-Z0-9 -]/, "") pubdate = DateTime.now!("America/New_York") filename = "#{slug}.md" filepath = "#{dir}/#{filename}" if File.exists?(filepath) do IO.puts(:stderr, "Already exists: priv/posts/blog/#{filename}") IO.puts(:stderr, "Stop reusing blog titles!") else content = """ +++ slug = "#{slug}" title = "#{title}" date = #{DateTime.to_iso8601(pubdate)} draft = false [taxonomies] # An array of quoted strings tags = [] +++ """ File.write(filepath, content) IO.puts "Created: #{dir}#{filename}" end end end