1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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 64 65 66 67
|
#!/usr/bin/env ruby -w
# encoding: UTF-8
#
# = SimpleQueryExpander.rb -- The TaskJuggler III Project Management Software
#
# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
# by Chris Schlaeger <cs@taskjuggler.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
require 'strscan'
require 'taskjuggler/MessageHandler'
class TaskJuggler
# 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.
class SimpleQueryExpander
include MessageHandler
# _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.
def initialize(inputStr, query, sourceFileInfo)
@inputStr = inputStr
@query = query.dup
@sourceFileInfo = sourceFileInfo
end
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
end
end
|