рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░ рдердкрдХреЛ рд▓рд╛рдЧрд┐ Vela тЖТ рд╕реНрдорд╛рд░реНрдЯ рдХреНрдпрд╛рд╕

Fintech рдорд╛, рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╛рдпрдГ рдзреЗрд░реИ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рдореБрджреНрд░рд╛ рд╡рд┐рдирд┐рдордп рджрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреБрдкрд░реНрдЫред рд╣рд╛рдореАрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддрд╣рд░реВрдмрд╛рдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ, рд░ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрдХреЛ рдЖрдлреНрдиреИ рд╡рд┐рдЪрд╛рд░ рдЫ рдХрд┐ рдХрд╕рд░реА рднреЛрд▓рд┐, рднреЛрд▓рд┐, рдЕрд░реНрдХреЛ рдорд╣рд┐рдирд╛ рд░ рдЕрд░реНрдХреЛ рддреАрди рд╡рд░реНрд╖рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдирд┐рдордп рджрд░рд╣рд░реВ рдПрдХреНрд╕реНрдЯреНрд░рд╛рдкреЛрд▓реЗрдЯ рдЧрд░реНрдиреЗред рдпрджрд┐ рдХреЗрд╡рд▓ рдХрд╕реИрд▓реЗ рджрд░рд╣рд░реВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рд╕рдХреНрдЫ рджрд╛рдпрд╛рдБ, рдпреЛ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдиреНрдж рдЧрд░реНрдиреЗ рд╕рдордп рд╣реБрдиреЗрдЫ рд░ рдХреЗрд╡рд▓ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрд╡рдХ рдкреИрд╕рд╛ рдлрд┐рд░реНрддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдХреЗрд╣рд┐ рд╕реНрд░реЛрддрд╣рд░реВ рдЕрдзрд┐рдХ рднрд░рдкрд░реНрджреЛ рдЫрдиреН, рдХреЗрд╣рд┐ рдкреВрд░реНрдг рдлреЛрд╣реЛрд░ рдЖрдкреВрд░реНрддрд┐ рдЧрд░реНрджрдЫ, рд▓рдЧрднрдЧ рд╕рд╣реА рдорд╛рдирд╣рд░реВрдХреЛ рджреБрд░реНрд▓рдн рд╕рдорд╛рд╡реЗрд╢рдХреЛ рд╕рд╛рде, рддрд░ рд╡рд┐рджреЗрд╢реА рдЬреЛрдбреАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ред рд╣рд╛рдореНрд░реЛ рдХрд╛рдо рднрдиреЗрдХреЛ рдпреА рджрд╢реМрдВ рд╣рдЬрд╛рд░ рдорд╛рдирд╣рд░реВ рдкреНрд░рддрд┐ рд╕реЗрдХреЗрдиреНрдб рдорд╛рд░реНрдлрдд рдЫрд╛рдиреНрдиреБ рд░ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рдХреЗ рджреЗрдЦрд╛рдЙрдиреЗ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБ рд╣реЛред рд╣рд╛рдореАрд▓реЗ рдлреНрд▓реЗрдорд┐рдЩреНрдЧреЛрд╣рд░реВ рдЦрд╛рдЬрд╛рдорд╛ рдЧрд░реЗрдЭреИрдВ рдзреЗрд░реИ рдЯрди рдлреЛрд╣реЛрд░ рд░ рд╕рд┐рд▓реНрдЯрдмрд╛рдЯ рдПрдЙрдЯрд╛ рд╕рд╣реА рдорд╛рди рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрдиреБрдкрд░реНрдЫред

рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░ рдердкрдХреЛ рд▓рд╛рдЧрд┐ 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 рджрд┐рдЗрдПрдХреЛ рдХреБрдЮреНрдЬреАрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд, рд╡рд╛ рдХреЗрд╡рд▓ рд╕реВрдЪреАрдХреЛ рдЯрд╛рдЙрдХреЛрдорд╛ рдорд╛рди рд░рд╛рдЦреНрдиреЗрдЫ (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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди