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
# File 'lib/koa/measurement.rb', line 16

def measure_methods(*args)
  @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



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

def method_added(name)
  return if @adding_measurers
  @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
  end
  @adding_measurers = nil
end

#singleton_method_added(name) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/koa/measurement.rb', line 37

def singleton_method_added(name)
  return if @adding_measurers
  @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
  end
  @adding_measurers = nil
end