mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 13:33:20 +12:00
improvement: warn on api missing from config
This commit is contained in:
parent
9987cb05e8
commit
94815605b9
5 changed files with 47 additions and 3 deletions
|
@ -28,4 +28,5 @@ if Mix.env() == :test do
|
||||||
]
|
]
|
||||||
|
|
||||||
config :ash, :validate_api_resource_inclusion?, false
|
config :ash, :validate_api_resource_inclusion?, false
|
||||||
|
config :ash, :validate_api_config_inclusion?, false
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,7 +36,14 @@ defmodule Ash.Api do
|
||||||
Additionally, you can define a `code_interface` on each resource. See the code interface guide for more.
|
Additionally, you can define a `code_interface` on each resource. See the code interface guide for more.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
use Spark.Dsl, default_extensions: [extensions: [Ash.Api.Dsl]]
|
use Spark.Dsl,
|
||||||
|
default_extensions: [extensions: [Ash.Api.Dsl]],
|
||||||
|
opt_schema: [
|
||||||
|
validate_config_inclusion?: [
|
||||||
|
type: :boolean,
|
||||||
|
default: true
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
import Spark.OptionsHelpers, only: [merge_schemas: 3]
|
import Spark.OptionsHelpers, only: [merge_schemas: 3]
|
||||||
|
|
||||||
|
@ -1398,6 +1405,36 @@ defmodule Ash.Api do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def verify(module, opts) do
|
||||||
|
if Application.get_env(:ash, :validate_api_config_inclusion?, true) &&
|
||||||
|
Keyword.get(opts, :validate_config_inclusion?, true) do
|
||||||
|
otp_app = Mix.Project.config()[:app]
|
||||||
|
|
||||||
|
apis =
|
||||||
|
Application.get_env(otp_app, :ash_apis, [])
|
||||||
|
|
||||||
|
if module not in apis do
|
||||||
|
IO.warn("""
|
||||||
|
Api #{inspect(module)} is not present in
|
||||||
|
|
||||||
|
config :#{otp_app}, ash_apis: #{inspect(apis)}.
|
||||||
|
|
||||||
|
|
||||||
|
To resolve this warning, do one of the following.
|
||||||
|
|
||||||
|
1. Add the api to your configured api modules. The following snippet can be used.
|
||||||
|
|
||||||
|
config :#{otp_app}, ash_apis: #{inspect(apis ++ [module])}
|
||||||
|
|
||||||
|
2. Add the option `validate_config_inclusion?: false` to `use Ash.Api`
|
||||||
|
|
||||||
|
3. Configure all apis not to warn, with `config :ash, :validate_api_config_inclusion?, false`
|
||||||
|
""")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
# sobelow_skip ["DOS.StringToAtom"]
|
# sobelow_skip ["DOS.StringToAtom"]
|
||||||
@impl Spark.Dsl
|
@impl Spark.Dsl
|
||||||
|
|
|
@ -61,7 +61,7 @@ defmodule Ash.EmbeddableType do
|
||||||
|
|
||||||
defmodule ShadowApi do
|
defmodule ShadowApi do
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
use Ash.Api
|
use Ash.Api, validate_config_inclusion?: false
|
||||||
|
|
||||||
resources do
|
resources do
|
||||||
allow_unregistered?(true)
|
allow_unregistered?(true)
|
||||||
|
|
|
@ -192,7 +192,7 @@ defmodule Ash.Filter do
|
||||||
# Used for fetching related data in filters, which will have already had authorization rules applied
|
# Used for fetching related data in filters, which will have already had authorization rules applied
|
||||||
defmodule ShadowApi do
|
defmodule ShadowApi do
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
use Ash.Api
|
use Ash.Api, validate_config_inclusion?: false
|
||||||
|
|
||||||
resources do
|
resources do
|
||||||
allow_unregistered?(true)
|
allow_unregistered?(true)
|
||||||
|
|
|
@ -17,6 +17,12 @@ defmodule Ash.Resource do
|
||||||
default_extensions: [
|
default_extensions: [
|
||||||
data_layer: Ash.DataLayer.Simple,
|
data_layer: Ash.DataLayer.Simple,
|
||||||
extensions: [Ash.Resource.Dsl]
|
extensions: [Ash.Resource.Dsl]
|
||||||
|
],
|
||||||
|
opt_schema: [
|
||||||
|
validate_api_inclusion?: [
|
||||||
|
type: :boolean,
|
||||||
|
default: true
|
||||||
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
@doc false
|
@doc false
|
||||||
|
|
Loading…
Reference in a new issue