detect rss without version

This commit is contained in:
mmacia committed 2026-10-08 21:18:38 +00:00
1 parent 1a30289123
commit 986df46a25
2 files changed
+14 -2

No files matched your search

+12 -2
View File
@@ -1,5 +1,5 @@
defmodule FeedReader.Formats.RSS do defmodule FeedReader.Formats.RSS do
@moduledoc "RSS 2.0 format detection and normalization." @moduledoc "RSS format detection and normalization."
@behaviour FeedReader.Format @behaviour FeedReader.Format
@@ -7,7 +7,17 @@ defmodule FeedReader.Formats.RSS do
@impl true @impl true
def matches_prefix?(prefix) do def matches_prefix?(prefix) do
Regex.match?(~r/<rss\b[^>]*\bversion\s*=\s*(["'])(?:0\.9(?:1|2)?|2\.0)\1/is, prefix) case Regex.run(~r/<rss\b([^>]*)>/is, prefix, capture: :all_but_first) do
[attributes] ->
not Regex.match?(~r/\bversion\s*=/is, attributes) or
Regex.match?(
~r/\bversion\s*=\s*(["'])(?:0\.9(?:1|2)?|2\.0)\1/is,
attributes
)
_none ->
false
end
end end
@impl true @impl true
@@ -6,6 +6,8 @@ defmodule FeedReader.FormatDetectionTest do
test "detects RSS, Atom, and RDF from a bounded XML prefix" do test "detects RSS, Atom, and RDF from a bounded XML prefix" do
assert FeedReader.detect_format("<?xml version='1.0'?><rss version='2.0'>") == :rss assert FeedReader.detect_format("<?xml version='1.0'?><rss version='2.0'>") == :rss
assert FeedReader.detect_format("<rss version='0.91'>") == :rss assert FeedReader.detect_format("<rss version='0.91'>") == :rss
assert FeedReader.detect_format("<rss xmlns:xsi='urn:test'>") == :rss
assert FeedReader.detect_format("<rss version='1.0'>") == :unknown
assert FeedReader.detect_format("<feed xmlns='http://www.w3.org/2005/Atom'>") == :atom assert FeedReader.detect_format("<feed xmlns='http://www.w3.org/2005/Atom'>") == :atom
assert FeedReader.detect_format("<rdf:RDF xmlns:rdf='urn:rdf'>") == :rdf assert FeedReader.detect_format("<rdf:RDF xmlns:rdf='urn:rdf'>") == :rdf
assert FeedReader.detect_format("<html><body>not a feed</body></html>") == :unknown assert FeedReader.detect_format("<html><body>not a feed</body></html>") == :unknown