class TaskJuggler::SimpleQueryExpander

The SimpleQueryExpander class is used to replace embedded attribute queries in a string with the value of the attribute. The embedded queries must have the form <-name-> where name is the name of the attribute. The Query class is used to determine the value of the attribute within the context of the query.

Public Class Methods

new(inputStr, query, sourceFileInfo) click to toggle source

inputStr is the String with the embedded queries. query is the Query with that provides the evaluation context. messageHandle is a MessageHandler that will be used for error reporting. sourceFileInfo is a SourceFileInfo reference used for error reporting.

# File lib/taskjuggler/SimpleQueryExpander.rb, line 31
def initialize(inputStr, query, sourceFileInfo)
  @inputStr = inputStr
  @query = query.dup
  @sourceFileInfo = sourceFileInfo
end

Public Instance Methods

expand() click to toggle source
# File lib/taskjuggler/SimpleQueryExpander.rb, line 37
def expand
  # Create a copy of the input string since we will modify it.
  str = @inputStr.dup

  # The scenario name is not an attribute that can be queried. We need to
  # handle this separately
  if @query.scenarioIdx
    str.gsub!(/<-scenario->/,
              @query.project.scenario(@query.scenarioIdx).id)
  end

  # Replace all occurences of <-name->.
  str.gsub!(/<-[a-zA-Z][_a-zA-Z]*->/) do |match|
    attribute = match[2..-3]
    @query.attributeId = attribute
    @query.process
    if @query.ok
      @query.to_s
    else
      # The query failed. We report an error.
      error('sqe_expand_failed', "Unknown attribute #{attribute}",
            @sourceFileInfo)
    end
  end
  str
end