gitlab-org--gitlab-foss/lib/gitlab/git/diff.rb
2013-04-16 16:29:49 +03:00

63 lines
1.3 KiB
Ruby

# Gitlab::Git::Diff is a wrapper around native Grit::Diff object
# We dont want to use grit objects inside app/
# It helps us easily migrate to rugged in future
module Gitlab
module Git
class Diff
BROKEN_DIFF = "--broken-diff"
attr_accessor :raw_diff
# Diff properties
attr_accessor :old_path, :new_path, :a_mode, :b_mode, :diff
# Stats properties
attr_accessor :new_file, :renamed_file, :deleted_file
def initialize(raw_diff)
raise "Nil as raw diff passed" unless raw_diff
if raw_diff.is_a?(Hash)
init_from_hash(raw_diff)
else
init_from_grit(raw_diff)
end
end
def serialize_keys
@serialize_keys ||= %w(diff new_path old_path a_mode b_mode new_file renamed_file deleted_file).map(&:to_sym)
end
def to_hash
hash = {}
keys = serialize_keys
keys.each do |key|
hash[key] = send(key)
end
hash
end
private
def init_from_grit(grit)
@raw_diff = grit
serialize_keys.each do |key|
send(:"#{key}=", grit.send(key))
end
end
def init_from_hash(hash)
raw_diff = hash.symbolize_keys
serialize_keys.each do |key|
send(:"#{key}=", raw_diff[key.to_sym])
end
end
end
end
end