Vela β†’ αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž†αŸ’αž›αžΆαžαžœαŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸŠαŸαžšαžΈαž–αŸαž›αžœαŸαž›αžΆ αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αž

αž“αŸ…αž€αŸ’αž“αž»αž„ fintech αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžαŸ’αžšαžΆαž”αŸ’αžαžΌαžšαž”αŸ’αžšαžΆαž€αŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αžšαžΎαž“αŸ” αž™αžΎαž„αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž”αŸ’αžšαž—αž–αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ αž αžΎαž™αž–αž½αž€αž‚αŸαž˜αŸ’αž“αžΆαž€αŸ‹αŸ—αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αž“αŸ’αžαŸ‚αž˜αž’αžαŸ’αžšαžΆαž”αŸ’αžαžΌαžšαž”αŸ’αžšαžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž„αŸƒαžŸαŸ’αž’αŸ‚αž€ αžαŸ’αž„αŸƒαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αžαŸ’αž„αŸƒαžŸαŸ’αž’αŸ‚αž€ αžαŸ‚αž€αŸ’αžšαŸ„αž™ αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž”αžΈαž†αŸ’αž“αžΆαŸ†αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αž‘αžŸαŸ’αžŸαž“αŸαž‘αžΆαž™αž’αžαŸ’αžšαžΆ αžŸαž·αž‘αŸ’αž’αž·αžŠαž›αŸ‹αž–αŸαž›αž”αž·αž‘αž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž αžΎαž™ αž”αŸ’αžαžΌαžšαž›αž»αž™αž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ” αž”αŸ’αžšαž—αž–αžαŸ’αž›αŸ‡αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž„ αžαŸ’αž›αŸ‡αž•αŸ’αž‚αžαŸ‹αž•αŸ’αž‚αž„αŸ‹αžŸαŸ†αžšαžΆαž˜αž–αŸαž‰αž›αŸαž‰ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžŠαŸαž€αž˜αŸ’αžšαž“αŸƒαžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αžΌαžŸαŸ’αž“αŸαž αŸαž€αž˜αŸ’αžšαž“αž·αž„αž’αžŸαž€αž˜αŸ’αž˜αŸ” αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαžšαž»αŸ‡αžšαžΎαžαž˜αŸ’αž›αŸƒαžšαžΆαž”αŸ‹αž˜αŸ‰αžΊαž“αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈ αž αžΎαž™αž€αŸ†αžŽαžαŸ‹αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž αžΆαž‰αžŠαž›αŸ‹αž’αžαž·αžαž·αž‡αž“αŸ” αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ’αžšαž„αž…αŸαž‰αž“αžΌαžœαžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž˜αž½αž™αž…αŸαž‰αž–αžΈαž—αžΆαž–αž€αžαŸ’αžœαž€αŸ‹ αž“αž·αž„αžŠαžΈαž›αŸ’αž”αžΆαž”αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαžΌαž…αž‡αžΆ flamingos αž’αŸ’αžœαžΎαž“αŸ…αž–αŸαž›αž’αžΆαž αžΆαžšαžαŸ’αž„αŸƒαžαŸ’αžšαž„αŸ‹αŸ”

Vela β†’ αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž†αŸ’αž›αžΆαžαžœαŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸŠαŸαžšαžΈαž–αŸαž›αžœαŸαž›αžΆ αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αž

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž”αŸ’αž›αŸ‚αž€αžšαž”αžŸαŸ‹ flamingos αž‚αžΊαž…αŸ†αž–αž»αŸ‡αž€αŸ„αž„αž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜αžŠαŸαž’αŸ† αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαž„αž’αžΆαž αžΆαžšαž…αŸαž‰αž–αžΈαž‘αžΉαž€ αž¬αž—αž€αŸ‹αŸ”
 - αžœαžΈαž‚αžΈαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž”αžΆαž“αž€αžΎαžαž˜αž€ 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αžŸαžΌαž˜αž˜αžΎαž›αž‡αŸ†αž–αžΌαž€ αž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž”αŸ’αžšαžŸαž·αž“β€‹αž”αžΎβ€‹αž€αžΆαžšβ€‹αž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹β€‹αž”αžΆαž“β€‹αž‡αŸ„αž‚αž‡αŸαž™ αžαž˜αŸ’αž›αŸƒβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αž€αŸ’αžšαŸ„αž˜β€‹αž‚αž“αŸ’αž›αžΉαŸ‡β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž‚αŸ’αž“αžΆ αž”αžΎβ€‹αž˜αž·αž“β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž‘αŸ 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

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