class Dry::Schema::Messages::Template

@api private
dynamically
Template wraps a string with interpolation tokens and defines evaluator function

def self.[](input)

Other tags:
    Api: - private
def self.[](input)
  new(*parse(input))
end

def self.parse(input)

Other tags:
    Api: - private
def self.parse(input)
  tokens = input.scan(TOKEN_REGEXP).flatten(1).map(&:to_sym)
  text = input.gsub('%', '#')
  evaluator = <<-RUBY.strip
    -> (#{tokens.map { |token| "#{token}:" }.join(", ")}) { "#{text}" }
  RUBY
  [text, tokens, eval(evaluator, binding, __FILE__, __LINE__ - 3)]
end

def call(data = EMPTY_HASH)

Other tags:
    Api: - private
def call(data = EMPTY_HASH)
  data.empty? ? evaluator.() : evaluator.(data)
end

def data(input)

Other tags:
    Api: - private
def data(input)
  tokens.each_with_object({}) { |k, h| h[k] = input[k] }
end

def initialize(text, tokens, evaluator)

Other tags:
    Api: - private
def initialize(text, tokens, evaluator)
  @text = text
  @tokens = tokens
  @evaluator = evaluator
end