class Rack::MiniProfiler::ClientSettings

Constants

BACKTRACE_DEFAULT
BACKTRACE_FULL
BACKTRACE_NONE

Attributes

backtrace_level[RW]
disable_profiling[RW]

Public Class Methods

new(env, store, start) click to toggle source
# File lib/mini_profiler/client_settings.rb, line 16
def initialize(env, store, start)
  @request = ::Rack::Request.new(env)
  @cookie = @request.cookies[COOKIE_NAME]
  @store = store
  @start = start
  @backtrace_level = nil
  @orig_disable_profiling = @disable_profiling = nil

  @allowed_tokens, @orig_auth_tokens = nil

  if @cookie
    @cookie.split(",").map { |pair| pair.split("=") }.each do |k, v|
      @orig_disable_profiling = @disable_profiling = (v == 't') if k == "dp"
      @backtrace_level = v.to_i if k == "bt"
      @orig_auth_tokens = v.to_s.split("|") if k == "a"
    end
  end

  if !@backtrace_level.nil? && (@backtrace_level == 0 || @backtrace_level > BACKTRACE_NONE)
    @backtrace_level = nil
  end

  @orig_backtrace_level = @backtrace_level

end

Public Instance Methods

backtrace_default?() click to toggle source
# File lib/mini_profiler/client_settings.rb, line 118
def backtrace_default?
  @backtrace_level == BACKTRACE_DEFAULT
end
backtrace_full?() click to toggle source
# File lib/mini_profiler/client_settings.rb, line 114
def backtrace_full?
  @backtrace_level == BACKTRACE_FULL
end
backtrace_none?() click to toggle source
# File lib/mini_profiler/client_settings.rb, line 122
def backtrace_none?
  @backtrace_level == BACKTRACE_NONE
end
disable_profiling?() click to toggle source
# File lib/mini_profiler/client_settings.rb, line 110
def disable_profiling?
  @disable_profiling
end
write!(headers) click to toggle source
# File lib/mini_profiler/client_settings.rb, line 58
def write!(headers)

  tokens_changed = false

  if MiniProfiler.request_authorized? && MiniProfiler.config.authorization_mode == :allow_authorized
    @allowed_tokens ||= @store.allowed_tokens
    tokens_changed = !@orig_auth_tokens || ((@allowed_tokens - @orig_auth_tokens).length > 0)
  end

  if  @orig_disable_profiling != @disable_profiling ||
      @orig_backtrace_level != @backtrace_level ||
      @cookie.nil? ||
      tokens_changed

    settings = { "p" => "t" }
    settings["dp"] = "t"                  if @disable_profiling
    settings["bt"] = @backtrace_level     if @backtrace_level
    settings["a"] = @allowed_tokens.join("|") if @allowed_tokens && MiniProfiler.request_authorized?
    settings_string = settings.map { |k, v| "#{k}=#{v}" }.join(",")
    cookie = { value: settings_string, path: MiniProfiler.config.cookie_path, httponly: true }
    cookie[:secure] = true if @request.ssl?
    cookie[:same_site] = 'Lax'
    Rack::Utils.set_cookie_header!(headers, COOKIE_NAME, cookie)
  end
end