āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŋāĻ°āĻŋāĻœ āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§āĻ° āĻœāĻ¨ā§āĻ¯ Vela → āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•ā§āĻ¯āĻžāĻļā§‡

āĻĢāĻŋāĻ¨āĻŸā§‡āĻ•-āĻ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ‡ āĻĒā§āĻ°āĻšā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§‡ āĻŽā§āĻĻā§āĻ°āĻž āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻšāĻžāĻ° āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻ¤ā§āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻĒāĻžāĻ‡, āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ§āĻžāĻ°āĻŖāĻž āĻ†āĻ›ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ†āĻ—āĻžāĻŽā§€āĻ•āĻžāĻ˛, āĻĒāĻ°āĻļā§, āĻĒāĻ°ā§‡āĻ° āĻŽāĻžāĻ¸ āĻāĻŦāĻ‚ āĻāĻŽāĻ¨āĻ•āĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¤āĻŋāĻ¨ āĻŦāĻ›āĻ°ā§‡āĻ° āĻŦāĻŋāĻ¨āĻŋāĻŽāĻ¯āĻŧ āĻšāĻžāĻ° āĻāĻ•ā§āĻ¸āĻŸā§āĻ°āĻžāĻĒā§‹āĻ˛ā§‡āĻŸ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻ¯āĻĻāĻŋ āĻ•ā§‡āĻ‰ āĻšāĻžāĻ° āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻĻā§āĻŦāĻžāĻŖā§€ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻāĻŸāĻž āĻŦā§āĻ¯āĻŦāĻ¸āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§ āĻŦā§‹āĻ•āĻžāĻŽāĻŋ āĻ•āĻ°ā§‡ āĻŸāĻžāĻ•āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ•āĻŋāĻ›ā§ āĻ‰āĻ¤ā§āĻ¸ āĻ†āĻ°āĻ“ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯, āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ†āĻŦāĻ°ā§āĻœāĻ¨āĻž āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡, āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻ āĻŋāĻ• āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻ°āĻ˛ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤āĻŋ āĻ¸āĻš, āĻ¤āĻŦā§‡ āĻŦāĻšāĻŋāĻ°āĻžāĻ—āĻ¤ āĻĻāĻŽā§āĻĒāĻ¤āĻŋāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœ āĻšāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻāĻ‡ āĻĻāĻļ āĻšāĻžāĻœāĻžāĻ° āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ—ā§āĻ°āĻžāĻšāĻ•āĻĻā§‡āĻ° āĻ āĻŋāĻ• āĻ•ā§€ āĻĻā§‡āĻ–āĻžāĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°āĻžāĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸāĻ¨ āĻŽāĻ¯āĻŧāĻ˛āĻž āĻāĻŦāĻ‚ āĻĒāĻ˛āĻŋ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ āĻŋāĻ• āĻŽāĻžāĻ¨ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ āĻŋāĻ• āĻ¯ā§‡āĻŽāĻ¨ āĻĢā§āĻ˛ā§āĻ¯āĻžāĻŽāĻŋāĻ™ā§āĻ—ā§‹āĻ°āĻž āĻ˛āĻžāĻžā§āĻšā§‡ āĻ•āĻ°ā§‡āĨ¤

āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŋāĻ°āĻŋāĻœ āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§āĻ° āĻœāĻ¨ā§āĻ¯ Vela → āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•ā§āĻ¯āĻžāĻļā§‡

āĻĢā§āĻ˛ā§āĻ¯āĻžāĻŽāĻŋāĻ™ā§āĻ—ā§‹āĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻ¸ā§āĻŦāĻ¤āĻ¨ā§āĻ¤ā§āĻ° āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻšāĻ˛ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦāĻŋāĻļāĻžāĻ˛ āĻ¨āĻŋāĻŽā§āĻ¨āĻŽā§āĻ–ā§€ āĻŦāĻžāĻāĻ•āĻž āĻšāĻžā§āĻšā§, āĻ¯āĻžāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡ āĻ¤āĻžāĻ°āĻž āĻĒāĻžāĻ¨āĻŋ āĻŦāĻž āĻ•āĻžāĻĻāĻž āĻĨā§‡āĻ•ā§‡ āĻ–āĻžāĻŦāĻžāĻ° āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤
 - Vicki

āĻāĻ­āĻžāĻŦā§‡āĻ‡ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻŽ āĻšāĻ¯āĻŧ 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