Module: MeasureIts

Defined in:
lib/measure_its.rb,
lib/measure_its/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_strategy(name, &block) ⇒ Object



5
6
7
# File 'lib/measure_its.rb', line 5

def add_strategy(name, &block)
  strategies[name] = block
end

.build(names) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# 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

Instance Method Details

#measure_its(m, with:) ⇒ Object



28
29
30
31
32
33
34
35
36
# 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