lib/openwfe/expressions/fe_sequence.rb in ruote-0.9.19 vs lib/openwfe/expressions/fe_sequence.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/expressions/flowexpression'
module OpenWFE
@@ -61,67 +47,56 @@
#
class SequenceExpression < FlowExpression
names :sequence
-
def apply (workitem)
- reply workitem
+ reply(workitem)
end
def reply (workitem)
- cfei = next_child workitem.fei
+ child_index = next_child_index(workitem.fei)
- return reply_to_parent(workitem) \
- unless cfei
+ return reply_to_parent(workitem) unless child_index
- #ldebug do
- # "reply() self : \n#{self.to_s}\n" +
- # "reply() next is #{@current_child_id} : #{cfei.to_debug_s}"
- #end
+ @children.clear if @children
+ # keeping track of only 1 child, it's a sequence ...
- get_expression_pool.apply cfei, workitem
+ apply_child(child_index, workitem)
end
protected
- #
- # Returns the flowExpressionId of the next child to apply, or
- # nil if the sequence is over.
- #
- def next_child (current_fei)
+ #
+ # Returns the child_index (in the raw_children array) of the next child
+ # to apply, or nil if the sequence is over.
+ #
+ def next_child_index (returning_fei)
- # using @current_id as 'memo' of the current position
+ next_id = if returning_fei.is_a?(Integer)
+ returning_fei + 1
+ elsif returning_fei == self.fei
+ 0
+ else
+ returning_fei.child_id.to_i + 1
+ end
- @current_id = nil \
- if @current_id and (@children[@current_id] != current_fei)
- #
- # the list of children changed, forget the current position
- # will have to redetermine it ...
+ loop do
- @current_id = if @current_id
- @current_id + 1
- elsif current_fei == self.fei
- 0
- else
- @children.index(current_fei) + 1
- end
+ break if next_id > raw_children.length
- loop do
+ raw_child = raw_children[next_id]
- break if @current_id >= @children.length
+ return next_id \
+ if raw_child.is_a?(Array) or raw_child.is_a?(FlowExpressionId)
- child = @children[@current_id]
-
- return child if child.is_a?(FlowExpressionId)
-
- @current_id += 1
- end
-
- nil
+ next_id += 1
end
+
+ nil
+ end
end
end