Skip to content

LicenseHelper uses "extend self" inapproriately

Noted in https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/2776#note_39237093

The LicenseHelper module has a number of methods that use instance variables for memoization, or refer to @project. At the end of the module, extend self is called, encouraging its use as, e.g., LicenseHelper.show_promotions?(current_user) in controllers.

Unfortunately, the memoization is stored in the module itself for these calls (so LicenseHelper.instance_variable_get("@show_promotions") returns the value), rather than in any instances. So it's cached for the life of the process - whether that's unicorn or a spec run.

We need to untangle this module and clearly separate out methods that will work when self == LicenseFinder from those that won't.

I'll remove memoization for show_promotions? in !2776 (merged) as that is definitely incorrect - it doesn't take account of the passed-in user, for instance.

Edited by Nick Thomas