class Travis::Web::App::AltVersions attr_reader :app def initialize(app) @app = app end def call(env) alt = alt_from_params(env) || alt_from_cookie(env) env['travis.alt'] = alt if alt && alt != 'default' status, headers, body = app.call(env) headers['Set-Cookie'] = cookie(alt) if alt [status, headers, body] end private def cookie(alt) "alt=#{alt == 'default' ? '' : alt}; path=/; max-age=#{alt == 'default' ? 0 : 86400}" end def alt_from_params(env) $1 if env['QUERY_STRING'] =~ /alt=([^&]+)/ end def alt_from_cookie(env) $1 if env['HTTP_COOKIE'] =~ /alt=([^;]+)/ end end