class ApiHammer::Filtration::FormEncoded

Public Class Methods

new(string, options = {}) click to toggle source
# File lib/api_hammer/filtration/form_encoded.rb, line 6
def initialize(string, options = {})
  @string = string
  @options = options
end

Public Instance Methods

filter() click to toggle source
# File lib/api_hammer/filtration/form_encoded.rb, line 11
def filter
  ss = StringScanner.new(@string)
  filtered = ''
  while !ss.eos?
    if ss.scan(/[&;]/)
      filtered << ss[0]
    end
    if ss.scan(/[^&;]+/)
      kv = ss[0]
      key, _ = kv.split('=', 2)
      parsed_key = CGI::unescape(key)
      if [*@options[:filter_keys]].any? { |fk| parsed_key =~ /(\A|[\[\]])#{Regexp.escape(fk)}(\z|[\[\]])/ }
        filtered << [key, '[FILTERED]'].join('=')
      else
        filtered << ss[0]
      end
    end
  end
  filtered
end