mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
improvement: find all installed extensions by default
This commit is contained in:
parent
a6caeeec53
commit
72fada1bec
1 changed files with 33 additions and 8 deletions
|
@ -6,21 +6,37 @@ defmodule Ash.Mix.Tasks.Helpers do
|
|||
@doc """
|
||||
Gets all extensions in use by the current project's apis and resources
|
||||
"""
|
||||
def extensions!(argv \\ []) do
|
||||
apis = Ash.Mix.Tasks.Helpers.apis!(argv)
|
||||
def extensions!(argv, opts \\ []) do
|
||||
if opts[:in_use?] do
|
||||
apis = Ash.Mix.Tasks.Helpers.apis!(argv)
|
||||
|
||||
resource_extensions =
|
||||
apis
|
||||
|> Enum.flat_map(&Ash.Api.Info.resources/1)
|
||||
|> all_extensions()
|
||||
resource_extensions =
|
||||
apis
|
||||
|> Enum.flat_map(&Ash.Api.Info.resources/1)
|
||||
|> all_extensions()
|
||||
|
||||
Enum.uniq(all_extensions(apis) ++ resource_extensions)
|
||||
Enum.uniq(all_extensions(apis) ++ resource_extensions)
|
||||
else
|
||||
Application.loaded_applications()
|
||||
|> Enum.map(&elem(&1, 0))
|
||||
|> Enum.flat_map(&elem(:application.get_key(&1, :modules), 1))
|
||||
|> Stream.chunk_every(100)
|
||||
# This takes a while, but it doesn't when we split up the work
|
||||
|> Task.async_stream(fn modules ->
|
||||
modules
|
||||
|> Enum.filter(&Spark.implements_behaviour?(&1, Spark.Dsl.Extension))
|
||||
|> Enum.uniq()
|
||||
end)
|
||||
# we're assuming no failures
|
||||
|> Stream.flat_map(&elem(&1, 1))
|
||||
|> Enum.uniq()
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Get all apis for the current project and ensure they are compiled.
|
||||
"""
|
||||
def apis!(argv \\ []) do
|
||||
def apis!(argv) do
|
||||
{opts, _} = OptionParser.parse!(argv, strict: [apis: :string])
|
||||
|
||||
apis =
|
||||
|
@ -84,4 +100,13 @@ defmodule Ash.Mix.Tasks.Helpers do
|
|||
Mix.raise("Could not load #{inspect(api)}, error: #{inspect(error)}. ")
|
||||
end
|
||||
end
|
||||
|
||||
defp all_loaded do
|
||||
:code.all_loaded()
|
||||
|> Enum.filter(fn
|
||||
{mod, _} when is_atom(mod) -> true
|
||||
_ -> false
|
||||
end)
|
||||
|> Enum.map(&elem(&1, 0))
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue