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
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_name ⇒ Object
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 |