def new_value(type, key, increment)
if type == nil && m = PREFIX_REGEX.match(key)
type = (m[1][0, 1] == 'f' ? :field : :var)
key = m[2]
end
delta = increment.nil? ? lookup_val : increment
if delta.nil? && @msg && @msg['action'] == 'reply'
delta = h.applied_workitem['fields']['__result__']
end
ndelta = Ruote.narrow_to_number(delta || 1)
ndelta = -ndelta if dec? && ndelta
value = type == :var ?
lookup_variable(key) :
Ruote.lookup(h.applied_workitem['fields'], key)
value = case value
when NilClass then []
when Array then value
else [ value ]
end if (name == 'push' || name == 'pop')
pos = attribute(:position) || attribute(:pos)
return ((value || 0) + ndelta) if ndelta && (not value.is_a?(Array))
pos ||= 'tail'
value ||= []
return (pos == 'tail' ? value + [ delta ] : [ delta ] + value) unless dec?
car, cdr = if delta != nil
(value.delete(delta) != nil ) ? [ delta, value ] : [ nil, value ]
elsif pos == 'tail'
[ value[-1], value[0..-2] ]
else
[ value[0], value[1..-1] ]
end
to_v, to_f = determine_tos
key = to_v ? "v:#{to_v}" : to_f
[ key, car, cdr ]
end