Skip to main content

lib/active_memory.ex

defmodule ActiveMemory do
  @moduledoc """
  Bring the power of in memory storage with ETS and Mnesia to your Elixir application.

  ActiveMemory provides a simple interface and configuration which abstracts the ETS and Mnesia specifics and provides a common interface called a `Store`.

  ## Example setup
  1. Define a `Table` with attributes.
  2. Define a `Store` with configuration settings or accept the defaults (most applications should be fine with defaults).
  3. Add the `Store` to your application supervision tree.

  Your app is ready!

  Example Mnesia (default table type) Table:
  ```elixir
  defmodule Test.Support.People.Person do
    use ActiveMemory.Table,
      options: [index: [:last, :cylon?]]

    attributes do
      field :email
      field :first
      field :last
      field :hair_color
      field :age
      field :cylon?
    end
  end
  ```

  Example ETS Table:
  ```elixir
  defmodule Test.Support.People.Person do
    use ActiveMemory.Table,
      options: [index: [:last, :cylon?]],
      type: :ets

    attributes do
      field :email
      field :first
      field :last
      field :hair_color
      field :age
      field :cylon?
    end
  end
  ```

  Example Store:
  ```elixir
  defmodule MyApp.People.Store do
  use ActiveMemory.Store,
    table: MyApp.People.Person,
    before_init: [function: [arg1, arg2]]
  end
  ```

  Add the `Store` to your application supervision tree:
  ```elixir
  defmodule MyApp.Application do
  # code..
  def start(_type, _args) do
    children = [
      # other children
      MyApp.People.Store,
      # other children
    ]
    # code..
  end
  ```

  """
end