Current section
Files
Jump to
Current section
Files
lib/shake/frame.ex
defmodule Shake.Frame do
@moduledoc """
Defines a struct that is passed up and down the Shake build chain.
defstruct cfg_snip: "",
cfg_name: "",
params: %{},
catalog: %{},
index: %{},
query: "",
scores: [],
results: %{},
tgt_id: nil,
tgt_doc: %{},
halted: false,
halt_msg: "",
digests: %{},
assigns: %{}
"""
alias Shake.Frame
@type cfg_snip :: String.t
@type cfg_name :: String.t
@type params :: map
@type catalog :: map
@type index :: map
@type query :: String.t
@type scores :: list
@type results :: map
@type tgt_id :: integer
@type tgt_doc :: map
@type halted :: boolean
@type halt_msg :: String.t | [String.t]
@type digests :: %{atom => String.t}
@type assigns :: %{atom => any}
@type t :: %__MODULE__{
cfg_snip: cfg_snip,
cfg_name: cfg_name,
params: params,
catalog: catalog,
index: index,
query: query,
scores: scores,
results: results,
tgt_id: tgt_id,
tgt_doc: tgt_doc,
halted: halted,
halt_msg: halt_msg,
digests: digests,
assigns: assigns
}
defstruct cfg_snip: "",
cfg_name: "",
params: %{},
catalog: %{},
index: %{},
query: "",
scores: [],
results: %{},
tgt_id: nil,
tgt_doc: %{},
halted: false,
halt_msg: "",
digests: %{},
assigns: %{}
@doc """
Halts the Shake job by preventing downstream steps
from being invoked. Optional `halt_msg` can be a
String or list of Strings.
"""
@spec halt(t) :: t
def halt(%Frame{} = frame, halt_msg \\ "") do
%{frame | halted: true, halt_msg: halt_msg}
end
@doc """
Assigns a value to a key in the frame
## Examples
iex> frame.assigns[:hello]
nil
iex> frame = assign(frame, :hello, :world)
iex> frame.assigns[:hello]
:world
"""
@spec assign(t, atom, term) :: t
def assign(%Frame{assigns: assigns} = frame, key, value) when is_atom(key) do
%Frame{frame | assigns: Map.put(assigns, key, value)}
end
@doc """
Assign a digest to a key in the frame
"""
def set_digest(%Frame{digests: digests} = frame, key, value) when is_atom(key) do
%Frame{frame | digests: Map.put(digests, key, value)}
end
@doc """
Retrieve the digest from the frame
"""
def get_digest(%Frame{digests: digests} = _frame, key) when is_atom(key) do
digests[key]
end
end