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-14 19:26:35 +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-14 19:26:35 +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
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
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-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
2019-08-30 18:14:01 +02:00
defp print_suggestions ( _file , nil ) , do : nil
2019-08-30 12:21:48 +02:00
defp print_suggestions ( file , suggestions ) do
2019-09-03 18:22:25 +02:00
IO . write ( file , " Suggestions: \n " )
2019-08-30 12:21:48 +02:00
2019-08-30 18:14:01 +02:00
if length ( suggestions ) > 1 do
for suggestion <- suggestions do
print_suggestion ( file , suggestion , true )
end
else
print_suggestion ( file , List . first ( suggestions ) )
2019-08-30 12:21:48 +02:00
end
end
defp print_child_header ( file , child ) do
2019-09-03 18:22:25 +02:00
IO . write ( file , " - ` #{ inspect ( child [ :key ] ) } ` -` #{ inspect ( child [ :type ] ) } ` \n " )
IO . write ( file , " #{ child [ :description ] } \n " )
2019-08-30 12:21:48 +02:00
end
end