class Smartdown::Engine::Interpolator::ElementContentInterpolator

Public Instance Methods

call(state) click to toggle source
# File lib/smartdown/engine/interpolator.rb, line 38
def call(state)
  element.dup.tap do |e|
    e.content = interpolate(e.content, state)
  end
end

Private Instance Methods

interpolate(text, state) click to toggle source
# File lib/smartdown/engine/interpolator.rb, line 45
def interpolate(text, state)
  text.to_s.gsub(/%{([^}]+)}/) do |_|
    term = resolve_term($1, state)
    if term.is_a?(Smartdown::Model::Answer::Base)
      term = term.humanize
    end
    term
  end
end
resolve_term(interpolation, state) click to toggle source
# File lib/smartdown/engine/interpolator.rb, line 55
def resolve_term(interpolation, state)
  begin
      parsed = Smartdown::Parser::Predicates.new.parse(interpolation)
      Smartdown::Parser::NodeTransform.new.apply(parsed, {}).evaluate(state)
    rescue Parslet::ParseFailed
      state.get(interpolation)
    end
end