Sha256: a079977b4de3635d90a924cc6044b0aa529381c09836ca262c607f35ed392cc7

Contents?: true

Size: 904 Bytes

Versions: 1

Compression:

Stored size: 904 Bytes

Contents

module Crystal
  class Router
    scope :application
    
    attr_reader :routes

    def initialize
      @routes = []
      add 0 do |request|
        class_path, method = request.path.split '.'
        if class_path.strip != '/'
          class_name = class_path.camelize
          begin
            klass = class_name.constantize
            [klass, method]
          rescue NameError
          end
        end
      end
    end

    def add priority = 1, &block
      routes[priority] ||= []
      block.must_not_be.nil
      routes[priority] << block
    end
    
    def select_class request
      routes.reverse_each do |current_level_routes|
        next unless current_level_routes
        current_level_routes.each do |route|
          result = route.call request
          return result if result 
        end
      end
      raise "No route for '#{request.path}' request!"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crystal-0.0.10 lib/crystal/core/router.rb