Class: Kablame

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

Direct Known Subclasses

GitKablame, SvnKablame

Instance Method Summary collapse

Constructor Details

#initialize(dirs = nil, formats = nil) ⇒ Kablame

Returns a new instance of Kablame.



3
4
5
6
7
# File 'lib/kablame.rb', line 3

def initialize(dirs = nil, formats = nil)
  @users = {}    
  @folders = dirs.split.map {|dir| dir.sub(/\/+\Z/, '') }
  @formats = formats ? formats.split : %w{rb}
end

Instance Method Details

#file_format_regexObject



51
52
53
# File 'lib/kablame.rb', line 51

def file_format_regex
  %r{\.(#{@formats.join('|')})}
end

#foldersObject



47
48
49
# File 'lib/kablame.rb', line 47

def folders 
  @folders
end

#kablameObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/kablame.rb', line 9

def kablame
  folders.each do |directory|
    if File.exists?(directory) 
      puts "\nKablaming #{directory}"
      Dir.glob(directory+"/**/*").grep(file_format_regex).each do |filename|
        process_file(filename)
      end
    else
      puts "#{directory} not found. Skipping it!"
    end
  end
  unless(@users.empty?)
    print_results 
  else
    puts "No results.  Try a different directory?"
  end
end


37
38
39
40
41
42
43
44
# File 'lib/kablame.rb', line 37

def print_results
  puts "\n\n++++++++++++TOTALS++++++++++++"
  puts "**WINNER** #{@users.values.sort.first.name} **WINNER**"
  @users.values.sort.each do |user|
    puts user.to_s
  end 
  puts "**LOSER** #{@users.values.sort.last.name} **LOSER**"
end

#process_file(filename) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/kablame.rb', line 27

def process_file(filename)
  print '.'
  STDOUT.flush
  get_blame_lines(filename).each do |line|
    next if line.match(blank_line_regex)
    name = line.match(name_match_regex)[1].strip  
    (@users[name] ? @users[name].increment : @users[name] = KablameUser.new(name)) unless name.nil?
  end
end