mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
improvement: add not_found_error?
option to interface builder and when calling
This commit is contained in:
parent
113b8740d4
commit
82d3ec3946
3 changed files with 25 additions and 3 deletions
|
@ -121,6 +121,7 @@ spark_locals_without_parens = [
|
||||||
module: 1,
|
module: 1,
|
||||||
name: 1,
|
name: 1,
|
||||||
no_attributes?: 1,
|
no_attributes?: 1,
|
||||||
|
not_found_error?: 1,
|
||||||
not_found_message: 1,
|
not_found_message: 1,
|
||||||
offset?: 1,
|
offset?: 1,
|
||||||
on: 1,
|
on: 1,
|
||||||
|
|
|
@ -213,7 +213,12 @@ defmodule Ash.CodeInterface do
|
||||||
)
|
)
|
||||||
|> case do
|
|> case do
|
||||||
{:ok, nil} ->
|
{:ok, nil} ->
|
||||||
|
if unquote(interface.not_found_error?) == false ||
|
||||||
|
Keyword.get(opts, :not_found_error?) == false do
|
||||||
|
{:ok, nil}
|
||||||
|
else
|
||||||
{:error, Ash.Error.Query.NotFound.exception(resource: query.resource)}
|
{:error, Ash.Error.Query.NotFound.exception(resource: query.resource)}
|
||||||
|
end
|
||||||
|
|
||||||
{:ok, result} ->
|
{:ok, result} ->
|
||||||
{:ok, result}
|
{:ok, result}
|
||||||
|
@ -286,7 +291,12 @@ defmodule Ash.CodeInterface do
|
||||||
)
|
)
|
||||||
|> case do
|
|> case do
|
||||||
nil ->
|
nil ->
|
||||||
|
if unquote(interface.not_found_error?) == false ||
|
||||||
|
Keyword.get(opts, :not_found_error?) == false do
|
||||||
|
nil
|
||||||
|
else
|
||||||
raise Ash.Error.Query.NotFound, resource: query.resource
|
raise Ash.Error.Query.NotFound, resource: query.resource
|
||||||
|
end
|
||||||
|
|
||||||
result ->
|
result ->
|
||||||
result
|
result
|
||||||
|
|
|
@ -2,7 +2,7 @@ defmodule Ash.Resource.Interface do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Represents a function in a resource's code interface
|
Represents a function in a resource's code interface
|
||||||
"""
|
"""
|
||||||
defstruct [:name, :action, :args, :get?, :get_by, :get_by_identity]
|
defstruct [:name, :action, :args, :get?, :get_by, :get_by_identity, :not_found_error?]
|
||||||
|
|
||||||
@type t :: %__MODULE__{}
|
@type t :: %__MODULE__{}
|
||||||
|
|
||||||
|
@ -80,6 +80,11 @@ defmodule Ash.Resource.Interface do
|
||||||
load: [
|
load: [
|
||||||
type: :any,
|
type: :any,
|
||||||
doc: "Adds a load statement to the query before passing it to the action."
|
doc: "Adds a load statement to the query before passing it to the action."
|
||||||
|
],
|
||||||
|
not_found_error?: [
|
||||||
|
type: :boolean,
|
||||||
|
doc:
|
||||||
|
"Whether or not to return or raise a `NotFound` error or to return `nil` when a get? action/interface is called."
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
@ -106,6 +111,12 @@ defmodule Ash.Resource.Interface do
|
||||||
""",
|
""",
|
||||||
links: []
|
links: []
|
||||||
],
|
],
|
||||||
|
not_found_error?: [
|
||||||
|
type: :boolean,
|
||||||
|
default: true,
|
||||||
|
doc:
|
||||||
|
"If the action or interface is configured with `get?: true`, this determines whether or not an error is raised or `nil` is returned."
|
||||||
|
],
|
||||||
get?: [
|
get?: [
|
||||||
type: :boolean,
|
type: :boolean,
|
||||||
doc: """
|
doc: """
|
||||||
|
|
Loading…
Reference in a new issue