Skip to content

ElMassimo/pakiderm

Repository files navigation

Pakiderm Gem Version Build Status Test Coverage License

Allows you to unobtrusively memoize methods without parameters.

class Stopwatch
  extend Pakiderm

  def start
    @started_at = Time.now
  end

  def stop
    elapsed_time
  end

  memoize \
  def elapsed_time
    Time.now - @started_at
  end
end

Memoized methods will only be called the first time; the result will be stored and returned on subsequent invocations.

stopwatch = Stopwatch.new
stopwatch.start
stopwatch.stop         # Example: 3.991826
stopwatch.elapsed_time #       => 3.991826

You can also pass a list of methods that should be memoized:

memoize :complex_calculation, :api_response, :db_query

Background

Pakiderm adds a method by using Module#prepend in order to"intercept" calls to the original method and provide memoization.

Caveat

If you override the method in a subclass, Pakiderm's method won't be able to intercept calls to the subclass' method, so you would need to call memoize again in the subclass.