рд╡реЗрд▓рд╛ тЖТ рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдХреИрд╢

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

рд╡реЗрд▓рд╛ тЖТ рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдХреИрд╢

рд░рд╛рдЬрд╣рдВрд╕ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдирдХреА рд╡рд┐рд╢рд╛рд▓ рдиреАрдЪреЗ рдХреА рдУрд░ рдореБрдбрд╝реА рд╣реБрдИ рдЪреЛрдВрдЪ рд╣реИ, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рд╡реЗ рдкрд╛рдиреА рдпрд╛ рдХреАрдЪрдбрд╝ рд╕реЗ рднреЛрдЬрди рдЫрд╛рдирддреЗ рд╣реИрдВред
 - рд╡рд┐рдХреА

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