Skip to content

Refactor banzai reference filter

Brett Walker requested to merge bw-refactor-reference-parser into master

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

Availability and Testing

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
Edited by Brett Walker

Merge request reports

Loading