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)