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 status, headers, body = app.call(env) headers['Set-Cookie'] = cookie(alt) if alt [status, headers, body] end private def cookie(alt) "alt=#{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