class Gitlab::Experiment::Middleware

Public Class Methods

new(app, base_path) click to toggle source
# File lib/gitlab/experiment/middleware.rb, line 13
def initialize(app, base_path)
  @app = app
  @matcher = %r{^#{base_path}/(?<id>.+)}
end
redirect(id, url) click to toggle source
# File lib/gitlab/experiment/middleware.rb, line 6
def self.redirect(id, url)
  raise Error, 'no url to redirect to' if url.blank?

  experiment = Gitlab::Experiment.from_param(id)
  [303, { 'Location' => experiment.process_redirect_url(url) || raise(Error, 'not redirecting') }, []]
end

Public Instance Methods

call(env) click to toggle source
# File lib/gitlab/experiment/middleware.rb, line 18
def call(env)
  return @app.call(env) if env['REQUEST_METHOD'] != 'GET' || (match = @matcher.match(env['PATH_INFO'])).nil?

  Middleware.redirect(match[:id], env['QUERY_STRING'])
rescue Error
  @app.call(env)
end