Sha256: ae2faff7753c1f528cf54b09a258a430a3e66737f55cdfce9b157b44c585ef51

Contents?: true

Size: 550 Bytes

Versions: 19

Compression:

Stored size: 550 Bytes

Contents

module Memoize
  class ArgsError < StandardError; end

  module ClassMethods
    def memoize(name)
      ivar = :"@#{name.to_s.sub('?', '_predicate')}"
      prepend Module.new {
        define_method(name) do |*args|
          raise ArgsError.new('cannot pass arguments to memoized method %p' % name) unless args.empty?
          return instance_variable_get(ivar) if instance_variable_defined?(ivar)
          instance_variable_set(ivar, super())
        end
      }
    end
  end

  def self.included(base)
    base.extend(ClassMethods)
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
dpl-2.0.3.beta.4 lib/dpl/helper/memoize.rb
dpl-2.0.3.beta.3 lib/dpl/helper/memoize.rb
dpl-2.0.3.beta.2 lib/dpl/helper/memoize.rb
dpl-2.0.3.beta.1 lib/dpl/helper/memoize.rb
dpl-2.0.2.beta.1 lib/dpl/helper/memoize.rb
dpl-2.0.0.beta.3 lib/dpl/helper/memoize.rb
dpl-2.0.0.beta.2 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.14 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.13 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.12 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.11 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.10 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.9 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.8 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.7 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.6 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.5 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.2 lib/dpl/helper/memoize.rb
dpl-2.0.0.alpha.1 lib/dpl/helper/memoize.rb