Class: Hecks::Router
- Inherits:
-
Object
show all
- Defined in:
- lib/hecks/router.rb,
lib/hecks/router/namespace_installer.rb
Overview
The public, project-wide dispatch door. It owns address resolution only;
each discovered Bluebook keeps its own runtime and persistence bindings.
Defined Under Namespace
Classes: AmbiguousShortRoute, NamespaceInstaller, NotBooted, UnknownAddress, WrongVerbKind
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(register) ⇒ Router
Returns a new instance of Router.
29
30
31
|
# File 'lib/hecks/router.rb', line 29
def initialize(register)
@register = register
end
|
Instance Attribute Details
#register ⇒ Object
Returns the value of attribute register.
10
11
12
|
# File 'lib/hecks/router.rb', line 10
def register
@register
end
|
Class Method Details
.boot(root) ⇒ Object
Install one project router for ordinary application calls. The explicit
Router.load API remains useful for tests and embedded hosts.
16
17
18
19
20
|
# File 'lib/hecks/router.rb', line 16
def self.boot(root)
router = load(root)
router.install_namespace!
@default = router
end
|
.default ⇒ Object
22
23
24
|
# File 'lib/hecks/router.rb', line 22
def self.default
@default || raise(NotBooted, "no project router is booted — call Hecks::Router.boot(root) first")
end
|
.dispatch(address, **args) ⇒ Object
26
|
# File 'lib/hecks/router.rb', line 26
def self.dispatch(address, **args) = default.dispatch(address, **args)
|
.query(address, **args) ⇒ Object
27
|
# File 'lib/hecks/router.rb', line 27
def self.query(address, **args) = default.query(address, **args)
|
Instance Method Details
#available ⇒ Object
33
|
# File 'lib/hecks/router.rb', line 33
def available = register.entries.values
|
#dispatch(address, **args) ⇒ Object
46
47
48
49
50
51
|
# File 'lib/hecks/router.rb', line 46
def dispatch(address, **args)
entry = resolve(address)
raise WrongVerbKind, "#{address.inspect} names a query; use #query" unless entry.command?
entry.dispatcher.dispatch(local_verb(entry), **args)
end
|
#install_namespace! ⇒ Object
#query(address, **args) ⇒ Object
53
54
55
56
57
58
|
# File 'lib/hecks/router.rb', line 53
def query(address, **args)
entry = resolve(address)
raise WrongVerbKind, "#{address.inspect} names a command; use #dispatch" unless entry.query?
entry.dispatcher.query(local_verb(entry), **args)
end
|
#resolve(address) ⇒ Object
37
38
39
40
41
42
43
44
|
# File 'lib/hecks/router.rb', line 37
def resolve(address)
fqn = Fqn.parse(address)
raise UnknownAddress, "router addresses require a realm: #{address.inspect}" unless fqn.realm
register.fetch(fqn.to_s)
rescue KeyError
raise UnknownAddress, "no Bluebook route for #{address.inspect}"
end
|