Sha256: 0d51da6105255b3e341e43352363bc4087745a57506ff8b1649554c7d345db7c

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

# frozen_string_literal: true

require_relative './method_proxy'
require_relative './context'

module InstrumentAllTheThings
  module Helpers
    module ClassMethods
      def instrument(**kwargs)
        @last_settings = kwargs
      end

      def _conscript_last_iatt_settings
        @last_settings.tap { @last_settings = nil }
      end

      def singleton_method_added(method_name)
        settings = _conscript_last_iatt_settings

        return unless settings

        settings[:context] = Context.new(
          method_name: method_name,
          instance: false
        )

        InstrumentAllTheThings::MethodProxy
          .for_class(singleton_class)
          .wrap_implementation(method_name, settings)
        super
      end

      def method_added(method_name)
        settings = _conscript_last_iatt_settings

        return unless settings

        settings[:context] = Context.new(
          method_name: method_name,
          instance: true
        )

        InstrumentAllTheThings::MethodProxy
          .for_class(self)
          .wrap_implementation(method_name, settings)

        super
      end
    end

    def self.included(other_class)
      other_class.extend(ClassMethods)

      InstrumentAllTheThings::MethodProxy.for_class(other_class)
      InstrumentAllTheThings::MethodProxy.for_class(other_class.singleton_class)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
instrument_all_the_things-1.2.0 lib/instrument_all_the_things/helpers.rb
instrument_all_the_things-1.1.1 lib/instrument_all_the_things/helpers.rb