2020-10-12 19:00:50 +02:00
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
2019-08-30 12:21:48 +02:00
defmodule Pleroma.Docs.Markdown do
2019-08-30 18:14:01 +02:00
@behaviour Pleroma.Docs.Generator
2019-08-30 12:21:48 +02:00
2019-08-30 18:14:01 +02:00
@spec process ( keyword ( ) ) :: { :ok , String . t ( ) }
2019-08-30 12:21:48 +02:00
def process ( descriptions ) do
2019-09-13 18:02:42 +02:00
config_path = " docs/generated_config.md "
2019-09-03 18:22:25 +02:00
{ :ok , file } = File . open ( config_path , [ :utf8 , :write ] )
2019-09-13 18:02:42 +02:00
IO . write ( file , " # Generated configuration \n " )
2019-09-03 18:22:25 +02:00
IO . write ( file , " Date of generation: #{ Date . utc_today ( ) } \n \n " )
2019-08-30 12:21:48 +02:00
IO . write (
file ,
2019-09-03 18:22:25 +02:00
" This file describe the configuration, it is recommended to edit the relevant `*.secret.exs` file instead of the others founds in the ``config`` directory. \n \n " <>
" If you run Pleroma with ``MIX_ENV=prod`` the file is ``prod.secret.exs``, otherwise it is ``dev.secret.exs``. \n \n "
2019-08-30 12:21:48 +02:00
)
for group <- descriptions do
if is_nil ( group [ :key ] ) do
2019-09-03 18:22:25 +02:00
IO . write ( file , " # # #{ inspect ( group [ :group ] ) } \n " )
2019-08-30 12:21:48 +02:00
else
2019-09-03 18:22:25 +02:00
IO . write ( file , " # # #{ inspect ( group [ :key ] ) } \n " )
2019-08-30 12:21:48 +02:00
end
2019-09-03 18:22:25 +02:00
IO . write ( file , " #{ group [ :description ] } \n " )
2019-08-30 12:21:48 +02:00
2019-09-17 22:04:21 +02:00
for child <- group [ :children ] || [ ] do
2019-08-30 12:21:48 +02:00
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
2019-09-03 18:22:25 +02:00
IO . write ( file , " \n " )
2019-08-30 12:21:48 +02:00
end
:ok = File . close ( file )
{ :ok , config_path }
end
2019-09-17 22:14:56 +02:00
defp print_child_header ( file , %{ key : key , type : type , description : description } = _child ) do
2019-09-17 21:43:27 +02:00
IO . write (
file ,
2019-09-17 23:02:24 +02:00
" - ` #{ inspect ( key ) } ` (` #{ inspect ( type ) } `): #{ description } \n "
2019-09-17 21:43:27 +02:00
)
end
2019-09-17 22:14:56 +02:00
defp print_child_header ( file , %{ key : key , type : type } = _child ) do
2019-09-17 23:02:24 +02:00
IO . write ( file , " - ` #{ inspect ( key ) } ` (` #{ inspect ( type ) } `) \n " )
2019-09-17 22:14:56 +02:00
end
2019-08-30 18:14:01 +02:00
defp print_suggestion ( file , suggestion ) when is_list ( suggestion ) do
2019-09-03 18:22:25 +02:00
IO . write ( file , " ` #{ inspect ( suggestion ) } ` \n " )
2019-08-30 18:14:01 +02:00
end
2019-08-30 12:21:48 +02:00
defp print_suggestion ( file , suggestion ) when is_function ( suggestion ) do
2019-09-03 18:22:25 +02:00
IO . write ( file , " ` #{ inspect ( suggestion . ( ) ) } ` \n " )
2019-08-30 12:21:48 +02:00
end
2019-08-30 18:14:01 +02:00
defp print_suggestion ( file , suggestion , as_list \\ false ) do
2019-09-03 18:22:25 +02:00
list_mark = if as_list , do : " - " , else : " "
IO . write ( file , " #{ list_mark } ` #{ inspect ( suggestion ) } ` \n " )
2019-08-30 12:21:48 +02:00
end
2020-07-12 17:23:33 +02:00
defp print_suggestions ( file , { :list_behaviour_implementations , behaviour } ) do
suggestions = Pleroma.Docs.Generator . list_behaviour_implementations ( behaviour )
print_suggestions ( file , suggestions )
end
2019-08-30 18:14:01 +02:00
defp print_suggestions ( _file , nil ) , do : nil
2019-09-17 22:00:02 +02:00
defp print_suggestions ( _file , " " ) , do : nil
2019-08-30 12:21:48 +02:00
defp print_suggestions ( file , suggestions ) do
2019-08-30 18:14:01 +02:00
if length ( suggestions ) > 1 do
2019-09-17 23:02:24 +02:00
IO . write ( file , " Suggestions: \n " )
2019-09-17 22:22:54 +02:00
2019-08-30 18:14:01 +02:00
for suggestion <- suggestions do
print_suggestion ( file , suggestion , true )
end
else
2019-09-17 22:33:32 +02:00
IO . write ( file , " Suggestion: " )
2019-09-17 22:22:54 +02:00
2019-08-30 18:14:01 +02:00
print_suggestion ( file , List . first ( suggestions ) )
2019-08-30 12:21:48 +02:00
end
end
end