From 29e59e10a9c6f28f6a5af210c4038fa116c6447e Mon Sep 17 00:00:00 2001 From: tvl2386 Date: Mon, 18 May 2020 20:27:42 +0200 Subject: [PATCH] added support for methods without arguments --- lib/ruby_memoized.rb | 4 +++- lib/ruby_memoized/memoizer.rb | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/ruby_memoized.rb b/lib/ruby_memoized.rb index 4bccffb..933874d 100644 --- a/lib/ruby_memoized.rb +++ b/lib/ruby_memoized.rb @@ -21,13 +21,15 @@ def method_added(method_name) unmemoized_method_name = :"unmemoized_#{method_name}" + accepts_arguments = instance_method(method_name).parameters.any? + memoizer_name = :"memoizer_for_#{method_name}" define_method memoizer_name do memoizer = instance_variable_get "@#{memoizer_name}" if memoizer memoizer else - instance_variable_set "@#{memoizer_name}", Memoizer.new(self, unmemoized_method_name) + instance_variable_set "@#{memoizer_name}", Memoizer.new(self, unmemoized_method_name, accepts_arguments) end end diff --git a/lib/ruby_memoized/memoizer.rb b/lib/ruby_memoized/memoizer.rb index c707b81..d259651 100644 --- a/lib/ruby_memoized/memoizer.rb +++ b/lib/ruby_memoized/memoizer.rb @@ -1,15 +1,21 @@ module RubyMemoized class Memoizer - attr_reader :context, :method + attr_reader :context, :method, :accepts_arguments - def initialize(context, method) + def initialize(context, method, accepts_arguments) @context = context @method = method + @accepts_arguments = accepts_arguments end def call(*args, **kwargs, &block) return cache[[args, kwargs, block]] if cache.has_key?([args, kwargs, block]) - cache[[args, kwargs, block]] = context.send(method, *args, **kwargs, &block) + + if accepts_arguments + cache[[args, kwargs, block]] = context.send(method, *args, **kwargs, &block) + else + cache[[args, kwargs, block]] = context.send(method) + end end def cache