| Module | OpenWFE::ConditionMixin |
| In: |
lib/openwfe/expressions/condition.rb
|
A ConditionMixin is a mixin for flow expressions like ‘if’ and ‘break’ for example. It allows for shorter notations like
<if test="${f:approved} == true"/>
or
_loop do
participant :graphical_designer
participant :business_analyst
_break :if => "${f:approved}"
end
| SET_REGEX | = | /(\S*?)( is)?( not)? set$/ |
Returns nil if the cited attname (without or without ‘r’ prefix) is not present.
Attname may be a String or a Symbol, or an Array of String or Symbol instances.
Returns the Symbol the attribute if present.
# File lib/openwfe/expressions/condition.rb, line 90
90: def determine_condition_attribute (attname)
91:
92: attname = [ attname ] unless attname.is_a?(Array)
93:
94: attname.each do |aname|
95: aname = aname.intern if aname.is_a?(String)
96: return aname if has_attribute(aname)
97: return aname if has_attribute("r" + aname.to_s)
98: end
99:
100: nil
101: end
This is the method brought to expression classes including this mixin. Easy evaluation of a conditon expressed in an attribute.
# File lib/openwfe/expressions/condition.rb, line 66
66: def eval_condition (attname, workitem, nattname=nil)
67:
68: positive = nil
69: negative = nil
70:
71: positive = do_eval_condition(attname, workitem)
72: negative = do_eval_condition(nattname, workitem) if nattname
73:
74: negative = (not negative) if negative != nil
75:
76: return positive if positive != nil
77:
78: negative
79: end
# File lib/openwfe/expressions/condition.rb, line 105
105: def do_eval_condition (attname, workitem)
106:
107: #attname = pick_attribute(attname) # if attname.is_a?(Array)
108:
109: conditional = lookup_attribute(attname, workitem)
110: rconditional = lookup_attribute("r"+attname.to_s, workitem)
111:
112: return do_eval(rconditional, workitem) \
113: if rconditional and not conditional
114:
115: return nil \
116: unless conditional
117:
118: ldebug { "do_eval_condition() 0 for >#{conditional}<" }
119:
120: conditional = unescape conditional
121:
122: ldebug { "do_eval_condition() 1 for >#{conditional}<" }
123:
124: r = eval_set conditional
125: return r if r != nil
126:
127: begin
128: return to_boolean(do_eval(conditional, workitem))
129: rescue Exception => e
130: # probably needs some quoting...
131: ldebug { "do_eval_condition() e : #{e}" }
132: end
133:
134: conditional = do_quote(conditional)
135:
136: ldebug { "do_eval_condition() 2 for >#{conditional}<" }
137:
138: to_boolean(do_eval(conditional, workitem))
139: end
Evals the ‘x [ is][ not] set’ notation…
# File lib/openwfe/expressions/condition.rb, line 147
147: def eval_set (cond)
148:
149: m = SET_REGEX.match cond
150:
151: return nil unless m
152:
153: val = m[1]
154: n = m[3]
155:
156: ldebug do
157: "eval_set() for >#{cond}< "+
158: "m[1] is '#{val}', m[3] is '#{n}'"
159: end
160:
161: val = val.strip if val
162: val = (val != nil and val != '')
163: n = (n and n.strip == 'not')
164:
165: n ? (not val) : val
166: end