guard-brakeman 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -27,7 +27,7 @@ $ guard init brakeman
27
27
 
28
28
  ## Use sublime Text 2?
29
29
 
30
- Check out [sublime_guard](https://github.com/cyphactor/sublime_guard)! It gives you control Guard without leaving the editor. This is even more powerful with Growl notifications. Enter distraction-free mode and never leave!
30
+ Check out [sublime_guard](https://github.com/cyphactor/sublime_guard)! It gives you control Guard without leaving the editor. This is even more powerful with Growl notifications. Enter distraction-free mode and never leave!
31
31
 
32
32
  ## Usage
33
33
 
@@ -85,7 +85,6 @@ Pull requests are very welcome! Please try to follow these simple rules if appli
85
85
 
86
86
  * Please create a topic branch for every separate change you make.
87
87
  * Make sure your patches are well tested.
88
- * Update the [Yard](http://yardoc.org/) documentation.
89
88
  * Update the README.
90
89
  * Update the CHANGELOG for noteworthy changes.
91
90
  * Please **do not change** the version number.
@@ -12,8 +12,10 @@ module Guard
12
12
  def initialize(watchers = [], options = { })
13
13
  super
14
14
 
15
+ ::Brakeman.instance_variable_set(:@quiet, options[:quiet])
16
+
15
17
  if options[:skip_checks]
16
- options[:skip_checks] = options[:skip_checks].map do |val|
18
+ options[:skip_checks] = options[:skip_checks].map do |val|
17
19
  # mimic Brakeman::set_options behavior
18
20
  val[0,5] == "Check" ? val : "Check" << val
19
21
  end
@@ -24,10 +26,10 @@ module Guard
24
26
 
25
27
  # TODO mixing the use of this attr, good to match? Bad to couple?
26
28
  @options = {
27
- :notifications => true,
28
- :run_on_start => false,
29
- :chatty => false,
30
- :min_confidence => 1
29
+ :notifications => true,
30
+ :run_on_start => false,
31
+ :chatty => false,
32
+ :min_confidence => 1
31
33
  }.update(options)
32
34
  end
33
35
 
@@ -38,11 +40,10 @@ module Guard
38
40
  def start
39
41
  @scanner_opts = ::Brakeman::set_options({:app_path => '.'}.merge(@options))
40
42
  @options.merge!(@scanner_opts)
41
-
42
43
  @tracker = ::Brakeman::Scanner.new(@scanner_opts).process
43
44
 
44
45
  if @options[:run_on_start]
45
- run_all
46
+ run_all
46
47
  elsif @options[:chatty]
47
48
  ::Guard::Notifier.notify("Brakeman is ready to work!", :title => "Brakeman started", :image => :pending)
48
49
  end
@@ -53,7 +54,6 @@ module Guard
53
54
  # @raise [:task_has_failed] when stop has failed
54
55
  #
55
56
  def run_all
56
- UI.info 'running all'
57
57
  @tracker.run_checks
58
58
  print_failed(@tracker.checks)
59
59
  throw :task_has_failed if @tracker.checks.all_warnings.any?
@@ -82,71 +82,76 @@ module Guard
82
82
 
83
83
  all_warnings = report.all_warnings
84
84
 
85
- puts all_warnings.sort_by { |w| w.confidence }
86
-
87
85
  message = "#{all_warnings.count} brakeman findings"
88
86
 
89
87
  if @options[:output_files]
90
88
  write_report
91
- message += "\nResults written to #{@options[:output_files]}"
89
+ message += "\nResults written to #{@options[:output_files]}"
92
90
  end
93
91
 
94
92
  if @options[:chatty] && all_warnings.any?
95
- ::Guard::Notifier.notify(message, :title => "Full Brakeman results", :image => icon)
93
+ ::Guard::Notifier.notify(message, :title => "Full Brakeman results", :image => icon)
96
94
  end
95
+
96
+ info(message, 'yellow')
97
+ warning_info(all_warnings.sort_by { |w| w.confidence })
97
98
  end
98
99
 
99
100
  def print_changed report
100
101
  UI.info "\n------ brakeman warnings --------\n"
101
-
102
- message = ""
102
+
103
+ message = []
103
104
  should_alert = false
104
105
 
105
106
  fixed_warnings = report.fixed_warnings
106
107
  if fixed_warnings.any?
107
- icon = :success
108
108
  results_notification = pluralize(fixed_warnings.length, "fixed warning")
109
- UI.info(UI.send(:color, results_notification, 'green')) # janky
110
-
111
- should_alert = true
112
- message += results_notification
109
+ info(results_notification, 'green')
110
+ warning_info(fixed_warnings.sort_by { |w| w.confidence })
113
111
 
114
- puts fixed_warnings.sort_by { |w| w.confidence }
115
- puts ""
112
+ message << results_notification
113
+ should_alert = true
114
+ icon = :success
116
115
  end
117
116
 
118
117
  new_warnings = report.new_warnings
119
118
  if new_warnings.any?
120
119
  new_warning_message = pluralize(new_warnings.length, "new warning")
121
- UI.info(UI.send(:color, new_warning_message, 'red')) # janky
120
+ info(new_warning_message, 'red')
121
+ warning_info(new_warnings.sort_by { |w| w.confidence })
122
122
 
123
- message += new_warning_message
123
+ message << new_warning_message
124
124
  should_alert = true
125
125
  icon = :failed
126
-
127
- puts new_warnings.sort_by { |w| w.confidence }
128
- puts ""
129
126
  end
130
127
 
131
128
  existing_warnings = report.existing_warnings
132
129
  if existing_warnings.any?
133
- should_alert = true if @options[:chatty]
134
- icon ||= :pending
135
-
136
130
  existing_warning_message = pluralize(existing_warnings.length, "previous warning")
137
- UI.warning existing_warning_message
138
- message += existing_warning_message
131
+ info(existing_warning_message, 'yellow')
132
+ warning_info(existing_warnings.sort_by { |w| w.confidence })
139
133
 
140
- puts existing_warnings.sort_by { |w| w.confidence }
134
+ message << existing_warning_message
135
+ should_alert = true if @options[:chatty]
136
+ icon ||= :pending
141
137
  end
142
138
 
143
139
  if @options[:output_files]
144
140
  write_report
145
- message += "\nResults written to #{@options[:output_files]}"
141
+ message << "\nResults written to #{@options[:output_files]}"
142
+ end
143
+
144
+ title = case icon
145
+ when :success
146
+ pluralize(fixed_warnings.length, "Warning") + " fixed."
147
+ when :pending
148
+ pluralize(existing_warnings.length, "Warning") + " left to fix."
149
+ when :failed
150
+ pluralize(new_warnings.length, "Warning") + " introduced."
146
151
  end
147
152
 
148
153
  if @options[:notifications] && should_alert
149
- ::Guard::Notifier.notify(message.chomp, :title => "Brakeman results", :image => icon)
154
+ ::Guard::Notifier.notify(message.join(", ").chomp, :title => title, :image => icon)
150
155
  end
151
156
  end
152
157
 
@@ -158,9 +163,41 @@ module Guard
158
163
  end
159
164
  end
160
165
 
161
- # stolen from rails
166
+ # stolen from ActiveSupport
162
167
  def pluralize(count, singular, plural = nil)
163
168
  "#{count || 0} " + ((count == 1 || count =~ /^1(\.0+)?$/) ? singular : (plural || singular.pluralize))
164
169
  end
170
+
171
+ def info(message, color = :white)
172
+ UI.info(UI.send(:color, message, color))
173
+ end
174
+
175
+ def warning_info(warnings, color = :white)
176
+ warnings.each do |warning|
177
+ info(decorate_warning(warning))
178
+ end
179
+ end
180
+
181
+ def decorate_warning(warning)
182
+ color = case warning.confidence
183
+ when 0
184
+ :red
185
+ when 1
186
+ :yellow
187
+ when 2
188
+ :white
189
+ end
190
+
191
+ output = UI.send(:color, ::Brakeman::Warning::TEXT_CONFIDENCE[warning.confidence], color)
192
+ output << " - #{warning.warning_type} - #{warning.message}"
193
+ output << " near line #{warning.line}" if warning.line
194
+ if warning.file
195
+ # fix this ish or wait for brakeman to be fixed
196
+ filename = warning.file.gsub(@options[:app_path], '')
197
+ output << " in #{filename}"
198
+ end
199
+ output << ": #{warning.format_code}" if warning.code
200
+ output
201
+ end
165
202
  end
166
203
  end
@@ -1,4 +1,4 @@
1
- guard 'brakeman' do
1
+ guard 'brakeman', :run_on_start => true do
2
2
  watch(%r{^app/.+\.(erb|haml|rhtml|rb)$})
3
3
  watch(%r{^config/.+\.rb$})
4
4
  watch(%r{^lib/.+\.rb$})
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-brakeman
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 0
10
- version: 0.5.0
9
+ - 1
10
+ version: 0.5.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Neil Matatall
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-07-22 00:00:00 Z
19
+ date: 2012-10-08 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: guard
@@ -40,14 +40,14 @@ dependencies:
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ">="
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- hash: 5
45
+ hash: 11
46
46
  segments:
47
47
  - 1
48
- - 5
49
- - 3
50
- version: 1.5.3
48
+ - 7
49
+ - 0
50
+ version: 1.7.0
51
51
  type: :runtime
52
52
  version_requirements: *id002
53
53
  description: Guard::Brakeman automatically scans your Rails app for vulnerabilities
@@ -70,7 +70,7 @@ post_install_message:
70
70
  rdoc_options:
71
71
  - --charset=UTF-8
72
72
  - --main=README.md
73
- - --exclude='(lib|test|spec)|(Gem|Guard|Rake)file'
73
+ - --exclude='(test|spec)|(Gem|Guard|Rake)file'
74
74
  require_paths:
75
75
  - lib
76
76
  required_ruby_version: !ruby/object:Gem::Requirement