class Sidekiq::Web

Constants

ASSETS
CONTENT_LANGUAGE
CONTENT_SECURITY_POLICY
DEFAULT_TABS
LAYOUT
LOCALES
LOCATION
ROOT
VIEWS
X_CASCADE
X_CONTENT_TYPE_OPTIONS

Attributes

app_url[RW]
locales[W]
redis_pool[RW]
views[W]

Public Class Methods

call(env) click to toggle source
# File lib/sidekiq/web.rb, line 124
def self.call(env)
  @app ||= new
  @app.call(env)
end
custom_job_info_rows() click to toggle source
# File lib/sidekiq/web.rb, line 66
def custom_job_info_rows
  @custom_job_info_rows ||= []
end
custom_tabs() click to toggle source
# File lib/sidekiq/web.rb, line 61
def custom_tabs
  @custom_tabs ||= {}
end
Also aliased as: tabs
default_tabs() click to toggle source
# File lib/sidekiq/web.rb, line 57
def default_tabs
  DEFAULT_TABS
end
disable(*opts) click to toggle source
# File lib/sidekiq/web.rb, line 82
def disable(*opts)
  opts.each { |key| set(key, false) }
end
enable(*opts) click to toggle source
# File lib/sidekiq/web.rb, line 78
def enable(*opts)
  opts.each { |key| set(key, true) }
end
inherited(child) click to toggle source
# File lib/sidekiq/web.rb, line 102
def self.inherited(child)
  child.app_url = app_url
  child.redis_pool = redis_pool
end
locales() click to toggle source
# File lib/sidekiq/web.rb, line 70
def locales
  @locales ||= LOCALES
end
middlewares() click to toggle source
# File lib/sidekiq/web.rb, line 86
def middlewares
  @middlewares ||= []
end
register(extension, name: nil, tab: nil, index: nil, root_dir: nil, cache_for: 86400, asset_paths: nil) { |self| ... } click to toggle source

Register a class as a Sidekiq Web UI extension. The class should provide one or more tabs which map to an index route. Options:

@param extension [Class] Class which contains the HTTP actions, required @param name [String] the name of the extension, used to namespace assets @param tab [String | Array] labels(s) of the UI tabs @param index [String | Array] index route(s) for each tab @param root_dir [String] directory location to find assets, locales and views, typically ‘web/` within the gemfile @param asset_paths [Array] one or more directories under {root}/assets/{name} to be publicly served, e.g. [“js”, “css”, “img”] @param cache_for [Integer] amount of time to cache assets, default one day

TODO name, tab and index will be mandatory in 8.0

Web extensions will have a root ‘web/` directory with `locales/`, `assets/` and `views/` subdirectories.

# File lib/sidekiq/web.rb, line 160
def self.register(extension, name: nil, tab: nil, index: nil, root_dir: nil, cache_for: 86400, asset_paths: nil)
  tab = Array(tab)
  index = Array(index)
  tab.zip(index).each do |tab, index|
    tabs[tab] = index
  end
  if root_dir
    locdir = File.join(root_dir, "locales")
    locales << locdir if File.directory?(locdir)

    if asset_paths && name
      # if you have {root}/assets/{name}/js/scripts.js
      # and {root}/assets/{name}/css/styles.css
      # you would pass in:
      #   asset_paths: ["js", "css"]
      # See script_tag and style_tag in web/helpers.rb
      assdir = File.join(root_dir, "assets")
      assurls = Array(asset_paths).map { |x| "/#{name}/#{x}" }
      assetprops = {
        urls: assurls,
        root: assdir,
        cascade: true
      }
      assetprops[:header_rules] = [[:all, {Rack::CACHE_CONTROL => "private, max-age=#{cache_for.to_i}"}]] if cache_for
      middlewares << [[Rack::Static, assetprops], nil]
    end
  end

  yield self if block_given?
  extension.registered(WebApplication)
end
set(attribute, value) click to toggle source
# File lib/sidekiq/web.rb, line 94
def set(attribute, value)
  send(:"#{attribute}=", value)
end
settings() click to toggle source
# File lib/sidekiq/web.rb, line 53
def settings
  self
end
tabs()
Alias for: custom_tabs
use(*args, &block) click to toggle source
# File lib/sidekiq/web.rb, line 90
def use(*args, &block)
  middlewares << [args, block]
end
views() click to toggle source
# File lib/sidekiq/web.rb, line 74
def views
  @views ||= VIEWS
end

Public Instance Methods

app() click to toggle source
# File lib/sidekiq/web.rb, line 129
def app
  @app ||= build
end
call(env) click to toggle source
# File lib/sidekiq/web.rb, line 119
def call(env)
  env[:csp_nonce] = SecureRandom.base64(16)
  app.call(env)
end
disable(*opts) click to toggle source
# File lib/sidekiq/web.rb, line 137
def disable(*opts)
  opts.each { |key| set(key, false) }
end
enable(*opts) click to toggle source
# File lib/sidekiq/web.rb, line 133
def enable(*opts)
  opts.each { |key| set(key, true) }
end
middlewares() click to toggle source
# File lib/sidekiq/web.rb, line 111
def middlewares
  @middlewares ||= self.class.middlewares
end
set(attribute, value) click to toggle source
# File lib/sidekiq/web.rb, line 141
def set(attribute, value)
  send(:"#{attribute}=", value)
end
settings() click to toggle source
# File lib/sidekiq/web.rb, line 107
def settings
  self.class.settings
end
use(*args, &block) click to toggle source
# File lib/sidekiq/web.rb, line 115
def use(*args, &block)
  middlewares << [args, block]
end

Private Instance Methods

build() click to toggle source
# File lib/sidekiq/web.rb, line 194
def build
  klass = self.class
  m = middlewares

  rules = []
  rules = [[:all, {Rack::CACHE_CONTROL => "private, max-age=86400"}]] unless ENV["SIDEKIQ_WEB_TESTING"]

  ::Rack::Builder.new do
    use Rack::Static, urls: ["/stylesheets", "/images", "/javascripts"],
      root: ASSETS,
      cascade: true,
      header_rules: rules
    m.each { |middleware, block| use(*middleware, &block) }
    use Sidekiq::Web::CsrfProtection unless $TESTING
    run WebApplication.new(klass)
  end
end