Class: Instrumentable::Instrumentality

Inherits:
Object
  • Object
show all
Defined in:
lib/instrumentable.rb

Class Method Summary collapse

Class Method Details

.begin(klass, method, event, payload) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/instrumentable.rb', line 73

def self.begin(klass, method, event, payload)
  instrumentality = self
  instrumented_method = :"_instrument_for_#{method}"
  klass.send :alias_method, instrumented_method, method

  klass.send(:define_method, method) do |*args, &block|
    event_payload = payload.inject({}) do |result, (payload_key, payload_value)|
      value = instrumentality.invoke_value(self, payload_value)
      result.tap { |r| r[payload_key] = value }
    end
    event_payload.merge!({:_method_args => args})
    ActiveSupport::Notifications.instrument event, event_payload do
      __send__(instrumented_method, *args, &block)
    end
  end
end

.invoke_value(klass, obj) ⇒ Object



90
91
92
93
94
95
96
97
98
99
# File 'lib/instrumentable.rb', line 90

def self.invoke_value(klass, obj)
  case obj
  when Symbol
    klass.__send__ obj
  when Proc
    obj.call
  when String
    obj
  end
end