forked from troessner/reek
-
Notifications
You must be signed in to change notification settings - Fork 0
/
report.rb
101 lines (81 loc) · 2.01 KB
/
report.rb
1
2
3
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
33
34
35
36
37
38
39
40
41
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
require 'set'
require 'reek/sniffer'
require 'reek/smells/smell_detector'
module Reek
class Report
include Enumerable
def initialize(sniffer = nil) # :nodoc:
@masked_smells = SortedSet.new
@report = SortedSet.new
sniffer.report_on(self) if sniffer
end
#
# Yields, in turn, each SmellWarning in this report.
#
def each
@report.each { |smell| yield smell }
end
def <<(smell) # :nodoc:
@report << smell
true
end
def record_masked_smell(smell)
@masked_smells << smell
end
def num_masked_smells
@masked_smells.length
end
def empty?
@report.empty?
end
def length
@report.length
end
alias size length
def [](index) # :nodoc:
@report.to_a[index]
end
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
# this report, with a heading.
def full_report(desc)
result = header(desc, @report.length)
result += ":\n#{to_s}\n" if length > 0
result
end
def header(desc, num_smells)
result = "\"#{desc}\" -- #{num_smells} warning"
result += 's' unless num_smells == 1
result += " (+#{@masked_smells.length} masked)" unless @masked_smells.empty?
result
end
# Creates a formatted report of all the +Smells::SmellWarning+ objects recorded in
# this report.
def to_s
@report.map {|smell| " #{smell.report}"}.join("\n")
end
end
class ReportList
include Enumerable
def initialize(sources)
@sources = sources
end
#
# Yields, in turn, each SmellWarning in every report in this report.
#
def each(&blk)
@sources.each {|src| src.report.each(&blk) }
end
def empty?
length == 0
end
def length
@sources.inject(0) {|sum, src| sum + src.report.length }
end
def smelly_sources
@sources.select {|src| src.smelly? }
end
def to_s
@sources.map { |src| src.full_report }.join("\n")
end
end
end