From: Alex Gleason <alex@alexgleason.me>
Date: Thu, 16 Jul 2020 21:35:03 +0000 (-0500)
Subject: Migrate :auto_linker --> Pleroma.Formatter in ConfigDB
X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=613e096389d6945016e78499505c3ec5786d0ab0;p=akkoma

Migrate :auto_linker --> Pleroma.Formatter in ConfigDB
---

diff --git a/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs
new file mode 100644
index 000000000..9ec4203eb
--- /dev/null
+++ b/priv/repo/migrations/20200716195806_autolinker_to_linkify.exs
@@ -0,0 +1,37 @@
+defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do
+  use Ecto.Migration
+
+  alias Pleroma.Repo
+  alias Pleroma.ConfigDB
+
+  @autolinker_path %{group: :auto_linker, key: :opts}
+  @linkify_path %{group: :pleroma, key: Pleroma.Formatter}
+
+  @compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra]
+
+  def change do
+    with {:ok, {old, new}} <- maybe_get_params() do
+      move_config(old, new)
+    end
+  end
+
+  defp move_config(%{} = old, %{} = new) do
+    {:ok, _} = ConfigDB.update_or_create(new)
+    {:ok, _} = ConfigDB.delete(old)
+    :ok
+  end
+
+  defp maybe_get_params() do
+    with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path),
+         %{} = opts <- transform_opts(opts),
+         %{} = linkify_params <- Map.put(@linkify_path, :value, opts) do
+      {:ok, {@autolinker_path, linkify_params}}
+    end
+  end
+
+  defp transform_opts(opts) when is_list(opts) do
+    opts
+    |> Enum.into(%{})
+    |> Map.take(@compat_opts)
+  end
+end