class Yalphabetize::SequenceIndenter
Attributes
Public Class Methods
Source
# File lib/yalphabetize/sequence_indenter.rb, line 7 def self.call(content) new(content).call end
Source
# File lib/yalphabetize/sequence_indenter.rb, line 11 def initialize(content) @content = content end
Public Instance Methods
Source
# File lib/yalphabetize/sequence_indenter.rb, line 15 def call return unless Yalphabetize.config['indent_sequences'] find_lines_to_indent indent! file_lines.join end
Private Instance Methods
Source
# File lib/yalphabetize/sequence_indenter.rb, line 37 def block_sequence_nodes(node) node.children&.select { |child_node| child_node.sequence? && child_node.style == 1 } end
Source
# File lib/yalphabetize/sequence_indenter.rb, line 55 def file_lines @_file_lines ||= content.each_line.to_a end
Source
# File lib/yalphabetize/sequence_indenter.rb, line 27 def find_lines_to_indent @nodes_to_indent = [] stream_node.select(&:mapping?).each do |mapping_node| block_sequence_nodes(mapping_node)&.each do |sequence_node| @nodes_to_indent.push(*sequence_node.children) end end end
Source
# File lib/yalphabetize/sequence_indenter.rb, line 45 def indent! @nodes_to_indent.each do |node| node_end_line = node.start_line == node.end_line ? node.end_line : node.end_line - 1 file_lines[node.start_line..node_end_line].each do |line| line.prepend(' ') end end end
Source
# File lib/yalphabetize/sequence_indenter.rb, line 41 def stream_node Psych.parse_stream content end