Fix author names as arrays in linked data. (#30957)
This commit is contained in:
		
							parent
							
								
									f1300ad284
								
							
						
					
					
						commit
						fa8e972722
					
				| @ -62,7 +62,8 @@ class LinkDetailsExtractor | |||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def author_name |     def author_name | ||||||
|       author['name'] |       name = author['name'] | ||||||
|  |       name.is_a?(Array) ? name.join(', ') : name | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     def author_url |     def author_url | ||||||
| @ -294,7 +295,7 @@ class LinkDetailsExtractor | |||||||
|   def html_entities_decode(string) |   def html_entities_decode(string) | ||||||
|     return if string.nil? |     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? |     raise EncodingError, 'cannot convert string to valid UTF-8' unless unicode_string.valid_encoding? | ||||||
| 
 | 
 | ||||||
|     html_entities.decode(unicode_string) |     html_entities.decode(unicode_string) | ||||||
|  | |||||||
| @ -192,6 +192,35 @@ RSpec.describe LinkDetailsExtractor do | |||||||
| 
 | 
 | ||||||
|       include_examples 'structured data' |       include_examples 'structured data' | ||||||
|     end |     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 |   end | ||||||
| 
 | 
 | ||||||
|   context 'when Open Graph protocol data is present' do |   context 'when Open Graph protocol data is present' do | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user