From 4f0efc8fb78e93d35a77811b4ee8fface856dc84 Mon Sep 17 00:00:00 2001 From: Mikko Ahlroth Date: Sun, 4 Nov 2018 00:23:49 +0200 Subject: [PATCH] Remove multi author mode --- config/config.exs | 4 -- lib/engine/crawler.ex | 31 ++----------- lib/engine/db.ex | 66 +-------------------------- lib/engine/slug_utils.ex | 27 ----------- lib/engine/utils.ex | 44 ------------------ lib/engine/worker.ex | 11 ----- lib/mebe_2.ex | 2 - lib/web/views/feeds/post_list.xml.eex | 4 +- mix.exs | 1 - mix.lock | 1 - 10 files changed, 5 insertions(+), 186 deletions(-) delete mode 100644 lib/engine/slug_utils.ex delete mode 100644 lib/engine/utils.ex diff --git a/config/config.exs b/config/config.exs index 79aac7f..fa0ae26 100644 --- a/config/config.exs +++ b/config/config.exs @@ -32,10 +32,6 @@ config :mebe_2, blog_author: "Author McAuthor", # Absolute URL to the site, including protocol, no trailing slash absolute_url: "http://localhost:2124", - # Set to true to show author header from posts, if available (blog_author will be used as default) - multi_author_mode: false, - # If multi author mode is on, use blog_author as default author (if this is false, no author will be set if post has no author header) - use_default_author: true, # Default timezone to use for posts with time data time_default_tz: "Europe/Helsinki", # Force "Read moreā€¦" text to display even if there is no more content diff --git a/lib/engine/crawler.ex b/lib/engine/crawler.ex index c9e4d56..385e89f 100644 --- a/lib/engine/crawler.ex +++ b/lib/engine/crawler.ex @@ -5,7 +5,7 @@ defmodule Mebe2.Engine.Crawler do """ require Logger - alias Mebe2.Engine.{Parser, Utils, SlugUtils} + alias Mebe2.Engine.Parser alias Mebe2.Engine.Models.{Page, Post} def crawl(path) do @@ -51,9 +51,7 @@ defmodule Mebe2.Engine.Crawler do posts: [], years: %{}, months: %{}, - tags: %{}, - authors: %{}, - author_names: %{} + tags: %{} }, fn pagedata, acc -> case pagedata do @@ -73,8 +71,6 @@ defmodule Mebe2.Engine.Crawler do Map.put(tagmap, tag, [pagedata | posts]) end) - {authors, author_names} = form_authors(acc, pagedata) - year_posts = [pagedata | Map.get(acc.years, year, [])] month_posts = [pagedata | Map.get(acc.months, {year, month}, [])] @@ -83,31 +79,10 @@ defmodule Mebe2.Engine.Crawler do | posts: [pagedata | acc.posts], years: Map.put(acc.years, year, year_posts), months: Map.put(acc.months, {year, month}, month_posts), - tags: tags, - authors: authors, - author_names: author_names + tags: tags } end end ) end - - defp form_authors(datalist, pagedata) do - multi_author_mode = Mebe2.get_conf(:multi_author_mode) - do_form_authors(multi_author_mode, datalist, pagedata) - end - - defp do_form_authors(false, _, _), do: {%{}, %{}} - - defp do_form_authors(true, %{authors: authors, author_names: author_names}, pagedata) do - author_name = Utils.get_author(pagedata) - author_slug = SlugUtils.slugify(author_name) - author_posts = [pagedata | Map.get(authors, author_slug, [])] - authors = Map.put(authors, author_slug, author_posts) - - # Authors end up with the name that was in the post with the first matching slug - author_names = Map.put_new(author_names, author_slug, author_name) - - {authors, author_names} - end end diff --git a/lib/engine/db.ex b/lib/engine/db.ex index 9d49d84..bef49c2 100644 --- a/lib/engine/db.ex +++ b/lib/engine/db.ex @@ -1,7 +1,7 @@ defmodule Mebe2.Engine.DB do require Logger import Ex2ms - alias Mebe2.Engine.{Utils, SlugUtils, Models} + alias Mebe2.Engine.Models alias Calendar.DateTime @@ -25,9 +25,6 @@ defmodule Mebe2.Engine.DB do # Table for storing posts with tag as first element of key @tag_table :mebe2_tags - # Table for storing posts by specific authors - @author_table :mebe2_authors - # Table for storing menu data @menu_table :mebe2_menu @@ -41,10 +38,6 @@ defmodule Mebe2.Engine.DB do :ets.new(@single_post_table, [:named_table, :set, :protected, read_concurrency: true]) :ets.new(@tag_table, [:named_table, :ordered_set, :protected, read_concurrency: true]) :ets.new(@menu_table, [:named_table, :ordered_set, :protected, read_concurrency: true]) - - if Mebe2.get_conf(:multi_author_mode) do - :ets.new(@author_table, [:named_table, :ordered_set, :protected, read_concurrency: true]) - end end :ok @@ -93,20 +86,6 @@ defmodule Mebe2.Engine.DB do :ets.insert(@post_table, ordered_posts) :ets.insert(@single_post_table, single_posts) - - if Mebe2.get_conf(:multi_author_mode) do - author_posts = - Enum.filter(posts, fn post -> Map.has_key?(post.extra_headers, "author") end) - |> Enum.map(fn post -> - {{year, month, day}, _} = DateTime.to_erl(post.datetime) - - author_slug = Utils.get_author(post) |> SlugUtils.slugify() - {{author_slug, year, month, day, post.order}, post} - end) - - :ets.insert(@author_table, author_posts) - end - :ok end @@ -128,29 +107,6 @@ defmodule Mebe2.Engine.DB do :ets.insert(@tag_table, tag_posts) end - @spec insert_author_posts(%{optional(String.t()) => Models.Post.t()}) :: true - def insert_author_posts(authors) do - author_posts = - Enum.reduce(Map.keys(authors), [], fn author_slug, acc -> - Enum.reduce(authors[author_slug], acc, fn post, inner_acc -> - {{year, month, day}, _} = DateTime.to_erl(post.datetime) - [{{author_slug, year, month, day, post.order}, post} | inner_acc] - end) - end) - - :ets.insert(@author_table, author_posts) - end - - @spec insert_author_names(%{optional(String.t()) => String.t()}) :: true - def insert_author_names(author_names_map) do - author_names = - Enum.reduce(Map.keys(author_names_map), [], fn author_slug, acc -> - [{{:author_name, author_slug}, author_names_map[author_slug]} | acc] - end) - - :ets.insert(@meta_table, author_names) - end - @spec get_menu() :: [Models.MenuItem.t()] def get_menu() do case :ets.match(@menu_table, :"$1") do @@ -179,21 +135,6 @@ defmodule Mebe2.Engine.DB do get_post_list(@tag_table, ms, first, limit) end - @spec get_author_posts(String.t(), integer(), integer()) :: [Models.Post.t()] - def get_author_posts(author_slug, first, limit) do - ms = - fun do - {{^author_slug, _, _, _, _}, post} -> post - end - - get_post_list( - @author_table, - ms, - first, - limit - ) - end - @spec get_year_posts(integer(), integer(), integer()) :: [Models.Post.t()] def get_year_posts(year, first, limit) do ms = @@ -270,11 +211,6 @@ defmodule Mebe2.Engine.DB do get_meta(type, key, 0) end - @spec get_author_name(String.t()) :: String.t() - def get_author_name(author_slug) do - get_meta(:author_name, author_slug, author_slug) - end - @spec insert_meta(atom, :all | integer | String.t(), integer | String.t()) :: true defp insert_meta(type, key, value) do :ets.insert(@meta_table, {{type, key}, value}) diff --git a/lib/engine/slug_utils.ex b/lib/engine/slug_utils.ex deleted file mode 100644 index 438cb22..0000000 --- a/lib/engine/slug_utils.ex +++ /dev/null @@ -1,27 +0,0 @@ -defmodule Mebe2.Engine.SlugUtils do - @moduledoc """ - Utilities related to handling of slugs. - """ - - alias Mebe2.Engine.DB - - @doc """ - Get slug out of a given value. - - Nil is returned as is. - """ - @spec slugify(String.t() | nil) :: String.t() | nil - def slugify(nil), do: nil - - def slugify(value) do - Slugger.slugify_downcase(value) - end - - @doc """ - Get the author name related to this slug from the DB. - """ - @spec unslugify_author(String.t()) :: String.t() - def unslugify_author(slug) do - DB.get_author_name(slug) - end -end diff --git a/lib/engine/utils.ex b/lib/engine/utils.ex deleted file mode 100644 index 3402b1f..0000000 --- a/lib/engine/utils.ex +++ /dev/null @@ -1,44 +0,0 @@ -defmodule Mebe2.Engine.Utils do - @moduledoc """ - This module contains functions and other stuff that just don't fit anywhere else properly. - """ - - alias Mebe2.Engine.Models - - @doc """ - Get the author of a post. - - Returns a value according to the following pseudocode - - if multi author mode is on then - if post has author then - return post's author - else if use default author is on then - return blog author - else return nil - else if use default author is on then - return blog author - else return nil - """ - @spec get_author(Models.Post.t()) :: String.t() | nil - def get_author(%Models.Post{extra_headers: extra_headers}) do - multi_author_mode = Mebe2.get_conf(:multi_author_mode) - use_default_author = Mebe2.get_conf(:use_default_author) - blog_author = Mebe2.get_conf(:blog_author) - - if multi_author_mode do - cond do - Map.has_key?(extra_headers, "author") -> - Map.get(extra_headers, "author") - - use_default_author -> - blog_author - - true -> - nil - end - else - if use_default_author, do: blog_author, else: nil - end - end -end diff --git a/lib/engine/worker.ex b/lib/engine/worker.ex index a6bae4c..c28d0c1 100644 --- a/lib/engine/worker.ex +++ b/lib/engine/worker.ex @@ -45,8 +45,6 @@ defmodule Mebe2.Engine.Worker do pages: pages, posts: posts, tags: tags, - authors: authors, - author_names: author_names, years: years, months: months } = Crawler.crawl(data_path) @@ -64,15 +62,6 @@ defmodule Mebe2.Engine.Worker do DB.insert_tag_posts(tags) Enum.each(Map.keys(tags), fn tag -> DB.insert_count(:tag, tag, Enum.count(tags[tag])) end) - if Mebe2.get_conf(:multi_author_mode) do - DB.insert_author_posts(authors) - DB.insert_author_names(author_names) - - Enum.each(Map.keys(authors), fn author -> - DB.insert_count(:author, author, Enum.count(authors[author])) - end) - end - # For years and months, only insert the counts (the data can be fetched from main posts table) Enum.each(Map.keys(years), fn year -> DB.insert_count(:year, year, Enum.count(years[year])) diff --git a/lib/mebe_2.ex b/lib/mebe_2.ex index f6385f2..43e942d 100644 --- a/lib/mebe_2.ex +++ b/lib/mebe_2.ex @@ -4,8 +4,6 @@ defmodule Mebe2 do """ @conf_datatypes %{ - multi_author_mode: :bool, - use_default_author: :bool, force_read_more: :bool, enable_feeds: :bool, feeds_full_content: :bool, diff --git a/lib/web/views/feeds/post_list.xml.eex b/lib/web/views/feeds/post_list.xml.eex index 40b3b0c..9f1d902 100644 --- a/lib/web/views/feeds/post_list.xml.eex +++ b/lib/web/views/feeds/post_list.xml.eex @@ -4,9 +4,7 @@ ]]> - <%= raw(if Mebe2.get_conf(:multi_author_mode) do %> - <%= Mebe2.Engine.Utils.get_author(post) %> - <% end) %> + <%= Mebe2.get_conf(:blog_author) %> <%= Mebe2.get_conf(:absolute_url) %><%= Mebe2.Web.Views.Utils.get_post_path(post) %> <%= Mebe2.get_conf(:absolute_url) %><%= Mebe2.Web.Views.Utils.get_post_path(post) %> diff --git a/mix.exs b/mix.exs index fe15d2a..2e15155 100644 --- a/mix.exs +++ b/mix.exs @@ -26,7 +26,6 @@ defmodule Mebe2.MixProject do {:raxx, "~> 0.16.1"}, {:ace, "~> 0.17.1"}, {:calendar, "~> 0.17.4"}, - {:slugger, "~> 0.3.0"}, {:ex2ms, "~> 1.5.0"}, {:mbu, "~> 3.0.0", runtime: false}, {:exsync, "~> 0.2.3", only: :dev} diff --git a/mix.lock b/mix.lock index 7f5e390..aec3904 100644 --- a/mix.lock +++ b/mix.lock @@ -23,7 +23,6 @@ "ranch": {:hex, :ranch, "1.5.0", "f04166f456790fee2ac1aa05a02745cc75783c2bfb26d39faf6aefc9a3d3a58a", [:rebar3], [], "hexpm"}, "raxx": {:hex, :raxx, "0.16.1", "3737b61f198755138bb2c8c61ed22dc06f9c0cf3218320189ddcda02da91d94a", [:mix], [{:cookie, "~> 0.1.0", [hex: :cookie, repo: "hexpm", optional: false]}, {:eex_html, "~> 0.1.1", [hex: :eex_html, repo: "hexpm", optional: false]}], "hexpm"}, "raxx_static": {:hex, :raxx_static, "0.6.1", "8b48254fc3d1b8b1e473b7c307fbba0ae767c60482754ce823c664544c85d729", [:mix], [{:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:raxx, "~> 0.15.2", [hex: :raxx, repo: "hexpm", optional: false]}], "hexpm"}, - "slugger": {:hex, :slugger, "0.3.0", "efc667ab99eee19a48913ccf3d038b1fb9f165fa4fbf093be898b8099e61b6ed", [:mix], [], "hexpm"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"}, "tzdata": {:hex, :tzdata, "0.5.19", "7962a3997bf06303b7d1772988ede22260f3dae1bf897408ebdac2b4435f4e6a", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.3.1", "a1f612a7b512638634a603c8f401892afbf99b8ce93a45041f8aaca99cadb85e", [:rebar3], [], "hexpm"},