Sha256: b2766e7ee8e638c9e9de11c765a9ec1f02978388d5fec253ecda118636d39fe5
Contents?: true
Size: 1.3 KB
Versions: 5
Compression:
Stored size: 1.3 KB
Contents
require 'delegate' module Dry module System module Plugins module Monitoring # @api private class Proxy < SimpleDelegator # @api private def self.for(target, key:, methods: [], &block) monitored_methods = if methods.empty? target.public_methods - Object.public_instance_methods else methods end Class.new(self) do extend Dry::Core::ClassAttributes include Dry::Events::Publisher[target.class.name] defines :monitored_methods attr_reader :__notifications__ monitored_methods(monitored_methods) monitored_methods.each do |meth| define_method(meth) do |*args, &block| object = __getobj__ opts = { target: key, object: object, method: meth, args: args } __notifications__.instrument(:monitoring, opts) do object.public_send(meth, *args, &block) end end end end end def initialize(target, notifications) super(target) @__notifications__ = notifications end end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems