View Source EctoRange (ecto_range v0.2.1)
EctoRange
is a tiny library that provides Ecto custom types for all Postgres Range types.
The main design goal of EctoRange
is to be easy to use with native Elixir types,
while providing the full flexibility of Postgres Range types inside of Ecto.
Postgres type | Ecto.Type |
---|---|
int4range | EctoRange.Int4 |
int8range | EctoRange.Int8 |
numrange | EctoRange.Num |
tsrange | EctoRange.Timestamp |
tstzrange | EctoRange.TimestampTZ |
daterange | EctoRange.Date |
usage
Usage
EctoRange
provides custom types, and can be used like any other Ecto type.
defmodule MyApp.Repo.Migrations.AddRange do
use Ecto.Migration
def change do
create table(:my_table) do
add :name, :string
add :range, :daterange
end
end
end
defmodule MyApp.Table do
use Ecto.Schema
import Ecto.Changeset
schema "my_table" do
field(:name, :string)
field(:range, EctoRange.Date)
end
def changeset(table, params) do
table
|> cast(params, [:name, :range])
|> validate_required([:name, :range])
end
end
iex> alias MyApp.Table
iex> range = Date.range(~D[1989-09-22], ~D[2021-03-01])
iex> cs = Table.changeset(%Table{}, %{name: "table", range: range})
iex> cs.changes
%Ecto.Changeset{
changes: %{
range: %Postgrex.Range{
lower: ~D[1989-09-22],
upper: ~D[2021-03-01],
lower_inclusive: true,
upper_inclusive: true
},
name: "name"
},
data: %MyApp.Table{id: nil, name: nil, range: nil},
params: %{
"range" => Date.range(~D[1989-09-22], ~D[2021-03-01]),
"name" => "name"
},
valid?: true
}
installation
Installation
If available in Hex, the package can be installed
by adding ectorange
to your list of dependencies in mix.exs
:
def deps do
[
{:ecto_range, "~> 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/ectorange.
alternative-libraries
Alternative libraries
If you're unhappy with the feature setEctoRange
, there are some alternative libraries that provide similar functionality