code_hunter 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -49,5 +49,16 @@ $ code_hunter --application-path /path/to/rails/root --format json
49
49
  [{"service":"brakeman","line":8,"path":"config/routes.rb","message":"All public methods in controllers are available as actions in routes.rb near line 8","sha1":"81887a2fb6efaa9dae59425ce7537c7905516ed0","author":"Ryo Nakamura","email":"r7kamura@gmail.com","modified_at":1357783853},{"service":"rails_best_practices","line":9,"path":"config/routes.rb","message":"restrict auto-generated routes examples (only: [])","sha1":"81887a2fb6efaa9dae59425ce7537c7905516ed0","author":"Ryo Nakamura","email":"r7kamura@gmail.com","modified_at":1357783853}]
50
50
  ```
51
51
 
52
+ ### Ignore
53
+ If you want to ignore some warnings, write `# ignore` annotation as code comment.
54
+ If the detected line hits `/#\s*ignore/i`, it is ignored.
55
+
56
+ ```ruby
57
+ danger_but_necessary_code # ignore
58
+ danger_but_necessary_code # IGNORE
59
+ danger_but_necessary_code # Ignore for some reason
60
+ ```
61
+
62
+
52
63
  ## Requirements
53
64
  * Ruby >= 1.9
data/lib/code_hunter.rb CHANGED
@@ -8,3 +8,4 @@ require "code_hunter/pendaxes"
8
8
  require "code_hunter/brakeman"
9
9
  require "code_hunter/rails_best_practices"
10
10
  require "code_hunter/git_blamer"
11
+ require "code_hunter/warning"
@@ -12,20 +12,15 @@ module CodeHunter
12
12
 
13
13
  def run
14
14
  warnings = collect_warnings
15
- warnings = merge_git_metadata(warnings)
16
- output = Renderer.render(warnings, :format => options[:format])
17
- puts output
15
+ warnings = warnings.select(&:has_git_metadata?)
16
+ warnings = warnings.reject(&:ignore?)
17
+ puts Renderer.render(warnings.map(&:to_hash), :format => options[:format])
18
18
  end
19
19
 
20
20
  def collect_warnings
21
- services.map(&:run).compact.inject([], :+)
22
- end
23
-
24
- def merge_git_metadata(warnings)
25
- warnings.map do |warning|
26
- metadata = GitBlamer.new(warning).blame or next
27
- warning.merge(metadata)
28
- end.compact
21
+ services.map(&:run).compact.inject([], :+).map do |attributes|
22
+ Warning.new(attributes)
23
+ end
29
24
  end
30
25
 
31
26
  private
@@ -1,3 +1,3 @@
1
1
  module CodeHunter
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -0,0 +1,87 @@
1
+ module CodeHunter
2
+ class Warning
3
+ def initialize(attributes)
4
+ @attributes = attributes
5
+ end
6
+
7
+ def to_hash
8
+ {
9
+ :line => line,
10
+ :message => message,
11
+ :path => path,
12
+ :service => service,
13
+ :url => url,
14
+ :sha1 => sha1,
15
+ :author => author,
16
+ :email => email,
17
+ :modified_at => modified_at,
18
+ }
19
+ end
20
+
21
+ def line
22
+ @attributes[:line]
23
+ end
24
+
25
+ def message
26
+ @attributes[:message]
27
+ end
28
+
29
+ def path
30
+ @attributes[:path]
31
+ end
32
+
33
+ def service
34
+ @attributes[:service]
35
+ end
36
+
37
+ def url
38
+ @attributes[:url]
39
+ end
40
+
41
+ def sha1
42
+ @git_metadata[:sha1]
43
+ end
44
+
45
+ def author
46
+ @git_metadata[:author]
47
+ end
48
+
49
+ def email
50
+ @git_metadata[:email]
51
+ end
52
+
53
+ def modified_at
54
+ @git_metadata[:modified_at]
55
+ end
56
+
57
+ # Fetch @git_metadata only once.
58
+ def git_metadata
59
+ case @git_metadata
60
+ when nil
61
+ @git_metadata = GitBlamer.new(@attributes).blame || false
62
+ when false
63
+ nil
64
+ else
65
+ @git_metadata
66
+ end
67
+ end
68
+
69
+ def has_git_metadata?
70
+ !!git_metadata
71
+ end
72
+
73
+ def ignore?
74
+ path && line && has_ignore_annotation?
75
+ end
76
+
77
+ private
78
+
79
+ def has_ignore_annotation?
80
+ line_content =~ /#\s*ignore/i
81
+ end
82
+
83
+ def line_content
84
+ File.readlines(path)[line - 1]
85
+ end
86
+ end
87
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_hunter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-15 00:00:00.000000000 Z
12
+ date: 2013-02-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -151,6 +151,7 @@ files:
151
151
  - lib/code_hunter/renderer.rb
152
152
  - lib/code_hunter/runner.rb
153
153
  - lib/code_hunter/version.rb
154
+ - lib/code_hunter/warning.rb
154
155
  - spec/code_hunter/pendaxes_spec.rb
155
156
  - spec/code_hunter/renderer_spec.rb
156
157
  - spec/code_hunter/runner_spec.rb