Class: Kablame

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

Direct Known Subclasses

GitKablame, SvnKablame

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Kablame.



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

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

Class Method Details

.kablame(args) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/kablame.rb', line 56

def self.kablame(args)
  formats = KablameOptions.new(type).format_parse(args)
  targets = args

  if targets.nil? || targets.empty?
  	KablameOptions.print_usage(type)
  	exit(0)
  end
  new(targets, formats).kablame
end

Instance Method Details

#file_format_regexObject



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

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

#foldersObject



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

def folders 
  @folders
end

#kablameObject



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

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


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

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**" unless @users.length == 1
end

#process_file(filename) ⇒ Object



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

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