BigW Consortium Gitlab

reference_extractor.rb 924 Bytes
Newer Older
1 2 3 4
module Banzai
  # Extract possible GFM references from an arbitrary String for further processing.
  class ReferenceExtractor
    def initialize
5
      @texts_and_contexts = []
6 7 8
    end

    def analyze(text, context = {})
9
      @texts_and_contexts << { text: text, context: context }
10 11
    end

12 13 14 15 16 17
    def references(type, project, current_user = nil)
      processor = Banzai::ReferenceParser[type].
        new(project, current_user)

      processor.process(html_documents)
    end
18

19 20 21 22 23
    def reset_memoized_values
      @html_documents     = nil
      @texts_and_contexts = []
    end

24
    private
25

26 27 28
    def html_documents
      # This ensures that we don't memoize anything until we have a number of
      # text blobs to parse.
29
      return [] if @texts_and_contexts.empty?
30

31 32
      @html_documents ||= Renderer.cache_collection_render(@texts_and_contexts)
        .map { |html| Nokogiri::HTML.fragment(html) }
33 34 35
    end
  end
end