Mnemonix v0.8.0 Mnemonix
Provides easy access to a Mnemonix.Store.Server through a Map-like interface.
Rather than a map, you can use the GenServer.server/0 reference returned
by Mnemonix.Store.Server.start_link/2 to perform operations on Mnemonix stores.
All functions defined in the Mnemonix.Features modules are available on the Mnemonix module:
Map Features
Mnemonix.Features.Map lets you manipulate a Mnemonix.Store.Server just like a Map.
The new/0, new/1, and new/2 functions start links to a
Mnemonix.Stores.Map (mimicking Map.new) and make it easy to play with the
Mnemonix functions:
iex> store = Mnemonix.new(fizz: 1)
iex> Mnemonix.get(store, :foo)
nil
iex> Mnemonix.get(store, :fizz)
1
iex> Mnemonix.put_new(store, :foo, "bar")
iex> Mnemonix.get(store, :foo)
"bar"
iex> Mnemonix.put_new(store, :foo, "baz")
iex> Mnemonix.get(store, :foo)
"bar"
iex> Mnemonix.put(store, :foo, "baz")
iex> Mnemonix.get(store, :foo)
"baz"
iex> Mnemonix.get(store, :fizz)
1
iex> Mnemonix.get_and_update(store, :fizz, &({&1, &1 * 2}))
iex> Mnemonix.get_and_update(store, :fizz, &({&1, &1 * 2}))
iex> Mnemonix.get(store, :fizz)
4
These functions behave exactly like their Map counterparts. However, Mnemonix
doesn’t supply analogs for functions that assume a store can be fit into a specific shape:
Functions that exhaustively iterate over a store’s contents live are implemented differently, see below.
Bump Features
Mnemonix.Features.Bump lets you perform increment/decrement operations on any store.
iex> store = Mnemonix.new(fizz: 1)
iex> Mnemonix.increment(store, :fizz)
iex> Mnemonix.get(store, :fizz)
2
iex> Mnemonix.decrement(store, :fizz)
iex> Mnemonix.get(store, :fizz)
1
Expiry Features
Mnemonix.Features.Expiry lets you set entries to expire after a given time-to-live on any store.
iex> store = Mnemonix.new(fizz: 1)
iex> Mnemonix.expire(store, :fizz, 100)
iex> :timer.sleep(1000)
iex> Mnemonix.get(store, :fizz)
nil
Enumerable Features
Mnemonix.Features.Enumerable enables functions that try to iterate over a store’s contents. These
functions are to keep as much parity with the Map API as possible, but be warned: they are only
implemented for a subset of stores, and may be very inefficient. Consult your store’s specific
documentation for more details.
These Map equivalents will raise Mnemonix.Features.Enumerable.Error if your store doesn’t
support them:
Mnemonix.equal?/2Mnemonix.keys/1Mnemonix.to_list/1Mnemonix.values/1
Any store can be checked for enumerability support via Mnemonix.enumerable?/1.
Summary
Types
Keys allowed in Mnemonix entries
Values representing a store that Mnemonix functions can operate on
Values allowed in Mnemonix entries
Functions
Starts a new empty Mnemonix.Stores.Map-powered Mnemonix.Store.Server
Starts a new Mnemonix.Stores.Map-powered Mnemonix.Store.Server using enumerable for initial data
Starts a new Mnemonix.Stores.Map-powered Mnemonix.Store.Server applying a transformation to enumerable for initial data
Starts the :mnemonix application
Types
Values representing a store that Mnemonix functions can operate on.
Functions
Starts a new empty Mnemonix.Stores.Map-powered Mnemonix.Store.Server.
Examples
iex> store = Mnemonix.new
iex> Mnemonix.get(store, :a)
nil
iex> Mnemonix.get(store, :b)
nil
Starts a new Mnemonix.Stores.Map-powered Mnemonix.Store.Server using enumerable for initial data.
Duplicated keys in the enumerable are removed; the last mentioned one prevails.
Examples
iex> store = Mnemonix.new(a: 1)
iex> Mnemonix.get(store, :a)
1
iex> Mnemonix.get(store, :b)
nil
Starts a new Mnemonix.Stores.Map-powered Mnemonix.Store.Server applying a transformation to enumerable for initial data.
Duplicated keys are removed; the latest one prevails.
Examples
iex> store = Mnemonix.new(%{"A" => 0}, fn {key, value} ->
...> { String.downcase(key), value + 1 }
...> end )
iex> Mnemonix.get(store, "a")
1
iex> Mnemonix.get(store, "A")
nil
start(Application.start_type, [Mnemonix.Store.Server.config]) :: {:ok, store} | {:error, reason :: term}
Starts the :mnemonix application.
Finds stores in your application configuration and brings them up when your app starts with the
specified start type.
See Mnemonix.Application for more on how the opts are consumed.