Vela โ†’ ืงืœื•ื’ ืงืึทืฉ ืคึฟืึทืจ ืฆื™ื™ื˜ ืกืขืจื™ืข ืื•ืŸ ืžืขืจ

ืื™ืŸ ืคื™ื ื˜ืขื˜ืฉ, ืžื™ืจ ืึธืคื˜ ื”ืึธื‘ืŸ ืฆื• ืคึผืจืึธืฆืขืก ื’ืึทื ืฅ ืžืึทืกื™ื•ื• ื•ื•ืึทืœื™ื•ืžื– ืคื•ืŸ ืงืจืึทื ื˜ืงื™ื™ึทื˜ ื•ื•ืขืงืกืœ ืงื•ืจืก ื“ืึทื˜ืŸ. ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ื“ืึทื˜ืŸ ืคื•ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืงื•ื•ืืœืŸ, ืื•ืŸ ื™ืขื“ืขืจ ืคื•ืŸ ื–ื™ื™ ื”ืื˜ ื–ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื’ืขื“ืึทื ืง ืคื•ืŸ ื•ื•ื™ ืฆื• ืขืงืกื˜ืจืึทืคึผืึธื•ืœื™ืจืŸ ื•ื•ืขืงืกืœ ืจื™ื™ืฅ ืคึฟืึทืจ ืžืึธืจื’ืŸ, ื˜ืึธื’ ื ืึธืš ืžืึธืจื’ืŸ, ื•ื•ื™ื™ึทื˜ืขืจ ื—ื•ื“ืฉ ืื•ืŸ ืืคื™ืœื• ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ื“ืจื™ื™ ื™ืึธืจ. ืื•ื™ื‘ ื ืึธืจ ืขืžืขืฆืขืจ ืงืขืŸ ืคืึธืจื•ื™ืกื–ืึธื’ืŸ ืจื™ื™ืฅ ืจื™ื›ื˜ื™ืง, ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืฆื™ื™ื˜ ืฆื• ืคืึทืจืžืึทื›ืŸ ื“ื™ ื’ืขืฉืขืคื˜ ืื•ืŸ ื ืึธืจ ื ืึทืจื™ืฉ ื˜ื•ื™ืฉืŸ ื’ืขืœื˜ ื”ื™ืŸ ืื•ืŸ ืฆื•ืจื™ืง. ืขื˜ืœืขื›ืข ืงื•ื•ืืœืŸ ื–ืขื ืขืŸ ืžืขืจ ืคืึทืจืœืึธื–ืœืขืš, ืขื˜ืœืขื›ืข ืฆื•ืฉื˜ืขืœืŸ ื’ืึทื ืฅ ืžื™ืกื˜, ืžื™ื˜ ื–ืขืœื˜ืŸ ื™ื ืงืœื•ื–ืฉืึทื ื– ืคื•ืŸ ื›ึผืžืขื˜ ืจื™ื›ื˜ื™ืง ื•ื•ืึทืœื•ืขืก, ืึธื‘ืขืจ ืคึฟืึทืจ ืขืงื–ืึธื˜ื™ืฉ ืงืึทืคึผืึทืœื–. ืื•ื ื“ื–ืขืจ ืึทืจื‘ืขื˜ ืื™ื– ืฆื• ืกื™ืคื˜ ื“ื•ืจืš ื“ื™ ื˜ืขื ืก ืคื•ืŸ ื˜ื•ื™ื–ื ื˜ืขืจ ืคื•ืŸ ื•ื•ืึทืœื•ืขืก ืคึผืขืจ ืกืขืงื•ื ื“ืข ืื•ืŸ ื‘ืึทืฉืœื™ืกืŸ ื•ื•ืึธืก ืคึผื•ื ืงื˜ ืฆื• ื•ื•ื™ื™ึทื–ืŸ ืฆื• ืงืึทืกื˜ืึทืžืขืจื–. ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคื™ืœื˜ืขืจ ืื•ื™ืก ื“ื™ ืื™ื™ืŸ ืจื™ื›ื˜ื™ืง ื•ื•ืขืจื˜ ืคื•ืŸ ื˜ืึธื ืก ืคื•ืŸ ืฉืžื•ืฅ ืื•ืŸ ืกื™ืœื˜, ืคึผื•ื ืงื˜ ื•ื•ื™ ืคืœืึทืžื™ื ื’ืึธืก ื˜ืึธืŸ ื‘ื™ื™ ืœืึธื ื˜ืฉ.

Vela โ†’ ืงืœื•ื’ ืงืึทืฉ ืคึฟืึทืจ ืฆื™ื™ื˜ ืกืขืจื™ืข ืื•ืŸ ืžืขืจ

ื ืกืคึผืขืฆื™ืขืœ ื“ื™ืกื˜ื™ื ื’ื’ื•ื•ื™ืฉื™ื ื’ ืฉื˜ืจื™ืš ืคื•ืŸ ืคืœืึทืžื™ื ื’ืึธืก ืื™ื– ื–ื™ื™ืขืจ ืžืึทืกื™ื•ื• ื“ืึทื•ื ื•ื•ืขืจื“ ืงืขืจื•ื•ื“ ืฉื ืึธื‘ืœ, ืžื™ื˜ ื•ื•ืึธืก ื–ื™ื™ ืคื™ืœื˜ืขืจ ืขืกื ื•ื•ืึทืจื’ ืคื•ืŸ ื•ื•ืึทืกืขืจ ืึธื“ืขืจ ื‘ืœืึธื˜ืข.
 - Wiki

ืื–ื• ื™ ืื™ ื– ื’ืขื‘ื•ื™ืจ ืŸ ื’ืขืฐืืจ ืŸ ื“ ื™ ื‘ื™ื‘ืœื™ืื˜ืขืง 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 ื“ื™ืคื™ื™ื ื“ ืคึฟืึทืจ ืึท ื’ืขื’ืขื‘ืŸ ืฉืœื™ืกืœ, ืึธื“ืขืจ ื•ื•ืขื˜ ืคืฉื•ื˜ ืฉื˜ืขืœืŸ ื“ื™ ื•ื•ืขืจื˜ ืื™ืŸ ื“ื™ ืงืึธืคึผ ืคื•ืŸ ื“ืขืจ ืจืฉื™ืžื” (ืœื™ืคืึธ, ื–ืขืŸ ืงืึทืคึผื™ื˜ืœ ะกะพั€ั‚ะธั€ะพะฒะบะฐ ืื•ื ื˜ืŸ);
  • ื•ื•ืขื˜ ื˜ืจื™ื ื“ื™ ืจื•ื“ืขืจืŸ ืœื•ื™ื˜ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ :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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’