(spammy_phrases * 40)
end
+ def image
+ nil
+ end
+
protected
def simple_format(text)
class Markdown < Base
def to_html
- linkify(sanitize(Kramdown::Document.new(self).to_html), :all)
+ linkify(sanitize(document.to_html), :all)
end
def to_text
to_s
end
+
+ def image
+ return @image if defined? @image
+
+ @image = first_image_element(document.root)&.attr&.[]("src")
+ end
+
+ private
+
+ def document
+ @document ||= Kramdown::Document.new(self)
+ end
+
+ def first_image_element(element)
+ return element if element.type == :img
+
+ element.children.find do |child|
+ nested_image = first_image_element(child)
+ break nested_image if nested_image
+ end
+ end
end
class Text < Base
assert_equal 141, r.spam_score.round
end
+ def test_text_no_image
+ r = RichText.new("text", "foo https://example.com/ bar")
+ assert_nil r.image
+ end
+
+ def test_html_no_image
+ r = RichText.new("html", "foo <a href='https://example.com/'>bar</a> baz")
+ assert_nil r.image
+ end
+
+ def test_markdown_no_image
+ r = RichText.new("markdown", "foo [bar](https://example.com/) baz")
+ assert_nil r.image
+ end
+
+ def test_markdown_image
+ r = RichText.new("markdown", "foo ![bar](https://example.com/image.jpg) baz")
+ assert_equal "https://example.com/image.jpg", r.image
+ end
+
+ def test_markdown_first_image
+ r = RichText.new("markdown", "foo ![bar1](https://example.com/image1.jpg) baz\nfoo ![bar2](https://example.com/image2.jpg) baz")
+ assert_equal "https://example.com/image1.jpg", r.image
+ end
+
private
def assert_html(richtext, &block)