#-- # Copyright (c) 2006-2009, John Mettraux, jmettraux@gmail.com # # 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: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # 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. # # Made in Japan. #++ module OpenWFE # # A small mixin providing value for looking up the attributes # variable/var/v and field/fld/f. # module ValueMixin # # Expressions that include the ValueMixin let it gather values and # then, in their reply() methods do the job with the values. # The gathering task is performed by the ValueMixin. # def apply (workitem) escape = lookup_boolean_attribute('escape', workitem, false) if raw_children.length < 1 workitem.set_result(lookup_value(workitem, :escape => escape)) reply(workitem) return end child = raw_children.first if child.is_a?(Array) # child is an expression if get_expression_map.get_class(child[0]) == DefineExpression workitem.set_result(child) # bind process reply(workitem) else apply_child(0, workitem) # apply child end else # child is a piece of text workitem.set_result(fetch_text_content(workitem, escape)) reply(workitem) end end def lookup_variable_attribute (workitem) lookup [ 'variable', 'var', 'v' ], workitem end def lookup_field_attribute (workitem) lookup [ 'field', 'fld', 'f' ], workitem end private def lookup (name_array, workitem) name_array.each do |n| v = lookup_string_attribute(n, workitem) return v if v != nil # covers v = false as well end nil end end end