рд╡реЗрд│ рдорд╛рд▓рд┐рдХрд╛ рдЖрдгрд┐ рдЕрдзрд┐рдХрд╕рд╛рдареА 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 рджрд┐рд▓реЗрд▓реНрдпрд╛ рдХреА рд╕рд╛рдареА рдкрд░рд┐рднрд╛рд╖рд┐рдд, рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдореВрд▓реНрдп рд╕реВрдЪреАрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдареЗрд╡рд╛ (рдирд┐рд░реНрдЬреАрд╡, рдзрдбрд╛ рдкрд╣рд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдЦрд╛рд▓реА);
  • рдкреЕрд░рд╛рдореАрдЯрд░рдиреБрд╕рд╛рд░ рдкрдВрдХреНрддреА рдХрдЯ рдХрд░реЗрд▓ :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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