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