ืืื ืคืื ืืขืืฉ, ืืืจ ืึธืคื ืืึธืื ืฆื ืคึผืจืึธืฆืขืก ืืึทื ืฅ ืืึทืกืืื ืืืึทืืืืื ืคืื ืงืจืึทื ืืงืืึทื ืืืขืงืกื ืงืืจืก ืืึทืื. ืืืจ ืืึทืงืืืขื ืืึทืื ืคืื ืคืึทืจืฉืืืขื ืข ืงืืืืื, ืืื ืืขืืขืจ ืคืื ืืื ืืื ืืืื ืืืืืขื ืข ืืขืืึทื ืง ืคืื ืืื ืฆื ืขืงืกืืจืึทืคึผืึธืืืืจื ืืืขืงืกื ืจืืืฅ ืคึฟืึทืจ ืืึธืจืื, ืืึธื ื ืึธื ืืึธืจืื, ืืืืึทืืขืจ ืืืืฉ ืืื ืืคืืื ืื ืืืืึทืืขืจ ืืจืื ืืึธืจ. ืืืื ื ืึธืจ ืขืืขืฆืขืจ ืงืขื ืคืึธืจืืืกืืึธืื ืจืืืฅ ืจืืืืืง, ืขืก ืืืึธืื ืืืื ืฆืืื ืฆื ืคืึทืจืืึทืื ืื ืืขืฉืขืคื ืืื ื ืึธืจ ื ืึทืจืืฉ ืืืืฉื ืืขืื ืืื ืืื ืฆืืจืืง. ืขืืืขืืข ืงืืืืื ืืขื ืขื ืืขืจ ืคืึทืจืืึธืืืขื, ืขืืืขืืข ืฆืืฉืืขืื ืืึทื ืฅ ืืืกื, ืืื ืืขืืื ืื ืงืืืืฉืึทื ื ืคืื ืึผืืขื ืจืืืืืง ืืืึทืืืขืก, ืึธืืขืจ ืคึฟืึทืจ ืขืงืืึธืืืฉ ืงืึทืคึผืึทืื. ืืื ืืืขืจ ืึทืจืืขื ืืื ืฆื ืกืืคื ืืืจื ืื ืืขื ืก ืคืื ืืืืื ืืขืจ ืคืื ืืืึทืืืขืก ืคึผืขืจ ืกืขืงืื ืืข ืืื ืืึทืฉืืืกื ืืืึธืก ืคึผืื ืงื ืฆื ืืืืึทืื ืฆื ืงืึทืกืืึทืืขืจื. ืืืจ ืืึทืจืคึฟื ืฆื ืคืืืืขืจ ืืืืก ืื ืืืื ืจืืืืืง ืืืขืจื ืคืื ืืึธื ืก ืคืื ืฉืืืฅ ืืื ืกืืื, ืคึผืื ืงื ืืื ืคืืึทืืื ืืึธืก ืืึธื ืืื ืืึธื ืืฉ.
ื ืกืคึผืขืฆืืขื ืืืกืืื ืืืืืืฉืื ื ืฉืืจืื ืคืื ืคืืึทืืื ืืึธืก ืืื ืืืืขืจ ืืึทืกืืื ืืึทืื ืืืขืจื ืงืขืจืืื ืฉื ืึธืื, ืืื ืืืึธืก ืืื ืคืืืืขืจ ืขืกื ืืืึทืจื ืคืื ืืืึทืกืขืจ ืึธืืขืจ ืืืึธืืข.
-Wiki
ืืื ื ืื ื ืืขืืืืจ ื ืืขืฐืืจ ื ื ื ืืืืืืืืขืง 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
ืืืคืืื ื ืคึฟืึทืจ ืึท ืืขืืขืื ืฉืืืกื, ืึธืืขืจ ืืืขื ืคืฉืื ืฉืืขืื ืื ืืืขืจื ืืื ืื ืงืึธืคึผ ืคืื ืืขืจ ืจืฉืืื (ืืืคืึธ, ืืขื ืงืึทืคึผืืื ะกะพััะธัะพะฒะบะฐ ืืื ืื); - ืืืขื ืืจืื ืื ืจืืืขืจื ืืืื ืืขื ืคึผืึทืจืึทืืขืืขืจ
: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