preek 0.1.3 → 1.0.0
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 +4 -4
- data/README.md +13 -1
- data/bin/preek +2 -11
- data/lib/preek.rb +1 -49
- data/lib/preek/cli.rb +57 -0
- data/lib/preek/{smell_warning.rb → ext/smell_warning.rb} +0 -0
- data/lib/preek/smell_collector.rb +16 -8
- data/lib/preek/smell_file.rb +12 -9
- data/lib/preek/smell_klass.rb +2 -5
- data/lib/preek/smell_reporter.rb +7 -6
- data/lib/preek/version.rb +1 -1
- data/spec/capture_helper.rb +13 -0
- data/spec/{preek_spec.rb → cli_spec.rb} +5 -2
- data/spec/spec_helper.rb +0 -12
- metadata +9 -7
- data/lib/preek/klass_collector.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2300b0792702884ce539a9e7204c06f31fc1dcae
|
4
|
+
data.tar.gz: 5150fd3103a539732308a852c8efeb07abde9a9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d112cda98c69d5b28fd531d64a104e2576f1e656dc1c34adbff5b8f0d6491a342fbe54157201b1a8f99b9f9559db5a4fac7e09f87e084514b5786bffd9caa4dd
|
7
|
+
data.tar.gz: 3f8db5a1be25a4125ee1a23b292fd896b024002ac972a68fcf0c1e7d6805abf501169a582db549276edbf6780e14710492bf8736bac81eff3a69aee5226652ae
|
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
[](http://badge.fury.io/rb/preek)
|
1
2
|
[](https://codeclimate.com/github/joenas/preek)
|
2
3
|
[](https://travis-ci.org/joenas/preek)
|
3
4
|
[](https://gemnasium.com/joenas/preek)
|
@@ -26,8 +27,19 @@ or
|
|
26
27
|
|
27
28
|
|
28
29
|
## Usage
|
30
|
+
```bash
|
31
|
+
Usage:
|
32
|
+
preek smell FILE(S)|DIR
|
29
33
|
|
30
|
-
|
34
|
+
Options:
|
35
|
+
-i, [--irresponsible] # include IrresponsibleModule smell in output.
|
36
|
+
|
37
|
+
|
38
|
+
Commands:
|
39
|
+
preek help [COMMAND] # Describe available commands or one specific command
|
40
|
+
preek smell FILE(S)|DIR # Pretty format Reek output
|
41
|
+
preek version # Shows version
|
42
|
+
```
|
31
43
|
|
32
44
|
At the moment it only supports files, not stuff like this:
|
33
45
|
|
data/bin/preek
CHANGED
@@ -1,14 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require "preek"
|
3
|
+
require "preek/cli"
|
3
4
|
|
4
|
-
|
5
|
-
# preek = Preek::Preek.new
|
6
|
-
# if preek.respond_to? ARGV[0]
|
7
|
-
# preek.send ARGV.shift.to_sym, ARGV
|
8
|
-
# else
|
9
|
-
# preek.parse ARGV
|
10
|
-
# end
|
11
|
-
# else
|
12
|
-
# Preek::Preek.start
|
13
|
-
# end
|
14
|
-
Preek::Preek.start
|
5
|
+
Preek::CLI.start
|
data/lib/preek.rb
CHANGED
@@ -1,56 +1,8 @@
|
|
1
1
|
module Preek
|
2
|
-
require 'reek'
|
3
2
|
require 'thor'
|
3
|
+
|
4
4
|
require 'preek/version'
|
5
5
|
require 'preek/smell_collector'
|
6
6
|
require 'preek/smell_reporter'
|
7
|
-
require 'preek/smell_warning'
|
8
|
-
# whoop whoop
|
9
|
-
class Preek < Thor
|
10
|
-
include Thor::Actions
|
11
|
-
|
12
|
-
desc 'version', 'Shows version'
|
13
|
-
def version(*)
|
14
|
-
say VERSION
|
15
|
-
end
|
16
|
-
|
17
|
-
desc 'smell FILE(S)|DIR', 'Pretty format Reek output'
|
18
|
-
method_option :irresponsible,
|
19
|
-
type: :boolean,
|
20
|
-
aliases: '-i',
|
21
|
-
desc: 'include IrresponsibleModule smell in output.'
|
22
|
-
def smell(*args)
|
23
|
-
args ||= @args
|
24
|
-
@includes = options.keys.map {|key| _aliases[key.to_sym] }
|
25
|
-
files, @not_files = args.partition { |file| File.exists? file }
|
26
|
-
report_smells_for(files, excludes) unless files.empty?
|
27
|
-
report_not_files
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def report_smells_for(files, includes)
|
32
|
-
sources = Reek::Source::SourceLocator.new(files).all_sources
|
33
|
-
smelly_files = SmellCollector.new(sources, excludes).smelly_files
|
34
|
-
@reporter = SmellReporter.new(smelly_files)
|
35
|
-
@reporter.print_smells
|
36
|
-
end
|
37
|
-
|
38
|
-
def report_not_files
|
39
|
-
say_status :error, "No such file(s) - #{@not_files*", "}.", :red unless @not_files.empty?
|
40
|
-
end
|
41
|
-
|
42
|
-
def _aliases
|
43
|
-
{
|
44
|
-
irresponsible: 'IrresponsibleModule'
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def excludes
|
49
|
-
(exclude_list - @includes)#.map(&:to_s).map(&:capitalize)
|
50
|
-
end
|
51
7
|
|
52
|
-
def exclude_list
|
53
|
-
%w(IrresponsibleModule)
|
54
|
-
end
|
55
|
-
end
|
56
8
|
end
|
data/lib/preek/cli.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
require 'preek/version'
|
4
|
+
require 'preek/smell_collector'
|
5
|
+
require 'preek/smell_reporter'
|
6
|
+
|
7
|
+
module Preek
|
8
|
+
|
9
|
+
# whoop whoop
|
10
|
+
class CLI < Thor
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
desc 'version', 'Shows version'
|
14
|
+
def version(*)
|
15
|
+
say VERSION
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'smell FILE(S)|DIR', 'Pretty format Reek output'
|
19
|
+
method_option :irresponsible,
|
20
|
+
type: :boolean,
|
21
|
+
aliases: '-i',
|
22
|
+
desc: 'include IrresponsibleModule smell in output.'
|
23
|
+
def smell(*args)
|
24
|
+
args ||= @args
|
25
|
+
@includes = options.keys.map {|key| _aliases[key.to_sym] }
|
26
|
+
@files, @not_files = args.partition { |file| File.exists? file }
|
27
|
+
report_smells
|
28
|
+
report_not_files
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def report_smells
|
33
|
+
return if @files.empty?
|
34
|
+
smelly_files = SmellCollector.new(@files, excludes).smelly_files
|
35
|
+
SmellReporter.new(smelly_files).print_smells
|
36
|
+
end
|
37
|
+
|
38
|
+
def report_not_files
|
39
|
+
return if @not_files.empty?
|
40
|
+
say_status :error, "No such file(s) - #{@not_files.join(', ')}.", :red
|
41
|
+
end
|
42
|
+
|
43
|
+
def _aliases
|
44
|
+
{
|
45
|
+
irresponsible: 'IrresponsibleModule'
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def excludes
|
50
|
+
(exclude_list - @includes)
|
51
|
+
end
|
52
|
+
|
53
|
+
def exclude_list
|
54
|
+
%w(IrresponsibleModule)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
File without changes
|
@@ -1,24 +1,32 @@
|
|
1
|
+
require 'reek'
|
2
|
+
|
3
|
+
require 'preek/ext/smell_warning'
|
4
|
+
|
5
|
+
require 'preek/smell_file'
|
6
|
+
require 'preek/smell_klass'
|
7
|
+
|
1
8
|
module Preek
|
2
|
-
require 'reek'
|
3
|
-
require 'preek/smell_file'
|
4
9
|
# This is a 'Collector'
|
5
10
|
class SmellCollector
|
6
|
-
def initialize(
|
7
|
-
@
|
11
|
+
def initialize(files, excludes)
|
12
|
+
@files = files
|
8
13
|
@excludes = excludes
|
9
|
-
@files = examine_sources
|
10
14
|
end
|
11
15
|
|
12
16
|
def smelly_files
|
13
|
-
@
|
17
|
+
@smelly_files ||= examine_sources
|
14
18
|
end
|
15
19
|
|
16
20
|
private
|
17
21
|
def examine_sources
|
18
|
-
|
22
|
+
sources.map do |source|
|
19
23
|
smells = Reek::Examiner.new(source).smells
|
20
24
|
SmellFile.new(smells, @excludes) unless smells.empty?
|
21
|
-
end
|
25
|
+
end.compact
|
26
|
+
end
|
27
|
+
|
28
|
+
def sources
|
29
|
+
Reek::Source::SourceLocator.new(@files).all_sources
|
22
30
|
end
|
23
31
|
end
|
24
32
|
end
|
data/lib/preek/smell_file.rb
CHANGED
@@ -1,28 +1,31 @@
|
|
1
1
|
module Preek
|
2
|
-
require 'preek/klass_collector'
|
3
2
|
# A smelly file
|
4
3
|
class SmellFile
|
4
|
+
attr_reader :klasses
|
5
|
+
|
5
6
|
def initialize(smells, excludes)
|
6
7
|
@smells = smells
|
7
8
|
@excludes = excludes
|
8
|
-
@
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def klasses
|
13
|
-
@klass_collector.get_klasses
|
9
|
+
@klasses = {}
|
10
|
+
add_smells_to_klasses
|
14
11
|
end
|
15
12
|
|
16
13
|
def file
|
17
14
|
@smells.first.source
|
18
15
|
end
|
19
16
|
|
17
|
+
alias :filename :file
|
18
|
+
|
20
19
|
private
|
21
|
-
def
|
20
|
+
def add_smells_to_klasses
|
22
21
|
@smells.each do |smell|
|
23
22
|
next if @excludes.include? smell.smell_class
|
24
|
-
|
23
|
+
find(smell.klass).add smell
|
25
24
|
end
|
26
25
|
end
|
26
|
+
|
27
|
+
def find(klassname)
|
28
|
+
@klasses[klassname.to_sym] ||= SmellKlass.new
|
29
|
+
end
|
27
30
|
end
|
28
31
|
end
|
data/lib/preek/smell_klass.rb
CHANGED
@@ -5,7 +5,7 @@ module Preek
|
|
5
5
|
@smells = []
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
8
|
+
def add(smell)
|
9
9
|
@smells << smell
|
10
10
|
end
|
11
11
|
|
@@ -14,10 +14,7 @@ module Preek
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def smells
|
17
|
-
@smells.map
|
18
|
-
smell.smell_string
|
19
|
-
#FormatedSmell.new(smell).print_data
|
20
|
-
end
|
17
|
+
@smells.map(&:smell_string)
|
21
18
|
end
|
22
19
|
end
|
23
20
|
end
|
data/lib/preek/smell_reporter.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
+
require 'thor/shell/color'
|
1
2
|
module Preek
|
2
3
|
# Here we report the smells in a nice fashion
|
3
4
|
class SmellReporter < Thor::Shell::Color
|
4
5
|
def initialize smelly_files
|
5
|
-
@smelly_files = smelly_files
|
6
|
+
@smelly_files = smelly_files.delete_if {|smell_file| smell_file.klasses.empty? }
|
6
7
|
@padding = 0
|
7
8
|
end
|
8
9
|
|
9
10
|
def print_smells
|
10
|
-
@smelly_files.delete_if {|smell_file| smell_file.klasses.empty? }
|
11
11
|
return say_status 'success!', 'No smells detected.' if @smelly_files.empty?
|
12
12
|
print_line
|
13
|
-
@smelly_files.each do |
|
14
|
-
say_status 'file', format_path(
|
15
|
-
print_klasses
|
13
|
+
@smelly_files.each do |smelly|
|
14
|
+
say_status 'file', format_path(smelly.filename), :blue
|
15
|
+
print_klasses smelly.klasses
|
16
16
|
end
|
17
17
|
end
|
18
18
|
private
|
19
|
+
|
19
20
|
def print_klasses klasses
|
20
21
|
klasses.each do |index, klass|
|
21
22
|
say_status "\n\tclass", klass.name
|
@@ -38,7 +39,7 @@ module Preek
|
|
38
39
|
def padding; 0; end
|
39
40
|
|
40
41
|
def format_path file
|
41
|
-
File.expand_path(file)
|
42
|
+
File.expand_path(file)
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
data/lib/preek/version.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'capture_helper'
|
3
|
+
require 'preek/cli'
|
2
4
|
|
3
|
-
describe Preek::
|
5
|
+
describe Preek::CLI do
|
6
|
+
include CaptureHelper
|
4
7
|
|
5
8
|
def test_file(file_name)
|
6
9
|
File.expand_path(File.join(File.dirname(__FILE__),'test_files/',"#{file_name}.rb"))
|
@@ -14,7 +17,7 @@ describe Preek::Preek do
|
|
14
17
|
end
|
15
18
|
|
16
19
|
describe "#parse" do
|
17
|
-
let(:output) { capture(:stdout) { subject.
|
20
|
+
let(:output) { capture(:stdout) { subject.smell(*args) } }
|
18
21
|
let(:args) { ['i/am/not/a_file'] }
|
19
22
|
|
20
23
|
context "with non-existing file in ARGS" do
|
data/spec/spec_helper.rb
CHANGED
@@ -11,16 +11,4 @@ RSpec.configure do |config|
|
|
11
11
|
config.filter_run :focus
|
12
12
|
config.order = 'random'
|
13
13
|
config.fail_fast = true
|
14
|
-
|
15
|
-
def capture(stream)
|
16
|
-
begin
|
17
|
-
stream = stream.to_s
|
18
|
-
eval "$#{stream} = StringIO.new"
|
19
|
-
yield
|
20
|
-
result = eval("$#{stream}").string
|
21
|
-
ensure
|
22
|
-
eval("$#{stream} = #{stream.upcase}")
|
23
|
-
end
|
24
|
-
result
|
25
|
-
end
|
26
14
|
end
|
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: 0.
|
4
|
+
version: 1.0.0
|
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-
|
11
|
+
date: 2013-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -126,15 +126,16 @@ files:
|
|
126
126
|
- Rakefile
|
127
127
|
- bin/preek
|
128
128
|
- lib/preek.rb
|
129
|
-
- lib/preek/
|
129
|
+
- lib/preek/cli.rb
|
130
|
+
- lib/preek/ext/smell_warning.rb
|
130
131
|
- lib/preek/smell_collector.rb
|
131
132
|
- lib/preek/smell_file.rb
|
132
133
|
- lib/preek/smell_klass.rb
|
133
134
|
- lib/preek/smell_reporter.rb
|
134
|
-
- lib/preek/smell_warning.rb
|
135
135
|
- lib/preek/version.rb
|
136
136
|
- preek.gemspec
|
137
|
-
- spec/
|
137
|
+
- spec/capture_helper.rb
|
138
|
+
- spec/cli_spec.rb
|
138
139
|
- spec/spec_helper.rb
|
139
140
|
- spec/test_files/irresponsible.rb
|
140
141
|
- spec/test_files/irresponsible_and_lazy.rb
|
@@ -162,12 +163,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
163
|
version: '0'
|
163
164
|
requirements: []
|
164
165
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.0.
|
166
|
+
rubygems_version: 2.0.2
|
166
167
|
signing_key:
|
167
168
|
specification_version: 4
|
168
169
|
summary: It might reek but its pretty
|
169
170
|
test_files:
|
170
|
-
- spec/
|
171
|
+
- spec/capture_helper.rb
|
172
|
+
- spec/cli_spec.rb
|
171
173
|
- spec/spec_helper.rb
|
172
174
|
- spec/test_files/irresponsible.rb
|
173
175
|
- spec/test_files/irresponsible_and_lazy.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Preek
|
2
|
-
require 'preek/smell_klass'
|
3
|
-
# This keeps track of classes in a smelly file
|
4
|
-
class KlassCollector
|
5
|
-
def initialize
|
6
|
-
@klasses = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def find(klassname)
|
10
|
-
@klasses[klassname.to_sym] ||= SmellKlass.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def get_klasses
|
14
|
-
@klasses
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|