Refactor banzai reference filter
What does this MR do?
Additional refactoring of the Banzai filters, particularly AbstractReferenceFilter
and ReferenceFilter
.
Main refactor is to remove unnecessary class methods.
The original interface for the method references_in
was a class method, and could be called like this:
AnyReferenceFilter.references_in(text) do |match, id, project_ref, matches|
object = find_object(project_ref, id)
"<a href=...>#{object.to_reference}</a>"
end
and this interface dates back to the original implementation. However we don't use it as a class method anywhere in the code - it's always called from within an instance of the reference filter. But having it as a class method requires many support methods to have both a class version and an instance version that calls the class version. For example:
def object_sym
self.class.object_sym
end
def references_in(*args, &block)
self.class.references_in(*args, &block)
end
By making references_in
only an instance method, we were able to clean up a lot of extraneous code, making future changes easier.
Related to #327630 (closed)
Screenshots (strongly suggested)
Does this MR meet the acceptance criteria?
Conformity
-
📋 Does this MR need a changelog?-
I have included a changelog entry. -
I have not included a changelog entry because _____.
-
-
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team