Module: Koa::Measurement::ClassMethods

Defined in:
lib/koa/measurement.rb

Instance Method Summary collapse

Instance Method Details

#measure_methods(*args) ⇒ Object



16
17
18
19
20
21
# File 'lib/koa/measurement.rb', line 16

def measure_methods(*args)
  @measured_methods ||= []
  @methods_to_measure ||= []
  @methods_to_measure += args
  @methods_to_measure.map!(&:to_sym)
end

#measurement_name(method) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/koa/measurement.rb', line 8

def measurement_name(method)
  (self.name.gsub(/::/, '.').
    gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
    gsub(/([a-z\d])([A-Z])/,'\1_\2').
    tr("-", "_").
    downcase + "." + method.to_s).gsub(/_/,"-")
end

#method_added(name) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/koa/measurement.rb', line 23

def method_added(name)
  return if @adding_measurers
  return if @measured_methods.include?(name)
  @adding_measurers = true
  if @methods_to_measure.include? name.to_sym
    unmeasured_name = "unmeasured_#{name}"
    alias_method unmeasured_name, name
    define_method name do |*args, &block|
      Koa::Logger.measure_block(self.class.measurement_name(name)) do
        send unmeasured_name, *args, &block
      end
    end
    @measured_methods << name
  end
  @adding_measurers = nil
end

#singleton_method_added(name) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/koa/measurement.rb', line 40

def singleton_method_added(name)
  return if @adding_measurers
  return if @measured_methods.include?(name)
  @adding_measurers = true
  if @methods_to_measure.include? name.to_sym
    unmeasured_name = "unmeasured_#{name}"
    self.singleton_class.send(:alias_method, unmeasured_name, name)
    define_singleton_method name do |*args, &block|
      Koa::Logger.measure_block(measurement_name(name)) do
        send unmeasured_name, *args, &block
      end
    end
    @measured_methods << name
  end
  @adding_measurers = nil
end