Module: Coradoc::Reference::Address::Doi

Defined in:
lib/coradoc/reference/address/doi.rb

Overview

DOI — Digital Object Identifier. Regex per the DOI handbook.

Constant Summary collapse

DOI_PATTERN =
%r{\A(10\.\d{4,}/[^\s#]+)(?:#(.*))?\z}

Class Method Summary collapse

Class Method Details

.matches?(raw) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
# File 'lib/coradoc/reference/address/doi.rb', line 16

def matches?(raw)
  return false if raw.nil? || raw.empty?

  DOI_PATTERN.match?(raw.to_s)
end

.parse(raw) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/coradoc/reference/address/doi.rb', line 22

def parse(raw)
  match = DOI_PATTERN.match(raw.to_s)
  raise Address::ParseError, "Invalid DOI: #{raw.inspect}" unless match

  target = match[1]
  fragment = match[2]
  Address.new(scheme: 'doi', target: target, fragment: fragment)
end

.scheme_nameObject



12
13
14
# File 'lib/coradoc/reference/address/doi.rb', line 12

def scheme_name
  :doi
end

.serialize(address) ⇒ Object



31
32
33
34
35
36
# File 'lib/coradoc/reference/address/doi.rb', line 31

def serialize(address)
  base = address.target.to_s
  return base unless address.fragment && !address.fragment.empty?

  "#{base}##{address.fragment}"
end