module MeasureIts

Constants

VERSION

Public Class Methods

add_strategy(name, &block) click to toggle source
# File lib/measure_its.rb, line 5
def add_strategy(name, &block)
  strategies[name] = block
end
build(names) click to toggle source
# File lib/measure_its.rb, line 9
def build(names)
  original = nil
  ss = names.map { |n| strategies.fetch(n) }
  new_method = ss.reverse_each.inject(lambda { original.call }) do |acc, s|
    lambda { s.call(&acc) }
  end
  lambda do |o|
    original = o
    new_method.call
  end
end

Private Class Methods

strategies() click to toggle source
# File lib/measure_its.rb, line 23
def strategies
  @strategies ||= {}
end

Public Instance Methods

measure_its(m, with:) click to toggle source
Calls superclass method
# File lib/measure_its.rb, line 28
def measure_its(m, with:)
  m = Module.new do
    with_measure = MeasureIts.build(with)
    define_method(m) do |*args, &blk|
      with_measure.call(lambda { super(*args, &blk) })
    end
  end
  self.prepend(m)
end