mirror of
https://github.com/ash-project/ash.git
synced 2024-09-20 05:23:03 +12:00
improvement(Ash.Resource.Calculation): set struct defaults. (#673)
This commit is contained in:
parent
bb8f3334cd
commit
025f75a1aa
2 changed files with 74 additions and 58 deletions
54
lib/ash/resource/calculation/argument.ex
Normal file
54
lib/ash/resource/calculation/argument.ex
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
defmodule Ash.Resource.Calculation.Argument do
|
||||||
|
@moduledoc "An argument to a calculation"
|
||||||
|
defstruct allow_nil?: true,
|
||||||
|
allow_expr?: false,
|
||||||
|
constraints: [],
|
||||||
|
default: nil,
|
||||||
|
name: nil,
|
||||||
|
type: nil
|
||||||
|
|
||||||
|
@type t :: %__MODULE__{
|
||||||
|
allow_nil?: boolean,
|
||||||
|
allow_expr?: boolean,
|
||||||
|
constraints: keyword,
|
||||||
|
default: any,
|
||||||
|
name: atom,
|
||||||
|
type: Ash.Type.t()
|
||||||
|
}
|
||||||
|
|
||||||
|
@schema [
|
||||||
|
name: [
|
||||||
|
type: :atom,
|
||||||
|
required: true,
|
||||||
|
doc: "The name of the argument"
|
||||||
|
],
|
||||||
|
type: [
|
||||||
|
type: Ash.OptionsHelpers.ash_type(),
|
||||||
|
required: true,
|
||||||
|
doc: "The type of the argument. See `Ash.Type` for more."
|
||||||
|
],
|
||||||
|
default: [
|
||||||
|
type: {:or, [{:mfa_or_fun, 0}, :literal]},
|
||||||
|
required: false,
|
||||||
|
doc: "A default value to use for the argument if not provided"
|
||||||
|
],
|
||||||
|
allow_nil?: [
|
||||||
|
type: :boolean,
|
||||||
|
default: true,
|
||||||
|
doc: "Whether or not the argument value may be nil (or may be not provided)"
|
||||||
|
],
|
||||||
|
allow_expr?: [
|
||||||
|
type: :boolean,
|
||||||
|
default: false,
|
||||||
|
doc: "Allow passing expressions as argument values. Expressions cannot be type validated."
|
||||||
|
],
|
||||||
|
constraints: [
|
||||||
|
type: :keyword_list,
|
||||||
|
default: [],
|
||||||
|
doc:
|
||||||
|
"Constraints to provide to the type when casting the value. See the type's documentation and `Ash.Type` for more."
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def schema, do: @schema
|
||||||
|
end
|
|
@ -1,19 +1,17 @@
|
||||||
defmodule Ash.Resource.Calculation do
|
defmodule Ash.Resource.Calculation do
|
||||||
@moduledoc "Represents a named calculation on a resource"
|
@moduledoc "Represents a named calculation on a resource"
|
||||||
|
|
||||||
defstruct [
|
defstruct allow_nil?: true,
|
||||||
:name,
|
arguments: [],
|
||||||
:type,
|
calculation: nil,
|
||||||
:calculation,
|
constraints: [],
|
||||||
:arguments,
|
description: nil,
|
||||||
:description,
|
filterable?: true,
|
||||||
:constraints,
|
load: [],
|
||||||
:private?,
|
name: nil,
|
||||||
:allow_nil?,
|
private?: false,
|
||||||
:select,
|
select: [],
|
||||||
:load,
|
type: nil
|
||||||
filterable?: true
|
|
||||||
]
|
|
||||||
|
|
||||||
@schema [
|
@schema [
|
||||||
name: [
|
name: [
|
||||||
|
@ -81,57 +79,21 @@ defmodule Ash.Resource.Calculation do
|
||||||
]
|
]
|
||||||
|
|
||||||
@type t :: %__MODULE__{
|
@type t :: %__MODULE__{
|
||||||
|
allow_nil?: boolean,
|
||||||
|
arguments: [__MODULE__.Argument.t()],
|
||||||
|
calculation: module | {module, keyword},
|
||||||
|
constraints: keyword,
|
||||||
|
description: nil | String.t(),
|
||||||
|
filterable?: boolean,
|
||||||
|
load: keyword,
|
||||||
name: atom(),
|
name: atom(),
|
||||||
calculation: {:ok, {atom(), any()}} | {:error, String.t()},
|
|
||||||
arguments: list(any()),
|
|
||||||
description: String.t() | nil,
|
|
||||||
private?: boolean,
|
private?: boolean,
|
||||||
allow_nil?: boolean
|
select: keyword,
|
||||||
|
type: nil | Ash.Type.t()
|
||||||
}
|
}
|
||||||
|
|
||||||
@type ref :: {module(), Keyword.t()} | module()
|
@type ref :: {module(), Keyword.t()} | module()
|
||||||
|
|
||||||
defmodule Argument do
|
|
||||||
@moduledoc "An argument to a calculation"
|
|
||||||
defstruct [:name, :type, :default, :allow_nil?, :constraints, :allow_expr?]
|
|
||||||
|
|
||||||
@schema [
|
|
||||||
name: [
|
|
||||||
type: :atom,
|
|
||||||
required: true,
|
|
||||||
doc: "The name of the argument"
|
|
||||||
],
|
|
||||||
type: [
|
|
||||||
type: Ash.OptionsHelpers.ash_type(),
|
|
||||||
required: true,
|
|
||||||
doc: "The type of the argument. See `Ash.Type` for more."
|
|
||||||
],
|
|
||||||
default: [
|
|
||||||
type: {:or, [{:mfa_or_fun, 0}, :literal]},
|
|
||||||
required: false,
|
|
||||||
doc: "A default value to use for the argument if not provided"
|
|
||||||
],
|
|
||||||
allow_nil?: [
|
|
||||||
type: :boolean,
|
|
||||||
default: true,
|
|
||||||
doc: "Whether or not the argument value may be nil (or may be not provided)"
|
|
||||||
],
|
|
||||||
allow_expr?: [
|
|
||||||
type: :boolean,
|
|
||||||
default: false,
|
|
||||||
doc: "Allow passing expressions as argument values. Expressions cannot be type validated."
|
|
||||||
],
|
|
||||||
constraints: [
|
|
||||||
type: :keyword_list,
|
|
||||||
default: [],
|
|
||||||
doc:
|
|
||||||
"Constraints to provide to the type when casting the value. See the type's documentation and `Ash.Type` for more."
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
def schema, do: @schema
|
|
||||||
end
|
|
||||||
|
|
||||||
def schema, do: @schema
|
def schema, do: @schema
|
||||||
|
|
||||||
def expr_calc(expr) when is_function(expr) do
|
def expr_calc(expr) when is_function(expr) do
|
||||||
|
|
Loading…
Reference in a new issue