lib/bolognese/readers/datacite_reader.rb in bolognese-1.6 vs lib/bolognese/readers/datacite_reader.rb in bolognese-1.6.2

- old
+ new

@@ -91,11 +91,11 @@ "schemaOrg" => schema_org, "citeproc" => Bolognese::Utils::CR_TO_CP_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::SO_TO_CP_TRANSLATIONS[schema_org] || "article", "bibtex" => Bolognese::Utils::CR_TO_BIB_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || "misc", "ris" => Bolognese::Utils::CR_TO_RIS_TRANSLATIONS[resource_type.to_s.underscore.camelcase] || Bolognese::Utils::DC_TO_RIS_TRANSLATIONS[resource_type_general.to_s.dasherize] || "GEN" }.compact - + titles = Array.wrap(meta.dig("titles", "title")).map do |r| if r.blank? nil elsif r.is_a?(String) { "title" => sanitize(r) } @@ -120,19 +120,21 @@ { "rights" => r } elsif r.is_a?(Hash) { "rights" => r["__content__"], "rightsUri" => normalize_url(r["rightsURI"]), "lang" => r["lang"] }.compact end end.compact - subjects = Array.wrap(meta.dig("subjects", "subject")).map do |k| - if k.blank? - nil - elsif k.is_a?(String) - { "subject" => sanitize(k) } - elsif k.is_a?(Hash) - { "subject" => sanitize(k["__content__"]), "subjectScheme" => k["subjectScheme"], "schemeUri" => k["schemeURI"], "valueUri" => k["valueURI"], "lang" => k["lang"] }.compact + + subjects = Array.wrap(meta.dig("subjects", "subject")).reduce([]) do |sum, subject| + if subject.is_a?(String) + sum += name_to_fos(subject) + elsif subject.is_a?(Hash) + sum += hsh_to_fos(subject) end - end.compact + + sum + end.uniq + dates = Array.wrap(meta.dig("dates", "date")).map do |r| if r.is_a?(Hash) && date = sanitize(r["__content__"]).presence if Date.edtf(date).present? || Bolognese::Utils::UNKNOWN_INFORMATION.key?(date) { "date" => date, "dateType" => parse_attributes(r, content: "dateType"), @@ -162,16 +164,19 @@ end.compact .map { |s| s.to_s.squish.presence }.compact funding_references = Array.wrap(meta.dig("fundingReferences", "fundingReference")).compact.map do |fr| scheme_uri = parse_attributes(fr["funderIdentifier"], content: "schemeURI") funder_identifier = parse_attributes(fr["funderIdentifier"]) - funder_identifier = !funder_identifier.to_s.start_with?("https://","http://") && scheme_uri.present? ? normalize_id(scheme_uri + funder_identifier) : normalize_id(funder_identifier) - + funder_identifier_type = parse_attributes(fr["funderIdentifier"], content: "funderIdentifierType") + if funder_identifier_type != "Other" + funder_identifier = !funder_identifier.to_s.start_with?("https://","http://") && scheme_uri.present? ? normalize_id(scheme_uri + funder_identifier) : normalize_id(funder_identifier) + end + { "funderName" => fr["funderName"], "funderIdentifier" => funder_identifier, - "funderIdentifierType" => parse_attributes(fr["funderIdentifier"], content: "funderIdentifierType"), + "funderIdentifierType" => funder_identifier_type, "awardNumber" => parse_attributes(fr["awardNumber"]), "awardUri" => parse_attributes(fr["awardNumber"], content: "awardURI"), "awardTitle" => fr["awardTitle"] }.compact end related_identifiers = Array.wrap(meta.dig("relatedIdentifiers", "relatedIdentifier")).map do |ri| @@ -179,10 +184,10 @@ rid = validate_doi(ri["__content__"].to_s.downcase) else rid = ri["__content__"] end - { + { "relatedIdentifier" => rid, "relatedIdentifierType" => ri["relatedIdentifierType"], "relationType" => ri["relationType"], "resourceTypeGeneral" => ri["resourceTypeGeneral"], "relatedMetadataScheme" => ri["relatedMetadataScheme"],