aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/docs/generator.ex
blob: aa578eee280657f4a7bf9eb35016f58bfbc795e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
defmodule Pleroma.Docs.Generator do
  @callback process(keyword()) :: {:ok, String.t()}

  @spec process(module(), keyword()) :: {:ok, String.t()}
  def process(implementation, descriptions) do
    implementation.process(descriptions)
  end

  @spec uploaders_list() :: [module()]
  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) != "Uploader"
    end)
  end

  @spec filters_list() :: [module()]
  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

  @spec mrf_list() :: [module()]
  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

  @spec richmedia_parsers() :: [module()]
  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