some changes

This commit is contained in:
Alex S 2019-08-30 19:14:01 +03:00
parent 0559c82bdb
commit 6721301086
5 changed files with 44 additions and 26 deletions

View file

@ -1,5 +1,5 @@
use Mix.Config use Mix.Config
alias Pleroma.Docs.Formatter alias Pleroma.Docs.Generator
websocket_config = [ websocket_config = [
path: "/websocket", path: "/websocket",
@ -24,7 +24,7 @@ config :pleroma, :config_description, [
type: :module, type: :module,
description: "Module which will be used for uploads", description: "Module which will be used for uploads",
suggestions: [ suggestions: [
Formatter.uploaders_list() Generator.uploaders_list()
] ]
}, },
%{ %{
@ -32,7 +32,7 @@ config :pleroma, :config_description, [
type: {:list, :module}, type: {:list, :module},
description: "List of filter modules for uploads", description: "List of filter modules for uploads",
suggestions: [ suggestions: [
Formatter.filters_list() Generator.filters_list()
] ]
}, },
%{ %{
@ -64,8 +64,7 @@ config :pleroma, :config_description, [
%{ %{
key: :proxy_opts, key: :proxy_opts,
type: :keyword, type: :keyword,
description: "Proxy options, see `Pleroma.ReverseProxy` documentation", description: "Proxy options, see `Pleroma.ReverseProxy` documentation"
suggestions: ["somehow created link to Pleroma.ReverseProxy options"]
} }
] ]
}, },
@ -93,7 +92,7 @@ config :pleroma, :config_description, [
children: [ children: [
%{ %{
key: :bucket, key: :bucket,
type: :strings, type: :string,
description: "S3 bucket", description: "S3 bucket",
suggestions: [ suggestions: [
"bucket" "bucket"
@ -629,7 +628,7 @@ config :pleroma, :config_description, [
description: "A list of MRF policies enabled", description: "A list of MRF policies enabled",
suggestions: [ suggestions: [
Pleroma.Web.ActivityPub.MRF.NoOpPolicy, Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
Formatter.mrf_list() Generator.mrf_list()
] ]
}, },
%{ %{
@ -1920,7 +1919,7 @@ config :pleroma, :config_description, [
type: {:list, :module}, type: {:list, :module},
description: "list of Rich Media parsers", description: "list of Rich Media parsers",
suggestions: [ suggestions: [
Formatter.richmedia_parsers() Generator.richmedia_parsers()
] ]
}, },
%{ %{

View file

@ -8,11 +8,11 @@ defmodule Mix.Tasks.Pleroma.Docs do
Supports two formats: `markdown` and `json`. Supports two formats: `markdown` and `json`.
## Generate markdown docs ## Generate Markdown docs
`mix pleroma.docs` `mix pleroma.docs`
## Generate json docs ## Generate JSON docs
`mix pleroma.docs json`s `mix pleroma.docs json`s
""" """
@ -30,7 +30,7 @@ defmodule Mix.Tasks.Pleroma.Docs do
{descriptions, _paths} = Mix.Config.eval!("config/description.exs") {descriptions, _paths} = Mix.Config.eval!("config/description.exs")
{:ok, file_path} = {:ok, file_path} =
Pleroma.Docs.Formatter.process( Pleroma.Docs.Generator.process(
implementation, implementation,
descriptions[:pleroma][:config_description] descriptions[:pleroma][:config_description]
) )

View file

@ -1,4 +1,4 @@
defmodule Pleroma.Docs.Formatter do defmodule Pleroma.Docs.Generator do
@callback process(keyword()) :: {:ok, String.t()} @callback process(keyword()) :: {:ok, String.t()}
@spec process(module(), keyword()) :: {:ok, String.t()} @spec process(module(), keyword()) :: {:ok, String.t()}
@ -6,6 +6,7 @@ defmodule Pleroma.Docs.Formatter do
implementation.process(descriptions) implementation.process(descriptions)
end end
@spec uploaders_list() :: [module()]
def uploaders_list do def uploaders_list do
{:ok, modules} = :application.get_key(:pleroma, :modules) {:ok, modules} = :application.get_key(:pleroma, :modules)
@ -17,6 +18,7 @@ defmodule Pleroma.Docs.Formatter do
end) end)
end end
@spec filters_list() :: [module()]
def filters_list do def filters_list do
{:ok, modules} = :application.get_key(:pleroma, :modules) {:ok, modules} = :application.get_key(:pleroma, :modules)
@ -27,6 +29,7 @@ defmodule Pleroma.Docs.Formatter do
end) end)
end end
@spec mrf_list() :: [module()]
def mrf_list do def mrf_list do
{:ok, modules} = :application.get_key(:pleroma, :modules) {:ok, modules} = :application.get_key(:pleroma, :modules)
@ -38,6 +41,7 @@ defmodule Pleroma.Docs.Formatter do
end) end)
end end
@spec richmedia_parsers() :: [module()]
def richmedia_parsers do def richmedia_parsers do
{:ok, modules} = :application.get_key(:pleroma, :modules) {:ok, modules} = :application.get_key(:pleroma, :modules)

View file

@ -1,5 +1,7 @@
defmodule Pleroma.Docs.JSON do defmodule Pleroma.Docs.JSON do
@behaviour Pleroma.Docs.Formatter @behaviour Pleroma.Docs.Generator
@spec process(keyword()) :: {:ok, String.t()}
def process(descriptions) do def process(descriptions) do
config_path = "docs/generate_config.json" config_path = "docs/generate_config.json"
{:ok, file} = File.open(config_path, [:write]) {:ok, file} = File.open(config_path, [:write])
@ -9,6 +11,7 @@ defmodule Pleroma.Docs.JSON do
{:ok, config_path} {:ok, config_path}
end end
@spec generate_json([keyword()]) :: String.t()
def generate_json(descriptions) do def generate_json(descriptions) do
Jason.encode!(descriptions) Jason.encode!(descriptions)
end end

View file

@ -1,16 +1,17 @@
defmodule Pleroma.Docs.Markdown do defmodule Pleroma.Docs.Markdown do
@behaviour Pleroma.Docs.Formatter @behaviour Pleroma.Docs.Generator
@spec process(keyword()) :: {:ok, String.t()}
def process(descriptions) do def process(descriptions) do
config_path = "docs/config.md" config_path = "docs/config.md"
{:ok, file} = File.open(config_path, [:write]) {:ok, file} = File.open(config_path, [:write])
IO.write(file, "# Generated configuration\r\n\r\n") IO.write(file, "# Configuration\r\n\r\n")
IO.write(file, "Date of generation: #{Date.utc_today()}\r\n\r\n") IO.write(file, "Date of generation: #{Date.utc_today()}\r\n\r\n")
IO.write( IO.write(
file, file,
"This file describe the configuration, it is recommended to edit the relevant *.secret.exs file instead of the others founds in the ``config`` directory. "This file describe the configuration, it is recommended to edit the relevant `*.secret.exs` file instead of the others founds in the ``config`` directory. \r\n
If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherwise it is ``dev.secret.exs``.\r\n\r\n" If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherwise it is ``dev.secret.exs``.\r\n\r\n"
) )
for group <- descriptions do for group <- descriptions do
@ -20,7 +21,6 @@ If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherw
IO.write(file, "## #{inspect(group[:key])}\r\n\r\n") IO.write(file, "## #{inspect(group[:key])}\r\n\r\n")
end end
IO.write(file, "Type: `#{group[:type]}` \r\n")
IO.write(file, "#{group[:description]} \r\n\r\n") IO.write(file, "#{group[:description]} \r\n\r\n")
for child <- group[:children] do for child <- group[:children] do
@ -44,24 +44,36 @@ If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherw
{:ok, config_path} {:ok, config_path}
end end
defp print_suggestion(file, suggestion) when is_list(suggestion) do
IO.write(file, " `#{inspect(suggestion)}`\r\n")
end
defp print_suggestion(file, suggestion) when is_function(suggestion) do defp print_suggestion(file, suggestion) when is_function(suggestion) do
IO.write(file, " `#{inspect(suggestion.())}`\r\n") IO.write(file, " `#{inspect(suggestion.())}`\r\n")
end end
defp print_suggestion(file, suggestion) do defp print_suggestion(file, suggestion, as_list \\ false) do
IO.write(file, " `#{inspect(suggestion)}`\r\n") list_mark = if as_list, do: "*", else: ""
IO.write(file, " #{list_mark} `#{inspect(suggestion)}`\r\n")
end end
defp print_suggestions(file, suggestions) do defp print_suggestions(_file, nil), do: nil
IO.write(file, "Suggestions: \r\n")
for suggestion <- suggestions do defp print_suggestions(file, suggestions) do
print_suggestion(file, suggestion) IO.write(file, " Suggestions: \r\n")
if length(suggestions) > 1 do
for suggestion <- suggestions do
print_suggestion(file, suggestion, true)
end
else
print_suggestion(file, List.first(suggestions))
end end
end end
defp print_child_header(file, child) do defp print_child_header(file, child) do
IO.write(file, "* `#{inspect(child[:key])}`: #{child[:description]} \r\n") IO.write(file, "* `#{inspect(child[:key])}` \r\n")
IO.write(file, "Type: `#{inspect(child[:type])}` \r\n") IO.write(file, " #{child[:description]} \r\n")
IO.write(file, " Type: `#{inspect(child[:type])}` \r\n")
end end
end end