แคแแแขแแฅแจแ แฎแจแแ แแ แแแแฌแแแก แแแแฃแขแแก แแฃแ แกแแก แแแแแชแแแแแแก แกแแแแแแ แแแแ แแแชแฃแแแแแก แแแแฃแจแแแแแ. แฉแแแ แแแฆแแแ แแแแแชแแแแแก แกแฎแแแแแกแฎแแ แฌแงแแ แแแแ แแ แแแแแแฃแ แแแแแแแก แแฅแแก แกแแแฃแแแ แ แฌแแ แแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แฃแแแ แแแฎแแแก แแแชแแแแแ แแฃแ แกแแก แแฅแกแขแ แแแแแแชแแ แฎแแแแแแแแแ แแฆแแก, แแแ, แแแแแแแแ แแแแก แแ แแฃแแแแช แจแแแแแแ แกแแแ แฌแแแกแแแแก. แแฃ แแแแแแก แจแแแซแแ แแแแแแแแแแแแก แแ แแแแแแแ แแแ แกแฌแแ แแ, แแ แ แแฅแแแแแแ แแแฎแฃแ แแ แแแแแแกแ แแ แกแฃแแแแฃแ แแ แจแแชแแแแแ แคแฃแแ แฌแแ แแ แฃแแแ. แแแแแแ แแ แฌแงแแ แ แฃแคแ แ แกแแแแแแแ, แแแแ แแฌแแแแก แกแ แฃแ แแแแแแก, แแแแฅแแแก แกแฌแแ แ แแแแจแแแแแแแแแแก แแจแแแแแ แฉแแแแ แแแแแ, แแแแ แแ แแแแแขแแแฃแ แ แฌแงแแแแแแแกแแแแก. แฉแแแแ แแแแชแแแแ แแแแแแฎแแแแ แแ แแแแแแแกแแแแ แแแแจแแแแแแแแก แฌแแแจแ แแ แแแแแกแแแฆแแ แแ แแฃแกแขแแ แ แ แแแฉแแแแแ แแแแฎแแแ แแแแแก. แฉแแแ แฃแแแ แแแแคแแแขแ แแ แแ แแ แกแฌแแ แ แแแแจแแแแแแแ แขแแแ แญแฃแญแงแแกแ แแ แกแแแแกแแแ, แแกแแแ แ แแแแ แช แคแแแแแแแแแแก แแแแแแแแ แแแแฉแแ.
แคแแแแแแแแแแแก แแแแกแแแฃแแ แแแฃแแ แแแแแ แฉแแฃแแ แแแแกแแแแ แแแแ แแแกแแฃแ แ แฅแแแแแ แแแฎแ แแแ แฌแแแ แ, แ แแแแแแแช แแกแแแ แคแแแขแ แแแแ แกแแแแแแก แฌแงแแแกแ แแ แขแแแแฎแแกแแแ.
-แแแแแแแแแ
แแกแ แแแแแแแ แแแแแแแแแแ Vela
แแแฅแแแ, แแแแ แแแแแ แแแแแแแแแแแก แกแแแ แกแแแแแฃแขแ แฌแงแแแแแกแแแแก. แฃแแแ แขแแแแกแ แแแแแแ แขแแแ Vela
แแแแแแแแ แ แแแแแแแ แแแแแก แจแแกแแแแฎแแ แแกแ แแแแแแงแฃแ แแแ:
defmodule Pairs do
use Vela,
eurusd: [sorter: &Kernel.<=/2],
eurgbp: [limit: 3, errors: 1],
eurcad: [validator: Pairs]
@behaviour Vela.Validator
@impl Vela.Validator
def valid?(:eurcad, rate), do: rate > 0
end
แคแแกแแฃแแแแแแแก แแแแแฎแแแแ
Vela.put/3
- แแแแแแฌแแแแก
validator
แแแแจแแแแแแแแแ, แแฃ แแก แแ แแก แแแแกแแแฆแแ แฃแแ (แแฎ. แแแแ แแแแแแแชแแ แฅแแแแแ); - แแแแแแขแแแก แแแแจแแแแแแแแก แแ แแแ แแ แแแแจแแแแแแแแแแก แแฌแแ แแแก, แแฃ แแแแแแแชแแ แฌแแ แแแขแแแฃแแ แแงแ, แแ แแแแกแแฎแฃแ แแแแก แ แแแก
:__errors__
แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ; - แแแแแแฌแแแแก แแแฎแแ แแกแฎแแแแก แแฃ
sorter
แแแแกแแแฆแแ แฃแแแ แแแชแแแฃแแ แแแกแแฆแแแแกแแแแก, แแ แฃแแ แแแแ แแแแงแแแแแก แแแแจแแแแแแแแก แกแแแก แกแแแแแแจแ (LIFO, แแฎแแแแ แแแแ แแแฎแแ แแกแฎแแแ แฅแแแแแ); - แแฌแแ แแแก แแแญแ แแก แแแ แแแแขแ แแก แแแฎแแแแแ
:limit
แจแแฅแแแแกแแก แแแแแแแแ; - แแแแแ แฃแแแแก แแแแแฎแแแแฃแ แกแขแ แฃแฅแขแฃแ แแก
Vela
.
iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#โ %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#โ %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#โ %Pairs{... eurusd: [1.0, 2.0]}
แแกแแแ Vela
แแฎแแ แชแแแแแแก Access
Kernel
Kernel.get_in/2
Kernel.put_in/3
Kernel.update_in/3
Kernel.pop_in/2
Kernel.get_and_update_in/3
แแแแแแแชแแ
แแแแแแแขแแ แ แจแแแซแแแแ แแแแแกแแแฆแแ แแก, แ แแแแ แช:
- แแแ แ แคแฃแแฅแชแแ แแ แแ แแ แแฃแแแแขแแ (
&MyMod.my_fun/1
), แแก แแแแฆแแแก แแฎแแแแ แแแแจแแแแแแแแก แแแแแแแชแแแกแแแแก; - แแแ แ แคแฃแแฅแชแแ แแ แ แแ แแฃแแแแขแแ,
&MyMod.my_fun/2
, แแก แแแแฆแแแก แฌแงแแแแกserie, value
แแแแแแแชแแแกแแแแก; - แแแแฃแแแก แแแแแ แแแ
;Vela.Validator
- แแแแคแแแฃแ แแชแแแก แแแ แแแแขแ แ
threshold
แแ - แกแฃแ แแแแแกแแแแแ -compare_by
, แแฎแแแแ แแแแ แจแแแแ แแแ ะะธะถะต.
แแฃ แแแแแแแชแแ แฌแแ แแแขแแแฃแแแ, แแแแจแแแแแแแ แแแแขแแแ แกแแแก แจแแกแแแแแแกแ แแแแแแจแแก แฅแแแจ, แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ, แแฃแแแ {serie, value}
แแแแแก :__errors_
.
แจแแแแ แแแ
แแ แ แแแแแจแ แจแแแแฎแฃแแ แแแแจแแแแแแแแแ แจแแแซแแแแ แแงแแก แแแแแกแแแแ แ. แฒกแฌแแแแแแ Vela
แแแแ แจแแกแแแแ แแแแแ แแฃแชแแแแแแแแ แแแแแขแแแ compare_by
แแแ แแแแขแ แ แกแแ แแแก แแแแกแแแฆแแ แแจแ (แแฃ แแแแจแแแแแแแแแ แแ แจแแแซแแแแ แจแแแแ แแแ แกแขแแแแแ แขแแแ Kernel.</2
); แแก แแแ แแแแขแ แ แฃแแแ แแงแแก แขแแแแก (Vela.value() -> number())
. แแแแฃแแแกแฎแแแแแ แแแ แขแแแแ & &1
.
แแกแแแ, แจแแแแซแแแแ แแแ แแแแขแ แ แแแแแกแชแแ แแฌแแ แแแแก แแแแกแแแฆแแ แแก comparator
แแแแขแแก แแแแจแแแแแแแแแแก แแแแแแแแ (min
/max
); แแแแแแแแแ, แแแแแชแแแแ Date.diff/2
แ แแแแ แช แจแแแแ แแแแกแแแแก, แจแแแแซแแแแ แแแแฆแแ แกแฌแแ แ แแแแขแ แแแ แแฆแแแแกแแแแก.
แแฃแจแแแแแก แแแแแ แแ แแ แแแกแแฎแแ แฎแแแแแ แแแแ แแแ แแแแขแ แแก แแแแแชแแแ threshold
, แ แแแแแแช แแแแกแแแฆแแ แแแก แแฎแแแ แแแแจแแแแแแแแก แแแฅแกแแแแแฃแ แแแกแแจแแแ แแแแแคแแ แแแแแก {min, max}
แแแขแแ แแแแ. แแแแแแแแ แแก แแแแแแแแฃแแแ แแ แแชแแแขแฃแแแ, แฉแแแ แแ แแแแแแงแแแแแ comparator
แแแแ แแ แแแแแช แแงแแแแแก compare_by
. แแแแแแแแแ, แแแ แแฆแแก แแ แแแกแแแแก แแแ แแแ แแก แแแกแแแแแแแ, แแฅแแแ แฃแแแ แแแฃแแแแแ compare_by: &DateTime.to_unix/1
(แแแแแแแ แแแแจแแแแแแแแก แแแกแแฆแแแแ) แแ threshold: 1
, แ แแช แแฌแแแแก แแฎแแแ แแแแจแแแแแแแแแแก แแแจแแแแแก แแฎแแแแ แแ แจแแแแฎแแแแแจแ, แแฃ แแกแแแ แจแแแแแ ยฑband
แแแขแแ แแแแ แแแแแแแแ แ แแแแจแแแแแแแแแแแแ.
แกแแแแแแแ, แจแแแแซแแแแ แแแแแแงแแแแ Vela.equal?/2
แแ แ แฅแแจแแก แจแแกแแแแ แแแแแ. แแฃ แแแแจแแแแแแแแแ แแแแกแแแฆแแ แแแก แคแฃแแฅแชแแแก equal?/2
แแ compare/2
, แแแจแแ แแก แคแฃแแฅแชแแแแ แแแแแงแแแแแฃแแ แแฅแแแแ แจแแแแ แแแแกแแแแก, แฌแแแแแฆแแแแ แจแแแแฎแแแแแจแ แฉแแแ แกแฃแแแแฃแ แแ แแแงแแแแแ ==/2
.
แฆแแ แแแฃแแแแแแแก แแแฆแแแ
แแแแแแแแ แ แแแแแแแ แแแแแก แแแแฃแจแแแแแ แฉแแแฃแแแแ แแ แแฌแงแแแ แแแ แแแแแ Vela.purge/1
, แ แแแแแแช แจแแแก แแแซแแแแแแฃแ แแแแจแแแแแแแแแก (แแฃ validator
แแแแแฃแแ timestamps
). แจแแแแแ แจแแแแซแแแแ แแแ แแแแ Vela.slice/1
แ แแแแแแช แแแแ แฃแแแแแ keyword
แกแขแ แแฅแแแแแแก แกแแฎแแแแแแ แแแกแแฆแแแแ แแ แแแ แแแแ, แ แแแแฃแ แ แแแแจแแแแแแแแแแ.
แแกแแแ แจแแแแซแแแแ แแแแแแงแแแแ get_in/2
/pop_in/2
แแแแแแฃแแ แแฌแแ แแแแก แแแแจแแแแแแแแแแ แแแแแแ แแแแแก แฌแแแแแแกแแแแก.
แแแแแชแฎแแแแก
Vela
แจแแแซแแแแ แแงแแก แซแแแแแ แกแแกแแ แแแแแ, แ แแแแ แช แแ แแแก แกแแ แแแแแก แฅแแจแ แแ แแชแแกแฃแ แแแแแแแ แแแแแจแ, แ แแแแ แแชแแ GenServer
/Agent
. แฉแแแ แแแกแฃแ แก แแ แแกแแแแก แแแแแแแงแแแแ แจแแแแ แฉแแแแแ แแฃแ แกแแก แฆแแ แแแฃแแแแแแ แแ แแแแกแแแแแก แฉแแแ แฃแแ แแแแ แแแแ แซแแแแแ แแ แแชแแกแก แกแแฎแแแแฌแแคแแก แแแแฃแจแแแแแแ Vela
, แฅแแแแแ แแแฉแแแแแแ แแแแแแแขแแ แแ.
@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
do: Rate.age(rate) < @death_age
ะธ Vela.purge/1
แฉแฃแแแ แจแแแก แงแแแแ แซแแแ แแแแจแแแแแแแแก แงแแแแ แฏแแ แแ, แ แแชแ แแแแแชแแแแแ แแแญแแ แแแแ. แ แแแแฃแ แแแแจแแแแแแแแแแ แฌแแแแแแกแแแแก แฉแแแ แฃแแ แแแแ แแฃแฌแแแแแ Vela.slice/1
แแ แ แแแแกแแช แกแแญแแ แแ แแฃแ แกแแก แแชแแ แ แแกแขแแ แแ (แแแแแ แกแแ แแ), แฉแแแ แฃแแ แแแแ แแแแ แฃแแแแ แแแก - แฃแแแ แแแแแแแแฃแแก - แแแแแกแขแฃแ แแแฃแแ แแแแจแแแแแแแแแแ.
แแแแแแแ แ แแ แแแก แกแแ แแแแแก แฅแแจแแ แแแ!
แฌแงแแ แ: www.habr.com