Add a predicate to check for strong memoization
This commit is contained in:
parent
96a9a140e8
commit
6ce21a9c17
|
|
@ -24,13 +24,17 @@ module Gitlab
|
|||
# end
|
||||
#
|
||||
def strong_memoize(name)
|
||||
if instance_variable_defined?(ivar(name))
|
||||
if strong_memoized?(name)
|
||||
instance_variable_get(ivar(name))
|
||||
else
|
||||
instance_variable_set(ivar(name), yield)
|
||||
end
|
||||
end
|
||||
|
||||
def strong_memoized?(name)
|
||||
instance_variable_defined?(ivar(name))
|
||||
end
|
||||
|
||||
def clear_memoization(name)
|
||||
remove_instance_variable(ivar(name)) if instance_variable_defined?(ivar(name))
|
||||
end
|
||||
|
|
|
|||
|
|
@ -52,6 +52,22 @@ describe Gitlab::Utils::StrongMemoize do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#strong_memoized?' do
|
||||
let(:value) { :anything }
|
||||
|
||||
subject { object.strong_memoized?(:method_name) }
|
||||
|
||||
it 'returns false if the value is uncached' do
|
||||
is_expected.to be(false)
|
||||
end
|
||||
|
||||
it 'returns true if the value is cached' do
|
||||
object.method_name
|
||||
|
||||
is_expected.to be(true)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#clear_memoization' do
|
||||
let(:value) { 'mepmep' }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue