chore: Upgrade credo and address issues

This commit is contained in:
Robert Prehn 2021-07-20 15:50:51 -05:00
parent d8902ec569
commit 046094aa2d
20 changed files with 77 additions and 8 deletions

View file

@ -1,4 +1,9 @@
defmodule Legendary.Admin.Routes do defmodule Legendary.Admin.Routes do
@moduledoc """
Routes from the admin app. Use like:
use Legendary.Admin.Routes
"""
defmacro __using__(_opts \\ []) do defmacro __using__(_opts \\ []) do
quote do quote do
use Kaffy.Routes, scope: "/admin", pipe_through: [:require_admin] use Kaffy.Routes, scope: "/admin", pipe_through: [:require_admin]

View file

@ -1,4 +1,8 @@
defmodule Legendary.Admin.Telemetry do defmodule Legendary.Admin.Telemetry do
@moduledoc """
Collect metrics from the admin app.
"""
use Supervisor use Supervisor
import Telemetry.Metrics import Telemetry.Metrics

View file

@ -1,4 +1,8 @@
defmodule Legendary.Admin.Kaffy.Config do defmodule Legendary.Admin.Kaffy.Config do
@moduledoc """
Pull in the resource list for the admin from the application config.
"""
def create_resources(_conn) do def create_resources(_conn) do
config = Application.get_env(:admin, Legendary.Admin) config = Application.get_env(:admin, Legendary.Admin)

View file

