Class: GitEvolution::Commit

Inherits:
Object
  • Object
show all
Defined in:
lib/git_evolution/commit.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_commit) ⇒ Commit

Returns a new instance of Commit.



5
6
7
8
9
10
11
# File 'lib/git_evolution/commit.rb', line 5

def initialize(raw_commit)
  @raw_commit = raw_commit

  parse_meta_data!
  parse_body_data!
  parse_diff_data!
end

Instance Attribute Details

#additionsObject (readonly)

Returns the value of attribute additions.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def additions
  @additions
end

#authorObject (readonly)

Returns the value of attribute author.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def author
  @author
end

#bodyObject (readonly)

Returns the value of attribute body.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def body
  @body
end

#dateObject (readonly)

Returns the value of attribute date.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def date
  @date
end

#deletionsObject (readonly)

Returns the value of attribute deletions.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def deletions
  @deletions
end

#raw_commitObject (readonly)

Returns the value of attribute raw_commit.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def raw_commit
  @raw_commit
end

#shaObject (readonly)

Returns the value of attribute sha.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def sha
  @sha
end

#subjectObject (readonly)

Returns the value of attribute subject.



3
4
5
# File 'lib/git_evolution/commit.rb', line 3

def subject
  @subject
end

Instance Method Details

#parse_body_data!Object



19
20
21
22
23
24
25
26
27
# File 'lib/git_evolution/commit.rb', line 19

def parse_body_data!
  raw_body_lines = (raw_commit + "\n\u0000").scan(/^Date:.*?$(.*?)^[diff|\u0000]/m).flatten.first.strip.split("\n")
  @subject = raw_body_lines.first.strip

  if raw_body_lines.size > 1
    @body = raw_body_lines[1..-1].map { |line| line.gsub(/^\s+/, '') }.join("\n")
    @body.sub!(/\n+/, '') if @body.start_with?("\n")
  end
end

#parse_diff_data!Object



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/git_evolution/commit.rb', line 29

def parse_diff_data!
  raw_diff_lines = raw_commit.scan(/^@@.*?$(.*)?/m).flatten.first

  if raw_diff_lines
    raw_diff_lines = raw_diff_lines.strip.split("\n")
    @additions = raw_diff_lines.count { |line| line.start_with?('+') }
    @deletions = raw_diff_lines.count { |line| line.start_with?('-') }
  else
    @additions = 0
    @deletions = 0
  end
end

#parse_meta_data!Object



13
14
15
16
17
# File 'lib/git_evolution/commit.rb', line 13

def parse_meta_data!
  @sha = raw_commit.scan(/^commit\s+(.*?)$/).flatten.first.strip
  @author = raw_commit.scan(/^Author:\s+(.*?)$/).flatten.first.strip
  @date= raw_commit.scan(/^Date:\s+(.*?)$/).flatten.first.strip
end