Sha256: 69ac7a2ca43032d7a6a28c92fc58730c8589a9319963d409ed743b026fa733d5
Contents?: true
Size: 1.8 KB
Versions: 23
Compression:
Stored size: 1.8 KB
Contents
# frozen_string_literal: true # Originally from: # https://github.com/rkh/mustermann/blob/500a603fffe0594ab842d72addcc449eedd6d5be/mustermann/lib/mustermann/router/rack.rb # Copied here after its removal from Mustermann proper require 'praxis/router/simple' module Mustermann module Router # Simple pattern based router that allows matching paths to a given Rack application. # # @example config.ru # router = Mustermann::Rack.new do # on '/' do |env| # [200, {'Content-Type' => 'text/plain'}, ['Hello World!']] # end # # on '/:name' do |env| # name = env['mustermann.params']['name'] # [200, {'Content-Type' => 'text/plain'}, ["Hello #{name}!"]] # end # # on '/something/*', call: SomeApp # end # # # in a config.ru # run router class Rack < Simple def initialize(env_prefix: 'mustermann', params_key: "#{env_prefix}.params", pattern_key: "#{env_prefix}.pattern", **options, &block) @params_key = params_key @pattern_key = pattern_key options[:default] = [404, { 'Content-Type' => 'text/plain', 'X-Cascade' => 'pass' }, ['Not Found']] unless options.include? :default super(**options, &block) end def invoke(callback, env, params, pattern) params_was = env[@params_key] pattern_was = env[@pattern_key] env[@params_key] = params env[@pattern_key] = pattern response = callback.call(env) response[1].each { |k, v| throw :pass if (k.downcase == 'x-cascade') && (v == 'pass') } response ensure env[@params_key] = params_was env[@pattern_key] = pattern_was end def string_for(env) env['PATH_INFO'] end private :invoke, :string_for end end end
Version data entries
23 entries across 23 versions & 1 rubygems
Version | Path |
---|---|
praxis-2.0.pre.21 | lib/praxis/router/rack.rb |
praxis-2.0.pre.20 | lib/praxis/router/rack.rb |
praxis-2.0.pre.19 | lib/praxis/router/rack.rb |