Sha256: 3ec5ac194f907d72aaa6954a40f1268472fa7164ab312eb2cc3409cab43d7482

Contents?: true

Size: 1.32 KB

Versions: 26

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

require "delegate"

module Dry
  module System
    module Plugins
      module Monitoring
        # @api private
        class Proxy < SimpleDelegator
          # @api private
          def self.for(target, key:, methods: [])
            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

26 entries across 26 versions & 1 rubygems

Version Path
dry-system-1.2.2 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.2.1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.2.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.1.1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.1.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.1.0.beta2 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.1.0.beta1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.0.1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.0.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-1.0.0.rc1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.27.2 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.27.1 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.27.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.26.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.25.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.24.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.23.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.22.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.21.0 lib/dry/system/plugins/monitoring/proxy.rb
dry-system-0.20.0 lib/dry/system/plugins/monitoring/proxy.rb