From 328d27ff41ee30c869c3131dc702b03693f6fdd8 Mon Sep 17 00:00:00 2001 From: Yash Dave Date: Mon, 7 Oct 2019 19:22:07 +0530 Subject: [PATCH] Fix links without http(s) (#4155) [ci skip] --- app/lib/redcarpet/render/html_rouge.rb | 6 +++++- spec/labor/markdown_parser_spec.rb | 27 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/app/lib/redcarpet/render/html_rouge.rb b/app/lib/redcarpet/render/html_rouge.rb index f46a6a7ee..04a2268cb 100644 --- a/app/lib/redcarpet/render/html_rouge.rb +++ b/app/lib/redcarpet/render/html_rouge.rb @@ -14,7 +14,11 @@ module Redcarpet @options[:link_attributes]&.each do |attribute, value| link_attributes += %( #{attribute}="#{value}") end - %(#{content}) + if (/\A(https?:\/\/)/.match? link) || link.nil? + %(#{content}) + else + %(#{content}) + end end def header(title, header_number) diff --git a/spec/labor/markdown_parser_spec.rb b/spec/labor/markdown_parser_spec.rb index 201e96d73..5b627675e 100644 --- a/spec/labor/markdown_parser_spec.rb +++ b/spec/labor/markdown_parser_spec.rb @@ -64,6 +64,21 @@ RSpec.describe MarkdownParser do expect(generate_and_parse_markdown(code_span)).to include random_word end + context "when rendering links markdown" do + # the following specs are testing HTMLRouge + it "renders properly if protocol is included" do + code_span = "[github](http://github.com)" + test = generate_and_parse_markdown(code_span) + expect(test).to eq("

github

\n\n") + end + + it "renders properly if protocol is not included" do + code_span = "[github](github.com)" + test = generate_and_parse_markdown(code_span) + expect(test).to eq("

github

\n\n") + end + end + describe "mentions" do let(:user) { build_stubbed(:user) } @@ -248,17 +263,17 @@ RSpec.describe MarkdownParser do end end - context 'when word as snake case' do + context "when word as snake case" do it "doesn't change word" do code_block = "word_italic_" expect(generate_and_parse_markdown(code_block)).to include("word_italic_") end + end - context 'when double underline' do - it 'renders italic' do - code_block = "word__italic__" - expect(generate_and_parse_markdown(code_block)).to include("word_italic_") - end + context "when double underline" do + it "renders italic" do + code_block = "word__italic__" + expect(generate_and_parse_markdown(code_block)).to include("word_italic_") end end end