Class TaskJuggler::SimpleQueryExpander
In: lib/taskjuggler/SimpleQueryExpander.rb
Parent: Object

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.

Methods

expand   new  

Included Modules

MessageHandler

Public Class methods

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.

[Source]

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

Public Instance methods

[Source]

# File lib/taskjuggler/SimpleQueryExpander.rb, line 38
    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

[Validate]