Method: HTree::Node#subst_internal
- Defined in:
- lib/htree/loc.rb
#subst_internal(pairs) ⇒ Object
:nodoc:
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/htree/loc.rb', line 62 def subst_internal(pairs) # :nodoc: subnode_pairs = {} pairs.each {|key, val| k = key.pop (subnode_pairs[k] ||= []) << [key, val] } subnode_pairs = subnode_pairs.map {|k, subpairs| s = get_subnode(k) subpairs_empty_key, subpairs_nonempty_key = subpairs.partition {|key, val| key.empty? } if !subpairs_empty_key.empty? if !subpairs_nonempty_key.empty? raise ArgumentError, "cannot substitute a node under substituting tree." end r = [] subpairs_empty_key.each {|key, val| r.concat val } [k, r.compact] elsif subpairs_nonempty_key.empty? [k, s] else [k, s.subst_internal(subpairs)] end } subst_subnode(subnode_pairs) end |