class Diff

Attributes

delete_count[RW]
delete_start[RW]
deletions[RW]
insert_count[RW]
insert_start[RW]
insertions[RW]

Public Class Methods

new(attrs={}) click to toggle source
# File lib/diff.rb, line 12
def initialize(attrs={})
  attrs.each do |key, val|
    instance_variable_set("@#{key}".to_sym, val)
  end
end

Private Class Methods

fold_lines_standard(acc, diff_line) click to toggle source
# File lib/diff.rb, line 52
def fold_lines_standard(acc, diff_line)
  diff = diff_line
  line = diff_line[1..-1]

  if diff.first == "+"
    acc[:insertions] << line
  elsif diff.first == "-"
    acc[:deletions] << line
  end

  acc
end
from_git(diff_lines) click to toggle source
# File lib/diff.rb, line 21
def from_git(diff_lines)
  Diff.new(parse_diff(diff_lines))
end
parse_diff(diff_lines) click to toggle source
# File lib/diff.rb, line 25
def parse_diff(diff_lines)
  stats = diff_lines
    .first
    .split("@@")[1]
    .split(" ")

  delete = stats.first.split(",")
  add = stats.last.split(",")

  delete_start = delete.first[1..-1].to_i
  delete_count = delete.length > 1 ? delete.last.to_i : 1
  add_start = add.first[1..-1].to_i
  add_count = add.length > 1 ? add.last.to_i : 1

  diffs = diff_lines[1..-1]
  patch = {
    insertions: [],
    deletions: [],
    delete_start: delete_start,
    delete_count: delete_count,
    insert_start: add_start,
    insert_count: add_count
  }

  diffs.reduce(patch, &method(:fold_lines_standard))
end