Class: Dependabot::PullRequestCreator::MessageBuilder::LinkAndMentionSanitizer
- Inherits:
-
Object
- Object
- Dependabot::PullRequestCreator::MessageBuilder::LinkAndMentionSanitizer
- Defined in:
- lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb
Constant Summary collapse
- GITHUB_USERNAME =
/[a-z0-9]+(-[a-z0-9]+)*/i.freeze
- GITHUB_REF_REGEX =
%r{ (?:https?://)? github\.com/(?<repo>#{GITHUB_USERNAME}/[^/\s]+)/ (?:issue|pull)s?/(?<number>\d+) }x.freeze
- CODEBLOCK_REGEX =
Note that we’re being deliberately careful about not matching different length strings of what look like code block quotes. By doing so we err on the side of sanitizing, which is much better than accidentally not sanitizing.
rubocop:disable Style/RegexpLiteral
%r{ (?=[\s]`{3}[^`])|(?=[\s]`{3}\Z)|(?=\A`{3}[^`])| (?=[\s]~{3}[^~])|(?=[\s]~{3}\Z)|(?=\A~{3}[^~]) }x.freeze
Instance Attribute Summary collapse
-
#github_redirection_service ⇒ Object
readonly
rubocop:enable Style/RegexpLiteral.
Instance Method Summary collapse
-
#initialize(github_redirection_service:) ⇒ LinkAndMentionSanitizer
constructor
A new instance of LinkAndMentionSanitizer.
- #sanitize_links_and_mentions(text:) ⇒ Object
Constructor Details
#initialize(github_redirection_service:) ⇒ LinkAndMentionSanitizer
Returns a new instance of LinkAndMentionSanitizer.
30 31 32 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 30 def initialize(github_redirection_service:) @github_redirection_service = github_redirection_service end |
Instance Attribute Details
#github_redirection_service ⇒ Object (readonly)
rubocop:enable Style/RegexpLiteral
28 29 30 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 28 def github_redirection_service @github_redirection_service end |
Instance Method Details
#sanitize_links_and_mentions(text:) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/dependabot/pull_request_creator/message_builder/link_and_mention_sanitizer.rb', line 34 def sanitize_links_and_mentions(text:) # We don't want to sanitize any links or mentions that are contained # within code blocks, so we split the text on "```" snippets = text.split(CODEBLOCK_REGEX) if snippets.first&.start_with?(CODEBLOCK_REGEX) snippets = ["", *snippets] end snippets.map.with_index do |snippet, index| next snippet if index.odd? snippet = sanitize_mentions(snippet) sanitize_links(snippet) end.join end |