class Slimer::WebApplication

Defines routes and responses for the Slimer web app.

Constants

CONTENT_LENGTH
CSP_HEADER
REDIS_KEYS

Public Class Methods

helpers(mod = nil, &block) click to toggle source
# File lib/slimer/web/application.rb, line 111
def self.helpers(mod = nil, &block)
  if block
    WebAction.class_eval(&block)
  else
    WebAction.send(:include, mod)
  end
end
new(klass) click to toggle source
# File lib/slimer/web/application.rb, line 26
def initialize(klass)
  @klass = klass
end
settings() click to toggle source
# File lib/slimer/web/application.rb, line 34
def self.settings
  Slimer::Web.settings
end

Public Instance Methods

call(env) click to toggle source
# File lib/slimer/web/application.rb, line 86
def call(env)
  action = self.class.match(env)
  return [404, { "Content-Type" => "text/plain", "X-Cascade" => "pass" }, ["Not Found"]] unless action

  resp = catch(:halt) do
    action.instance_exec env, &action.block
  end

  resolve_response(resp)
end
resolve_response(resp) click to toggle source
# File lib/slimer/web/application.rb, line 97
def resolve_response(resp)
  return resp if resp.is_a?(Array)

  # rendered content goes here
  headers = {
    "Content-Type" => "text/html",
    "Cache-Control" => "no-cache",
    "Content-Language" => "en",
    "Content-Security-Policy" => CSP_HEADER
  }
  # we'll let Rack calculate Content-Length for us.
  [200, headers, [resp]]
end
root_path() click to toggle source
# File lib/slimer/web/application.rb, line 38
def root_path
  "#{env["SCRIPT_NAME"]}/"
end
settings() click to toggle source
# File lib/slimer/web/application.rb, line 30
def settings
  @klass.settings
end