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.
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
# 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