Jeeves v0.1.3 Jeeves.Named
Implement a singleton (global) named service.
Usage
To create the service:
Create a module that implements the API you want. This API will be expressed as a set of public functions. Each function will automatically receive the current state in a variable (by default named
state). There is not need to declare this as a parameter.[why?]. If a function wants to change the state, it must end with a call to theJeeves.Common.update_state/2function (which will have been imported into your module automatically).For this example, we’ll call the module
NamedService.Add the line
use Jeeves.Namedto the top of this module.
To consume the service:
Create an instance of the service with
NamedJeeves.run(). You can pass initial state to the service as an optional parameter. This call returns a handle to this service instance, but you shouldn’t use it.Call the API functions in the service.
Example
defmodule KV do
using Jeeves.Named, state: %{}
def get(name), do: state[name]
def put(name, value) do
update_state(Map.put(state, name, value)) do
value
end
end
end
KV.run(%{ name: "Elixir" })
KV.put(:type, "language")
KV.get(:name) # => "Elixir"
KV.get(:type) # => "language"
Options
You can pass a keyword list to use Jeeves.Anonymous:
state:valuestate_name:atomThe default name for the state variable is (unimaginatively)
state. Usestate_nameto override this. For example, you could change the previous example to usestorefor the state with:defmodule KV do
using Jeeves.Named, state: %{}, state_name: :store def get(name), do: store[name] def put(name, value) do update_state(Map.put(store, name, value)) do value end endend
service_name:atomThe default name for the service is the name of the module that defines it. Use
service_name:to change this.showcode:booleanIf truthy, dump a representation of the generated code to STDOUT during compilation.