Skip to content

Instantly share code, notes, and snippets.

@h0lyalg0rithm
Created September 29, 2016 20:53
Show Gist options
  • Select an option

  • Save h0lyalg0rithm/54fdfb02fd2cf8e8196b71d832c49b1b to your computer and use it in GitHub Desktop.

Select an option

Save h0lyalg0rithm/54fdfb02fd2cf8e8196b71d832c49b1b to your computer and use it in GitHub Desktop.

Revisions

  1. h0lyalg0rithm created this gist Sep 29, 2016.
    33 changes: 33 additions & 0 deletions daterange.ex
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    defmodule LocationService.Daterange do
    @behaviour Ecto.Type

    def type, do: :daterange

    def cast([lower, upper]) do
    {:ok, [lower, upper]}
    end

    def cast(_), do: :error

    def load(%Postgrex.Range{lower: lower, upper: nil}) do
    lower = lower |> to_datetime
    {:ok, [lower, nil]}
    end

    def load(%Postgrex.Range{lower: lower, upper: upper}) do
    lower = lower |> to_datetime
    upper = upper |> to_datetime
    {:ok, [lower, upper]}
    end

    def dump([lower, upper]) do
    {:ok, %Postgrex.Range{lower: lower, upper: upper, upper_inclusive: false}}
    end

    def dump(_), do: :error

    defp to_datetime(value) do
    datetime = value |> Ecto.DateTime.load
    elem(datetime, 1)
    end
    end