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 %>
<%= @body %>
""") # Generate posts layout - pagination. File.write!(Path.absname(Path.join([id, "posts", ".layout.eex"])), """ <%= Enum.map(@pagination_posts, fn(post) -> %>

<%= post.title %>

<%= post.author %> <%= post.date %>

<%= post.excerpt %>
<% 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"]), """ re blog """) File.write!(Path.join([id, "assets", "logo.svg"]), """ re blog """) # 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