class Yalphabetize::Aliaser
Attributes
Public Class Methods
Source
# File lib/yalphabetize/aliaser.rb, line 5 def initialize(stream_node) @stream_node = stream_node @aliases = {} end
Public Instance Methods
Source
# File lib/yalphabetize/aliaser.rb, line 10 def call nodes.each do |node| next unless node.respond_to?(:anchor) && node.anchor ensure_anchor_then_alias(node) end stream_node end
Private Instance Methods
Source
# File lib/yalphabetize/aliaser.rb, line 45 def convert_node(child_node, anchor_node, alias_node) if child_node == anchor_node alias_node elsif child_node == alias_node anchor_node else child_node end end
Source
# File lib/yalphabetize/aliaser.rb, line 23 def ensure_anchor_then_alias(node) if node.alias? aliases[node.anchor] ||= node elsif aliases[node.anchor] swap(node, aliases[node.anchor]) end end
Source
# File lib/yalphabetize/aliaser.rb, line 39 def nodes stream_node.select do |node| node.respond_to?(:anchor) && node.anchor end end
Source
# File lib/yalphabetize/aliaser.rb, line 31 def swap(anchor_node, alias_node) stream_node.each do |node| node.children&.map! do |child_node| convert_node(child_node, anchor_node, alias_node) end end end