Class: Textus::Hooks::RpcRegistry
- Inherits:
-
Object
- Object
- Textus::Hooks::RpcRegistry
- Defined in:
- lib/textus/hooks/rpc_registry.rb
Instance Method Summary collapse
- #callable(event, name) ⇒ Object
-
#initialize ⇒ RpcRegistry
constructor
A new instance of RpcRegistry.
-
#invoke(event, name, caps:, **other) ⇒ Object
Invoke a registered callable, injecting ‘caps:` only if the callable declares it (or accepts keyrest).
- #names(event) ⇒ Object
- #register(event, name, &blk) ⇒ Object
Constructor Details
#initialize ⇒ RpcRegistry
Returns a new instance of RpcRegistry.
6 7 8 |
# File 'lib/textus/hooks/rpc_registry.rb', line 6 def initialize @table = Hash.new { |h, k| h[k] = {} } end |
Instance Method Details
#callable(event, name) ⇒ Object
27 28 29 |
# File 'lib/textus/hooks/rpc_registry.rb', line 27 def callable(event, name) @table[event.to_sym][name.to_sym] or raise UsageError.new("unknown #{event}: #{name}") end |
#invoke(event, name, caps:, **other) ⇒ Object
Invoke a registered callable, injecting ‘caps:` only if the callable declares it (or accepts keyrest). Mis-named kwargs (e.g. the legacy `store:`) are rejected at registration time, not here.
34 35 36 37 38 39 40 |
# File 'lib/textus/hooks/rpc_registry.rb', line 34 def invoke(event, name, caps:, **other) blk = callable(event, name) sig = Signature.new(blk) kwargs = other.dup kwargs[:caps] = caps if sig.accepts_keyrest? || sig.declared_keys.include?(:caps) blk.call(**kwargs) end |
#names(event) ⇒ Object
25 |
# File 'lib/textus/hooks/rpc_registry.rb', line 25 def names(event) = @table[event.to_sym].keys |
#register(event, name, &blk) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/textus/hooks/rpc_registry.rb', line 10 def register(event, name, &blk) event_sym = event.to_sym raise UsageError.new("#{event_sym} is a pubsub event; register on EventBus") if Catalog::PUBSUB.key?(event_sym) required = Catalog::RPC[event_sym] or raise UsageError.new("unknown RPC event: #{event}") sig = Signature.new(blk) missing = sig.missing(required) raise UsageError.new("#{event_sym} RPC must accept kwargs: #{required.join(", ")} (missing: #{missing.join(", ")})") if missing.any? name = name.to_sym raise UsageError.new("#{event_sym} '#{name}' already registered") if @table[event_sym].key?(name) @table[event_sym][name] = blk end |