Sha256: 961900836f0c80b784f68ab101c5629d50101ade66fbf170b4908ddfc1800a68

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require "rack/utils"
require "rack/var_dump/object"
require "rack/var_dump/version"

module Rack
  class VarDump
    include Object

    @@var_aggregates = []

    def self.var_dump(var)
      @@var_aggregates << var.to_yaml
    rescue => e
      if defined?(Rails)
        ::Rails.logger.warn "Rack::VarDump[warn] #{e}"
      end

      if var.respond_to?(:inspect)
        @@var_aggregates << var.inspect
      end
    end

    def self.reset!
      @@var_aggregates = []
    end

    def initialize(app)
      @app = app
    end

    def call(env)
      request = Rack::Request.new(env)
      status, headers, response = @app.call(env)

      if /^text\/html/ =~ headers["Content-Type"] && !@@var_aggregates.empty?
        body = ""
        response.each {|org_body| body << org_body}
        response = [apply(request, body)] if body =~ /<body.*>/
        headers["Content-Length"] = response.join.bytesize.to_s
      end
      VarDump.reset!
      [status, headers, response]
    end

    private
    def apply(request, response)
      html =  %Q(<div id="var_dump" style="display:block">)
      html << %Q(<pre style="background-color:#eee;padding:10px;font-size:11px;white-space:pre-wrap;color:black !important;">)
      html << Rack::Utils.escape_html(@@var_aggregates.join)
      html << %Q(</pre></div>)
      response.sub(/<body.*>/, '\&' + html)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rack-var-dump-0.1.1 lib/rack/var_dump.rb