Module: Bolognese::DoiUtils
Instance Method Summary collapse
- #doi_as_url(doi) ⇒ Object
- #doi_from_url(url) ⇒ Object
-
#get_doi_ra(doi) ⇒ Object
get DOI registration agency.
- #normalize_doi(doi) ⇒ Object
- #validate_doi(doi) ⇒ Object
- #validate_prefix(doi) ⇒ Object
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 |