Massex
Massex is a simple pattern for holding masses and interacting with them in a sensible manner. It follows the whole value pattern, and allows easy storage, retrieval and mathematics upon values of mass in disparate scales.
iex> one = Massex.new(10, :gram)
...> two = Massex.new(10, :ounce)
...> Massex.add(one, two)
Supporting Libraries
Massex ships with Jason support which will automatically be loaded if your project is using Jason for JSON handling. Additionally, it also supports Absinthe and Ecto.
Absinthe
To activate the Absinthe support, just import the types in your schema:
import_types Massex.Absinthe.Type
You can then use Massex objects in your Schemas
object :lorry do
field :mass, :mass
end
Or in your mutations
payload field :set_lorry_mass do
input do
field :id, non_null(:id)
field :mass, non_null(:mass_input)
end
end
Ecto
You can transparently store Massex structs in your schemas by adding the mass field as a map/json/jsonb type in your schema.
schema "lorries" do
field :mass, Massex.Ecto.Type
end
Installation
If available in Hex, the package can be installed
by adding massex
to your list of dependencies in mix.exs
:
def deps do
[
{:massex, "~> 0.1.0"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/massex.