Module: Bolognese::DoiUtils

Included in:
CLI, Metadata
Defined in:
lib/bolognese/doi_utils.rb

Instance Method Summary collapse

Instance Method Details

#doi_as_url(doi) ⇒ Object



29
30
31
# File 'lib/bolognese/doi_utils.rb', line 29

def doi_as_url(doi)
  "https://doi.org/#{clean_doi(doi)}" if doi.present?
end

#doi_from_url(url) ⇒ Object



22
23
24
25
26
27
# File 'lib/bolognese/doi_utils.rb', line 22

def doi_from_url(url)
  if /\A(?:(http|https):\/\/(dx\.)?doi.org\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(url)
    uri = Addressable::URI.parse(url)
    uri.path.gsub(/^\//, '').downcase
  end
end

#get_doi_ra(doi) ⇒ Object

get DOI registration agency



34
35
36
37
38
39
40
41
42
# File 'lib/bolognese/doi_utils.rb', line 34

def get_doi_ra(doi)
  prefix = validate_prefix(doi)
  return nil if prefix.blank?

  url = "https://api.datacite.org/prefixes/#{prefix}"
  result = Maremma.get(url)

  result.body.fetch("data", {}).fetch('attributes', {}).fetch('registration-agency', nil)
end

#normalize_doi(doi) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/bolognese/doi_utils.rb', line 11

def normalize_doi(doi)
  doi = validate_doi(doi)
  return nil unless doi.present?

  # remove non-printing whitespace and downcase
  doi = doi.delete("\u200B").downcase

  # turn DOI into URL, escape unsafe characters
  "https://doi.org/" + Addressable::URI.encode(doi)
end

#validate_doi(doi) ⇒ Object



3
4
5
# File 'lib/bolognese/doi_utils.rb', line 3

def validate_doi(doi)
  Array(/\A(?:(http|https):\/(\/)?(dx\.)?doi.org\/)?(doi:)?(10\.\d{4,5}\/.+)\z/.match(doi)).last
end

#validate_prefix(doi) ⇒ Object



7
8
9
# File 'lib/bolognese/doi_utils.rb', line 7

def validate_prefix(doi)
  Array(/\A(?:(http|https):\/(\/)?(dx\.)?doi.org\/)?(doi:)?(10\.\d{4,5})\/.+\z/.match(doi)).last
end