lib/briard/readers/citeproc_reader.rb in briard-2.4.2 vs lib/briard/readers/citeproc_reader.rb in briard-2.6.0

- old
+ new

@@ -2,118 +2,124 @@ module Briard module Readers module CiteprocReader CP_TO_SO_TRANSLATIONS = { - "song" => "AudioObject", - "post-weblog" => "BlogPosting", - "dataset" => "Dataset", - "graphic" => "ImageObject", - "motion_picture" => "Movie", - "article-journal" => "ScholarlyArticle", - "broadcast" => "VideoObject", - "webpage" => "WebPage" - } + 'song' => 'AudioObject', + 'post-weblog' => 'BlogPosting', + 'dataset' => 'Dataset', + 'graphic' => 'ImageObject', + 'motion_picture' => 'Movie', + 'article-journal' => 'ScholarlyArticle', + 'broadcast' => 'VideoObject', + 'webpage' => 'WebPage' + }.freeze CP_TO_RIS_TRANSLATIONS = { - "post-weblog" => "BLOG", - "dataset" => "DATA", - "graphic" => "FIGURE", - "book" => "BOOK", - "motion_picture" => "MPCT", - "article-journal" => "JOUR", - "broadcast" => "MPCT", - "webpage" => "ELEC" - } + 'post-weblog' => 'BLOG', + 'dataset' => 'DATA', + 'graphic' => 'FIGURE', + 'book' => 'BOOK', + 'motion_picture' => 'MPCT', + 'article-journal' => 'JOUR', + 'broadcast' => 'MPCT', + 'webpage' => 'ELEC' + }.freeze def read_citeproc(string: nil, **options) if string.present? errors = jsonlint(string) - return { "errors" => errors } if errors.present? + return { 'errors' => errors } if errors.present? end - read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, :sandbox, :validate, :ra)) + read_options = ActiveSupport::HashWithIndifferentAccess.new(options.except(:doi, :id, :url, + :sandbox, :validate, :ra)) meta = string.present? ? Maremma.from_json(string) : {} - citeproc_type = meta.fetch("type", nil) - schema_org = CP_TO_SO_TRANSLATIONS[citeproc_type] || "CreativeWork" + citeproc_type = meta.fetch('type', nil) + schema_org = CP_TO_SO_TRANSLATIONS[citeproc_type] || 'CreativeWork' types = { - "resourceTypeGeneral" => Briard::Utils::CP_TO_DC_TRANSLATIONS[citeproc_type], - "reourceType" => meta.fetch("additionalType", nil), - "schemaOrg" => schema_org, - "citeproc" => citeproc_type, - "bibtex" => Briard::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || "misc", - "ris" => CP_TO_RIS_TRANSLATIONS[schema_org] || "GEN" + 'resourceTypeGeneral' => Briard::Utils::CP_TO_DC_TRANSLATIONS[citeproc_type], + 'reourceType' => meta.fetch('additionalType', nil), + 'schemaOrg' => schema_org, + 'citeproc' => citeproc_type, + 'bibtex' => Briard::Utils::SO_TO_BIB_TRANSLATIONS[schema_org] || 'misc', + 'ris' => CP_TO_RIS_TRANSLATIONS[schema_org] || 'GEN' }.compact - creators = if meta.fetch("author", nil).present? - get_authors(from_citeproc(Array.wrap(meta.fetch("author", nil)))) - else - [{ "nameType" => "Organizational", "name" => ":(unav)" }] - end - contributors = get_authors(from_citeproc(Array.wrap(meta.fetch("editor", nil)))) - dates = if date = get_date_from_date_parts(meta.fetch("issued", nil)) - if Date.edtf(date).present? - [{ "date" => date, - "dateType" => "Issued" }] - end + creators = if meta.fetch('author', nil).present? + get_authors(from_citeproc(Array.wrap(meta.fetch('author', nil)))) + else + [{ 'nameType' => 'Organizational', 'name' => ':(unav)' }] + end + contributors = get_authors(from_citeproc(Array.wrap(meta.fetch('editor', nil)))) + dates = if (date = get_date_from_date_parts(meta.fetch('issued', + nil))) && Date.edtf(date).present? + [{ 'date' => date, + 'dateType' => 'Issued' }] end - publication_year = get_date_from_date_parts(meta.fetch("issued", nil)).to_s[0..3] - rights_list = if meta.fetch("copyright", nil) - [hsh_to_spdx("rightsURI" => meta.fetch("copyright"))] + publication_year = get_date_from_date_parts(meta.fetch('issued', nil)).to_s[0..3] + rights_list = if meta.fetch('copyright', nil) + [hsh_to_spdx('rightsURI' => meta.fetch('copyright'))] end - related_identifiers = if meta.fetch("container-title", nil).present? && meta.fetch("ISSN", nil).present? - [{ "type" => "Periodical", - "relationType" => "IsPartOf", - "relatedIdentifierType" => "ISSN", - "title" => meta.fetch("container-title", nil), - "relatedIdentifier" => meta.fetch("ISSN", nil) }.compact] + related_identifiers = if meta.fetch('container-title', + nil).present? && meta.fetch('ISSN', nil).present? + [{ 'type' => 'Periodical', + 'relationType' => 'IsPartOf', + 'relatedIdentifierType' => 'ISSN', + 'title' => meta.fetch('container-title', nil), + 'relatedIdentifier' => meta.fetch('ISSN', nil) }.compact] end - container = if meta.fetch("container-title", nil).present? - first_page = meta.fetch("page", nil).present? ? meta.fetch("page").split("-").map(&:strip)[0] : nil - last_page = meta.fetch("page", nil).present? ? meta.fetch("page").split("-").map(&:strip)[1] : nil + container = if meta.fetch('container-title', nil).present? + first_page = if meta.fetch('page', nil).present? + meta.fetch('page').split('-').map(&:strip)[0] + end + last_page = if meta.fetch('page', nil).present? + meta.fetch('page').split('-').map(&:strip)[1] + end - { "type" => "Periodical", - "title" => meta.fetch("container-title", nil), - "identifier" => meta.fetch("ISSN", nil), - "identifierType" => meta.fetch("ISSN", nil).present? ? "ISSN" : nil, - "volume" => meta.fetch("volume", nil), - "issue" => meta.fetch("issue", nil), - "firstPage" => first_page, - "lastPage" => last_page - }.compact - else - nil - end + { 'type' => 'Periodical', + 'title' => meta.fetch('container-title', nil), + 'identifier' => meta.fetch('ISSN', nil), + 'identifierType' => meta.fetch('ISSN', nil).present? ? 'ISSN' : nil, + 'volume' => meta.fetch('volume', nil), + 'issue' => meta.fetch('issue', nil), + 'firstPage' => first_page, + 'lastPage' => last_page }.compact + end - id = normalize_id(meta.fetch("id", nil) || meta.fetch("DOI", nil)) + id = normalize_id(meta.fetch('id', nil) || meta.fetch('DOI', nil)) - state = id.present? || read_options.present? ? "findable" : "not_found" - subjects = Array.wrap(meta.fetch("categories", nil)).reduce([]) do |sum, subject| + state = id.present? || read_options.present? ? 'findable' : 'not_found' + subjects = Array.wrap(meta.fetch('categories', nil)).reduce([]) do |sum, subject| sum += name_to_fos(subject) sum end - { "id" => id, - "types" => types, - "doi" => doi_from_url(id), - "url" => normalize_id(meta.fetch("URL", nil)), - "titles" => [{ "title" => meta.fetch("title", nil) }], - "creators" => creators, - "contributors" => contributors, - "container" => container, - "publisher" => meta.fetch("publisher", nil), - "related_identifiers" => related_identifiers, - "dates" => dates, - "publication_year" => publication_year, - "descriptions" => meta.fetch("abstract", nil).present? ? [{ "description" => sanitize(meta.fetch("abstract")), "descriptionType" => "Abstract" }] : [], - "rights_list" => rights_list, - "version_info" => meta.fetch("version", nil), - "subjects" => subjects, - "state" => state - }.merge(read_options) + { 'id' => id, + 'types' => types, + 'doi' => doi_from_url(id), + 'url' => normalize_id(meta.fetch('URL', nil)), + 'titles' => [{ 'title' => meta.fetch('title', nil) }], + 'creators' => creators, + 'contributors' => contributors, + 'container' => container, + 'publisher' => meta.fetch('publisher', nil), + 'related_identifiers' => related_identifiers, + 'dates' => dates, + 'publication_year' => publication_year, + 'descriptions' => if meta.fetch('abstract', nil).present? + [{ 'description' => sanitize(meta.fetch('abstract')), + 'descriptionType' => 'Abstract' }] + else + [] + end, + 'rights_list' => rights_list, + 'version_info' => meta.fetch('version', nil), + 'subjects' => subjects, + 'state' => state }.merge(read_options) end end end end