rake_check 0.1.6 → 0.1.7

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.
@@ -0,0 +1,81 @@
1
+ require 'colored'
2
+ require 'json'
3
+ ##
4
+ # BrakemanChecker checks the output for undocumented classes and methods
5
+ #
6
+ # @author dmasur
7
+ class BrakemanChecker
8
+ ##
9
+ # Gives the Checkresult
10
+ #
11
+ # @return [Hash] Checkresult
12
+ # @author dmasur
13
+ def result
14
+ @shell_output = begin
15
+ `brakeman -f json 2>/dev/null`
16
+ rescue Errno::ENOENT
17
+ "Brakeman not found"
18
+ end
19
+ {:type => :brakeman, :check_output => output, :status => status}
20
+ end
21
+
22
+ private
23
+ ##
24
+ # Color the Coverage
25
+ #
26
+ # @return [String] colored Coverage
27
+ # @author dmasur
28
+ def color_count count
29
+ case count
30
+ when 0 then count.to_s.green
31
+ else count.to_s.red
32
+ end
33
+ end
34
+
35
+ ##
36
+ # Gives the Check Status
37
+ #
38
+ # @return [String] Checkstatus
39
+ # @author dmasur
40
+ def status
41
+ if @shell_output == ''
42
+ return 'N/A'
43
+ else
44
+ begin
45
+ warnings_string = "#{color_count data["warnings"].count} Warnings"
46
+ errors_string = "#{color_count data["errors"].count} Errors"
47
+ return "#{warnings_string}, #{errors_string}"
48
+ rescue JSON::ParserError
49
+ return 'Parse Error'
50
+ end
51
+ end
52
+ end
53
+
54
+ ##
55
+ # Parses the JSON Output
56
+ #
57
+ # @author dmasur
58
+ def data
59
+ raise JSON::ParserError if @shell_output.empty?
60
+ json_string = @shell_output.split("Generating report...").last
61
+ json = JSON.parse(json_string)
62
+ end
63
+
64
+ ##
65
+ # Gives the check output
66
+ #
67
+ # @return [String] Output
68
+ # @author dmasur
69
+ def output
70
+ if @shell_output == ''
71
+ return ''
72
+ else
73
+ begin
74
+ (data["warnings"].map { |warning| warning["message"] } +
75
+ data["errors"].map { |error| error["error"] }).join(", ")
76
+ rescue JSON::ParserError
77
+ return @shell_output
78
+ end
79
+ end
80
+ end
81
+ end
@@ -15,7 +15,7 @@ class CucumberChecker
15
15
  rescue Errno::ENOENT
16
16
  "Cucumber not found"
17
17
  end
18
- {:type => :cucumber, :check_output => '', :status => status}
18
+ {:type => :cucumber, :check_output => output, :status => status}
19
19
  end
20
20
 
21
21
  private
@@ -38,4 +38,18 @@ class CucumberChecker
38
38
  'N/A'
39
39
  end
40
40
  end
41
+
42
+ ##
43
+ # Cucumber Output
44
+ #
45
+ # @author dmasur
46
+ def output
47
+ if status == "N/A"
48
+ ''
49
+ elsif status == "OK".green
50
+ ''
51
+ else
52
+ @shell_output
53
+ end
54
+ end
41
55
  end
@@ -5,6 +5,7 @@ require 'rake_check/reek_checker'
5
5
  require 'rake_check/yard_checker'
6
6
  require 'rake_check/cane_checker'
7
7
  require 'rake_check/cucumber_checker'
8
+ require 'rake_check/brakeman_checker'
8
9
  ##
9
10
  # Do exakt what it is called
10
11
  #
@@ -39,9 +40,10 @@ end
39
40
  #
40
41
  # @author dmasur
41
42
  def print_summary results
42
- results.each do |result|
43
- puts "#{result[:type]}:\t#{result[:status]}"
43
+ result = results.map do |result|
44
+ "#{result[:type]} #{result[:status]}"
44
45
  end
46
+ puts `echo "#{result.join("\n")}" | column -t`
45
47
  end
