Sha256: b323824782da35acb2ad7cf82192ac89acc73a546ad2a60c4c56abd68697413a
Contents?: true
Size: 786 Bytes
Versions: 1
Compression:
Stored size: 786 Bytes
Contents
require "uri" class Browser class Middleware def initialize(app, &block) raise ArgumentError, "Browser::Middleware requires a block" unless block @app = app @block = block end def call(env) request = Rack::Request.new(env) path = catch(:redirected) do Context.new(request).instance_eval(&@block) end path ? resolve_redirection(request.path, path) : run_app(env) end def resolve_redirection(current_path, path) uri = URI.parse(path) if uri.path == current_path run_app(env) else redirect(path) end end def redirect(path) [302, {"Content-Type" => "text/html", "Location" => path}, []] end def run_app(env) @app.call(env) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
browser-0.3.0 | lib/browser/middleware.rb |