janitor 0.1.2 → 0.2.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.
- data/README.mdown +5 -0
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/janitor.gemspec +4 -4
- data/lib/janitor.rb +2 -2
- data/lib/janitor/finder.rb +7 -2
- data/lib/janitor/janitor.rb +6 -2
- data/lib/janitor/rak_hit.rb +17 -0
- data/lib/janitor/rak_result.rb +8 -5
- data/lib/janitor/tasks.rb +39 -3
- data/spec/lib/finder_spec.rb +24 -1
- data/spec/lib/janitor_spec.rb +31 -9
- data/spec/lib/rak_result_spec.rb +21 -10
- data/spec/spec.opts +4 -1
- data/spec/spec_helper.rb +1 -2
- metadata +6 -6
- data/lib/finder.rb +0 -20
data/README.mdown
CHANGED
@@ -31,3 +31,8 @@ Configure your app to load the Janitor rake tasks by adding the following to you
|
|
31
31
|
# Code cleanup goodies
|
32
32
|
require 'janitor/tasks'
|
33
33
|
|
34
|
+
To Do
|
35
|
+
=====
|
36
|
+
|
37
|
+
* YML-ize the various search tasks to allow a project to specify the things that shouldn't be in the codebase.
|
38
|
+
* Create a profanity filter
|
data/Rakefile
CHANGED
@@ -7,8 +7,8 @@ begin
|
|
7
7
|
require 'jeweler'
|
8
8
|
Jeweler::Tasks.new do |gem|
|
9
9
|
gem.name = "janitor"
|
10
|
-
gem.summary = "janitor scans your code for leftover debug statements,
|
11
|
-
gem.description = "ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code"
|
10
|
+
gem.summary = "janitor scans your code for leftover debug statements, console.logs, and vulgarity"
|
11
|
+
gem.description = "ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code."
|
12
12
|
gem.email = "mike@mikekrisher.com"
|
13
13
|
gem.homepage = "http://github.com/tjh/janitor"
|
14
14
|
gem.authors = ["Tim Harvey", "Michael Krisher"]
|
@@ -17,7 +17,7 @@ begin
|
|
17
17
|
end
|
18
18
|
Jeweler::GemcutterTasks.new
|
19
19
|
rescue LoadError
|
20
|
-
|
20
|
+
raise "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
21
21
|
end
|
22
22
|
|
23
23
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/janitor.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{janitor}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tim Harvey", "Michael Krisher"]
|
12
12
|
s.date = %q{2010-09-04}
|
13
|
-
s.description = %q{ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code}
|
13
|
+
s.description = %q{ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code.}
|
14
14
|
s.email = %q{mike@mikekrisher.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
@@ -25,10 +25,10 @@ Gem::Specification.new do |s|
|
|
25
25
|
"VERSION",
|
26
26
|
"init.rb",
|
27
27
|
"janitor.gemspec",
|
28
|
-
"lib/finder.rb",
|
29
28
|
"lib/janitor.rb",
|
30
29
|
"lib/janitor/finder.rb",
|
31
30
|
"lib/janitor/janitor.rb",
|
31
|
+
"lib/janitor/rak_hit.rb",
|
32
32
|
"lib/janitor/rak_result.rb",
|
33
33
|
"lib/janitor/tasks.rb",
|
34
34
|
"lib/tasks/tasks.rake",
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.rdoc_options = ["--charset=UTF-8"]
|
44
44
|
s.require_paths = ["lib"]
|
45
45
|
s.rubygems_version = %q{1.3.7}
|
46
|
-
s.summary = %q{janitor scans your code for leftover debug statements,
|
46
|
+
s.summary = %q{janitor scans your code for leftover debug statements, console.logs, and vulgarity}
|
47
47
|
s.test_files = [
|
48
48
|
"spec/lib/finder_spec.rb",
|
49
49
|
"spec/lib/janitor_spec.rb",
|
data/lib/janitor.rb
CHANGED
data/lib/janitor/finder.rb
CHANGED
@@ -7,11 +7,16 @@ class Finder
|
|
7
7
|
|
8
8
|
def number_of_matches(pattern)
|
9
9
|
rak_result = search_by_regex(pattern)
|
10
|
-
rak_result.
|
10
|
+
rak_result.hits.size
|
11
|
+
end
|
12
|
+
|
13
|
+
def hits(pattern)
|
14
|
+
rak_result = search_by_regex(pattern)
|
15
|
+
rak_result.hits.collect { |hit| "#{hit.file_name}:#{hit.line_number}" }
|
11
16
|
end
|
12
17
|
|
13
18
|
def search_by_regex(pattern)
|
14
|
-
exec_rak(pattern, '
|
19
|
+
exec_rak(pattern, '--all')
|
15
20
|
end
|
16
21
|
|
17
22
|
def exec_rak(pattern, options)
|
data/lib/janitor/janitor.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
class Janitor
|
2
2
|
def self.count (pattern, path = "*")
|
3
3
|
finder = Finder.new(path)
|
4
|
-
|
5
|
-
|
4
|
+
finder.number_of_matches(pattern)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.hits (pattern, path = "*")
|
8
|
+
finder = Finder.new(path)
|
9
|
+
finder.hits(pattern)
|
6
10
|
end
|
7
11
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -----------------------------------------
|
2
|
+
# This represents a single search hit from
|
3
|
+
# the Rak gem. The raw output looks like:
|
4
|
+
#
|
5
|
+
# lib/file_name.rb 10|require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
6
|
+
#
|
7
|
+
# This is a file name, then line number, followed by
|
8
|
+
# a pipe, then finally the context within that file
|
9
|
+
# -----------------------------------------
|
10
|
+
|
11
|
+
class RakHit
|
12
|
+
attr_accessor :file_name, :line_number, :context
|
13
|
+
|
14
|
+
def initialize(raw_hit)
|
15
|
+
self.file_name, self.line_number, self.context = raw_hit.scan(/(.+?)\s*(\d+)\|\s*(.+)/).first
|
16
|
+
end
|
17
|
+
end
|
data/lib/janitor/rak_result.rb
CHANGED
@@ -2,11 +2,14 @@ class RakResult
|
|
2
2
|
attr_accessor :rak_output
|
3
3
|
|
4
4
|
def initialize(rak_output)
|
5
|
-
self.rak_output = rak_output
|
5
|
+
self.rak_output = rak_output.strip
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
rows.select { |r| r.scan(/^[^\s]+/).size > 0 }
|
8
|
+
def file_names
|
9
|
+
hits.collect { |hit| hit.file_name }.uniq
|
11
10
|
end
|
12
|
-
|
11
|
+
|
12
|
+
def hits
|
13
|
+
rak_output.split("\n").collect { |row| RakHit.new(row) }
|
14
|
+
end
|
15
|
+
end
|
data/lib/janitor/tasks.rb
CHANGED
@@ -7,14 +7,50 @@ namespace :janitor do
|
|
7
7
|
|
8
8
|
desc "Find any 'console.log' statements"
|
9
9
|
task :console_log do
|
10
|
-
|
11
|
-
|
10
|
+
puts "Searching the current folder for 'console.log'"
|
11
|
+
count = Janitor.count "console.log"
|
12
|
+
if count > 0
|
13
|
+
puts "FAILED: Found #{count} console.log statements"
|
14
|
+
else
|
15
|
+
puts "Success...didn't find 'console.log'"
|
16
|
+
end
|
12
17
|
end
|
13
18
|
|
14
19
|
desc "Count 'debugger' statements"
|
15
20
|
task :debugger do
|
21
|
+
puts "Searching the current folder for 'debugger'"
|
16
22
|
count = Janitor.count "debugger"
|
17
|
-
|
23
|
+
if count > 0
|
24
|
+
puts "FAILED: Found #{count} debugger statements"
|
25
|
+
else
|
26
|
+
puts "Success...didn't find 'debugger'"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
namespace :hits do
|
32
|
+
desc "Run all count tasks"
|
33
|
+
task :all => [:debugger, :console_log]
|
34
|
+
|
35
|
+
desc "Find any 'console.log' statements"
|
36
|
+
task :console_log do
|
37
|
+
hits = Janitor.hits "console.log"
|
38
|
+
if hits.count > 0
|
39
|
+
puts hits
|
40
|
+
puts "FAILED: Found #{hits.count} console.log statements"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "Count 'debugger' statements"
|
45
|
+
task :debugger do
|
46
|
+
puts "Searching the current folder for 'debugger'"
|
47
|
+
hits = Janitor.hits "debugger"
|
48
|
+
if hits.count > 0
|
49
|
+
puts hits
|
50
|
+
puts "FAILED: Found #{hits.count} debugger statements"
|
51
|
+
else
|
52
|
+
puts "Success...didn't find 'debugger'"
|
53
|
+
end
|
18
54
|
end
|
19
55
|
end
|
20
56
|
end
|
data/spec/lib/finder_spec.rb
CHANGED
@@ -8,11 +8,34 @@ describe "Finder" do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
+
describe " #number_of_matches" do
|
12
|
+
it "should do a search_by_regex, returning the number of hits the RakResult gives" do
|
13
|
+
pattern = 'a_regex'
|
14
|
+
finder = Finder.new
|
15
|
+
rak_result = mock('rak_result', :hits => ['janitor.rb:3'])
|
16
|
+
finder.should_receive(:search_by_regex).with(pattern).and_return(rak_result)
|
17
|
+
finder.number_of_matches(pattern).should == 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe " #hits" do
|
22
|
+
it "should return the array of hits from the RakResult returned by exec_rak" do
|
23
|
+
pattern = 'a_regex'
|
24
|
+
hit = mock('rak_hit',
|
25
|
+
:file_name => "filename.rb",
|
26
|
+
:line_number => 10)
|
27
|
+
rak_result = mock('rak_result', :hits => [hit])
|
28
|
+
finder = Finder.new
|
29
|
+
finder.should_receive(:search_by_regex).and_return(rak_result)
|
30
|
+
finder.hits(pattern).should == ["filename.rb:10"]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
11
34
|
describe " #search_by_regex" do
|
12
35
|
it "should execute a rak search with the given pattern and -all" do
|
13
36
|
pattern = 'a_regex'
|
14
37
|
finder = Finder.new
|
15
|
-
finder.should_receive(:exec_rak).with(pattern, '
|
38
|
+
finder.should_receive(:exec_rak).with(pattern, '--all')
|
16
39
|
finder.search_by_regex(pattern)
|
17
40
|
end
|
18
41
|
end
|
data/spec/lib/janitor_spec.rb
CHANGED
@@ -5,19 +5,41 @@ describe "Janitor" do
|
|
5
5
|
it "should call number_of_matches on Finder with the given path" do
|
6
6
|
path = "a_path"
|
7
7
|
pattern = "a_pattern"
|
8
|
-
|
9
|
-
|
10
|
-
Finder.should_receive(:new).with(path).and_return(finder)
|
11
|
-
Janitor.count(path, pattern)
|
8
|
+
mock_finder(pattern, path)
|
9
|
+
Janitor.count(pattern, path)
|
12
10
|
end
|
13
11
|
|
14
|
-
it "should
|
12
|
+
it "should return the value returned by the call to number_of_matches" do
|
15
13
|
path = "a_path"
|
16
14
|
pattern = "a_pattern"
|
17
|
-
|
18
|
-
|
19
|
-
Finder.should_receive(:new).with(path).and_return(finder)
|
20
|
-
lambda { Janitor.count(path, pattern) }.should raise_error
|
15
|
+
mock_finder(pattern, path, :number_of_matches => 1)
|
16
|
+
Janitor.count(pattern, path).should == 1
|
21
17
|
end
|
22
18
|
end
|
19
|
+
|
20
|
+
describe " #hits" do
|
21
|
+
it "should call #hits on Finder and return the result" do
|
22
|
+
path = "a_path"
|
23
|
+
pattern = "a_pattern"
|
24
|
+
hits = ['result']
|
25
|
+
mock_finder(pattern, path, :hits => hits)
|
26
|
+
Janitor.hits(pattern, path).should == hits
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe " integration testing" do
|
31
|
+
it " should find debugger once in 'tmp/'" do
|
32
|
+
Janitor.count('console\.log', 'tmp/').should == 3
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def mock_finder(pattern, path, *args)
|
37
|
+
options = args.first ? args.first : {}
|
38
|
+
options = {:number_of_matches => 0}.merge options
|
39
|
+
options = {:hits => 0}.merge options
|
40
|
+
finder = mock('finder',
|
41
|
+
:number_of_matches => options[:number_of_matches],
|
42
|
+
:hits => options[:hits])
|
43
|
+
Finder.should_receive(:new).and_return(finder)
|
44
|
+
end
|
23
45
|
end
|
data/spec/lib/rak_result_spec.rb
CHANGED
@@ -3,26 +3,37 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
describe "RakResult" do
|
4
4
|
before(:all) do
|
5
5
|
@result = "
|
6
|
-
lib/janitor.rb
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
lib/finder.rb
|
11
|
-
7|Dir.glob(File.join(File.dirname(__FILE__), '../lib/*.rb')).each {|f| require f }
|
12
|
-
9|Spec::Runner.configure do |config|
|
13
|
-
11|end
|
6
|
+
lib/janitor.rb 1|require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
7
|
+
lib/janitor.rb 9|end
|
8
|
+
lib/finder.rb 7|Dir.glob(File.join(File.dirname(__FILE__), '../lib/*.rb')).each {|f| require f }
|
9
|
+
lib/finder.rb 9|Spec::Runner.configure do |config|
|
10
|
+
lib/finder.rb 11|end
|
14
11
|
"
|
15
12
|
end
|
16
13
|
|
14
|
+
before(:each) do
|
15
|
+
@rak_result = RakResult.new(@result)
|
16
|
+
end
|
17
|
+
|
17
18
|
describe " #initialize" do
|
18
19
|
it "should store the given rak output string" do
|
19
20
|
RakResult.new('a_result').rak_output.should == 'a_result'
|
20
21
|
end
|
22
|
+
|
23
|
+
it "should strip leading and trailing whitespace" do
|
24
|
+
@rak_result.rak_output.should == @result.strip
|
25
|
+
end
|
21
26
|
end
|
22
27
|
|
23
|
-
describe " #
|
28
|
+
describe " #file_names" do
|
24
29
|
it "should return an array of files that were matched" do
|
25
|
-
|
30
|
+
@rak_result.file_names.should == ['lib/janitor.rb', 'lib/finder.rb']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe " #hits" do
|
35
|
+
it "should return an array of RakHits objects" do
|
36
|
+
@rak_result.hits.first.should be_instance_of(RakHit)
|
26
37
|
end
|
27
38
|
end
|
28
39
|
end
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -3,8 +3,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
3
3
|
require 'spec'
|
4
4
|
require 'spec/autorun'
|
5
5
|
|
6
|
-
|
7
|
-
Dir.glob(File.join(File.dirname(__FILE__), '../lib/**/*.rb')).each {|f| require f }
|
6
|
+
require 'janitor'
|
8
7
|
|
9
8
|
Spec::Runner.configure do |config|
|
10
9
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: janitor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 1
|
9
8
|
- 2
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tim Harvey
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: "0"
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
|
-
description: ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code
|
36
|
+
description: ever leave a breakpoint in your code and do a deploy? not good, right? maybe you just want to remove the logger.info calls from your Rails project. janitor cleans your code.
|
37
37
|
email: mike@mikekrisher.com
|
38
38
|
executables: []
|
39
39
|
|
@@ -51,10 +51,10 @@ files:
|
|
51
51
|
- VERSION
|
52
52
|
- init.rb
|
53
53
|
- janitor.gemspec
|
54
|
-
- lib/finder.rb
|
55
54
|
- lib/janitor.rb
|
56
55
|
- lib/janitor/finder.rb
|
57
56
|
- lib/janitor/janitor.rb
|
57
|
+
- lib/janitor/rak_hit.rb
|
58
58
|
- lib/janitor/rak_result.rb
|
59
59
|
- lib/janitor/tasks.rb
|
60
60
|
- lib/tasks/tasks.rake
|
@@ -97,7 +97,7 @@ rubyforge_project:
|
|
97
97
|
rubygems_version: 1.3.7
|
98
98
|
signing_key:
|
99
99
|
specification_version: 3
|
100
|
-
summary: janitor scans your code for leftover debug statements,
|
100
|
+
summary: janitor scans your code for leftover debug statements, console.logs, and vulgarity
|
101
101
|
test_files:
|
102
102
|
- spec/lib/finder_spec.rb
|
103
103
|
- spec/lib/janitor_spec.rb
|
data/lib/finder.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class Finder
|
2
|
-
attr_reader :path
|
3
|
-
|
4
|
-
def initialize(path = File.dirname(__FILE__))
|
5
|
-
@path = path
|
6
|
-
end
|
7
|
-
|
8
|
-
def number_of_matches(pattern)
|
9
|
-
rak_result = search_by_regex(pattern)
|
10
|
-
rak_result.files.size
|
11
|
-
end
|
12
|
-
|
13
|
-
def search_by_regex(pattern)
|
14
|
-
exec_rak(pattern, '-all')
|
15
|
-
end
|
16
|
-
|
17
|
-
def exec_rak(pattern, options)
|
18
|
-
RakResult.new(%x{rak #{options} #{pattern} #{@path}})
|
19
|
-
end
|
20
|
-
end
|