zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

types.exs (1475B)


      1 defmodule CustomPermalink do
      2   def type, do: :id
      3 
      4   def cast(string) when is_binary(string) do
      5     case Integer.parse(string) do
      6       {int, _} -> {:ok, int}
      7       :error   -> :error
      8     end
      9   end
     10 
     11   def cast(integer) when is_integer(integer), do: {:ok, integer}
     12   def cast(_), do: :error
     13 
     14   def load(integer) when is_integer(integer), do: {:ok, integer}
     15   def dump(integer) when is_integer(integer), do: {:ok, integer}
     16 end
     17 
     18 defmodule PrefixedString do
     19   use Ecto.Type
     20   def type(), do: :string
     21   def cast(string), do: {:ok, string}
     22   def load(string), do: {:ok, "PREFIX-" <> string}
     23   def dump("PREFIX-" <> string), do: {:ok, string}
     24   def dump(_string), do: :error
     25   def embed_as(_), do: :dump
     26 end
     27 
     28 defmodule WrappedInteger do
     29   use Ecto.Type
     30   def type(), do: :integer
     31   def cast(integer), do: {:ok, {:int, integer}}
     32   def load(integer), do: {:ok, {:int, integer}}
     33   def dump({:int, integer}), do: {:ok, integer}
     34 end
     35 
     36 defmodule ParameterizedPrefixedString do
     37   use Ecto.ParameterizedType
     38   def init(opts), do: Enum.into(opts, %{})
     39   def type(_), do: :string
     40 
     41   def cast(data, %{prefix: prefix}) do
     42     if String.starts_with?(data, [prefix <> "-"]) do
     43       {:ok, data}
     44     else
     45       {:ok, prefix <> "-" <> data}
     46     end
     47   end
     48 
     49   def load(string, _, %{prefix: prefix}), do: {:ok, prefix <> "-" <> string}
     50   def dump(nil, _, _), do: {:ok, nil}
     51   def dump(data, _, %{prefix: _prefix}), do: {:ok, data |> String.split("-") |> List.last()}
     52   def embed_as(_, _), do: :dump
     53 end