Sha256: 33d3fdb153533f546ba68f6eadd49687d1ec754dc2ce95172ad1ce38a9e21120
Contents?: true
Size: 1.04 KB
Versions: 2
Compression:
Stored size: 1.04 KB
Contents
module NYNY class Router attr_reader :fallback, :routes, :before_hooks, :after_hooks def initialize options @fallback = options[:fallback] @routes = options[:routes] @before_hooks = options[:before_hooks] @after_hooks = options[:after_hooks] end def call env env['PATH_INFO'] = '/' if env['PATH_INFO'].empty? route = routes.find {|route| route.match? env } if route process route, env else fallback.call env end end def process route, env request = Request.new(env) request.params.merge! route.url_params(env) request.params.default_proc = proc {|h,k| h[k.to_s] || h[k.to_sym]} eval_response RequestScope.new(request), route.handler end def eval_response scope, handler response = catch (:halt) do before_hooks.each {|h| scope.instance_eval &h } scope.apply_to &handler end catch (:halt) do after_hooks.each {|h| scope.instance_eval &h } end response end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
nyny-2.2.1 | lib/nyny/router.rb |
nyny-2.1.1 | lib/nyny/router.rb |