Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.
# frozen_string_literal: true
module Onebox
class JsonLd < Normalizer
# Full schema.org hierarchy can be found here: https://schema.org/docs/full.html
MOVIE_JSON_LD_TYPE = "Movie"
SUPPORTED_TYPES = [MOVIE_JSON_LD_TYPE]
def initialize(doc)
@data = extract(doc)
end
private
def extract(doc)
return {} if Onebox::Helpers::blank?(doc)
doc.css('script[type="application/ld+json"]').each do |element|
parsed_json = parse_json(element.text)
if parsed_json.kind_of?(Array)
parsed_json = parsed_json.detect { |x| SUPPORTED_TYPES.include?(x["@type"]) }
return {} if !parsed_json
case parsed_json["@type"]
when MOVIE_JSON_LD_TYPE
return Onebox::Movie.new(parsed_json).to_h
{}
def parse_json(json)
begin
JSON[json]
rescue JSON::ParserError => e
Discourse.warn_exception(e, message: "Error parsing JSON-LD: #{json}")