1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
# frozen_string_literal: true
# Released under the MIT License.
# Copyright, 2021-2022, by Samuel Williams.
require_relative 'backend'
module Traces
# @returns [Boolean] Whether there is an active backend.
def self.enabled?
self.const_defined?(:Backend)
end
module Provider
end
module Singleton
# A module which contains tracing specific wrappers.
def traces_provider
@traces_provider ||= Module.new
end
end
private_constant :Singleton
# Bail out if there is no backend configured.
if self.enabled?
# Extend the specified class in order to emit traces.
def self.Provider(klass, &block)
klass.extend(Singleton)
provider = klass.traces_provider
provider.prepend(Backend::Interface)
klass.prepend(provider)
provider.module_exec(&block) if block_given?
return provider
end
else
def self.Provider(klass, &block)
# Tracing disabled.
end
end
end
|