Class: Metricks::FlogReporter::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/metricks/flog_reporter/generator.rb

Class Method Summary collapse

Class Method Details

.generate_index(flog_hashes, base_dir) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/metricks/flog_reporter/generator.rb', line 42

def generate_index(flog_hashes, base_dir)
  html = "<html><head><title>Flog Reporter</title><style>"
  html << Base.load_css
  html << "</style></head><body>"
  html << "<p><strong>Flogged files</strong></p>\n"
  html << "<p>Generated on #{Time.now.localtime} with <a href='http://ruby.sadi.st/Flog.html'>flog</a></p>\n"
  html << "<table class='report'>\n"
  html << "<tr><th>File</th><th>Total score</th><th>Methods</th><th>Average score</th><th>Highest score</th></tr>"
  count = 0
  flog_hashes.each do |flog_hash|
    html << <<-EOF
              <tr class='#{Base.cycle("light", "dark", count)}'>
                <td><a href='#{flog_hash[:path]}'>#{flog_hash[:path].sub('.html', '.rb')}</a></td>
                <td class='score'>#{sprintf(SCORE_FORMAT, flog_hash[:page].score)}</td>
                <td class='score'>#{flog_hash[:page].scanned_methods.length}</td>
                <td class='score'>#{sprintf(SCORE_FORMAT, flog_hash[:page].average_score)}</td>
                <td class='score'>#{sprintf(SCORE_FORMAT, flog_hash[:page].highest_score)}</td>
              </tr>
            EOF
    count += 1
  end
  html << "</table>\n"
  html << "</body></html>\n"
  index = File.new("#{base_dir}/index.html", "w")
  index.puts html
  index.close
end

.generate_page(filename, page, base_dir) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/metricks/flog_reporter/generator.rb', line 34

def generate_page(filename, page, base_dir)
  html_file = File.new(filename.gsub(/\.txt/, '.html'), "w")
  html_file.puts page.to_html
  html_file.close
  return { :path => html_file.path.sub("#{base_dir}/", ''),
           :page => page }
end

.generate_report(base_dir) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/metricks/flog_reporter/generator.rb', line 4

def generate_report(base_dir)
  flog_hashes = []
  Dir.glob("#{base_dir}/**/*.txt").each do |filename|
    content = ""
    File.open(filename, "r").each_line do |file|
      content << file
    end

    begin
      page = Base.parse(content)
    rescue InvalidFlog
      puts "Invalid flog for #{filename}"
      next
    end

    next unless page

    if Metricks::MD5Tracker.file_already_counted?(filename)            
      flog_hashes << {
        :page => page,
        :path => filename.sub('.txt', '.html').sub("#{base_dir}/", "")
      }
    else  
      flog_hashes << generate_page(filename, page, base_dir)
    end
  end
  
  generate_index(flog_hashes, base_dir)
end