Skip to content

Commit

Permalink
Change first_of_value to first_of_hash, and add more test cases (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
ShadowJonathan authored Jan 22, 2025
1 parent e155aab commit b18caff
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 5 deletions.
10 changes: 5 additions & 5 deletions app/lib/link_details_extractor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def type
end

def image
obj = first_of_value(json['image'])
obj = first_of_hash(json['image'])

return obj['url'] if obj.is_a?(Hash)

Expand Down Expand Up @@ -85,15 +85,15 @@ def valid?
private

def author
first_of_value(json['author']) || {}
first_of_hash(json['author']) || {}
end

def publisher
first_of_value(json['publisher']) || {}
first_of_hash(json['publisher']) || {}
end

def first_of_value(arr)
arr.is_a?(Array) ? arr.first : arr
def first_of_hash(arr)
arr.is_a?(Array) ? arr.flatten.find { |item| item.is_a?(Hash) } : arr
end

def root_array(root)
Expand Down
38 changes: 38 additions & 0 deletions spec/lib/link_details_extractor_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,44 @@
expect(subject.author_name).to eq 'Author 1, Author 2'
end
end

context 'with embedded arrays' 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'],
}]],
'publisher' => [[{
'@type' => 'NewsMediaOrganization',
'name' => 'Pet News',
'url' => 'https://example.com',
}]],
}.to_json
end
let(:html) { <<~HTML }
<!doctype html>
<html>
<body>
<script type="application/ld+json">
#{ld_json}
</script>
</body>
</html>
HTML

it 'gives correct author_name' do
expect(subject.author_name).to eq 'Author 1'
end

it 'gives provider_name' do
expect(subject.provider_name).to eq 'Pet News'
end
end
end

context 'when Open Graph protocol data is present' do
Expand Down

0 comments on commit b18caff

Please sign in to comment.