lib/briard/readers/ris_reader.rb in briard-2.4.2 vs lib/briard/readers/ris_reader.rb in briard-2.6.0
- old
+ new
@@ -2,113 +2,115 @@
module Briard
module Readers
module RisReader
RIS_TO_SO_TRANSLATIONS = {
- "BLOG" => "BlogPosting",
- "GEN" => "CreativeWork",
- "CTLG" => "DataCatalog",
- "DATA" => "Dataset",
- "FIGURE" => "ImageObject",
- "THES" => "Thesis",
- "MPCT" => "Movie",
- "JOUR" => "ScholarlyArticle",
- "COMP" => "SoftwareSourceCode",
- "VIDEO" => "VideoObject",
- "ELEC" => "WebPage"
- }
+ 'BLOG' => 'BlogPosting',
+ 'GEN' => 'CreativeWork',
+ 'CTLG' => 'DataCatalog',
+ 'DATA' => 'Dataset',
+ 'FIGURE' => 'ImageObject',
+ 'THES' => 'Thesis',
+ 'MPCT' => 'Movie',
+ 'JOUR' => 'ScholarlyArticle',
+ 'COMP' => 'SoftwareSourceCode',
+ 'VIDEO' => 'VideoObject',
+ 'ELEC' => 'WebPage'
+ }.freeze
- RIS_TO_CP_TRANSLATIONS = {
- "JOUR" => "article-journal"
- }
+ RIS_TO_CP_TRANSLATIONS = { 'JOUR' => 'article-journal' }.freeze
RIS_TO_BIB_TRANSLATIONS = {
- "JOUR" => "article",
- "BOOK" => "book",
- "CHAP" => "inbook",
- "CPAPER" => "inproceedings",
- "GEN" => "misc",
- "THES" => "phdthesis",
- "CONF" => "proceedings",
- "RPRT" => "techreport",
- "UNPD" => "unpublished"
- }
+ 'JOUR' => 'article',
+ 'BOOK' => 'book',
+ 'CHAP' => 'inbook',
+ 'CPAPER' => 'inproceedings',
+ 'GEN' => 'misc',
+ 'THES' => 'phdthesis',
+ 'CONF' => 'proceedings',
+ 'RPRT' => 'techreport',
+ 'UNPD' => 'unpublished'
+ }.freeze
def read_ris(string: nil, **options)
- 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 = ris_meta(string: string)
- ris_type = meta.fetch("TY", nil) || "GEN"
- schema_org = RIS_TO_SO_TRANSLATIONS[ris_type] || "CreativeWork"
+ ris_type = meta.fetch('TY', nil) || 'GEN'
+ schema_org = RIS_TO_SO_TRANSLATIONS[ris_type] || 'CreativeWork'
types = {
- "resourceTypeGeneral" => Metadata::RIS_TO_DC_TRANSLATIONS[ris_type],
- "schemaOrg" => schema_org,
- "citeproc" => RIS_TO_CP_TRANSLATIONS[schema_org] || "misc",
- "ris" => ris_type
+ 'resourceTypeGeneral' => Metadata::RIS_TO_DC_TRANSLATIONS[ris_type],
+ 'schemaOrg' => schema_org,
+ 'citeproc' => RIS_TO_CP_TRANSLATIONS[schema_org] || 'misc',
+ 'ris' => ris_type
}.compact
- id = normalize_doi(options[:doi] || meta.fetch("DO", nil))
+ id = normalize_doi(options[:doi] || meta.fetch('DO', nil))
- author = Array.wrap(meta.fetch("AU", nil)).map { |a| { "creatorName" => a } }
- date_parts = meta.fetch("PY", nil).to_s.split("/")
- created_date_parts = meta.fetch("Y1", nil).to_s.split("/")
+ author = Array.wrap(meta.fetch('AU', nil)).map { |a| { 'creatorName' => a } }
+ date_parts = meta.fetch('PY', nil).to_s.split('/')
+ created_date_parts = meta.fetch('Y1', nil).to_s.split('/')
dates = []
- dates << { "date" => get_date_from_parts(*date_parts), "dateType" => "Issued" } if meta.fetch("PY", nil).present?
- dates << { "date" => get_date_from_parts(*created_date_parts), "dateType" => "Created" } if meta.fetch("Y1", nil).present?
- publication_year = get_date_from_parts(*date_parts).to_s[0..3]
- related_identifiers = if meta.fetch("T2", nil).present? && meta.fetch("SN", nil).present?
- [{ "type" => "Periodical",
- "id" => meta.fetch("SN", nil),
- "relatedIdentifierType" => "ISSN",
- "relationType" => "IsPartOf",
- "title" => meta.fetch("T2", nil), }.compact]
- else
- []
+ if meta.fetch('PY', nil).present?
+ dates << { 'date' => get_date_from_parts(*date_parts), 'dateType' => 'Issued' }
end
- container = if meta.fetch("T2", nil).present?
- { "type" => "Journal",
- "title" => meta.fetch("T2", nil),
- "identifier" => meta.fetch("SN", nil),
- "volume" => meta.fetch("VL", nil),
- "issue" => meta.fetch("IS", nil),
- "firstPage" => meta.fetch("SP", nil),
- "lastPage" => meta.fetch("EP", nil) }.compact
- else
- nil
+ if meta.fetch('Y1', nil).present?
+ dates << { 'date' => get_date_from_parts(*created_date_parts), 'dateType' => 'Created' }
end
- state = meta.fetch("DO", nil).present? || read_options.present? ? "findable" : "not_found"
- subjects = Array.wrap(meta.fetch("KW", nil)).reduce([]) do |sum, subject|
+ publication_year = get_date_from_parts(*date_parts).to_s[0..3]
+ related_identifiers = if meta.fetch('T2', nil).present? && meta.fetch('SN', nil).present?
+ [{ 'type' => 'Periodical',
+ 'id' => meta.fetch('SN', nil),
+ 'relatedIdentifierType' => 'ISSN',
+ 'relationType' => 'IsPartOf',
+ 'title' => meta.fetch('T2', nil) }.compact]
+ else
+ []
+ end
+ container = if meta.fetch('T2', nil).present?
+ { 'type' => 'Journal',
+ 'title' => meta.fetch('T2', nil),
+ 'identifier' => meta.fetch('SN', nil),
+ 'volume' => meta.fetch('VL', nil),
+ 'issue' => meta.fetch('IS', nil),
+ 'firstPage' => meta.fetch('SP', nil),
+ 'lastPage' => meta.fetch('EP', nil) }.compact
+ end
+ state = meta.fetch('DO', nil).present? || read_options.present? ? 'findable' : 'not_found'
+ subjects = Array.wrap(meta.fetch('KW', nil)).reduce([]) do |sum, subject|
sum += name_to_fos(subject)
sum
end
- { "id" => id,
- "types" => types,
- "doi" => doi_from_url(id),
- "url" => meta.fetch("UR", nil),
- "titles" => meta.fetch("T1", nil).present? ? [{ "title" => meta.fetch("T1", nil) }] : nil,
- "creators" => get_authors(author),
- "publisher" => meta.fetch("PB", "(:unav)"),
- "container" => container,
- "related_identifiers" => related_identifiers,
- "dates" => dates,
- "publication_year" => publication_year,
- "descriptions" => meta.fetch("AB", nil).present? ? [{ "description" => sanitize(meta.fetch("AB")), "descriptionType" => "Abstract" }] : nil,
- "subjects" => subjects,
- "language" => meta.fetch("LA", nil),
- "state" => state
- }.merge(read_options)
+ { 'id' => id,
+ 'types' => types,
+ 'doi' => doi_from_url(id),
+ 'url' => meta.fetch('UR', nil),
+ 'titles' => meta.fetch('T1', nil).present? ? [{ 'title' => meta.fetch('T1', nil) }] : nil,
+ 'creators' => get_authors(author),
+ 'publisher' => meta.fetch('PB', '(:unav)'),
+ 'container' => container,
+ 'related_identifiers' => related_identifiers,
+ 'dates' => dates,
+ 'publication_year' => publication_year,
+ 'descriptions' => if meta.fetch('AB', nil).present?
+ [{ 'description' => sanitize(meta.fetch('AB')),
+ 'descriptionType' => 'Abstract' }]
+ end,
+ 'subjects' => subjects,
+ 'language' => meta.fetch('LA', nil),
+ 'state' => state }.merge(read_options)
end
def ris_meta(string: nil)
- h = Hash.new { |h,k| h[k] = [] }
- string.split("\n").reduce(h) do |sum, line|
- k, v = line.split("-",2)
+ h = Hash.new { |h, k| h[k] = [] }
+ string.split("\n").each_with_object(h) do |line, _sum|
+ k, v = line.split('-', 2)
h[k.strip] << v.to_s.strip
- sum
- end.map { |k,v| [k, v.unwrap] }.to_h.compact
+ end.transform_values(&:unwrap).compact
end
end
end
end