ืืคืื ืืง, ืืขืชืื ืงืจืืืืช ืื ื ืฆืจืืืื ืืขืื ืืืืืืช ืื ืืกืืืืืช ืฉื ื ืชืื ื ืฉืขืจ ืืืืคืื. ืื ื ืืงืืืื ื ืชืื ืื ืืืงืืจืืช ืฉืื ืื, ืืืื ืืื ืืื ืืฉ ืจืขืืื ืืฉืื ืืืฆื ืืืฆืข ืืงืกืืจืคืืืฆืื ืฉื ืฉืขืจื ืืืืคืื ืืืืจ, ืืืจืชืืื, ืืืืืฉ ืืื ืืืคืืื ืืฉืืืฉ ืืฉื ืื ืืืืืช. ืื ืจืง ืืืฉืื ืืื ืืืื ืืืืืช ืฉืืขืืจืื ื ืืื, ืื ืืืื ืืืื ืืกืืืจ ืืช ืืขืกืง ืืคืฉืื ืืืืืืฃ ืืกืฃ ืืืื ืืฉืื ืืืืคืฉืืช. ืืืง ืืืืงืืจืืช ืืืื ืื ืืืชืจ, ืืืง ืืกืคืงืื ืืื ืืื, ืขื ืืืืืืช ื ืืืจืืช ืฉื ืขืจืืื ืืืขื ื ืืื ืื, ืืื ืืืืืืช ืืงืืืืืื. ืืชืคืงืื ืฉืื ื ืืื ืื ืคืืช ืืื ืขืฉืจืืช ืืืคื ืืขืจืืื ืืืื ืืฉื ืืื ืืืงืืืข ืื ืืืืืง ืืืจืืืช ืืืงืืืืช. ืื ืื ื ืฆืจืืืื ืืกื ื ืืช ืืขืจื ืื ืืื ืืื ืืืื ืืช ืฉื ืืืืื ืืกืืฃ, ืืืืืง ืืื ืฉืคืืืื ืื ืขืืฉืื ืืฆืืจืืื.
ืืืคืืื ืืืืื ืฉื ืคืืืื ืื ืืื ืืงืืจื ืืืืกืืื ืืืชืขืงื ืืืคื ืืื, ืฉืืขืืจืชื ืื ืืกื ื ืื ืืืื ืืืื ืื ืืืฅ.
-ืืืงื
ืื ื ืืืื ืืกืคืจืืื 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
, ืจืื ืคืจืง ืืฉืืืื ืึฐืึทืึธื.
ืื ืืืืืืช ืืฆืืื, ืืขืจื ืืชืืืกืฃ ืืจืฉืืื ืืชืืช ืืืคืชื ืืืชืืื; ืืืจืช, ื-tuple {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