Class: Brakeman::Warning
Overview
The Warning class stores information about warnings
Constant Summary collapse
- TEXT_CONFIDENCE =
[ "High", "Medium", "Weak" ]
Instance Attribute Summary collapse
-
#called_from ⇒ Object
readonly
Returns the value of attribute called_from.
-
#check ⇒ Object
readonly
Returns the value of attribute check.
-
#class ⇒ Object
readonly
Returns the value of attribute class.
-
#code ⇒ Object
Returns the value of attribute code.
-
#confidence ⇒ Object
readonly
Returns the value of attribute confidence.
-
#context ⇒ Object
Returns the value of attribute context.
-
#controller ⇒ Object
readonly
Returns the value of attribute controller.
-
#file ⇒ Object
Returns the value of attribute file.
-
#line ⇒ Object
readonly
Returns the value of attribute line.
-
#message ⇒ Object
Returns the value of attribute message.
-
#method ⇒ Object
readonly
Returns the value of attribute method.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#relative_path ⇒ Object
Returns the value of attribute relative_path.
-
#template ⇒ Object
readonly
Returns the value of attribute template.
-
#user_input ⇒ Object
readonly
Returns the value of attribute user_input.
-
#warning_code ⇒ Object
readonly
Returns the value of attribute warning_code.
-
#warning_set ⇒ Object
readonly
Returns the value of attribute warning_set.
-
#warning_type ⇒ Object
readonly
Returns the value of attribute warning_type.
Instance Method Summary collapse
- #eql?(other_warning) ⇒ Boolean
- #fingerprint ⇒ Object
-
#format_code(strip = true) ⇒ Object
Return String of the code output from the OutputProcessor and stripped of newlines and tabs.
-
#format_message ⇒ Object
Return formatted warning message.
-
#format_user_input(strip = true) ⇒ Object
Return String of the user input formatted and stripped of newlines and tabs.
- #hash ⇒ Object
-
#initialize(options = {}) ⇒ Warning
constructor
options[:result]
can be a result from Tracker#find_call. - #link ⇒ Object
- #location ⇒ Object
- #to_hash ⇒ Object
- #to_json ⇒ Object
-
#to_row(type = :warning) ⇒ Object
Generates a hash suitable for inserting into a table.
- #to_s ⇒ Object
-
#view_name ⇒ Object
Returns name of a view, including where it was rendered from.
Constructor Details
#initialize(options = {}) ⇒ Warning
options[:result]
can be a result from Tracker#find_call. Otherwise, it can be nil
.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/brakeman/warning.rb', line 16 def initialize = {} @view_name = nil [:called_from, :check, :class, :code, :confidence, :controller, :file, :line, :link_path, :message, :method, :model, :relative_path, :template, :user_input, :warning_set, :warning_type].each do |option| self.instance_variable_set("@#{option}", [option]) end result = [:result] if result @code ||= result[:call] @file ||= result[:location][:file] if result[:location][:type] == :template #template result @template ||= result[:location][:template] else @class ||= result[:location][:class] @method ||= result[:location][:method] end end if not @line if @user_input and @user_input.respond_to? :line @line = @user_input.line elsif @code and @code.respond_to? :line @line = @code.line end end unless @warning_set if self.model @warning_set = :model elsif self.template @warning_set = :template @called_from = self.template[:caller] elsif self.controller @warning_set = :controller else @warning_set = :warning end end if [:warning_code] @warning_code = Brakeman::WarningCodes.code [:warning_code] end Brakeman.debug("Warning created without warning code: #{[:warning_code]}") unless @warning_code @format_message = nil @row = nil end |
Instance Attribute Details
#called_from ⇒ Object (readonly)
Returns the value of attribute called_from.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def called_from @called_from end |
#check ⇒ Object (readonly)
Returns the value of attribute check.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def check @check end |
#class ⇒ Object (readonly)
Returns the value of attribute class.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def class @class end |
#code ⇒ Object
Returns the value of attribute code.
11 12 13 |
# File 'lib/brakeman/warning.rb', line 11 def code @code end |
#confidence ⇒ Object (readonly)
Returns the value of attribute confidence.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def confidence @confidence end |
#context ⇒ Object
Returns the value of attribute context.
11 12 13 |
# File 'lib/brakeman/warning.rb', line 11 def context @context end |
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def controller @controller end |
#file ⇒ Object
Returns the value of attribute file.
11 12 13 |
# File 'lib/brakeman/warning.rb', line 11 def file @file end |
#line ⇒ Object (readonly)
Returns the value of attribute line.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def line @line end |
#message ⇒ Object
Returns the value of attribute message.
11 12 13 |
# File 'lib/brakeman/warning.rb', line 11 def @message end |
#method ⇒ Object (readonly)
Returns the value of attribute method.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def method @method end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def model @model end |
#relative_path ⇒ Object
Returns the value of attribute relative_path.
11 12 13 |
# File 'lib/brakeman/warning.rb', line 11 def relative_path @relative_path end |
#template ⇒ Object (readonly)
Returns the value of attribute template.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def template @template end |
#user_input ⇒ Object (readonly)
Returns the value of attribute user_input.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def user_input @user_input end |
#warning_code ⇒ Object (readonly)
Returns the value of attribute warning_code.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def warning_code @warning_code end |
#warning_set ⇒ Object (readonly)
Returns the value of attribute warning_set.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def warning_set @warning_set end |
#warning_type ⇒ Object (readonly)
Returns the value of attribute warning_type.
7 8 9 |
# File 'lib/brakeman/warning.rb', line 7 def warning_type @warning_type end |
Instance Method Details
#eql?(other_warning) ⇒ Boolean
73 74 75 |
# File 'lib/brakeman/warning.rb', line 73 def eql? other_warning self.hash == other_warning.hash end |
#fingerprint ⇒ Object
163 164 165 166 167 168 169 170 |
# File 'lib/brakeman/warning.rb', line 163 def fingerprint loc = self.location location_string = loc && loc.sort_by { |k, v| k.to_s }.inspect warning_code_string = sprintf("%03d", @warning_code) code_string = @code.inspect Digest::SHA2.new(256).update("#{warning_code_string}#{code_string}#{location_string}#{@relative_path}#{self.confidence}").to_s end |
#format_code(strip = true) ⇒ Object
Return String of the code output from the OutputProcessor and stripped of newlines and tabs.
89 90 91 |
# File 'lib/brakeman/warning.rb', line 89 def format_code strip = true format_ruby self.code, strip end |
#format_message ⇒ Object
Return formatted warning message
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/brakeman/warning.rb', line 100 def return @format_message if @format_message @format_message = self..dup if self.line @format_message << " near line #{self.line}" end if self.code @format_message << ": #{format_code}" end @format_message end |
#format_user_input(strip = true) ⇒ Object
Return String of the user input formatted and stripped of newlines and tabs.
95 96 97 |
# File 'lib/brakeman/warning.rb', line 95 def format_user_input strip = true format_ruby self.user_input, strip end |
#hash ⇒ Object
69 70 71 |
# File 'lib/brakeman/warning.rb', line 69 def hash self.to_s.hash end |
#link ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/brakeman/warning.rb', line 116 def link return @link if @link if @link_path if @link_path.start_with? "http" @link = @link_path else @link = "http://brakemanscanner.org/docs/warning_types/#{@link_path}" end else warning_path = self.warning_type.to_s.downcase.gsub(/\s+/, '_') + "/" @link = "http://brakemanscanner.org/docs/warning_types/#{warning_path}" end @link end |
#location ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/brakeman/warning.rb', line 172 def location case @warning_set when :template location = { :type => :template, :template => self.view_name } when :model location = { :type => :model, :model => self.model } when :controller location = { :type => :controller, :controller => self.controller } when :warning if self.class location = { :type => :method, :class => self.class, :method => self.method } else location = nil end end end |
#to_hash ⇒ Object
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/brakeman/warning.rb', line 189 def to_hash { :warning_type => self.warning_type, :warning_code => @warning_code, :fingerprint => self.fingerprint, :message => self., :file => self.file, :line => self.line, :link => self.link, :code => (@code && self.format_code(false)), :render_path => self.called_from, :location => self.location, :user_input => (@user_input && self.format_user_input(false)), :confidence => TEXT_CONFIDENCE[self.confidence] } end |
#to_json ⇒ Object
205 206 207 |
# File 'lib/brakeman/warning.rb', line 205 def to_json MultiJson.dump self.to_hash end |
#to_row(type = :warning) ⇒ Object
Generates a hash suitable for inserting into a table
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/brakeman/warning.rb', line 134 def to_row type = :warning @row = { "Confidence" => self.confidence, "Warning Type" => self.warning_type.to_s, "Message" => self. } case type when :template @row["Template"] = self.view_name.to_s when :model @row["Model"] = self.model.to_s when :controller @row["Controller"] = self.controller.to_s when :warning @row["Class"] = self.class.to_s @row["Method"] = self.method.to_s end @row end |
#to_s ⇒ Object
154 155 156 157 158 159 160 161 |
# File 'lib/brakeman/warning.rb', line 154 def to_s output = "(#{TEXT_CONFIDENCE[self.confidence]}) #{self.warning_type} - #{self.}" output << " near line #{self.line}" if self.line output << " in #{self.file}" if self.file output << ": #{self.format_code}" if self.code output end |
#view_name ⇒ Object
Returns name of a view, including where it was rendered from
78 79 80 81 82 83 84 85 |
# File 'lib/brakeman/warning.rb', line 78 def view_name return @view_name if @view_name if called_from @view_name = "#{template[:name]} (#{called_from.last})" else @view_name = template[:name] end end |