class Brakeman::OutputProcessor

Produces formatted output strings from Sexps. Recommended usage is

OutputProcessor.new.format(Sexp.new(:str, "hello"))

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/brakeman/processors/output_processor.rb, line 11
def initialize *args
  super
  @user_input = nil
end

Public Instance Methods

format(exp, user_input = nil, &block) click to toggle source

Copies exp and then formats it.

# File lib/brakeman/processors/output_processor.rb, line 17
def format exp, user_input = nil, &block
  @user_input = user_input
  @user_input_block = block
  process(exp.deep_clone) || "[Format Error]"
end
Also aliased as: process_safely
output_format(exp, tag) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 114
def output_format exp, tag
  out = if exp[1].node_type == :str or exp[1].node_type == :ignore
          ""
        else
          res = process exp[1]

          if res == ""
            ""
          else
            "[#{tag}] #{res}"
          end
        end

  out
end
process(exp) click to toggle source
Calls superclass method
# File lib/brakeman/processors/output_processor.rb, line 25
def process exp
  begin
    if @user_input and @user_input == exp
      @user_input_block.call(exp, super(exp))
    else
      super exp if sexp? exp and not exp.empty?
    end
  rescue => e
    Brakeman.debug "While formatting #{exp}: #{e}\n#{e.backtrace.join("\n")}"
  end
end
process_const(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 130
def process_const exp
  if exp[1] == Brakeman::Tracker::UNKNOWN_MODEL
    "(Unresolved Model)"
  else
    out = exp[1].to_s
    out
  end
end
process_cookies(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 49
def process_cookies exp
  "cookies"
end
process_defn(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 66
def process_defn exp
  # Copied from Ruby2Ruby except without the whole
  # "convert methods to attr_*" stuff
  exp = exp.deep_clone
  exp.shift
  name = exp.shift
  args = process exp.shift
  args = "" if args == "()"

  exp.shift if exp == s(s(:nil)) # empty it out of a default nil expression

  body = []
  until exp.empty? do
    body << indent(process(exp.shift))
  end

  body << indent("# do nothing") if body.empty?

  body = body.join("\n")

  return "def #{name}#{args}\n#{body}\nend".gsub(/\n\s*\n+/, "\n")
end
process_escaped_output(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 101
def process_escaped_output exp
  output_format exp, "Escaped Output"
end
process_format(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 106
def process_format exp
  output_format exp, "Format"
end
process_format_escaped(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 110
def process_format_escaped exp
  output_format exp, "Escaped"
end
process_ignore(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 37
def process_ignore exp
  "[ignored]"
end
process_iter(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 89
def process_iter exp
  call = process exp[1]
  block = process_rlist exp.sexp_body(3)
  out = "#{call} do\n #{block}\n end"

  out
end
process_output(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 97
def process_output exp
  output_format exp, "Output"
end
process_params(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 41
def process_params exp
  "params"
end
process_render(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 139
def process_render exp
  exp = exp.deep_clone
  exp.shift

  exp[1] = process exp[1] if sexp? exp[1]
  exp[2] = process exp[2] if sexp? exp[2]
  out = "render(#{exp[0]} => #{exp[1]}, #{exp[2]})"

  out
end
process_rlist(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 53
def process_rlist exp
  out = exp.map do |e|
    res = process e
    if res == ""
      nil
    else
      res
    end
  end.compact.join("\n")

  out
end
process_safely(exp, user_input = nil, &block)
Alias for: format
process_session(exp) click to toggle source
# File lib/brakeman/processors/output_processor.rb, line 45
def process_session exp
  "session"
end