class SuperDiff::TieredLinesElider::BuildPanes

Public Instance Methods

call() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 287
def call
  beginning + middle + ending
end

Private Instance Methods

beginning() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 293
def beginning
  if (
    dirty_panes.empty? ||
    dirty_panes.first.range.begin == 0
  )
    []
  else
    [
      Pane.new(
        type: :clean,
        range: Range.new(
          0,
          dirty_panes.first.range.begin - 1
        )
      )
    ]
  end
end
ending() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 339
def ending
  if (
    dirty_panes.empty? ||
    dirty_panes.last.range.end >= lines.size - 1
  )
    []
  else
    [
      Pane.new(
        type: :clean,
        range: Range.new(
          dirty_panes.last.range.end + 1,
          lines.size - 1
        )
      )
    ]
  end
end
middle() click to toggle source
# File lib/super_diff/tiered_lines_elider.rb, line 312
def middle
  if dirty_panes.size == 1
    dirty_panes
  else
    dirty_panes.
      each_with_index.
      each_cons(2).
      reduce([]) do |panes, ((pane1, _), (pane2, index2))|
        panes +
        [
          pane1,
          Pane.new(
            type: :clean,
            range: Range.new(
              pane1.range.end + 1,
              pane2.range.begin - 1,
            )
          )
        ] + (
          index2 == dirty_panes.size - 1 ?
          [pane2] :
          []
        )
      end
  end
end