Vela โ†’ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒฅแƒ”แƒจแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ

แƒคแƒ˜แƒœแƒขแƒ”แƒฅแƒจแƒ˜ แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ’แƒ•แƒ˜แƒฌแƒ”แƒ•แƒก แƒ•แƒแƒšแƒฃแƒขแƒ˜แƒก แƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒฌแƒงแƒแƒ แƒแƒ“แƒแƒœ แƒ“แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ›แƒแƒ—แƒ’แƒแƒœแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒ—แƒ˜ แƒ™แƒฃแƒ แƒกแƒ˜แƒก แƒ”แƒฅแƒกแƒขแƒ แƒแƒžแƒแƒšแƒแƒชแƒ˜แƒ แƒฎแƒ•แƒแƒšแƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ“แƒฆแƒ˜แƒก, แƒ–แƒ”แƒ’, แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒกแƒแƒ›แƒ˜ แƒฌแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ—แƒฃ แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒจแƒ”แƒ”แƒซแƒšแƒ แƒ’แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒœแƒแƒ–แƒ˜แƒ แƒ”แƒ‘แƒ แƒกแƒฌแƒแƒ แƒแƒ“, แƒ“แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒ“แƒแƒฎแƒฃแƒ แƒแƒ— แƒ‘แƒ˜แƒ–แƒœแƒ”แƒกแƒ˜ แƒ“แƒ แƒกแƒฃแƒšแƒ”แƒšแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒคแƒฃแƒšแƒ˜ แƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ. แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒฌแƒงแƒแƒ แƒ แƒฃแƒคแƒ แƒ แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒแƒ, แƒ–แƒแƒ’แƒ˜ แƒแƒฌแƒ•แƒ“แƒ˜แƒก แƒกแƒ แƒฃแƒš แƒœแƒแƒ’แƒแƒ•แƒก, แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒกแƒฌแƒแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ˜แƒจแƒ•แƒ˜แƒแƒ—แƒ˜ แƒฉแƒแƒœแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒ’แƒ–แƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒฌแƒงแƒ•แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒแƒ แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒแƒ› แƒแƒ—แƒ˜แƒแƒ—แƒแƒกแƒแƒ‘แƒ˜แƒ— แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒฌแƒแƒ›แƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ แƒ•แƒแƒฉแƒ•แƒ”แƒœแƒแƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก. แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒคแƒ˜แƒšแƒขแƒ แƒแƒ— แƒ”แƒ แƒ—แƒ˜ แƒกแƒฌแƒแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒขแƒแƒœแƒ แƒญแƒฃแƒญแƒงแƒ˜แƒกแƒ แƒ“แƒ แƒกแƒ˜แƒšแƒแƒกแƒ’แƒแƒœ, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒคแƒšแƒแƒ›แƒ˜แƒœแƒ’แƒแƒ”แƒ‘แƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ”แƒœ แƒšแƒแƒœแƒฉแƒ–แƒ”.

Vela โ†’ แƒญแƒ™แƒ•แƒ˜แƒแƒœแƒ˜ แƒฅแƒ”แƒจแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ

แƒคแƒšแƒแƒ›แƒ˜แƒœแƒ’แƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒแƒ แƒ›แƒแƒ—แƒ˜ แƒ›แƒแƒกแƒ˜แƒฃแƒ แƒ˜ แƒฅแƒ•แƒ”แƒ•แƒ˜แƒ— แƒ›แƒแƒฎแƒ แƒ˜แƒšแƒ˜ แƒฌแƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒคแƒ˜แƒšแƒขแƒ แƒแƒ•แƒ”แƒœ แƒกแƒแƒ™แƒ•แƒ”แƒ‘แƒก แƒฌแƒงแƒšแƒ˜แƒกแƒ แƒ“แƒ แƒขแƒแƒšแƒแƒฎแƒ˜แƒกแƒ’แƒแƒœ.
 - แƒ•แƒ˜แƒ™แƒ˜แƒžแƒ”แƒ“แƒ˜แƒ

แƒแƒกแƒ” แƒ“แƒแƒ˜แƒ‘แƒแƒ“แƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ Vela, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒฌแƒ˜แƒคแƒ แƒฅแƒ”แƒจแƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒฅแƒฃแƒ“แƒ˜แƒก แƒฅแƒ•แƒ”แƒจ แƒ˜แƒก แƒคแƒ˜แƒšแƒขแƒ แƒแƒ•แƒก แƒชแƒฃแƒ“ แƒ“แƒ แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒคแƒ แƒ”แƒœแƒ˜แƒกแƒแƒก แƒ“แƒ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒฃแƒแƒฎแƒšแƒ”แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก N แƒ“แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ•แƒแƒšแƒฃแƒขแƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜).

แƒ•แƒ—แƒฅแƒ•แƒแƒ—, แƒ•แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ— แƒ’แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ”แƒ‘แƒก แƒกแƒแƒ›แƒ˜ แƒกแƒแƒ•แƒแƒšแƒฃแƒขแƒ แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒแƒœแƒ›แƒแƒ แƒขแƒ”แƒ‘แƒ 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