module Pretzel::Routing::Evaluation

Public Class Methods

included(parent) click to toggle source
# File lib/pretzel/routing/eval.rb, line 5
def self.included(parent)
  parent.extend ClassMethods
end

Private Instance Methods

evaluate_route() click to toggle source
# File lib/pretzel/routing/eval.rb, line 28
def evaluate_route
  catch(:halt) do
    method = request.request_method.downcase.to_sym

    self.class.routes[method].each do |route, block|
      if match = request.path_info.match(route[0])
        if (captures = match.captures) && !captures.empty?
          url_params = Hash[*route[1].zip(captures).flatten]
          @parameters = url_params.merge(parameters)
        end

        self.class.filters[:before].each { |filter| instance_exec(&filter) } if self.class.filters[:before]
        response.write instance_eval(&block)
        self.class.filters[:after].each { |filter| instance_exec(&filter) } if self.class.filters[:after]
        
        return
      end
    end
    
    halt 404
  end
end