defmodule Reblog.Generator do
require Logger
@moduledoc """
Reblog generator to initialize new blogs.
"""
def generate(name) do
id = Recase.to_kebab(name)
try do
File.mkdir_p!(id)
File.mkdir!(Path.join(id, "posts"))
File.mkdir!(Path.join(id, "pages"))
# Generate blog base layout.
File.write!(Path.join(id, ".layout.eex"), """
<%= @title %>
<% if assigns[:description] do %>
<% else %>
<% end %>
<% if assigns[:canonical_url] do %>
<% end %>
<% if assigns[:previous_page_number] do %>
Previous
<% else %>
Previous
<% end %>
Page: <%= @current_page + 1 %> of <%= @total_pages %>
<% if assigns[:next_page_number] do %>
Next
<% else %>
Next
<% end %>
""")
# Generate example post.
{{year, month, day}, _} = :calendar.local_time()
padded_month = String.pad_leading(Integer.to_string(month), 2, "0")
padded_day = String.pad_leading(Integer.to_string(day), 2, "0")
example_posts_path =
Path.join([id, "posts", "#{year}-#{padded_month}-#{padded_day}_hello-world.md"])
File.write!(example_posts_path, """
---
title: Hello
author: Nate-Wilkins
---
Welcome to a newly generated
[reblog](https://github.com/Nate-Wilkins/reblog)!
Hello reblog user!
If you need any help or have any issues with reblog feel free to post
a new issue at
[reblog/issues](https://github.com/Nate-Wilkins/sblog/issues)!
""")
# Generate example page.
File.write!(Path.join([id, "pages", "about.eex"]), """
<%= @name %> >> INSERT ABOUT <<
""")
File.mkdir!(Path.join(id, "assets"))
# Generate favicon - same as root `favicon.svg`.
File.write!(Path.join([id, "assets", "favicon.svg"]), """
""")
File.write!(Path.join([id, "assets", "logo.svg"]), """
""")
# TODO: should have time output?
Logger.info(fn ->
[IO.ANSI.green(), "Initialized #{name} successfully.", IO.ANSI.reset()]
end)
{:ok}
rescue
e in RuntimeError -> {:error, e}
end
end
end