ExternalState
Store state, as a properties structure, externally to a process.
Usage
defmodule MyGenserver do
use ExternalState, persist: false, props: [foo: true]
def init(:ok) do
init_ex_state() # external state is now at the defaults specified in use
end
# ...
def do_foo do
# ... something that sets foo to true ...
merge_ex_state(foo: true)
end
def undo_foo do
# ... something that sets foo to false ...
merge_ex_state(foo: false)
# or: merge_ex_state(%{foo: false})
end
def foo? do
get_ex_state().foo
end
endAPI
The following are added to your module when you use ExternalState:
@ex_state_structAn atom name for your external state structuredefault_ex_state/0Get a state structure with default values from propsinit_ex_state/0Initialize your external state; must call once, multiple calls are okayget_ex_state/0Get the current external state or nil if no init yetput_ex_state/1Set the external state, returns the state or nil if no init yetmerge_ex_state/1Update the external state with values from the parameter, which can be a keyword list of keys and values or a map.
If ExternalState is used with persist: true, then the external state will
remain valid after the process that calls init_ex_state/0 exits. This
is the default.
Installation
If available in Hex, the package can be installed
by adding external_state to your list of dependencies in mix.exs:
def deps do
[
{:external_state, "~> 1.0.3"}
]
endDocumentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/external_state.