class Slimer::Web

The Slimer web application on Rack Borrowed from Slidekiq: github.com/mperham/sidekiq/blob/master/lib/sidekiq/web.rb

Attributes

app_url[RW]
session_secret[RW]
sessions[RW]
sessions[W]

Public Class Methods

call(env) click to toggle source
# File lib/slimer/web.rb, line 71
def self.call(env)
  @app ||= new
  @app.call(env)
end
disable(*opts) click to toggle source
# File lib/slimer/web.rb, line 34
def disable(*opts)
  opts.each { |key| set(key, false) }
end
enable(*opts) click to toggle source
# File lib/slimer/web.rb, line 30
def enable(*opts)
  opts.each { |key| set(key, true) }
end
inherited(child) click to toggle source

rubocop:disable Lint/MissingSuper

# File lib/slimer/web.rb, line 47
def self.inherited(child)
  child.app_url = app_url
  child.session_secret = session_secret
  child.redis_pool = redis_pool
  child.sessions = sessions
end
middlewares() click to toggle source
# File lib/slimer/web.rb, line 26
def middlewares
  @middlewares ||= []
end
register(extension) click to toggle source
# File lib/slimer/web.rb, line 106
def self.register(extension)
  extension.registered(WebApplication)
end
set(attribute, value) click to toggle source

Helper for the Sinatra syntax: Slimer::Web.set(:session_secret, Rails.application.secrets…)

# File lib/slimer/web.rb, line 39
def set(attribute, value)
  send(:"#{attribute}=", value)
end
settings() click to toggle source
# File lib/slimer/web.rb, line 22
def settings
  self
end

Public Instance Methods

app() click to toggle source
# File lib/slimer/web.rb, line 76
def app
  @app ||= build
end
call(env) click to toggle source
# File lib/slimer/web.rb, line 67
def call(env)
  app.call(env)
end
disable(*opts) click to toggle source
# File lib/slimer/web.rb, line 84
def disable(*opts)
  opts.each { |key| set(key, false) }
end
enable(*opts) click to toggle source
# File lib/slimer/web.rb, line 80
def enable(*opts)
  opts.each { |key| set(key, true) }
end
middlewares() click to toggle source
# File lib/slimer/web.rb, line 63
def middlewares
  @middlewares ||= Web.middlewares.dup
end
sessions() click to toggle source
# File lib/slimer/web.rb, line 97
def sessions
  unless instance_variable_defined?("@sessions")
    @sessions = self.class.sessions
    @sessions = @sessions.to_hash.dup if @sessions.respond_to?(:to_hash)
  end

  @sessions
end
set(attribute, value) click to toggle source
# File lib/slimer/web.rb, line 88
def set(attribute, value)
  send(:"#{attribute}=", value)
end
settings() click to toggle source

rubocop:enable Lint/MissingSuper

# File lib/slimer/web.rb, line 55
def settings
  self.class.settings
end
use(*middleware_args, &block) click to toggle source
# File lib/slimer/web.rb, line 59
def use(*middleware_args, &block)
  middlewares << [middleware_args, block]
end

Private Instance Methods

build() click to toggle source
# File lib/slimer/web.rb, line 142
def build
  build_sessions

  middlewares = self.middlewares
  klass = self.class

  ::Rack::Builder.new do
    middlewares.each { |middleware, block| use(*middleware, &block) }

    run WebApplication.new(klass)
  end
end
build_sessions() click to toggle source
# File lib/slimer/web.rb, line 118
def build_sessions
  middlewares = self.middlewares

  s = sessions

  # turn on CSRF protection if sessions are enabled and this is not the test env
  middlewares.unshift [[CsrfProtection], nil] if s && !using?(CsrfProtection) && ENV["RACK_ENV"] != "test"

  configure_cookie_middleware if s && !using?(::Rack::Session::Cookie)
  middlewares.unshift [[::Rack::ContentLength], nil] unless using? ::Rack::ContentLength
end
using?(middleware) click to toggle source
# File lib/slimer/web.rb, line 112
def using?(middleware)
  middlewares.any? do |(m, _)|
    m.is_a?(Array) && (m[0] == middleware || m[0].is_a?(middleware))
  end
end