description formatters
This commit is contained in:
parent
171cefd889
commit
67e4300931
3 changed files with 151 additions and 0 deletions
69
lib/pleroma/docs/formatter.ex
Normal file
69
lib/pleroma/docs/formatter.ex
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
defmodule Pleroma.Docs.Formatter do
|
||||||
|
@callback process(keyword()) :: {:ok, String.t()}
|
||||||
|
|
||||||
|
@spec process(module(), keyword()) :: {:ok, String.t()}
|
||||||
|
def process(implementation, descriptions) do
|
||||||
|
implementation.process(descriptions)
|
||||||
|
end
|
||||||
|
|
||||||
|
def uploaders_list do
|
||||||
|
{:ok, modules} = :application.get_key(:pleroma, :modules)
|
||||||
|
|
||||||
|
Enum.filter(modules, fn module ->
|
||||||
|
name_as_list = Module.split(module)
|
||||||
|
|
||||||
|
List.starts_with?(name_as_list, ["Pleroma", "Uploaders"]) and
|
||||||
|
List.last(name_as_list) in ["S3", "Local", "MDII"]
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
def filters_list do
|
||||||
|
{:ok, modules} = :application.get_key(:pleroma, :modules)
|
||||||
|
|
||||||
|
Enum.filter(modules, fn module ->
|
||||||
|
name_as_list = Module.split(module)
|
||||||
|
|
||||||
|
List.starts_with?(name_as_list, ["Pleroma", "Upload", "Filter"])
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
def mrf_list do
|
||||||
|
{:ok, modules} = :application.get_key(:pleroma, :modules)
|
||||||
|
|
||||||
|
Enum.filter(modules, fn module ->
|
||||||
|
name_as_list = Module.split(module)
|
||||||
|
|
||||||
|
List.starts_with?(name_as_list, ["Pleroma", "Web", "ActivityPub", "MRF"]) and
|
||||||
|
length(name_as_list) > 4
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
def richmedia_parsers do
|
||||||
|
{:ok, modules} = :application.get_key(:pleroma, :modules)
|
||||||
|
|
||||||
|
Enum.filter(modules, fn module ->
|
||||||
|
name_as_list = Module.split(module)
|
||||||
|
|
||||||
|
List.starts_with?(name_as_list, ["Pleroma", "Web", "RichMedia", "Parsers"]) and
|
||||||
|
length(name_as_list) == 5
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defimpl Jason.Encoder, for: Tuple do
|
||||||
|
def encode(tuple, opts) do
|
||||||
|
Jason.Encode.list(Tuple.to_list(tuple), opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defimpl Jason.Encoder, for: [Regex, Function] do
|
||||||
|
def encode(term, opts) do
|
||||||
|
Jason.Encode.string(inspect(term), opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defimpl String.Chars, for: Regex do
|
||||||
|
def to_string(term) do
|
||||||
|
inspect(term)
|
||||||
|
end
|
||||||
|
end
|
15
lib/pleroma/docs/json.ex
Normal file
15
lib/pleroma/docs/json.ex
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
defmodule Pleroma.Docs.JSON do
|
||||||
|
@behaviour Pleroma.Docs.Formatter
|
||||||
|
def process(descriptions) do
|
||||||
|
config_path = "docs/generate_config.json"
|
||||||
|
{:ok, file} = File.open(config_path, [:write])
|
||||||
|
json = generate_json(descriptions)
|
||||||
|
IO.write(file, json)
|
||||||
|
:ok = File.close(file)
|
||||||
|
{:ok, config_path}
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_json(descriptions) do
|
||||||
|
Jason.encode!(descriptions)
|
||||||
|
end
|
||||||
|
end
|
67
lib/pleroma/docs/markdown.ex
Normal file
67
lib/pleroma/docs/markdown.ex
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
defmodule Pleroma.Docs.Markdown do
|
||||||
|
@behaviour Pleroma.Docs.Formatter
|
||||||
|
|
||||||
|
def process(descriptions) do
|
||||||
|
config_path = "docs/config.md"
|
||||||
|
{:ok, file} = File.open(config_path, [:write])
|
||||||
|
IO.write(file, "# Generated configuration\r\n\r\n")
|
||||||
|
IO.write(file, "Date of generation: #{Date.utc_today()}\r\n\r\n")
|
||||||
|
|
||||||
|
IO.write(
|
||||||
|
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.
|
||||||
|
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
|
||||||
|
if is_nil(group[:key]) do
|
||||||
|
IO.write(file, "## #{inspect(group[:group])}\r\n\r\n")
|
||||||
|
else
|
||||||
|
IO.write(file, "## #{inspect(group[:key])}\r\n\r\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
IO.write(file, "Type: `#{group[:type]}` \r\n")
|
||||||
|
IO.write(file, "#{group[:description]} \r\n\r\n")
|
||||||
|
|
||||||
|
for child <- group[:children] do
|
||||||
|
print_child_header(file, child)
|
||||||
|
|
||||||
|
print_suggestions(file, child[:suggestions])
|
||||||
|
|
||||||
|
if child[:children] do
|
||||||
|
for subchild <- child[:children] do
|
||||||
|
print_child_header(file, subchild)
|
||||||
|
|
||||||
|
print_suggestions(file, subchild[:suggestions])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
IO.write(file, "\r\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
:ok = File.close(file)
|
||||||
|
{:ok, config_path}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp print_suggestion(file, suggestion) when is_function(suggestion) do
|
||||||
|
IO.write(file, " `#{inspect(suggestion.())}`\r\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
defp print_suggestion(file, suggestion) do
|
||||||
|
IO.write(file, " `#{inspect(suggestion)}`\r\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
defp print_suggestions(file, suggestions) do
|
||||||
|
IO.write(file, "Suggestions: \r\n")
|
||||||
|
|
||||||
|
for suggestion <- suggestions do
|
||||||
|
print_suggestion(file, suggestion)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp print_child_header(file, child) do
|
||||||
|
IO.write(file, "* `#{inspect(child[:key])}`: #{child[:description]} \r\n")
|
||||||
|
IO.write(file, "Type: `#{inspect(child[:type])}` \r\n")
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue