class Flor::Pro::PatContainer
Public Instance Methods
execute()
click to toggle source
Calls superclass method
Flor::Procedure#execute
# File lib/flor/pcore/_pat_.rb, line 10 def execute if tree[1] == 0 || tree[1] == [] payload['_pat_binding'] = val == [] ? {} : nil payload.delete('_pat_val') return wrap_reply end super end
execute_child(index=0, sub=nil, h=nil)
click to toggle source
Calls superclass method
Flor::Procedure#execute_child
# File lib/flor/pcore/_pat_.rb, line 21 def execute_child(index=0, sub=nil, h=nil) ct = child_type(index) if ct == :pattern || ct.is_a?(Array) @node['_sub_pat_val'] = sv = sub_val(index) payload['_pat_val'] = sv[1] else @node.delete('_sub_pat_val') payload.delete('_pat_val') end return wrap_reply( 'nid' => nid, 'from' => Flor.child_nid(nid, index, sub) ) if ct.is_a?(String) || ct.is_a?(Array) super(index, sub, h) end
pre_execute()
click to toggle source
# File lib/flor/pcore/_pat_.rb, line 5 def pre_execute @node['binding'] = {} end
Protected Instance Methods
child_type(cid_or_tree)
click to toggle source
# File lib/flor/pcore/_pat_.rb, line 54 def child_type(cid_or_tree) ct = cid_or_tree.is_a?(Array) ? cid_or_tree : tree[1][cid_or_tree] ct0 = ct[0] return :att if ct0 == '_att' return :pattern if /\A_pat_(arr|obj|or|guard|regex)\z/ === ct0 return '_' if ct0 == '_' return ct0 if /\A[a-z][a-z0-9]*\z/ === ct0 && ct[1] == [] m = ct0.match(Flor::SPLAT_REGEX) return [ m[1], m[2] == '_' ? nil : m[2].to_i ] if m nil # nothing special end
sub_val(child_index)
click to toggle source
A default implementation
# File lib/flor/pcore/_pat_.rb, line 49 def sub_val(child_index) [ 1, val ] end
val()
click to toggle source
# File lib/flor/pcore/_pat_.rb, line 42 def val node_payload['_pat_val'] || node_payload_ret end
wrap_no_match_reply()
click to toggle source
# File lib/flor/pcore/_pat_.rb, line 70 def wrap_no_match_reply payload['_pat_binding'] = nil payload.delete('_pat_val') wrap_reply end