Class: TaskJuggler::SimpleQueryExpander

Inherits:
Object
  • Object
show all
Includes:
MessageHandler
Defined in:
lib/taskjuggler/SimpleQueryExpander.rb

Overview

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.

Instance Method Summary collapse

Methods included from MessageHandler

#critical, #debug, #error, #fatal, #info, #warning

Constructor Details

#initialize(inputStr, query, sourceFileInfo) ⇒ SimpleQueryExpander

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.



32
33
34
35
36
# File 'lib/taskjuggler/SimpleQueryExpander.rb', line 32

def initialize(inputStr, query, sourceFileInfo)
  @inputStr = inputStr
  @query = query.dup
  @sourceFileInfo = sourceFileInfo
end

Instance Method Details

#expandObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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