Diffo.Provider.DefinedSimpleRelationship (Diffo v0.4.1)

Copy Markdown View Source

Ash Resource for a relationship with an optional single embedded characteristic, set at creation and never changed.

Extends BaseRelationship (source, target, type, timestamps). Optionally carries one DefinedCharacteristic — a name/value pair stored directly on the Neo4j node. The value is a Diffo.Type.Primitive, covering string, integer, float, boolean, and temporal types.

Actions: create and destroy only. No update, no relate/unrelate. Once defined, the characteristic is closed — that is the commitment.

Contrast with Provider.Relationship which allows mutable graph-based Characteristic nodes to be added, removed, and updated over time.

DefinedSimpleRelationship is a general Provider primitive for any relationship whose characteristic is a commitment or promise made at creation time.

An Ash Resource for a relationship with a single optional characteristic, defined at creation and closed thereafter

Summary

Functions

Validates that the keys in the provided input are valid for at least one action on the resource.

Same as input/1, except restricts the keys to values accepted by the action provided.

Types

t()

@type t() :: %Diffo.Provider.DefinedSimpleRelationship{
  __lateral_join_source__: term(),
  __meta__: term(),
  __metadata__: term(),
  __order__: term(),
  aggregates: term(),
  alias: term(),
  calculations: term(),
  characteristic: term(),
  created_at: term(),
  id: term(),
  source: term(),
  source_id: term(),
  target: term(),
  target_href: term(),
  target_id: term(),
  target_type: term(),
  type: term(),
  updated_at: term()
}

Functions

default_short_name()

input(opts)

@spec input(values :: map() | Keyword.t()) :: map() | no_return()

Validates that the keys in the provided input are valid for at least one action on the resource.

Raises a KeyError error at compile time if not. This exists because generally a struct should only ever be created by Ash as a result of a successful action. You should not be creating records manually in code, e.g %MyResource{value: 1, value: 2}. Generally that is fine, but often with embedded resources it is nice to be able to validate the keys that are being provided, e.g

Resource
|> Ash.Changeset.for_create(:create, %{embedded: EmbeddedResource.input(foo: 1, bar: 2)})
|> Ash.create()

input(opts, action)

@spec input(values :: map() | Keyword.t(), action :: atom()) :: map() | no_return()

Same as input/1, except restricts the keys to values accepted by the action provided.

primary_key_matches?(left, right)