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

- old
+ new

@@ -1,47 +1,34 @@ -# #-- -# Copyright (c) 2007-2008, John Mettraux, OpenWFE.org -# All rights reserved. +# Copyright (c) 2007-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 'json' # gem 'json_pure' require 'openwfe/util/xml' +require 'openwfe/util/json' require 'openwfe/expressions/flowexpression' module OpenWFE @@ -78,11 +65,11 @@ # apply / reply def apply (workitem) name = @fei.expression_name[0, 1] - text = fetch_text_content workitem + text = fetch_text_content(workitem) method = MAP[name] result = self.send method, text, workitem @@ -92,13 +79,13 @@ end protected MAP = { - "f" => :field, - "q" => :quote, - "v" => :variable + 'f' => :field, + 'q' => :quote, + 'v' => :variable } def field (text, workitem) workitem.attributes[text] end @@ -112,11 +99,11 @@ end end # # The 'a' or 'attribute' expression. Directly describing some - # variable or list content in XML or in YAML. + # variable or list content in XML, YAML or JSON. # # _set :field => "list" do # _a """ # <array> # <string>a</string> @@ -155,64 +142,73 @@ # # set :field => 'list' do # a '[1,2,false,"my name"]' # end # + # or # + # <process-definition name="test" revision="44b9"> + # <set-fields> + # <a>{"customer":{"name":"Zigue","age":34},"approved":false}</a> + # </set-fields> + # <sequence> + # <print>${f:customer.name} (${f:customer.age}) ${f:approved}</print> + # </sequence> + # </process-definition> + # + # class AttributeExpression < FlowExpression names :a, :attribute XML_REGEX = /<.*>/ def apply (workitem) - child = @children.first + child = raw_children.first text = if child.is_a?(String) - #child - fetch_text_content workitem + fetch_text_content(workitem) - elsif child.is_a?(FlowExpressionId) + elsif child.is_a?(Array) - exp = get_expression_pool.fetch_expression child - ExpressionTree.to_s exp.raw_representation + ExpressionTree.to_s(child) else child.to_s end text = text.strip result = if text[0, 3] == '---' - from_yaml text + from_yaml(text) elsif text.match(XML_REGEX) - from_xml text + from_xml(text) end - result = from_json(text) if result == nil + result = OpenWFE::Json::from_json(text) if result == nil + # warning : if 'json' or 'active_support' are not present + # from_json() will always return nil - #p [ :result, result, text ] - workitem.set_result(result) if result != nil - reply_to_parent workitem + reply_to_parent(workitem) end protected def from_yaml (text) begin - YAML.load text + YAML.load(text) rescue Exception => e linfo { "from_yaml() failed : #{e}" } nil end @@ -220,28 +216,13 @@ def from_xml (text) begin - OpenWFE::Xml.from_xml text + OpenWFE::Xml.from_xml(text) rescue Exception => e linfo { "from_xml() failed : #{e}" } - nil - end - end - - def from_json (text) - - begin - - return JSON.parse(text) if defined?(JSON) - - return ActiveSupport::JSON.decode(text) \ - if defined?(ActiveSupport::JSON) - - rescue Exception => e - linfo { "from_json() failed : #{e}" } nil end end end