preek 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 37e624d4a67976a8062a37c690c17957dd605706
4
- data.tar.gz: 744b77bcea99590f34da0ee56b8bc72d15525b3a
3
+ metadata.gz: 6a2898d250cb8cea642a90c538ce337b21b582fb
4
+ data.tar.gz: 963cbb7dcebd619e3da7a47fd2fdce46d767a406
5
5
  SHA512:
6
- metadata.gz: 9d7fb7c110fd621346a35d1c6c1eaf46b4888a6d5e25a99c2632e5ecc7dfa69b16bf8caf5b16bc7c80e99021a1fbf1cfdede29a2722c2fffa11b8928d7e196bb
7
- data.tar.gz: fa3d7538f75edf82b4976ffd2ab4047e7e46096617ae4c81a070b461ee6d725ed622a1ad0c6fd27751a7ddbac3fa4dd849e8c5beec1b3f76c309db0f528d5d8d
6
+ metadata.gz: 0f33bf0471e6fde2f572c62bd546da8611ef8be0f54ce4e81bcfaac2da2335c9e55ae2f4b4cfea0300a503c89272ec1444ea8c95bb7cad4cedfb610e465bd8c6
7
+ data.tar.gz: 3a51ab71c58530be58fd33affcf172ac7b4f8abc781050d73f02da3fb103d04a71a8bf49c9bbae1d20af7faacfd4575d8769ee2e8b42c6f3753fb205c82f0ed4
data/README.md CHANGED
@@ -31,8 +31,9 @@ Usage:
31
31
  preek smell FILE(S)|DIR
32
32
 
33
33
  Options:
34
- -i, [--irresponsible] # include IrresponsibleModule smell in output.
35
-
34
+ -i, [--irresponsible] # Include IrresponsibleModule smell in output.
35
+ -c, [--compact] # Compact output.
36
+ -v, [--verbose] # Report files with no smells
36
37
 
37
38
  Commands:
38
39
  preek help [COMMAND] # Describe available commands or one specific command
@@ -1,11 +1,10 @@
1
1
  module Preek
2
2
  require 'preek/version'
3
- require 'preek/smell_collector'
4
- require 'preek/smell_reporter'
3
+ require 'preek/examiner'
4
+ require 'preek/report'
5
+ require 'preek/output'
5
6
 
6
7
  def self.Smell(filenames, excludes = [])
7
- files, not_files = filenames.partition { |file| File.exists? file }
8
- smelly_files = SmellCollector.new(files, excludes).smelly_files
9
- SmellReporter.new(smelly_files, not_files).print_result
8
+ Examiner.new(filenames, excludes).perform
10
9
  end
11
10
  end
@@ -1,8 +1,5 @@
1
1
  require 'thor'
2
-
3
2
  require 'preek/version'
4
- require 'preek/smell_collector'
5
- require 'preek/smell_reporter'
6
3
 
7
4
  module Preek
8
5
 
@@ -16,15 +13,37 @@ module Preek
16
13
  end
17
14
 
18
15
  desc 'smell FILE(S)|DIR', 'Pretty format Reek output'
16
+
19
17
  method_option :irresponsible,
20
18
  type: :boolean,
21
19
  aliases: '-i',
22
- desc: 'include IrresponsibleModule smell in output.'
20
+ desc: 'Include IrresponsibleModule smell in output.'
21
+
22
+ method_option :compact,
23
+ type: :boolean,
24
+ aliases: '-c',
25
+ desc: 'Compact output.'
26
+
27
+ method_option :verbose,
28
+ type: :boolean,
29
+ aliases: '-v',
30
+ desc: 'Report files with no smells.'
31
+
32
+
23
33
  def smell(*args)
24
- Preek::Smell(args, excludes)
34
+ Examiner.new(args, excludes, reporter: reporter, output: output).perform
25
35
  end
26
36
 
27
37
  private
