class OrcidClient::Work
Constants
- SCHEMA
Attributes
doi[R]
name_detector[R]
orcid[R]
orcid_token[R]
put_code[R]
sandbox[R]
schema[R]
validation_errors[R]
Public Class Methods
new(doi:, orcid:, orcid_token:, **options)
click to toggle source
# File lib/orcid_client/work.rb, line 22 def initialize(doi:, orcid:, orcid_token:, **options) @doi = doi @orcid = orcid @orcid_token = orcid_token @sandbox = options.fetch(:sandbox, nil) || ENV['API_URL'] == "https://api.stage.datacite.org" @put_code = options.fetch(:put_code, nil) end
Public Instance Methods
container_title()
click to toggle source
user publisher name as fallback
# File lib/orcid_client/work.rb, line 57 def container_title metadata.container_title || metadata.publisher end
contributors()
click to toggle source
# File lib/orcid_client/work.rb, line 41 def contributors Array.wrap(metadata.creators).map do |contributor| orcid = Array.wrap(contributor["nameIdentifiers"]).find { |c| c["nameIdentifierScheme"] == "ORCID" }.to_h.fetch("nameIdentifier", nil) credit_name = contributor["familyName"].present? ? [contributor["givenName"], contributor["familyName"]].join(" ") : contributor["name"] { orcid: orcid, credit_name: credit_name, role: nil }.compact end end
data()
click to toggle source
# File lib/orcid_client/work.rb, line 79 def data return nil unless has_required_elements? Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml| xml.send(:'work:work', root_attributes) do insert_work(xml) end end.to_xml end
description()
click to toggle source
# File lib/orcid_client/work.rb, line 66 def description ct = parse_attributes(metadata.descriptions, content: "description", first: true) ct.squish if ct.present? end
has_required_elements?()
click to toggle source
# File lib/orcid_client/work.rb, line 75 def has_required_elements? doi && contributors && title && container_title && publication_date end
insert_contributor(xml, contributor)
click to toggle source
# File lib/orcid_client/work.rb, line 154 def insert_contributor(xml, contributor) if contributor[:orcid].present? xml.send(:'common:contributor-orcid') do xml.send(:'common:uri', contributor[:orcid]) xml.send(:'common:path', validate_orcid(contributor[:orcid])) xml.send(:'common:host', 'orcid.org') end end xml.send(:'credit-name', contributor[:credit_name]) if contributor[:role] xml.send(:'contributor-attributes') do xml.send(:'contributor-role', contributor[:role]) end end end
insert_contributors(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 142 def insert_contributors(xml) return nil unless contributors.present? xml.send(:'work:contributors') do contributors.each do |contributor| xml.contributor do insert_contributor(xml, contributor) end end end end
insert_description(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 108 def insert_description(xml) return nil unless description.present? xml.send(:'work:short-description', description.truncate(2500, separator: ' ')) end
insert_id(xml, id_type, value, relationship)
click to toggle source
# File lib/orcid_client/work.rb, line 134 def insert_id(xml, id_type, value, relationship) xml.send(:'common:external-id') do xml.send(:'common:external-id-type', id_type) xml.send(:'common:external-id-value', value) xml.send(:'common:external-id-relationship', relationship) end end
insert_ids(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 128 def insert_ids(xml) xml.send(:'common:external-ids') do insert_id(xml, 'doi', doi, 'self') end end
insert_pub_date(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 118 def insert_pub_date(xml) if publication_date['year'] xml.send(:'common:publication-date') do xml.year(publication_date.fetch('year')) xml.month(publication_date.fetch('month', nil)) if publication_date['month'] xml.day(publication_date.fetch('day', nil)) if publication_date['month'] && publication_date['day'] end end end
insert_titles(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 98 def insert_titles(xml) if title xml.send(:'work:title') do xml.send(:'common:title', title.truncate(1000, separator: ' ')) end end xml.send(:'work:journal-title', container_title) if container_title end
insert_type(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 114 def insert_type(xml) xml.send(:'work:type', type) end
insert_work(xml)
click to toggle source
# File lib/orcid_client/work.rb, line 89 def insert_work(xml) insert_titles(xml) insert_description(xml) insert_type(xml) insert_pub_date(xml) insert_ids(xml) insert_contributors(xml) end
metadata()
click to toggle source
# File lib/orcid_client/work.rb, line 37 def metadata @metadata ||= Bolognese::Metadata.new(input: doi, sandbox: sandbox) end
publication_date()
click to toggle source
# File lib/orcid_client/work.rb, line 61 def publication_date pd = get_date(metadata.dates, "Issued") || metadata.publication_year get_year_month_day(pd) end
root_attributes()
click to toggle source
# File lib/orcid_client/work.rb, line 180 def root_attributes { :'put-code' => put_code, :'visibility' => 'public', :'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', :'xsi:schemaLocation' => 'http://www.orcid.org/ns/work ../work-3.0.xsd', :'xmlns:common' => 'http://www.orcid.org/ns/common', :'xmlns:work' => 'http://www.orcid.org/ns/work' }.compact end
title()
click to toggle source
# File lib/orcid_client/work.rb, line 52 def title parse_attributes(metadata.titles, content: "title", first: true) end
type()
click to toggle source
# File lib/orcid_client/work.rb, line 71 def type orcid_work_type(metadata.types["resourceTypeGeneral"], metadata.types["resourceType"]) end
without_control(s)
click to toggle source
# File lib/orcid_client/work.rb, line 170 def without_control(s) r = '' s.each_codepoint do |c| if c >= 32 r << c end end r end