agency v0.3.1 Agency behaviour View Source
Agency
is an abstraction layer above Agent
allowing to use any
container supporting Access
behind and simplifying the client API
handling.
Agency
itself implements Access
behaviour, making it possible to
embed instances in the middle of Access.keys
chains.
In a nutshell, Agency
backs up the Agent
holding a container.
All the standard CRUD-like calls are done through containers’
Access
implementation, allowing transparent shared access.
The set of before_***/1
and after_***/1
functions are introduced,
so that the main Agent
feature distinguishing it from the standard
GenServer
holding state—namely, a separation of client and server
APIs—is exposed transparently to the consumers.
Consider the following example.
defmodule MyAgent do
use Agency, into: %{} # default
def after_get(value) do
value + 1
end
...
end
The above code introduces an Agent
backing up Map
and
exposes the standard CRUD-like functionality. After the value
would be got from the server API, it’d be increased by 1
and returned to the consumer.
Options
use Agency
accepts two options:
name: GenServer.name()
the name, this process will be identified by. Optional, if not given the only instance of theAgent
is allowed. If given, all the subsequent calls to CRUD functions must include this name as the first parameter. In that case, multiple instances are allowedinto: Access.t()
the container to be used byAgent
data: map() | keyword()
the static data to be held by the instances
One might also pass any struct, or whatever else implementing
Access
as into:
option to be used as an Agent
container.
Link to this section Summary
Callbacks
The callback that is called from get/1
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from get_and_update/2
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from pop/1
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from put/2
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from this/0
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from update/2
right after
the Agent
has returned the value, passing this value as
a parameter.
The callback that is called from all the interface
methods (but this/0
) right before the Agent
is to be called.
The callback that is called from get/1
right before
the Agent
is to be called, passing key as an argument.
The callback that is called from get_and_update/2
right before
the Agent
is to be called, passing key as an argument.
The callback that is called from pop/1
right before
the Agent
is to be called, passing key as an argument.
The callback that is called from put/2
right before
the Agent
is to be called, passing key as an argument.
The callback that is called from update/2
right before
the Agent
is to be called, passing key as an argument.
Link to this section Types
Link to this section Functions
Creates an Agent
module.
If the module is already loaded, this is a no-op.
Link to this section Callbacks
Specs
after_get(value) :: value when value: value()
The callback that is called from get/1
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
after_get_and_update(value) :: value when value: value()
The callback that is called from get_and_update/2
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
after_pop(value) :: value when value: value()
The callback that is called from pop/1
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
after_put(value) :: value when value: value()
The callback that is called from put/2
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
The callback that is called from this/0
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
after_update(value) :: value when value: value()
The callback that is called from update/2
right after
the Agent
has returned the value, passing this value as
a parameter.
Specs
The callback that is called from all the interface
methods (but this/0
) right before the Agent
is to be called.
Specific handlers take precedence over this one.
Specs
before_get(key) :: key when key: keys()
The callback that is called from get/1
right before
the Agent
is to be called, passing key as an argument.
It should return a modified key. Note that the key
here
is always represented a list, even if the single value
was passed to the interface function.
Specs
before_get_and_update(key) :: key when key: keys()
The callback that is called from get_and_update/2
right before
the Agent
is to be called, passing key as an argument.
It should return a modified key. Note that the key
here
is always represented a list, even if the single value
was passed to the interface function.
Specs
before_pop(key) :: key when key: keys()
The callback that is called from pop/1
right before
the Agent
is to be called, passing key as an argument.
It should return a modified key. Note that the key
here
is always represented a list, even if the single value
was passed to the interface function.
Specs
before_put(key) :: key when key: keys()
The callback that is called from put/2
right before
the Agent
is to be called, passing key as an argument.
It should return a modified key. Note that the key
here
is always represented a list, even if the single value
was passed to the interface function.
Specs
before_update(key) :: key when key: keys()
The callback that is called from update/2
right before
the Agent
is to be called, passing key as an argument.
It should return a modified key. Note that the key
here
is always represented a list, even if the single value
was passed to the interface function.