module MeasureMethod::ClassMethods

Public Instance Methods

measure_methods(*args) click to toggle source
# File lib/measure_method.rb, line 20
def measure_methods(*args)
  @methods_to_measure ||= []
  @methods_to_measure += args.map(&:to_sym)
end
method_added(name) click to toggle source
# File lib/measure_method.rb, line 25
def method_added(name)
  define_measure_method(name, self)
end
singleton_method_added(name) click to toggle source
# File lib/measure_method.rb, line 29
def singleton_method_added(name)
  define_measure_method(name, self.singleton_class)
end

Protected Instance Methods

define_measure_method(name, obj) click to toggle source
# File lib/measure_method.rb, line 43
def define_measure_method(name, obj)
  return if @adding_measurers
  @adding_measurers = true
  if methods_to_measure.include? name.to_sym
    unmeasured_name = "unmeasured_#{name}"
    obj.send(:alias_method, unmeasured_name, name)

    obj.send(:define_method, name) do |*args, &block|
      Metrics.measure_block(
        name: Measurement.name(self, name)
      ) { obj.instance_method(unmeasured_name).bind(self).call *args, &block}
    end
  end
  @adding_measurers = nil
end
methods_to_measure() click to toggle source
# File lib/measure_method.rb, line 35
def methods_to_measure
  methods = @methods_to_measure || []
  if defined?(superclass.methods_to_measure)
    methods += superclass.methods_to_measure
  end
  methods
end