module Pendragon

Constants

DEFAULT_TYPE

Type to use if no type is given. @api private

VERSION

Public Class Methods

[](name) click to toggle source

Returns router by given name.

@example

Pendragon[:realism] #=> Pendragon::Realism

@param [Symbol] name a router type identifier @raise [ArgumentError] if the name is not supported @return [Class, new]

# File lib/pendragon.rb, line 40
def self.[](name)
  @types.fetch(normalized = normalize_type(name)) do
    @mutex.synchronize do
      error = try_require "pendragon/#{normalized}"
      @types.fetch(normalized) do
        fail ArgumentError,
          "unsupported type %p #{ " (#{error.message})" if error }" % name
      end
    end
  end
end
new(type: DEFAULT_TYPE, &block) click to toggle source

Creates a new router.

@example creating new routes.

require 'pendragon'

 Pendragon.new do
   get('/') { [200, {}, ['hello world']] }
   namespace :users do
     get('/',    to: ->(env) { [200, {}, ['User page index']] })
     get('/:id', to: UserApplication.new)
   end
 end

@yield block for definig routes, it will be evaluated in instance context. @yieldreturn [Pendragon::Router]

# File lib/pendragon.rb, line 24
def self.new(type: DEFAULT_TYPE, &block)
  type ||= DEFAULT_TYPE
  self[type].new(&block)
end
normalize_type(type) click to toggle source

@!visibility private

# File lib/pendragon.rb, line 68
def self.normalize_type(type)
  type.to_s.gsub('-', '_').downcase
end
register(name, type) click to toggle source

@!visibility private

# File lib/pendragon.rb, line 63
def self.register(name, type)
  @types[normalize_type(name)] = type
end
try_require(path) click to toggle source

@return [LoadError, nil] @!visibility private

# File lib/pendragon.rb, line 54
def self.try_require(path)
  require(path)
  nil
rescue LoadError => error
  raise(error) unless error.path == path
  error
end