Fix author names as arrays in linked data. (#30957)
parent
f1300ad284
commit
fa8e972722
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue