# #-- # Copyright (c) 2007, John Mettraux, OpenWFE.org # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # . Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # . Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # . Neither the name of the "OpenWFE" nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. #++ # # $Id: definitions.rb 2725 2006-06-02 13:26:32Z jmettraux $ # # # "made in Japan" # # John Mettraux at openwfe.org # module OpenWFE # # A ConditionMixin is a mixin for flow expressions like 'if' and 'break' for # example. # It allows for shorter notations like # # # # or # # _loop do # participant :graphical_designer # participant :business_analyst # _break :if => "${f:approved}" # end # module ConditionMixin def eval_condition (attname, workitem) conditional = lookup_attribute(attname, workitem) rconditional = lookup_attribute("r"+attname.to_s, workitem) if rconditional and not conditional return instance_eval(rconditional) end return nil unless conditional #ldebug { "eval_condition() 0 for '#{conditional}'" } conditional = from_xml(conditional) #ldebug { "eval_condition() 1 for '#{conditional}'" } conditional = do_quote(conditional) ldebug { "eval_condition() 2 for '#{conditional}'" } result = instance_eval(conditional) ldebug { "eval_condition() 3 result is '#{result}'" } return (result == "true" or result == true) end private def from_xml (string) s = string s.gsub!(">", ">") s.gsub!("<", "<") s end def do_quote (string) i = string.index("==") i = string.index("!=") unless i i = string.index("<") unless i i = string.index(">") unless i return '"' + string + '"' unless i '"' + string[0..i-1].strip + '" ' + string[i..i+2] + ' "' + string[i+2..-1].strip + '"' end end end