38
+
39
+ def reporter
40
+ options[:verbose] ? VerboseReport : QuietReport
41
+ end
42
+
43
+ def output
44
+ options[:compact] ? CompactOutput : Output
45
+ end
46
+
28
47
  def _aliases
29
48
  {
30
49
  irresponsible: 'IrresponsibleModule'
@@ -0,0 +1,68 @@
1
+ require 'reek/examiner'
2
+
3
+ module Preek
4
+ class Examiner
5
+ def initialize(files, excludes = [], options = {})
6
+ @files = files
7
+ @excludes = excludes
8
+ @reporter = options[:reporter] || VerboseReport
9
+ output_class = options[:output] || Output
10
+ @output = output_class.new
11
+ @total_smells = 0
12
+ end
13
+
14
+ def perform
15
+ examine_and_report
16
+ report_totals if totals_to_report?
17
+ @output.print_line
18
+ report_non_existing if non_existing_files?
19
+ end
20
+
21
+ private
22
+ def examine_and_report
23
+ sources.each do |source|
24
+ examiner = Reek::Examiner.new(source)
25
+ filter_excludes_from(examiner)
26
+ @reporter.new(examiner, @output).report
27
+ @total_smells += examiner.smells_count
28
+ end
29
+ end
30
+
31
+ def filter_excludes_from(examiner)
32
+ examiner.smells.delete_if do |smell|
33
+ @excludes.include? smell.smell_class
34
+ end
35
+ end
36
+
37
+ def totals_to_report?
38
+ return false if @reporter.verbose? || @sources.count == 0
39
+ @total_smells == 0
40
+ end
41
+
42
+ def report_totals
43
+ @output.print_line
44
+ @output.green :success, %(No smells detected)
45
+ end
46
+
47
+ def report_non_existing
48
+ @output.red :error, %{No such file(s) - #{non_existing_files.join(', ')}.\n}
49
+ @output.print_line
50
+ end
51
+
52
+ def existing_files
53
+ @existing_files ||= @files.select {|file| File.exists? file}
54
+ end
55
+
56
+ def non_existing_files?
57
+ !non_existing_files.empty?
58
+ end
59
+
60
+ def non_existing_files
61
+ @files - existing_files
62
+ end
63
+
64
+ def sources
65
+ @sources ||= Reek::Source::SourceLocator.new(existing_files).all_sources
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ require 'thor/shell/color'
2
+ module Preek
3
+ class Output < Thor::Shell::Color
4
+ def status(*args)
5
+ say_status *args
6
+ end
7
+
8
+ def print_line
9
+ say "\n\t#{'-'*60}\n\n"
10
+ end
11
+
12
+ def blue(*args)
13
+ status *args, :blue
14
+ end
15
+
16
+ def green(*args)
17
+ status *args, :green
18
+ end
19
+
20
+ def red(*args)
21
+ status *args, :red
22
+ end
23
+ end
24
+
25
+ class CompactOutput < Output
26
+ def status(title, text, color = nil)
27
+ title = title.to_s + ": " if title.is_a?(Symbol)
28
+ say title, color, false
29
+ say text
30
+ end
31
+
32
+ def print_line
33
+ say "\n-\n\n"
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,64 @@
1
+ require 'preek/ext/smell_warning'
2
+ require 'preek/smell_file'
3
+ require 'preek/smell_klass'
4
+ module Preek
5
+ class VerboseReport
6
+ def self.verbose?
7
+ true
8
+ end
9
+
10
+ def initialize(examiner, output)
11
+ @examiner, @output = examiner, output
12
+ end
13
+
14
+ def report
15
+ print_header
16
+ if @examiner.smelly?
17
+ report_smells
18
+ else
19
+ report_success
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def print_header
26
+ @output.print_line
27
+ @output.blue :file, "#{@examiner.description}\n"
28
+ end
29
+
30
+ def smell_file
31
+ SmellFile.new(@examiner)
32
+ end
33
+
34
+ def report_smells
35
+ smell_file.klasses do |klass|
36
+ @output.green :class, klass.name
37
+ @output.red :smells, ''
38
+ klass.smells.each &print_smell
39
+ end
40
+ end
41
+
42
+ def print_smell
43
+ lambda {|smell| @output.status nil, smell }
44
+ end
45
+
46
+ def print_klass_smells(smells)
47
+ smells.each {|smell| @output.status nil, smell }
48
+ end
49
+
50
+ def report_success
51
+ @output.green :success, "No smells detected.\n"
52
+ end
53
+ end
54
+
55
+ class QuietReport < VerboseReport
56
+ def self.verbose?
57
+ false
58
+ end
59
+
60
+ def report
61
+ print_header && report_smells if @examiner.smelly?
62
+ end
63
+ end
64
+ end
@@ -1,7 +1,6 @@
1
1
  module Preek
2
2
  # A smelly file
3
3
  class SmellFile
4
- attr_reader :klasses
5
4
 
6
5
  def initialize(examiner)
7
6
  @examiner = examiner
@@ -15,6 +14,13 @@ module Preek
15
14
 
16
15
  alias :filename :file
17
16
 
17
+ def klasses
18
+ return @klasses unless block_given?
19
+ @klasses.each do |name, klass|
20
+ yield klass
21
+ end
22
+ end
23
+
18
24
  private
19
25
  def add_smells_to_klasses
20
26
  @examiner.smells.each do |smell|
@@ -1,5 +1,5 @@
1
1
  module Preek
2
- # A container for a smelly klass in a file!
2
+ # A container for smells in a class
3
3
  class SmellKlass
4
4
  attr_reader :name
5
5
 
@@ -1,3 +1,3 @@
1
1
  module Preek
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.1"
3
3
  end
@@ -19,8 +19,8 @@ Gem::Specification.new do |gem|
19
19
  gem.add_runtime_dependency "thor", ">=0.16"
20
20
  gem.add_runtime_dependency "reek", ">=1.3"
21
21
  gem.add_development_dependency "rspec", ">=2.13"
22
+ gem.add_development_dependency "rspec-given"
22
23
  gem.add_development_dependency "guard", ">=1.6"
23
- gem.add_development_dependency "guard-pushover"
24
24
  gem.add_development_dependency "guard-rspec", ">=2.4"
25
25
  gem.add_development_dependency 'coveralls'
26
26
  end
@@ -10,133 +10,116 @@ describe Preek::CLI do
10
10
  end
11
11
 
12
12
  describe "#version" do
13
- let(:output) { capture(:stdout) { subject.version} }
14
- it "outputs the gem version in the right format" do
15
- output.should =~ /(\d\.?){3}/
16
- end
13
+ When(:output) { capture(:stdout) { subject.version} }
14
+ Then {output.should =~ /(\d\.?){3}/}
17
15
  end
18
16
 
19
- describe "#parse" do
20
- let(:output) { capture(:stdout) { subject.smell(*args) } }
21
- let(:args) { ['i/am/not/a_file'] }
17
+ describe "#smell" do
18
+
19
+ When(:output) { capture(:stdout) { subject.smell(*args) } }
22
20
 
23
21
  context "with non-existing file in ARGS" do
24
- let(:args) { ['i/am/not/a_file'] }
25
- # it "does not output 'success'" do
26
- # output.should_not include("success")
27
- # end
28
- it "outputs 'No such file'" do
29
- output.should include("No such file")
30
- end
31
- it "outputs the name of the file" do
32
- output.should include(args[0])
33
- end
22
+ Given(:args) { ['i/am/not/a_file'] }
23
+ Then{output.should_not include("success")}
24
+ Then{output.should include("No such file")}
25
+ Then{output.should include(args[0])}
34
26
  end
35
27
 
36
- context "when given file has no smells" do
37
- let(:args){ [test_file('non_smelly')] }
38
- it "output contains 'success! No smells'" do
39
- output.should include("No smells")
40
- end
41
- end
28
+ context 'default quiet report' do
42
29
 
43
- context "when given file has Irresponsible smell" do
44
- let(:args){ [test_file('irresponsible')] }
45
- it "output contains 'success! No smells'" do
46
- output.should include("No smells")
30
+ context "when given file has no smells" do
31
+ Given(:args){ [test_file('non_smelly')] }
32
+ Then{output.should include("No smells")}
33
+ Then{output.should_not include(args[0])}
47
34
  end
48
- end
49
-
50
- context "when given file has Irresponsible smell with --irresponsible options" do
51
- let(:args){ [test_file('irresponsible')] }
52
35
 
53
- before :each do
54
- subject.options = {irresponsible: true}
36
+ context "when given file has no smells" do
37
+ Given(:args){ [test_file('non_smelly'), 'i/am/not/a_file'] }
38
+ Then{output.should include("No smells")}
39
+ Then{output.should_not include(args[0])}
40
+ Then{output.should include("No such file")}
41
+ Then{output.should include(args[1])}
55
42
  end
56
43
 
57
- it "output contains 'Irresponsible'" do
58
- output.should include("Irresponsible")
44
+ context "when given file has Irresponsible smell" do
45
+ Given(:args){ [test_file('irresponsible')] }
46
+ Then{output.should include("No smells")}
47
+ Then{output.should_not include(args[0])}
59
48
  end
60
49
 
61
- end
62
-
63
- context "when given a file with two smelly classes" do
64
- let(:args){ [test_file('two_smelly_classes')] }
65
- it "output contains one classnames" do
66
- output.should include('SecondSmelly')
67
- end
68
- it "output contains one smell" do
69
- output.should include('UncommunicativeMethodName')
50
+ context "when given a file with two smelly classes" do
51
+ Given(:args){ [test_file('two_smelly_classes')] }
52
+ Then{output.should include('SecondSmelly')}
53
+ Then{output.should include('UncommunicativeMethodName')}
70
54
  end
71
- end
72
55
 
73
- context "when given a file with two smelly classes with --irresponsible options" do
74
- let(:args){ [test_file('two_smelly_classes')] }
75
- before :each do
76
- subject.options = {irresponsible: true}
56
+ context "when given two smelly files" do
57
+ Given(:args){ [test_file('too_many_statements'), test_file('two_smelly_classes')] }
58
+ Then{output.should include('UncommunicativeMethodName', 'TooManyStatements')}
59
+ Then{output.should include(args[0], args[1])}
60
+ Then{output.should include("#loong_method", "#x")}
77
61
  end
78
62
 
79
- it "output contains both classnames" do
80
- output.should include('FirstSmelly', 'SecondSmelly')
81
- end
82
- it "output contains both smells" do
83
- output.should include('IrresponsibleModule', 'UncommunicativeMethodName')
63
+ context "when given one file without smells and another with smells" do
64
+ Given(:args){ [test_file('non_smelly'), test_file('too_many_statements')] }
65
+
66
+ Then{output.should include('TooManyStatements')}
67
+ Then{output.should include(args[1])}
68
+ Then{output.should include("#loong_method")}
69
+ Then{output.should_not include(args[0])}
84
70
  end
85
- end
86
71
 
87
- context "when given a file with two different smells with --irresponsible options" do
88
- let(:args){ [test_file('irresponsible_and_lazy')] }
89
- it "output contains both smells" do
90
- subject.options = {irresponsible: true}
91
- output.should include('IrresponsibleModule', 'UncommunicativeMethodName')
72
+ context "when given file has NilCheck smell" do
73
+ Given(:args){ [test_file('nil_check')] }
74
+ Then{output.should include("NilCheck")}
75
+ Then{output.should include(args[0])}
92
76
  end
93
77
  end
94
78
 
95
- context "when given two smelly files" do
96
- let(:args){ [test_file('too_many_statements'), test_file('two_smelly_classes')] }
97
- before :each do
98
- subject.options = {irresponsible: true}
99
- end
79
+ context 'with --irresponsible option' do
80
+ Given{subject.options = {irresponsible: true} }
100
81
 
101
- it "output contains all smells" do
102
- output.should include('IrresponsibleModule', 'UncommunicativeMethodName', 'TooManyStatements')
82
+ context "when given file has Irresponsible smell" do
83
+ Given(:args){ [test_file('irresponsible')] }
84
+ Then{output.should include("Irresponsible")}
103
85
  end
104
86
 
105
- it "output contains both filenames" do
106
- output.should include(args[0], args[1])
87
+ context "when given a file with two smelly classes" do
88
+ Given(:args){ [test_file('two_smelly_classes')] }
89
+ Then{output.should include('FirstSmelly', 'SecondSmelly')}
90
+ Then{output.should include('IrresponsibleModule', 'UncommunicativeMethodName')}
107
91
  end
108
92
 
109
- it "output contains the names of the smelly methods" do
110
- output.should include("#loong_method", "#x")
93
+ context "when given two smelly files" do
94
+ Given(:args){ [test_file('too_many_statements'), test_file('two_smelly_classes')] }
95
+ Then{output.should include('IrresponsibleModule', 'UncommunicativeMethodName', 'TooManyStatements')}
96
+ Then{output.should include(args[0], args[1])}
97
+ Then{output.should include("#loong_method", "#x")}
111
98
  end
112
- end
113
99
 
114
- context "when given one file without smells and another with smells" do
115
- let(:args){ [test_file('non_smelly'), test_file('two_smelly_classes')] }
116
- before :each do
117
- subject.options = {irresponsible: true}
100
+ context "when given a file with two different smells" do
101
+ Given(:args){ [test_file('irresponsible_and_lazy')] }
102
+ Then{output.should include('IrresponsibleModule', 'UncommunicativeMethodName')}
118
103
  end
104
+ end
119
105
 
120
- it "output contains all smells" do
121
- output.should include('IrresponsibleModule', 'UncommunicativeMethodName')
122
- end
106
+ context 'with --verbose option' do
107
+ Given{subject.options = {verbose: true}}
123
108
 
124
- it "output contains only smelly filename" do
125
- output.should include(args[1])
109
+ context "when given file has no smells" do
110
+ Given(:args){ [test_file('non_smelly')] }
111
+ Then{output.should include("No smells")}
112
+ Then{output.should include(args[0])}
126
113
  end
127
114
 
128
- it "output contains the names of the smelly method" do
129
- output.should include("#x")
115
+ context "when given two smelly files" do
116
+ Given(:args){ [test_file('too_many_statements'), test_file('two_smelly_classes')] }
117
+ Then{output.should include(args[0], args[1])}
130
118
  end
131
- end
132
119
 
133
- context "when given file has NilCheck smell" do
134
- let(:args){ [test_file('nil_check')] }
135
- it "output contains 'NilCheck'" do
136
- output.should include("NilCheck")
137
- end
138
- it "outputs the name of the file" do
139
- output.should include(args[0])
120
+ context "when given one file without smells and another with smells" do
121
+ Given(:args){ [test_file('non_smelly'), test_file('too_many_statements')] }
122
+ Then{output.should include(args[1], args[0])}
140
123
  end
141
124
  end
142
125
  end
@@ -4,6 +4,7 @@ Coveralls.wear!
4
4
  $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
5
5
  require 'stringio'
6
6
  require File.expand_path('../../lib/preek', __FILE__)
7
+ require 'rspec/given'
7
8
 
8
9
  RSpec.configure do |config|
9
10
  config.treat_symbols_as_metadata_keys_with_true_values = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preek
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Neverland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-25 00:00:00.000000000 Z
11
+ date: 2013-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -53,33 +53,33 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.13'
55
55
  - !ruby/object:Gem::Dependency
56
- name: guard
56
+ name: rspec-given
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
60
60
  - !ruby/object:Gem::Version
61
- version: '1.6'
61
+ version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: '1.6'
68
+ version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: guard-pushover
70
+ name: guard
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '1.6'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '1.6'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: guard-rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -127,11 +127,12 @@ files:
127
127
  - bin/preek
128
128
  - lib/preek.rb
129
129
  - lib/preek/cli.rb
130
+ - lib/preek/examiner.rb
130
131
  - lib/preek/ext/smell_warning.rb
131
- - lib/preek/smell_collector.rb
132
+ - lib/preek/output.rb
133
+ - lib/preek/report.rb
132
134
  - lib/preek/smell_file.rb
133
135
  - lib/preek/smell_klass.rb
134
- - lib/preek/smell_reporter.rb
135
136
  - lib/preek/version.rb
136
137
  - preek.gemspec
137
138
  - spec/capture_helper.rb
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  version: '0'
164
165
  requirements: []
165
166
  rubyforge_project:
166
- rubygems_version: 2.0.2
167
+ rubygems_version: 2.0.3
167
168
  signing_key:
168
169
  specification_version: 4
169
170
  summary: It might reek but its pretty
@@ -1,45 +0,0 @@
1
- require 'reek'
2
-
3
- require 'preek/ext/smell_warning'
4
-
5
- require 'preek/smell_file'
6
- require 'preek/smell_klass'
7
-
8
- module Preek
9
- # This is a 'Collector'
10
- class SmellCollector
11
- def initialize(files, excludes = [])
12
- @files = files.delete_if { |file| !File.exists? file }
13
- @excludes = excludes
14
- end
15
-
16
- def smelly_files
17
- @smelly_files ||= files_from_sources
18
- end
19
-
20
- private
21
- def files_from_sources
22
- filtered_sources.map do |examiner|
23
- SmellFile.new(examiner) if examiner.smelly?
24
- end.compact
25
- end
26
-
27
- def filtered_sources
28
- sources.map do |source|
29
- examiner = Reek::Examiner.new(source)
30
- filter_excludes_from(examiner)
31
- examiner
32
- end
33
- end
34
-
35
- def filter_excludes_from(examiner)
36
- examiner.smells.delete_if do |smell|
37
- @excludes.include? smell.smell_class
38
- end
39
- end
40
-
41
- def sources
42
- Reek::Source::SourceLocator.new(@files).all_sources
43
- end
44
- end
45
- end
@@ -1,64 +0,0 @@
1
- require 'thor/shell/color'
2
- module Preek
3
- # Here we report the smells in a nice fashion
4
- class SmellReporter < Thor::Shell::Color
5
- def initialize(smelly_files, not_files)
6
- @smelly_files = smelly_files
7
- @not_files = not_files
8
- @padding = 0
9
- end
10
-
11
- def print_smells
12
- if success?
13
- say_status 'success!', 'No smells detected.'
14
- else
15
- print_each_smell
16
- end
17
- print_not_files
18
- end
19
- alias :print_result :print_smells
20
-
21
- private
22
- def success?
23
- @smelly_files.empty?
24
- end
25
-
26
- def print_not_files
27
- return if @not_files.empty?
28
- say_status :error, "No such file(s) - #{@not_files.join(', ')}.", :red
29
- end
30
-
31
- def print_each_smell
32
- print_line
33
- @smelly_files.each do |smelly|
34
- say_status 'file', format_path(smelly.filename), :blue
35
- print_klasses smelly.klasses
36
- end
37
- end
38
-
39
- def print_klasses klasses
40
- klasses.each do |index, klass|
41
- say_status "\n\tclass", klass.name
42
- say_status 'smells', '', :red
43
- print_klass_smells klass.smells
44
- end
45
- print_line
46
- end
47
-
48
- def print_klass_smells smells
49
- smells.each {|smell|
50
- say_status nil, smell
51
- }
52
- end
53
-
54
- def print_line
55
- say "\n\t#{'-'*60}\n\n"
56
- end
57
-
58
- def padding; 0; end
59
-
60
- def format_path file
61
- File.expand_path(file)
62
- end
63
- end
64
- end