@ -1,4 +1,9 @@
defmodule Legendary.Admin.Kaffy.EditorExtension do defmodule Legendary.Admin.Kaffy.EditorExtension do
@moduledoc """
Bring in additional CSS and JS for the admin interface e.g. the
markdown editor library.
"""
def stylesheets(_conn) do def stylesheets(_conn) do
[ [
{:safe, ~s(<link rel="stylesheet" href="/css/content-editor.css" />)}, {:safe, ~s(<link rel="stylesheet" href="/css/content-editor.css" />)},

View file

@ -1,4 +1,8 @@
defmodule AppWeb.Telemetry do defmodule AppWeb.Telemetry do
@moduledoc """
Collect metrics on your app.
"""
use Supervisor use Supervisor
import Telemetry.Metrics import Telemetry.Metrics

View file

@ -1,4 +1,8 @@
defmodule Legendary.Content.CommentAdmin do defmodule Legendary.Content.CommentAdmin do
@moduledoc """
Custom admin logic for blog post comments.
"""
def index(_) do def index(_) do
[ [
id: nil, id: nil,

View file

@ -1,4 +1,8 @@
defmodule Legendary.Content.MarkupField do defmodule Legendary.Content.MarkupField do
@moduledoc """
Custom field type definition for markdown fields. Currently uses simplemde
to provide a markdown editing GUI.
"""
use Ecto.Type use Ecto.Type
def type, do: :string def type, do: :string

View file

@ -1,4 +1,8 @@
defmodule Legendary.Content.PostAdmin do defmodule Legendary.Content.PostAdmin do
@moduledoc """
Custom admin logic for content posts and pages.
"""
import Ecto.Query, only: [from: 2] import Ecto.Query, only: [from: 2]
def singular_name(_) do def singular_name(_) do

View file

@ -87,11 +87,12 @@ defmodule Legendary.Content.PostsController do
end end
# The static page we're looking for is missing, so this is just a 404 # The static page we're looking for is missing, so this is just a 404
# credo:disable-for-next-line
raise Phoenix.Router.NoRouteError.exception(conn: conn, router: router) raise Phoenix.Router.NoRouteError.exception(conn: conn, router: router)
_ -> _ ->
# We aren't missing the static page, we're missing a partial. This is probably # We aren't missing the static page, we're missing a partial. This is probably
# a developer error, so bubble it up # a developer error, so bubble it up
raise e reraise e, System.stacktrace
end end
end end
end end

View file

@ -1,4 +1,8 @@
defmodule Legendary.Content.Routes do defmodule Legendary.Content.Routes do
@moduledoc """
Routes for the content engine, including blog posts, feeds, and pages.
"""
defmacro __using__(_opts \\ []) do defmacro __using__(_opts \\ []) do
quote do quote do
pipeline :feed do pipeline :feed do

View file

@ -52,7 +52,7 @@ defmodule Legendary.Content.PostsTest do
test "delete_posts/1", %{public_post: post} do test "delete_posts/1", %{public_post: post} do
assert Enum.count(Posts.list_posts()) == 1 assert Enum.count(Posts.list_posts()) == 1
assert {:ok, _} = Posts.delete_posts(post) assert {:ok, _} = Posts.delete_posts(post)
assert Enum.count(Posts.list_posts()) == 0 assert Enum.empty?(Posts.list_posts())
end end
test "change_posts/1", %{public_post: post} do test "change_posts/1", %{public_post: post} do

View file

@ -1,4 +1,9 @@
defmodule Legendary.Auth.MnesiaClusterSupervisor do defmodule Legendary.Auth.MnesiaClusterSupervisor do
@moduledoc """
Manages the cache in Mnesia for Pow. This allows users to remain logged in
even if their traffic is hitting different nodes in the cluster.
"""
use Supervisor use Supervisor
def start_link(init_arg) do def start_link(init_arg) do

View file

@ -1,7 +1,12 @@
defmodule Legendary.Auth.Roles do defmodule Legendary.Auth.Roles do
@moduledoc """
Functions for working with roles on users, such as testing whether a user has
a role.
"""
def has_role?(userlike, role) when is_atom(role), do: has_role?(userlike, Atom.to_string(role)) def has_role?(userlike, role) when is_atom(role), do: has_role?(userlike, Atom.to_string(role))
def has_role?(nil, _), do: false def has_role?(nil, _), do: false
def has_role?(user = %Legendary.Auth.User{}, role) do def has_role?(%Legendary.Auth.User{} = user, role) do
Enum.any?(user.roles || [], & &1 == role) Enum.any?(user.roles || [], & &1 == role)
end end
end end

View file

@ -40,7 +40,7 @@ defmodule Legendary.Auth.User do
|> pow_extension_changeset(attrs) |> pow_extension_changeset(attrs)
end end
def reset_password_changeset(user = %Legendary.Auth.User{}, params) do def reset_password_changeset(%Legendary.Auth.User{} = user, params) do
user user
|> new_password_changeset(params, @pow_config) |> new_password_changeset(params, @pow_config)
|> Changeset.validate_required([:password]) |> Changeset.validate_required([:password])

View file

@ -1,9 +1,15 @@
defmodule Legendary.Auth.UserAdmin do defmodule Legendary.Auth.UserAdmin do
@moduledoc """
Custom admin login for user records.
"""
import Ecto.Query, only: [from: 2] import Ecto.Query, only: [from: 2]
alias Legendary.Auth.User alias Legendary.Auth.User
alias Legendary.Core.Repo alias Legendary.Core.Repo
def custom_links(_schema) do def custom_links(_schema) do
# We add the funwithflags admin URL under this custom admin because kaffy
# doesn't have global custom links that work in this way and user is the
# closest fit.
[ [
%{name: "Feature Flags", url: "/admin/feature-flags", order: 2, location: :top, icon: "flag"}, %{name: "Feature Flags", url: "/admin/feature-flags", order: 2, location: :top, icon: "flag"},
] ]

View file

@ -1,6 +1,10 @@
defmodule Legendary.AuthWeb.Helpers do defmodule Legendary.AuthWeb.Helpers do
def current_user(socket = %Phoenix.LiveView.Socket{assigns: %{current_user: user}}), do: user @moduledoc """
def current_user(socket = %Phoenix.LiveView.Socket{assigns: %{__assigns__: %{current_user: user}}}), do: user Utility functions for working with users and roles.
"""
def current_user(%Phoenix.LiveView.Socket{assigns: %{current_user: user}}), do: user
def current_user(%Phoenix.LiveView.Socket{assigns: %{__assigns__: %{current_user: user}}}), do: user
def current_user(%Phoenix.LiveView.Socket{}), do: nil def current_user(%Phoenix.LiveView.Socket{}), do: nil
def current_user(conn), do: Pow.Plug.current_user(conn) def current_user(conn), do: Pow.Plug.current_user(conn)

View file

@ -7,7 +7,7 @@ defmodule Legendary.Core.MapUtils do
Map.merge(base, override, &deep_value/3) Map.merge(base, override, &deep_value/3)
end end
defp deep_value(_key, base = %{}, override = %{}) do defp deep_value(_key, %{} = base, %{} = override) do
deep_merge(base, override) deep_merge(base, override)
end end

View file

@ -1,4 +1,10 @@
defmodule Legendary.Core.Routes do defmodule Legendary.Core.Routes do
@moduledoc """
Router module that brings in core framework routes, such as the feature flag
admin interface. Can be included like:
use Legendary.Core.Routes
"""
defmacro __using__(_opts \\ []) do defmacro __using__(_opts \\ []) do
quote do quote do
scope path: "/admin/feature-flags" do scope path: "/admin/feature-flags" do

View file

@ -1,4 +1,8 @@
defmodule Mix.Legendary do defmodule Mix.Legendary do
@moduledoc """
Parent module for all Legendary framework mix tasks. Provides some helpers
used by tasks and generators.
"""
alias Mix.Phoenix.{Schema} alias Mix.Phoenix.{Schema}
@doc false @doc false

View file

@ -11,7 +11,7 @@
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"},
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
"credo": {:hex, :credo, "1.4.0", "92339d4cbadd1e88b5ee43d427b639b68a11071b6f73854e33638e30a0ea11f5", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "1fd3b70dce216574ce3c18bdf510b57e7c4c85c2ec9cad4bff854abaf7e58658"}, "credo": {:hex, :credo, "1.5.6", "e04cc0fdc236fefbb578e0c04bd01a471081616e741d386909e527ac146016c6", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "4b52a3e558bd64e30de62a648518a5ea2b6e3e5d2b164ef5296244753fc7eb17"},
"crontab": {:hex, :crontab, "1.1.10", "dc9bb1f4299138d47bce38341f5dcbee0aa6c205e864fba7bc847f3b5cb48241", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "1347d889d1a0eda997990876b4894359e34bfbbd688acbb0ba28a2795ca40685"}, "crontab": {:hex, :crontab, "1.1.10", "dc9bb1f4299138d47bce38341f5dcbee0aa6c205e864fba7bc847f3b5cb48241", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "1347d889d1a0eda997990876b4894359e34bfbbd688acbb0ba28a2795ca40685"},
"db_connection": {:hex, :db_connection, "2.2.2", "3bbca41b199e1598245b716248964926303b5d4609ff065125ce98bcd368939e", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "642af240d8a8affb93b4ba5a6fcd2bbcbdc327e1a524b825d383711536f8070c"}, "db_connection": {:hex, :db_connection, "2.2.2", "3bbca41b199e1598245b716248964926303b5d4609ff065125ce98bcd368939e", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "642af240d8a8affb93b4ba5a6fcd2bbcbdc327e1a524b825d383711536f8070c"},
"decimal": {:hex, :decimal, "1.9.0", "83e8daf59631d632b171faabafb4a9f4242c514b0a06ba3df493951c08f64d07", [:mix], [], "hexpm", "b1f2343568eed6928f3e751cf2dffde95bfaa19dd95d09e8a9ea92ccfd6f7d85"}, "decimal": {:hex, :decimal, "1.9.0", "83e8daf59631d632b171faabafb4a9f4242c514b0a06ba3df493951c08f64d07", [:mix], [], "hexpm", "b1f2343568eed6928f3e751cf2dffde95bfaa19dd95d09e8a9ea92ccfd6f7d85"},