class HTML::Pipeline::TeamMentionFilter

HTML filter that replaces @org/team mentions with links. Mentions within <pre>, <code>, <a>, <style>, and <script> elements are ignored.

Context options:

:base_url - Used to construct links to team profile pages for each
            mention.
:team_pattern - Used to provide a custom regular expression to
                    identify team names

Constants

IGNORE_PARENTS

Don't look for mentions in text nodes that are children of these elements

TeamPattern

Default pattern used to extract team names from text. The value can be overridden by providing the team_pattern variable in the context. To properly link the mention, should be in the format of /@(1)/(2)/.

Public Class Methods

mentioned_teams_in(text, team_pattern = TeamPattern) { |match, org, team| ... } click to toggle source

Public: Find @org/team mentions in text. See TeamMentionFilter#team_mention_link_filter.

TeamMentionFilter.mentioned_teams_in(text) do |match, org, team|
  "<a href=...>#{team}</a>"
end

text - String text to search.

Yields the String match, org name, and team name. The yield's return replaces the match in the original text.

Returns a String replaced with the return of the block.

# File lib/html/pipeline/@team_mention_filter.rb, line 30
def self.mentioned_teams_in(text, team_pattern = TeamPattern)
  text.gsub team_pattern do |match|
    org = $1
    team = $2
    yield match, org, team
  end
end

Public Instance Methods

call() click to toggle source
# File lib/html/pipeline/@team_mention_filter.rb, line 52
def call
  result[:mentioned_teams] ||= []

  doc.search('.//text()').each do |node|
    content = node.to_html
    next unless content.include?('@')
    next if has_ancestor?(node, IGNORE_PARENTS)
    html = mention_link_filter(content, base_url, team_pattern)
    next if html == content
    node.replace(html)
  end
  doc
end
team_pattern() click to toggle source
# File lib/html/pipeline/@team_mention_filter.rb, line 66
def team_pattern
  context[:team_pattern] || TeamPattern
end