lib/openwfe/expressions/fe_if.rb in ruote-0.9.19 vs lib/openwfe/expressions/fe_if.rb in ruote-0.9.20

- old
+ new

@@ -1,43 +1,29 @@ -# #-- -# Copyright (c) 2006-2008, John Mettraux, OpenWFE.org -# All rights reserved. +# Copyright (c) 2006-2009, John Mettraux, jmettraux@gmail.com # -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -# . Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. # -# . 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. +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. # -# . 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. +# Made in Japan. #++ -# -# -# "made in Japan" -# -# John Mettraux at openwfe.org -# require 'openwfe/workitem' require 'openwfe/flowexpressionid' require 'openwfe/expressions/condition' require 'openwfe/expressions/flowexpression' @@ -112,45 +98,45 @@ #workitem.unset_result # # since OpenWFEru 0.9.16 previous __result__ values # are not erased before an 'if'. - test = eval_condition :test, workitem, :not + test = eval_condition(:test, workitem, :not) - if @children.length < 1 - #workitem.set_result test if test + if raw_children.length < 1 workitem.set_result((test != nil and test != false)) - reply_to_parent workitem + reply_to_parent(workitem) return end @condition_replied = (test != nil) # # if the "test" attribute is not used, test will be null - store_itself + #store_itself + # now done in apply_* # a warning maxchildren = (test == nil) ? 3 : 2 lwarn { "apply() 'if' with more than #{maxchildren} children" - } if @children.size > maxchildren + } if raw_children.size > maxchildren # apply next step if test != nil # # apply then or else (condition result known) # - apply_consequence test, workitem, 0 + apply_consequence(test, workitem, 0) else # # apply condition # - get_expression_pool.apply @children.first, workitem + apply_child(0, workitem) end end def reply (workitem) @@ -159,13 +145,14 @@ result = workitem.attributes[FIELD_RESULT] @condition_replied = true - store_itself + #store_itself + # now done in apply_c* - apply_consequence result, workitem + apply_consequence(result, workitem) end # # This reply_to_parent takes care of cleaning all the children # before replying to the parent expression, this is important @@ -173,11 +160,11 @@ # remaining one has to be cleaned out here. # def reply_to_parent (workitem) clean_children - super workitem + super(workitem) end protected def apply_consequence (index, workitem, offset=1) @@ -192,14 +179,14 @@ index = 0 end index = index + offset - if index >= @children.length - reply_to_parent workitem + if index >= raw_children.length + reply_to_parent(workitem) else - get_expression_pool.apply @children[index], workitem + apply_child(index, workitem) end end end # @@ -251,25 +238,21 @@ # since OpenWFEru 0.9.16 previous __result__ values # are not erased before a 'case'. @offset = nil - trigger_child workitem, true + trigger_child(workitem, true) end def reply (workitem) if @evaluating_condition - result = workitem.get_boolean_result - - #ldebug { "reply() result : '#{result.to_s}' (#{result.class})" } - - trigger_child workitem, !result + trigger_child(workitem, ( ! workitem.get_boolean_result)) else - reply_to_parent workitem + reply_to_parent(workitem) end end protected @@ -284,19 +267,20 @@ end #ldebug { "trigger_child() is_condition ? #{is_condition}" } #ldebug { "trigger_child() next offset is #{@offset}" } - unless @children[@offset] - reply_to_parent workitem + unless raw_children[@offset] + reply_to_parent(workitem) return end @evaluating_condition = is_condition store_itself - get_expression_pool.apply(@children[@offset], workitem) + #get_expression_pool.apply(@children[@offset], workitem) + apply_child(@offset, workitem) end end end