class SuperDiff::TieredLinesElider::BuildBoxes

Attributes

final_boxes[R]
lines[R]
open_collection_boxes[R]

Public Class Methods

call(lines) click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 386
def self.call(lines)
  builder = new(lines)
  builder.build
  builder.final_boxes
end
new(lines) click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 394
def initialize(lines)
  @lines = lines

  @open_collection_boxes = []
  @final_boxes = []
end

Public Instance Methods

build() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 401
def build
  lines.each_with_index do |line, index|
    if line.opens_collection?
      open_new_collection_box(line, index)
    elsif line.closes_collection?
      extend_working_collection_box(index)
      close_working_collection_box
    else
      extend_working_collection_box(index) if open_collection_boxes.any?
      record_item_box(line, index)
    end
  end
end

Private Instance Methods

close_working_collection_box() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 423
def close_working_collection_box
  final_boxes << open_collection_boxes.pop
end
extend_working_collection_box(index) click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 419
def extend_working_collection_box(index)
  open_collection_boxes.last.extend_to(index)
end
open_new_collection_box(line, index) click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 427
def open_new_collection_box(line, index)
  open_collection_boxes << Box.new(
    indentation_level: line.indentation_level,
    range: index..index,
  )
end
record_item_box(line, index) click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 434
def record_item_box(line, index)
  final_boxes << Box.new(
    indentation_level: line.indentation_level,
    range: index..index,
  )
end