lib/yoda/instrument.rb in yoda-language-server-0.7.2 vs lib/yoda/instrument.rb in yoda-language-server-0.8.0

- old
+ new

@@ -1,6 +1,7 @@ require 'concurrent' +require 'forwardable' module Yoda class Instrument class Subscription # @return [Instrument] @@ -23,12 +24,12 @@ def unsubscribe instrument.unsubscribe(self) end - def call(params) - callback.call(params) + def call(*params, **kwargs) + callback.call(*params, **kwargs) end end class Progress # @return [Integer] @@ -58,16 +59,24 @@ # @return [Array<Subscription>] attr_reader :subscriptions class << self + extend Forwardable + + delegate %i(hear subscribe emit unsubscribe) => :instance + # Returns Instrument instance (thread local). # @return [Instrument] def instance local.value end + def clean + local.value = Instrument.new + end + private # @return [Concurrent::ThreadLocalVar<Instrument>] def local @local ||= Concurrent::ThreadLocalVar.new { Instrument.new } @@ -93,13 +102,13 @@ def subscribe(name, &callback) Subscription.new(instrument: self, name: name, callback: callback).tap { |subscription| subscriptions.push(subscription) } end # @param name [String] - # @param [String] - def emit(name, params) + # @param params [Hash] + def emit(name, **params) Logger.trace("#{name}: #{params}") - subscriptions.select { |subscription| subscription.name === name }.each { |subscription| subscription.call(params) } + subscriptions.select { |subscription| subscription.name === name }.each { |subscription| subscription.call(**params) } end # @param subscription [Subscription] def unsubscribe(subscription) subscriptions.delete(subscription)