46
48
 
47
49
  desc "Check all Metric tools"
@@ -55,5 +57,6 @@ task :check do
55
57
  results << YardChecker.new.result
56
58
  results << ReekChecker.new.result
57
59
  results << CaneChecker.new.result
60
+ results << BrakemanChecker.new.result
58
61
  print_check_result results
59
62
  end
@@ -3,5 +3,5 @@ module RakeCheck
3
3
  # The Version Constant
4
4
  #
5
5
  # @author dmasur
6
- VERSION = "0.1.6"
6
+ VERSION = "0.1.7"
7
7
  end
data/rake_check.gemspec CHANGED
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.add_dependency "reek"
22
22
  gem.add_dependency "cane"
23
23
  gem.add_dependency "cucumber"
24
+ gem.add_dependency "brakeman"
24
25
  end
@@ -0,0 +1,53 @@
1
+ {
2
+ "scan_info": {
3
+ "app_path": "/path/to/app",
4
+ "rails_version": "3.2.6",
5
+ "security_warnings": 1,
6
+ "timestamp": "2012-06-19 10:18:54 +0200",
7
+ "checks_performed": [
8
+ "BasicAuth",
9
+ "CrossSiteScripting",
10
+ "DefaultRoutes",
11
+ "EscapeFunction",
12
+ "Evaluation",
13
+ "Execute",
14
+ "FileAccess",
15
+ "FilterSkipping",
16
+ "ForgerySetting",
17
+ "LinkTo",
18
+ "LinkToHref",
19
+ "MailTo",
20
+ "MassAssignment",
21
+ "ModelAttributes",
22
+ "NestedAttributes",
23
+ "QuoteTableName",
24
+ "Redirect",
25
+ "Render",
26
+ "ResponseSplitting",
27
+ "SQL",
28
+ "SafeBufferManipulation",
29
+ "SelectVulnerability",
30
+ "Send",
31
+ "SendFile",
32
+ "SessionSettings",
33
+ "SkipBeforeFilter",
34
+ "StripTags",
35
+ "TranslateBug",
36
+ "ValidationRegex",
37
+ "WithoutProtection"
38
+ ],
39
+ "number_of_controllers": 16,
40
+ "number_of_models": 32,
41
+ "number_of_templates": 67,
42
+ "ruby_version": "1.9.3",
43
+ "brakeman_version": "1.6.2"
44
+ },
45
+ "warnings": [
46
+ ],
47
+ "errors": [
48
+ {
49
+ "error": "unterminated string meets end of file. near line 13: \"\" While processing /path/to/app/controllers/admin/admins_controller.rb",
50
+ "location": "/path/to/gem_dir/gems/brakeman-1.6.2/lib/ruby_parser/ruby_lexer.rb:398:in `rb_compile_error'"
51
+ }
52
+ ]
53
+ }
@@ -0,0 +1,100 @@
1
+ [Notice] Detected Rails 3 application
2
+ Loading scanner...
3
+ [Notice] Using Ruby 1.9.3. Please make sure this matches the one used to run your Rails application.
4
+ Processing application in /Users/dmasur/code/jobmensa2
5
+ Processing configuration...
6
+ [Notice] Escaping HTML by default
7
+ Processing gems...
8
+ Processing initializers...
9
+ Processing libs...
10
+ Processing routes...
11
+ Processing templates...
12
+ Processing data flow in templates...
13
+ Processing models...
14
+ Processing controllers...
15
+ Processing data flow in controllers...
16
+ Indexing call sites...
17
+ Running checks in parallel...
18
+ - CheckBasicAuth
19
+ - CheckCrossSiteScripting
20
+ - CheckDefaultRoutes
21
+ - CheckEscapeFunction
22
+ - CheckEvaluation
23
+ - CheckExecute
24
+ - CheckFileAccess
25
+ - CheckFilterSkipping
26
+ - CheckForgerySetting
27
+ - CheckLinkTo
28
+ - CheckLinkToHref
29
+ - CheckMailTo
30
+ - CheckMassAssignment
31
+ - CheckModelAttributes
32
+ - CheckNestedAttributes
33
+ - CheckQuoteTableName
34
+ - CheckRedirect
35
+ - CheckRender
36
+ - CheckResponseSplitting
37
+ - CheckSafeBufferManipulation
38
+ - CheckSelectVulnerability
39
+ - CheckSend
40
+ - CheckSendFile
41
+ - CheckSessionSettings
42
+ - CheckSkipBeforeFilter
43
+ - CheckSQL
44
+ - CheckStripTags
45
+ - CheckTranslateBug
46
+ - CheckValidationRegex
47
+ - CheckWithoutProtection
48
+ Checks finished, collecting results...
49
+ Generating report...
50
+ {
51
+ "scan_info": {
52
+ "app_path": "/Users/dmasur/code/jobmensa2",
53
+ "rails_version": "3.2.6",
54
+ "security_warnings": 0,
55
+ "timestamp": "2012-06-19 09:19:41 +0200",
56
+ "checks_performed": [
57
+ "BasicAuth",
58
+ "CrossSiteScripting",
59
+ "DefaultRoutes",
60
+ "EscapeFunction",
61
+ "Evaluation",
62
+ "Execute",
63
+ "FileAccess",
64
+ "FilterSkipping",
65
+ "ForgerySetting",
66
+ "LinkTo",
67
+ "LinkToHref",
68
+ "MailTo",
69
+ "MassAssignment",
70
+ "ModelAttributes",
71
+ "NestedAttributes",
72
+ "QuoteTableName",
73
+ "Redirect",
74
+ "Render",
75
+ "ResponseSplitting",
76
+ "SQL",
77
+ "SafeBufferManipulation",
78
+ "SelectVulnerability",
79
+ "Send",
80
+ "SendFile",
81
+ "SessionSettings",
82
+ "SkipBeforeFilter",
83
+ "StripTags",
84
+ "TranslateBug",
85
+ "ValidationRegex",
86
+ "WithoutProtection"
87
+ ],
88
+ "number_of_controllers": 17,
89
+ "number_of_models": 32,
90
+ "number_of_templates": 67,
91
+ "ruby_version": "1.9.3",
92
+ "brakeman_version": "1.6.2"
93
+ },
94
+ "warnings": [
95
+
96
+ ],
97
+ "errors": [
98
+
99
+ ]
100
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "scan_info": {
3
+ "app_path": "/path/to/app",
4
+ "rails_version": "3.2.6",
5
+ "security_warnings": 0,
6
+ "timestamp": "2012-06-19 10:06:35 +0200",
7
+ "checks_performed": [
8
+ "BasicAuth",
9
+ "CrossSiteScripting",
10
+ "DefaultRoutes",
11
+ "EscapeFunction",
12
+ "Evaluation",
13
+ "Execute",
14
+ "FileAccess",
15
+ "FilterSkipping",
16
+ "ForgerySetting",
17
+ "LinkTo",
18
+ "LinkToHref",
19
+ "MailTo",
20
+ "MassAssignment",
21
+ "ModelAttributes",
22
+ "NestedAttributes",
23
+ "QuoteTableName",
24
+ "Redirect",
25
+ "Render",
26
+ "ResponseSplitting",
27
+ "SQL",
28
+ "SafeBufferManipulation",
29
+ "SelectVulnerability",
30
+ "Send",
31
+ "SendFile",
32
+ "SessionSettings",
33
+ "SkipBeforeFilter",
34
+ "StripTags",
35
+ "TranslateBug",
36
+ "ValidationRegex",
37
+ "WithoutProtection"
38
+ ],
39
+ "number_of_controllers": 16,
40
+ "number_of_models": 32,
41
+ "number_of_templates": 67,
42
+ "ruby_version": "1.9.3",
43
+ "brakeman_version": "1.6.2"
44
+ },
45
+ "warnings": [
46
+ {
47
+ "warning_type": "SQL Injection",
48
+ "message": "Possible SQL injection",
49
+ "file": "/path/to/app/controllers/admin/admins_controller.rb",
50
+ "line": 13,
51
+ "code": "Admin.order(\"name #{parms[:direction]}\")",
52
+ "location": {
53
+ "type": "method",
54
+ "class": "Admin::AdminsController",
55
+ "method": "index"
56
+ },
57
+ "user_input": "parms[:direction]",
58
+ "confidence": "Medium"
59
+ }
60
+ ],
61
+ "errors": [
62
+ ]
63
+ }
@@ -0,0 +1,40 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../lib/rake_check/brakeman_checker')
2
+
3
+ describe BrakemanChecker do
4
+ it "gives N/A on no Rails Apps" do
5
+ subject.stub('`' => '')
6
+ subject.result.should == { type: :brakeman, check_output: '', status: 'N/A' }
7
+ end
8
+ it "gives N/A on Error" do
9
+ subject.stub('`' => 'Error')
10
+ subject.result.should == { type: :brakeman, check_output: 'Error', status: 'Parse Error' }
11
+ end
12
+ it "gives OK with no Errors" do
13
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
14
+ '/../../files/brakeman_ok.json'))
15
+ subject.stub('`' => shell_output)
16
+ subject.result.should == { type: :brakeman,
17
+ check_output: '',
18
+ status: "\e[32m0\e[0m Warnings, \e[32m0\e[0m Errors" }
19
+ end
20
+ describe "Code Coverage" do
21
+ it "is red with errors" do
22
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
23
+ '/../../files/brakeman_error.json'))
24
+ subject.stub('`' => shell_output)
25
+ output = 'unterminated string meets end of file. near line 13:' +
26
+ ' "" While processing /path/to/app/controllers/admin/admins_controller.rb'
27
+ subject.result.should == { type: :brakeman,
28
+ check_output: output,
29
+ status: "\e[32m0\e[0m Warnings, \e[31m1\e[0m Errors" }
30
+ end
31
+ it "is red with warnings" do
32
+ shell_output = File.read(File.expand_path(File.dirname(__FILE__) +
33
+ '/../../files/brakeman_warning.json'))
34
+ subject.stub('`' => shell_output)
35
+ subject.result.should == { type: :brakeman,
36
+ check_output: 'Possible SQL injection',
37
+ status: "\e[31m1\e[0m Warnings, \e[32m0\e[0m Errors" }
38
+ end
39
+ end
40
+ end
@@ -14,7 +14,7 @@ describe CucumberChecker do
14
14
  it "is red on Error" do
