class Protein::Router
Public Class Methods
define(router)
click to toggle source
# File lib/protein/router.rb, line 4 def define(router) if router.is_a?(Class) || router.is_a?(String) router elsif router.is_a?(Hash) router_class = Class.new(Router) router_class.from_hash(router) router_class else raise(DefinitionError, "invalid router definition") end end
from_hash(hash)
click to toggle source
# File lib/protein/router.rb, line 16 def from_hash(hash) if hash[:services] hash[:services].each do |each_service| service(each_service) end end if hash[:protos] hash[:protos].each do |each_proto| service_class = Class.new(Service) service_class.proto(each_proto) service(service_class) end end end
resolve_by_name(service_name)
click to toggle source
# File lib/protein/router.rb, line 42 def resolve_by_name(service_name) services.find do |service| service.service_name == service_name.to_s end || raise(RoutingError, "service #{service_name.inspect} not found") end
resolve_by_request(request)
click to toggle source
# File lib/protein/router.rb, line 48 def resolve_by_request(request) services.find do |service| request.is_a?(service.request_class) end || raise(RoutingError, "service for #{request.class} not found") end
service(service_class)
click to toggle source
# File lib/protein/router.rb, line 33 def service(service_class) @services ||= [] @services << service_class end
services()
click to toggle source
# File lib/protein/router.rb, line 38 def services GetConst.map(@services || []) end