Skip to content

danielefongo/attributes

Repository files navigation

Attributes

GitHub Workflow Status Coveralls Hex pm Hex.pm

Manipulate complex attributes on modules.

Installation

The package can be installed by adding attributes to your list of dependencies in mix.exs:

def deps do
  [
    {:attributes, "~> 0.4.0"}
  ]
end

Documentation

Full documentation can be found at https://hexdocs.pm/attributes.

Usage

Attributes offers utility functions to manipulate complex attributes on modules.

A typical usage could be inside macros that need to enrich modules before their compilation. You can set, get, update or delete attributes' tree.

defmodule MyModule do
  Attributes.set(__MODULE__, [:path, :to, :attr], :value)
end

Attributes supports nested maps and keyword. The previous assignment could be rewritten as follow:

Attributes.set(__MODULE__, [:path], [to: [attr: :value]])
Attributes.set(__MODULE__, [:path], %{to: %{attr: :value}})

After defining an attribute, you can obtain its value using Attributes.get/2, Attributes.get/3 or Attributes.get!/2 methods.

iex> Attributes.get(MyModule, [:path, :to, :attr])
iex> :value
iex> Attributes.get(MyModule, [:path, :to])
iex> [attr: :value]