summaryrefslogtreecommitdiff
path: root/lib/gitlab/utils/strong_memoize.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/utils/strong_memoize.rb')
-rw-r--r--lib/gitlab/utils/strong_memoize.rb23
1 files changed, 11 insertions, 12 deletions
diff --git a/lib/gitlab/utils/strong_memoize.rb b/lib/gitlab/utils/strong_memoize.rb
index 6456ad08924..7e78363dae5 100644
--- a/lib/gitlab/utils/strong_memoize.rb
+++ b/lib/gitlab/utils/strong_memoize.rb
@@ -16,16 +16,6 @@ module Gitlab
# include Gitlab::Utils::StrongMemoize
#
# def trigger_from_token
- # strong_memoize(:trigger) do
- # Ci::Trigger.find_by_token(params[:token].to_s)
- # end
- # end
- #
- # Or like:
- #
- # include Gitlab::Utils::StrongMemoize
- #
- # def trigger_from_token
# Ci::Trigger.find_by_token(params[:token].to_s)
# end
# strong_memoize_attr :trigger_from_token
@@ -99,6 +89,15 @@ module Gitlab
def do_strong_memoize(klass, method_name, member_name)
method = klass.instance_method(method_name)
+ unless method.arity == 0
+ raise <<~ERROR
+ Using `strong_memoize_attr` on methods with parameters is not supported.
+
+ Use `strong_memoize_with` instead.
+ See https://docs.gitlab.com/ee/development/utilities.html#strongmemoize
+ ERROR
+ end
+
# Methods defined within a class method are already public by default, so we don't need to
# explicitly make them public.
scope = %i[private protected].find do |scope|
@@ -106,9 +105,9 @@ module Gitlab
.include? method_name
end
- klass.define_method(method_name) do |*args, &block|
+ klass.define_method(method_name) do |&block|
strong_memoize(member_name) do
- method.bind_call(self, *args, &block)
+ method.bind_call(self, &block)
end
end