mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
feat: list arguments for resource actions in class diagrams (#399)
This commit is contained in:
parent
41b4b7fdbb
commit
0b7db5f3fb
2 changed files with 44 additions and 17 deletions
|
@ -13,6 +13,7 @@ defmodule Ash.Api.Info.Diagram do
|
|||
|
||||
@indent " "
|
||||
@show_private? false
|
||||
@argument_print_limit 4
|
||||
|
||||
@default_opts indent: @indent, show_private?: @show_private?
|
||||
|
||||
|
@ -123,6 +124,28 @@ defmodule Ash.Api.Info.Diagram do
|
|||
Enum.map_join(list, "\n", fn item -> "#{indent}#{indent}#{template_fn.(item)}" end)
|
||||
end
|
||||
|
||||
defp list_arguments_and_attributes(resource, action) do
|
||||
arguments = action.arguments
|
||||
|
||||
attributes =
|
||||
case action.type do
|
||||
:read -> []
|
||||
_ -> action.accept |> Enum.map(&Ash.Resource.Info.attribute(resource, &1))
|
||||
end
|
||||
|
||||
list_arguments(arguments ++ attributes)
|
||||
end
|
||||
|
||||
defp list_arguments(arguments) when length(arguments) > @argument_print_limit do
|
||||
{displayed_args, _rest} = Enum.split(arguments, @argument_print_limit)
|
||||
list_arguments(displayed_args) <> ", ..."
|
||||
end
|
||||
|
||||
defp list_arguments(arguments) do
|
||||
arguments
|
||||
|> Enum.map_join(", ", &"#{class_short_type(&1.type)} #{&1.name}")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Generates a Mermaid Class Diagram for a given API.
|
||||
|
||||
|
@ -163,7 +186,11 @@ defmodule Ash.Api.Info.Diagram do
|
|||
indent,
|
||||
&"#{resource_name(&1.destination)}#{if &1.cardinality == :many, do: "[]", else: ""} #{&1.name}"
|
||||
),
|
||||
join_template(actions, indent, &"#{&1.name}()")
|
||||
join_template(
|
||||
actions,
|
||||
indent,
|
||||
&"#{&1.name}(#{list_arguments_and_attributes(resource, &1)})"
|
||||
)
|
||||
]
|
||||
|> Enum.reject(&(&1 == ""))
|
||||
|> Enum.join("\n")
|
||||
|
|
|
@ -29,11 +29,11 @@ defmodule Ash.Test.Api.Info.DiagramTest do
|
|||
String last_name
|
||||
String email
|
||||
Org org
|
||||
destroy()
|
||||
destroy(UUID id, String first_name, String last_name, String email)
|
||||
read()
|
||||
for_org()
|
||||
create()
|
||||
update()
|
||||
for_org(UUID org)
|
||||
create(UUID org, UUID id, String first_name, String last_name, ...)
|
||||
update(UUID id, String first_name, String last_name, String email)
|
||||
approve()
|
||||
unapprove()
|
||||
}
|
||||
|
@ -41,11 +41,11 @@ defmodule Ash.Test.Api.Info.DiagramTest do
|
|||
UUID id
|
||||
String name
|
||||
User[] users
|
||||
destroy()
|
||||
update()
|
||||
destroy(UUID id, String name)
|
||||
update(UUID id, String name)
|
||||
read()
|
||||
create()
|
||||
by_name()
|
||||
create(UUID id, String name)
|
||||
by_name(String name)
|
||||
}
|
||||
|
||||
Org -- User
|
||||
|
@ -86,11 +86,11 @@ defmodule Ash.Test.Api.Info.DiagramTest do
|
|||
Boolean approved
|
||||
UUID org_id
|
||||
Org org
|
||||
destroy()
|
||||
destroy(UUID id, String first_name, String last_name, String email)
|
||||
read()
|
||||
for_org()
|
||||
create()
|
||||
update()
|
||||
for_org(UUID org)
|
||||
create(UUID org, UUID id, String first_name, String last_name, ...)
|
||||
update(UUID id, String first_name, String last_name, String email)
|
||||
approve()
|
||||
unapprove()
|
||||
}
|
||||
|
@ -98,11 +98,11 @@ defmodule Ash.Test.Api.Info.DiagramTest do
|
|||
UUID id
|
||||
String name
|
||||
User[] users
|
||||
destroy()
|
||||
update()
|
||||
destroy(UUID id, String name)
|
||||
update(UUID id, String name)
|
||||
read()
|
||||
create()
|
||||
by_name()
|
||||
create(UUID id, String name)
|
||||
by_name(String name)
|
||||
}
|
||||
|
||||
Org -- User
|
||||
|
|
Loading…
Reference in a new issue