class Sidekiq::Web
Constants
- ASSETS
- CONTENT_LANGUAGE
- CONTENT_SECURITY_POLICY
- DEFAULT_TABS
- LAYOUT
- LOCALES
- LOCATION
- ROOT
- VIEWS
- X_CASCADE
- X_CONTENT_TYPE_OPTIONS
Attributes
Public Class Methods
# File lib/sidekiq/web.rb, line 124 def self.call(env) @app ||= new @app.call(env) end
# File lib/sidekiq/web.rb, line 66 def custom_job_info_rows @custom_job_info_rows ||= [] end
# File lib/sidekiq/web.rb, line 61 def custom_tabs @custom_tabs ||= {} end
# File lib/sidekiq/web.rb, line 57 def default_tabs DEFAULT_TABS end
# File lib/sidekiq/web.rb, line 82 def disable(*opts) opts.each { |key| set(key, false) } end
# File lib/sidekiq/web.rb, line 78 def enable(*opts) opts.each { |key| set(key, true) } end
# File lib/sidekiq/web.rb, line 102 def self.inherited(child) child.app_url = app_url child.redis_pool = redis_pool end
# File lib/sidekiq/web.rb, line 70 def locales @locales ||= LOCALES end
# File lib/sidekiq/web.rb, line 86 def middlewares @middlewares ||= [] end
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
# File lib/sidekiq/web.rb, line 94 def set(attribute, value) send(:"#{attribute}=", value) end
# File lib/sidekiq/web.rb, line 53 def settings self end
# File lib/sidekiq/web.rb, line 90 def use(*args, &block) middlewares << [args, block] end
# File lib/sidekiq/web.rb, line 74 def views @views ||= VIEWS end
Public Instance Methods
# File lib/sidekiq/web.rb, line 129 def app @app ||= build end
# File lib/sidekiq/web.rb, line 119 def call(env) env[:csp_nonce] = SecureRandom.base64(16) app.call(env) end
# File lib/sidekiq/web.rb, line 137 def disable(*opts) opts.each { |key| set(key, false) } end
# File lib/sidekiq/web.rb, line 133 def enable(*opts) opts.each { |key| set(key, true) } end
# File lib/sidekiq/web.rb, line 111 def middlewares @middlewares ||= self.class.middlewares end
# File lib/sidekiq/web.rb, line 141 def set(attribute, value) send(:"#{attribute}=", value) end
# File lib/sidekiq/web.rb, line 107 def settings self.class.settings end
# File lib/sidekiq/web.rb, line 115 def use(*args, &block) middlewares << [args, block] end
Private Instance Methods
# 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