Current section

Files

Jump to
xcribe lib api_blueprint api_blueprint.ex
Raw

lib/api_blueprint/api_blueprint.ex

defmodule Xcribe.ApiBlueprint do
@moduledoc false
alias Xcribe.ApiBlueprint.{APIB, Formatter}
alias Xcribe.{Config, DocException}
def generate_doc(requests) do
requests
|> apib_struct()
|> APIB.encode()
end
def apib_struct(requests) do
Map.put(
xcribe_info(),
:groups,
reduce_groups(requests)
)
end
defp reduce_groups(requests), do: Enum.reduce(requests, %{}, &format_and_merge/2)
defp format_and_merge(request, acc) do
item = Formatter.full_request_object(request)
Formatter.merge_request(acc, item)
rescue
exception -> raise DocException, {request, exception, __STACKTRACE__}
end
defp xcribe_info, do: apply(Config.xcribe_information_source!(), :api_info, [])
end