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