15
15
  subject.stub('`' => "8 scenarios (1 failed, 7 passed)")
16
16
  subject.result.should == { type: :cucumber,
17
- check_output: '',
17
+ check_output: '8 scenarios (1 failed, 7 passed)',
18
18
  status: "\e[31m1 failed scenarios\e[0m" }
19
19
  end
20
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-21 00:00:00.000000000 Z
12
+ date: 2012-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70208090319120 !ruby/object:Gem::Requirement
16
+ requirement: &70129581054120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70208090319120
24
+ version_requirements: *70129581054120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: colored
27
- requirement: &70208090317960 !ruby/object:Gem::Requirement
27
+ requirement: &70129581052460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70208090317960
35
+ version_requirements: *70129581052460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70208090316700 !ruby/object:Gem::Requirement
38
+ requirement: &70129581050700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70208090316700
46
+ version_requirements: *70129581050700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: reek
49
- requirement: &70208090315880 !ruby/object:Gem::Requirement
49
+ requirement: &70129581049100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70208090315880
57
+ version_requirements: *70129581049100
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: cane
60
- requirement: &70208090315320 !ruby/object:Gem::Requirement
60
+ requirement: &70129581048080 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70208090315320
68
+ version_requirements: *70129581048080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: cucumber
71
- requirement: &70208090314700 !ruby/object:Gem::Requirement
71
+ requirement: &70129581084760 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,18 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70208090314700
79
+ version_requirements: *70129581084760
80
+ - !ruby/object:Gem::Dependency
81
+ name: brakeman
82
+ requirement: &70129581081740 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70129581081740
80
91
  description: Checking the Project for Code Smells and bad documentation
