Module: Coradoc::Reference::Address::Isbn

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

Overview

ISBN — book identifier. Recognizes an optional "ISBN" prefix (case insensitive) and either ISBN-10 or ISBN-13 digits. Bare numbers must be long enough to be ISBN-shaped so short numeric anchors are not claimed.

Constant Summary collapse

ISBN_PATTERN =
/\A(?:ISBN\s+)?(\d[\d\-Xx]{8,16})\z/i

Class Method Summary collapse

Class Method Details

.matches?(raw) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
# File 'lib/coradoc/reference/address/isbn.rb', line 19

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

  ISBN_PATTERN.match?(raw.to_s)
end

.parse(raw) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/coradoc/reference/address/isbn.rb', line 25

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

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

.scheme_nameObject



15
16
17
# File 'lib/coradoc/reference/address/isbn.rb', line 15

def scheme_name
  :isbn
end

.serialize(address) ⇒ Object



33
34
35
# File 'lib/coradoc/reference/address/isbn.rb', line 33

def serialize(address)
  "ISBN #{address.target}"
end