Class: Brakeman::IgnoreConfig
- Inherits:
-
Object
- Object
- Brakeman::IgnoreConfig
- Defined in:
- lib/brakeman/report/ignore/config.rb
Instance Attribute Summary collapse
-
#file ⇒ Object
Returns the value of attribute file.
-
#ignored_warnings ⇒ Object
readonly
Returns the value of attribute ignored_warnings.
-
#shown_warnings ⇒ Object
readonly
Returns the value of attribute shown_warnings.
Instance Method Summary collapse
-
#add_note(warning, note) ⇒ Object
Add note for warning.
- #already_ignored_entries_with_empty_notes ⇒ Object
-
#filter_ignored ⇒ Object
Populate ignored_warnings and shown_warnings based on ignore configuration.
- #ignore(warning) ⇒ Object
-
#ignored?(warning) ⇒ Boolean
Determine if warning should be ignored.
-
#initialize(file, new_warnings) ⇒ IgnoreConfig
constructor
A new instance of IgnoreConfig.
-
#note_for(warning) ⇒ Object
Retrieve note for warning if it exists.
-
#obsolete_fingerprints ⇒ Object
The set of unused ignore entries.
- #prune_obsolete ⇒ Object
-
#read_from_file(file = @file) ⇒ Object
Read configuration to file.
-
#save_to_file(warnings, file = @file) ⇒ Object
Save configuration to file.
-
#save_with_old ⇒ Object
Save old ignored warnings and newly ignored ones.
-
#unignore(warning) ⇒ Object
Remove warning from ignored list.
Constructor Details
#initialize(file, new_warnings) ⇒ IgnoreConfig
Returns a new instance of IgnoreConfig.
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/brakeman/report/ignore/config.rb', line 9 def initialize file, new_warnings @file = file @new_warnings = new_warnings @already_ignored = [] @ignored_fingerprints = Set.new @used_fingerprints = Set.new @notes = {} @shown_warnings = @ignored_warnings = nil @changed = false end |
Instance Attribute Details
#file ⇒ Object
Returns the value of attribute file.
7 8 9 |
# File 'lib/brakeman/report/ignore/config.rb', line 7 def file @file end |
#ignored_warnings ⇒ Object (readonly)
Returns the value of attribute ignored_warnings.
6 7 8 |
# File 'lib/brakeman/report/ignore/config.rb', line 6 def ignored_warnings @ignored_warnings end |
#shown_warnings ⇒ Object (readonly)
Returns the value of attribute shown_warnings.
6 7 8 |
# File 'lib/brakeman/report/ignore/config.rb', line 6 def shown_warnings @shown_warnings end |
Instance Method Details
#add_note(warning, note) ⇒ Object
Add note for warning
58 59 60 61 |
# File 'lib/brakeman/report/ignore/config.rb', line 58 def add_note warning, note @changed = true @notes[warning.fingerprint] = note end |
#already_ignored_entries_with_empty_notes ⇒ Object
97 98 99 |
# File 'lib/brakeman/report/ignore/config.rb', line 97 def already_ignored_entries_with_empty_notes @already_ignored.select { |i| i if i[:note].strip.empty? } end |
#filter_ignored ⇒ Object
Populate ignored_warnings and shown_warnings based on ignore configuration
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/brakeman/report/ignore/config.rb', line 22 def filter_ignored @shown_warnings = [] @ignored_warnings = [] @used_fingerprints = Set.new @new_warnings.each do |w| if ignored? w @ignored_warnings << w else @shown_warnings << w end end @shown_warnings end |
#ignore(warning) ⇒ Object
52 53 54 55 |
# File 'lib/brakeman/report/ignore/config.rb', line 52 def ignore warning @changed = true unless ignored? warning @ignored_fingerprints << warning.fingerprint end |
#ignored?(warning) ⇒ Boolean
Determine if warning should be ignored
47 48 49 50 |
# File 'lib/brakeman/report/ignore/config.rb', line 47 def ignored? warning @used_fingerprints << warning.fingerprint @ignored_fingerprints.include? warning.fingerprint end |
#note_for(warning) ⇒ Object
Retrieve note for warning if it exists. Returns nil if no note is found
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/brakeman/report/ignore/config.rb', line 65 def note_for warning if warning.is_a? Warning fingerprint = warning.fingerprint else fingerprint = warning[:fingerprint] end @already_ignored.each do |w| if fingerprint == w[:fingerprint] return w[:note] end end nil end |
#obsolete_fingerprints ⇒ Object
The set of unused ignore entries
82 83 84 |
# File 'lib/brakeman/report/ignore/config.rb', line 82 def obsolete_fingerprints (@ignored_fingerprints - @used_fingerprints).to_a end |
#prune_obsolete ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/brakeman/report/ignore/config.rb', line 86 def prune_obsolete obsolete = obsolete_fingerprints.to_set @ignored_fingerprints -= obsolete @already_ignored.reject! do |w| if obsolete.include? w[:fingerprint] @changed = true end end end |
#read_from_file(file = @file) ⇒ Object
Read configuration to file
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/brakeman/report/ignore/config.rb', line 102 def read_from_file file = @file if File.exist? file begin @already_ignored = JSON.parse(File.read(file), :symbolize_names => true)[:ignored_warnings] rescue => e raise e, "\nError[#{e.class}] while reading brakeman ignore file: #{file}\n" end else Brakeman.notify "[Notice] Could not find ignore configuration in #{file}" @already_ignored = [] end @already_ignored.each do |w| @ignored_fingerprints << w[:fingerprint] @notes[w[:fingerprint]] = w[:note] end end |
#save_to_file(warnings, file = @file) ⇒ Object
Save configuration to file
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/brakeman/report/ignore/config.rb', line 121 def save_to_file warnings, file = @file warnings = warnings.map do |w| if w.is_a? Warning w = w.to_hash(absolute_paths: false) end w[:note] = @notes[w[:fingerprint]] || "" w end.sort_by { |w| [w[:fingerprint], w[:line] || 0] } output = { :ignored_warnings => warnings, :updated => Time.now.to_s, :brakeman_version => Brakeman::Version } File.open file, "w" do |f| f.puts JSON.pretty_generate(output) end end |
#save_with_old ⇒ Object
Save old ignored warnings and newly ignored ones
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/brakeman/report/ignore/config.rb', line 143 def save_with_old warnings = @ignored_warnings.dup # Only add ignored warnings not already ignored @already_ignored.each do |w| fingerprint = w[:fingerprint] unless @ignored_warnings.find { |ignored_warning| ignored_warning.fingerprint == fingerprint } warnings << w end end if @changed save_to_file warnings end end |
#unignore(warning) ⇒ Object
Remove warning from ignored list
39 40 41 42 43 44 |
# File 'lib/brakeman/report/ignore/config.rb', line 39 def unignore warning @ignored_fingerprints.delete warning.fingerprint if @already_ignored.reject! { |w|w[:fingerprint] == warning.fingerprint } @changed = true end end |