81
92
  email:
82
93
  - dominik.masur@googlemail.com
@@ -94,6 +105,7 @@ files:
94
105
  - README.md
95
106
  - Rakefile
96
107
  - lib/rake_check.rb
108
+ - lib/rake_check/brakeman_checker.rb
97
109
  - lib/rake_check/cane_checker.rb
98
110
  - lib/rake_check/cucumber_checker.rb
99
111
  - lib/rake_check/rbp_checker.rb
@@ -103,16 +115,19 @@ files:
103
115
  - lib/rake_check/version.rb
104
116
  - lib/rake_check/yard_checker.rb
105
117
  - rake_check.gemspec
106
- - spec
107
- - spec_no_rails/files/cucumber_fail_output.txt
108
- - spec_no_rails/files/reek_output.yaml
109
- - spec_no_rails/lib/rake_check/cane_checker_spec.rb
110
- - spec_no_rails/lib/rake_check/cucumber_checker_spec.rb
111
- - spec_no_rails/lib/rake_check/rbp_checker_spec.rb
112
- - spec_no_rails/lib/rake_check/reek_checker_spec.rb
113
- - spec_no_rails/lib/rake_check/rspec_checker_spec.rb
114
- - spec_no_rails/lib/rake_check/yard_checker_spec.rb
115
- - spec_no_rails/spec_helper.rb
118
+ - spec/files/brakeman_error.json
119
+ - spec/files/brakeman_ok.json
120
+ - spec/files/brakeman_warning.json
121
+ - spec/files/cucumber_fail_output.txt
122
+ - spec/files/reek_output.yaml
123
+ - spec/lib/rake_check/brakeman_checker_spec.rb
124
+ - spec/lib/rake_check/cane_checker_spec.rb
125
+ - spec/lib/rake_check/cucumber_checker_spec.rb
126
+ - spec/lib/rake_check/rbp_checker_spec.rb
127
+ - spec/lib/rake_check/reek_checker_spec.rb
128
+ - spec/lib/rake_check/rspec_checker_spec.rb
129
+ - spec/lib/rake_check/yard_checker_spec.rb
130
+ - spec/spec_helper.rb
116
131
  homepage: https://github.com/TBAA/rake_check
