αα αααα»α fintech ααΆααΉαααΆααααΎαααααΌαααααΎαααΆααα·ααααααα’ααααΆααααΌαααααΆαααααΆαα αααΎαα ααΎαααα½αααΆααα·ααααααααΈαααααααααααααααΆ α αΎααα½αααααααΆαααααΆααααα·αααααΆαααααα½αα’αααΈααααααααααα’ααααΆααααΌαααααΆαααααααΆααααααααα’αα αααααααααΆαα ααααααα’αα ααααααα αα·αααΌααααΈααααΈααααΆααααααΆααα ααααα·αααΎααΆαααααΆααααΆααα’αΆα ααααααααΆαα’ααααΆ αα·αααα·αααααααα·αα’αΆααΈαααααα αΎα ααααΌααα»ααα αα·ααα ααα αααααααααα’αΆα αα»αα α·αααααΆαααΆα ααααααααααααααααααΆααααααα ααΆαα½αααΉαααΆααα½ααααα αΌααααααααααααααααααΉαααααΌαααααΎαααααΆααα’αα ααα»αααααααααΆααααΌααααα ααααααα·αα’αααααα ααΆαααΆαααααααΎαααΊααΎααααΈαα»αααΎαααααααΆαααααΊαααΆααααααααα»ααα½ααα·ααΆααΈ α αΎααααααααΌαα’αααΈαααααααΌααααα αΆααααα’αα·αα·ααα ααΎαααααΌαααααα ααααΌααααααααααΉαααααΌααα½αα ααααΈααΆααααααα αα·αααΈααααΆααααΆα αααΎα ααΌα ααΆ flamingos ααααΎαα αααα’αΆα αΆααααααααααα
αααααααα·αααααααααααα flamingos ααΊα ααα»ααααα α»αααααααααα ααααα½αααααααα’αΆα αΆαα ααααΈααΉα α¬αααα
-ααΈααΈα
ααΌα
αααααααααΆαααααΆαααΎααα 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
αααα»αααΆαααΆα’ααααααααααα α’αααα’αΆα
ααα½αααΆα deltas ααααΉαααααΌααααααΆααααΆαααα·α
ααααα
αααααααΆαααΆααααα½ααα½ααααααΎααααΈααααΎααΆαααΊααααααΆαααααΆαααΆαααααα 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
αααααααΆααααααααα»αααααα stale ααΆααα’ααααΆααααααααααΎαααααΌαααΆααα·ααααααα ααΎααααΈα
αΌαααααΎαααααααΆαααααααααΎαααααΆααααα α
Vela.slice/1
α αΎααα
αααααααααααααα·ααΆαααααααΌα
αα½ααααααααα·ααααΆααααΌαααΆαααΆαααΆα (αααααΈααΆααααΌα) ααΎαααααΆαααααααααΌαααΆαααα·α - αααααααα½α
α αΎα - ααΆαα½αααΉαααααααααααΆααα»ααααΆαα
ααααΆαααααααΆαααααααααΆααααΈαααΆα!
ααααα: www.habr.com