Class: Sidekiq::WebApplication

Inherits:
Object
  • Object
show all
Extended by:
WebRouter
Defined in:
lib/sidekiq/web/application.rb

Constant Summary collapse

CONTENT_LENGTH =
"Content-Length".freeze
CONTENT_TYPE =
"Content-Type".freeze
REDIS_KEYS =
%w(redis_version uptime_in_days connected_clients used_memory_human used_memory_peak_human)

Constants included from WebRouter

Sidekiq::WebRouter::DELETE, Sidekiq::WebRouter::GET, Sidekiq::WebRouter::HEAD, Sidekiq::WebRouter::PATCH, Sidekiq::WebRouter::PATH_INFO, Sidekiq::WebRouter::POST, Sidekiq::WebRouter::PUT, Sidekiq::WebRouter::REQUEST_METHOD, Sidekiq::WebRouter::ROUTE_PARAMS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from WebRouter

delete, get, match, patch, post, put, route

Constructor Details

#initialize(klass) ⇒ WebApplication

Returns a new instance of WebApplication.



11
12
13
# File 'lib/sidekiq/web/application.rb', line 11

def initialize(klass)
  @klass = klass
end

Class Method Details

.after(path = nil, &block) ⇒ Object



311
312
313
# File 'lib/sidekiq/web/application.rb', line 311

def self.after(path=nil, &block)
  afters << [path && Regexp.new("\\A#{path.gsub("*", ".*")}\\z"), block]
end

.aftersObject



332
333
334
# File 'lib/sidekiq/web/application.rb', line 332

def self.afters
  @afters ||= []
end

.before(path = nil, &block) ⇒ Object



307
308
309
# File 'lib/sidekiq/web/application.rb', line 307

def self.before(path=nil, &block)
  befores << [path && Regexp.new("\\A#{path.gsub("*", ".*")}\\z"), block]
end

.beforesObject



328
329
330
# File 'lib/sidekiq/web/application.rb', line 328

def self.befores
  @befores ||= []
end

.helpers(mod = nil, &block) ⇒ Object



299
300
301
302
303
304
305
# File 'lib/sidekiq/web/application.rb', line 299

def self.helpers(mod=nil, &block)
  if block_given?
    WebAction.class_eval(&block)
  else
    WebAction.send(:include, mod)
  end
end

.run_afters(app, action) ⇒ Object



319
320
321
# File 'lib/sidekiq/web/application.rb', line 319

def self.run_afters(app, action)
  run_hooks(afters, app, action)
end

.run_befores(app, action) ⇒ Object



315
316
317
# File 'lib/sidekiq/web/application.rb', line 315

def self.run_befores(app, action)
  run_hooks(befores, app, action)
end

.run_hooks(hooks, app, action) ⇒ Object



323
324
325
326
# File 'lib/sidekiq/web/application.rb', line 323

def self.run_hooks(hooks, app, action)
  hooks.select { |p,_| !p || p =~ action.env[WebRouter::PATH_INFO] }.
        each {|_,b| action.instance_exec(action.env, app, &b) }
end

.set(key, val) ⇒ Object



27
28
29
# File 'lib/sidekiq/web/application.rb', line 27

def self.set(key, val)
  # nothing, backwards compatibility
end

.settingsObject



19
20
21
# File 'lib/sidekiq/web/application.rb', line 19

def self.settings
  Sidekiq::Web.settings
end

.tabsObject



23
24
25
# File 'lib/sidekiq/web/application.rb', line 23

def self.tabs
  Sidekiq::Web.tabs
end

Instance Method Details

#call(env) ⇒ Object



258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
# File 'lib/sidekiq/web/application.rb', line 258

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
    app = @klass
    self.class.run_befores(app, action)
    begin
      resp = action.instance_exec env, &action.block
    ensure
      self.class.run_afters(app, action)
    end

    resp
  end

  resp = case resp
  when Array
    resp
  when Integer
    [resp, {}, []]
  else
    type_header = case action.type
    when :json
      { "Content-Type" => "application/json", "Cache-Control" => "no-cache" }
    when String
      { "Content-Type" => (action.type || "text/html"), "Cache-Control" => "no-cache" }
    else
      { "Content-Type" => "text/html", "Cache-Control" => "no-cache" }
    end

    [200, type_header, [resp]]
  end

  resp[1] = resp[1].dup

  resp[1][CONTENT_LENGTH] = resp[2].inject(0) { |l, p| l + p.bytesize }.to_s

  resp
end

#settingsObject



15
16
17
# File 'lib/sidekiq/web/application.rb', line 15

def settings
  @klass.settings
end