117
132
  licenses: []
118
133
  post_install_message:
@@ -127,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
142
  version: '0'
128
143
  segments:
129
144
  - 0
130
- hash: -3052005853982871500
145
+ hash: 2895400743441379252
131
146
  required_rubygems_version: !ruby/object:Gem::Requirement
132
147
  none: false
133
148
  requirements:
@@ -136,12 +151,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
151
  version: '0'
137
152
  segments:
138
153
  - 0
139
- hash: -3052005853982871500
154
+ hash: 2895400743441379252
140
155
  requirements: []
141
156
  rubyforge_project:
142
157
  rubygems_version: 1.8.10
143
158
  signing_key:
144
159
  specification_version: 3
145
160
  summary: Checking the Project for Code Smells and bad documentation
146
- test_files: []
161
+ test_files:
162
+ - spec/files/brakeman_error.json
163
+ - spec/files/brakeman_ok.json
164
+ - spec/files/brakeman_warning.json
165
+ - spec/files/cucumber_fail_output.txt
166
+ - spec/files/reek_output.yaml
167
+ - spec/lib/rake_check/brakeman_checker_spec.rb
168
+ - spec/lib/rake_check/cane_checker_spec.rb
169
+ - spec/lib/rake_check/cucumber_checker_spec.rb
170
+ - spec/lib/rake_check/rbp_checker_spec.rb
171
+ - spec/lib/rake_check/reek_checker_spec.rb
172
+ - spec/lib/rake_check/rspec_checker_spec.rb
173
+ - spec/lib/rake_check/yard_checker_spec.rb
174
+ - spec/spec_helper.rb
147
175
  has_rdoc:
data/spec DELETED
File without changes
File without changes
File without changes