Sha256: f0dfe8ed8a4d37e0eee25d274acdd6644a6f858142c6b9163f7a467a5e4fa544

Contents?: true

Size: 862 Bytes

Versions: 9

Compression:

Stored size: 862 Bytes

Contents

module Walruz
  module Memoization

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

    module ClassMethods

      # Avoiding name clashes with Rails
      def walruz_memoize(*methods)
        methods.each do |method|
          self.walruz_memoize_method(method)
        end
      end

      def walruz_memoize_method(method)
        memoized = {}
        original_method = self.instance_method(method)
        self.send(:define_method, method) do |*params|
          bound_original_method = original_method.bind(self).to_proc
          if params.last.kind_of?(Symbol) && params.last == :reload
            params.pop
            memoized[[self, params]] = bound_original_method.call(*params)
          else
            memoized[[self, params]] ||= bound_original_method.call(*params)
          end
        end
      end

    end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
walruz-0.0.16 lib/walruz/core_ext/memoization.rb
walruz-0.0.15 lib/walruz/core_ext/memoization.rb
walruz-0.0.14 lib/walruz/core_ext/memoization.rb
walruz-0.0.13 lib/walruz/core_ext/memoization.rb
walruz-0.0.12 lib/walruz/core_ext/memoization.rb
walruz-0.0.11 lib/walruz/core_ext/memoization.rb
walruz-0.0.10 lib/walruz/core_ext/memoization.rb
walruz-0.0.9 lib/walruz/core_ext/memoization.rb
walruz-0.0.8 lib/walruz/core_ext/memoization.rb