Fix author names as arrays in linked data. (#30957)

This commit is contained in:
David Roetzel 2024-07-08 18:04:36 +02:00 committed by GitHub
parent f1300ad284
commit fa8e972722
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 32 additions and 2 deletions

View file

@ -62,7 +62,8 @@ class LinkDetailsExtractor
end
def author_name
author['name']
name = author['name']
name.is_a?(Array) ? name.join(', ') : name
end
def author_url
@ -294,7 +295,7 @@ class LinkDetailsExtractor
def html_entities_decode(string)
return if string.nil?
unicode_string = string.encode('UTF-8')
unicode_string = string.to_s.encode('UTF-8')
raise EncodingError, 'cannot convert string to valid UTF-8' unless unicode_string.valid_encoding?
html_entities.decode(unicode_string)

View file

@ -192,6 +192,35 @@ RSpec.describe LinkDetailsExtractor do
include_examples 'structured data'
end
context 'with author names as array' do
let(:ld_json) do
{
'@context' => 'https://schema.org',
'@type' => 'NewsArticle',
'headline' => 'A lot of authors',
'description' => 'But we decided to cram them into one',
'author' => {
'@type' => 'Person',
'name' => ['Author 1', 'Author 2'],
},
}.to_json
end
let(:html) { <<~HTML }
<!doctype html>
<html>
<body>
<script type="application/ld+json">
#{ld_json}
</script>
</body>
</html>
HTML
it 'joins author names' do
expect(subject.author_name).to eq 'Author 1, Author 2'
end
end
end
context 'when Open Graph protocol data is present' do