module SatoriLikeDictionary::Renderer

satori token renderer

Constants

NUMBERS

number map

Public Instance Methods

render(events, request) click to toggle source

render the content @param [Events] events events definition @param [OpenStruct] request request hash @return [String|OpenStruct] result

# File lib/satori_like_dictionary.rb, line 147
def render(events, request)
  value = render_base(events, request)
  if request.__satori_target_character
    OpenStruct.new({Value: value, Reference0: request.__satori_target_character})
  else
    value
  end
end
render_base(events, request) click to toggle source

process basic replacements @param [Events] events events definition @param [OpenStruct] request request hash @return [String] result

# File lib/satori_like_dictionary.rb, line 115
def render_base(events, request)
  value = render_template(events, request)
    .gsub(/\b_(\S+)/, "\\q[\\1,\\1]")
    .gsub(/(([^)]*))/) do
      content = $1
      if content.match(/^[0-90-9]+$/)
        "\\s[#{content.gsub(/[0-9]/) {|m| NUMBERS[m]} }]"
      else
        begin
          entry = events.send(content, request) # event
        rescue ArgumentError
          entry = events.send(content) # satori dictionary
        rescue NoMethodError
          entry = nil # wrong event
        end
        if entry.respond_to?(:render) # satori entry
          entry.render(events, request)
        elsif entry.respond_to?(:Value) # ostruct value
          entry.Value
        else # simple value
          entry
        end
      end
    end
    .gsub(/\r?\n/, "\\n")
  value
end
render_template(events, request) click to toggle source

execute template @param [Events] events events definition @param [OpenStruct] request request hash @return [String] result

# File lib/satori_like_dictionary.rb, line 105
def render_template(events, request)
  template = NanoTemplate.new.template(to_template)
  context = TemplateContext.new(events, request)
  template.call(context)
end